@@ -13,10 +13,12 @@ var azure = require('gulp-azure-storage');
1313var electron = require ( 'gulp-atom-electron' ) ;
1414var symdest = require ( 'gulp-symdest' ) ;
1515var rename = require ( 'gulp-rename' ) ;
16+ var replace = require ( 'gulp-replace' ) ;
1617var filter = require ( 'gulp-filter' ) ;
1718var json = require ( 'gulp-json-editor' ) ;
1819var insert = require ( 'gulp-insert' ) ;
1920var remote = require ( 'gulp-remote-src' ) ;
21+ var shell = require ( "gulp-shell" ) ;
2022var File = require ( 'vinyl' ) ;
2123var rimraf = require ( 'rimraf' ) ;
2224var _ = require ( 'underscore' ) ;
@@ -215,7 +217,7 @@ function packageTask(platform, arch, opts) {
215217 . pipe ( util . cleanNodeModule ( 'native-keymap' , [ 'binding.gyp' , 'build/**' , 'src/**' , 'deps/**' ] , true ) )
216218 . pipe ( util . cleanNodeModule ( 'weak' , [ 'binding.gyp' , 'build/**' , 'src/**' ] , true ) ) ;
217219
218- var resources = gulp . src ( 'resources/*' , { base : '.' } ) ;
220+ var resources = gulp . src ( [ 'resources/*' , 'resources/common/**' ] , { base : '.' } ) ;
219221
220222 if ( platform === 'win32' ) {
221223 resources = es . merge ( resources , gulp . src ( 'resources/win32/code_file.ico' , { base : '.' } ) ) ;
@@ -257,11 +259,88 @@ function packageTask(platform, arch, opts) {
257259 } ;
258260}
259261
262+ function getFolderSize ( root ) {
263+ var size = 0 ;
264+ var paths = [ root ] ;
265+ while ( paths . length > 0 ) {
266+ var current = path . normalize ( paths . pop ( ) ) ;
267+ var stat = fs . statSync ( current ) ;
268+ size += stat . size ;
269+ if ( stat . isDirectory ( ) ) {
270+ var newPaths = fs . readdirSync ( current ) ;
271+ newPaths . forEach ( function ( newPath ) {
272+ paths . push ( path . join ( current , newPath ) ) ;
273+ } ) ;
274+ }
275+ }
276+ return size ;
277+ }
278+
279+ function getDebPackageArch ( arch ) {
280+ if ( arch === 'x64' )
281+ return 'amd64'
282+ if ( arch === 'ia32' )
283+ return 'i386' ;
284+ return undefined ;
285+ }
286+
287+ function prepareDebPackage ( arch ) {
288+ var binaryDir = '../VSCode-linux-' + arch ;
289+ var debArch = getDebPackageArch ( arch ) ;
290+ var destination = './out-linux/vscode-' + debArch ;
291+ var packageRevision = '1' ;
292+
293+ return function ( ) {
294+ var shortcut = gulp . src ( 'resources/common/bin/code.sh' , { base : '.' } )
295+ . pipe ( rename ( function ( p ) {
296+ p . extname = ''
297+ p . dirname = 'usr/bin' ;
298+ } ) ) ;
299+
300+ var desktop = gulp . src ( 'resources/linux/debian/code.desktop' , { base : '.' } )
301+ . pipe ( rename ( function ( p ) { p . dirname = 'usr/share/applications' ; } ) ) ;
302+
303+ var icon = gulp . src ( 'resources/linux/code.png' , { base : '.' } )
304+ . pipe ( rename ( function ( p ) { p . dirname = 'usr/share/pixmaps' ; } ) ) ;
305+
306+ var installedSize = Math . ceil ( getFolderSize ( root + '/' + binaryDir ) / 1024 ) ;
307+
308+ var control = gulp . src ( 'resources/linux/debian/control.template' , { base : '.' } )
309+ . pipe ( replace ( '@@VERSION@@' , packageJson . version + '-' + packageRevision ) )
310+ . pipe ( replace ( '@@ARCHITECTURE@@' , debArch ) )
311+ . pipe ( replace ( '@@INSTALLEDSIZE@@' , installedSize ) )
312+ . pipe ( rename ( function ( p ) {
313+ p . extname = '' ;
314+ p . dirname = 'DEBIAN' ;
315+ } ) ) ;
316+
317+ var all = es . merge (
318+ control ,
319+ desktop ,
320+ icon ,
321+ shortcut ) ;
322+
323+ all . pipe ( symdest ( destination ) ) ;
324+
325+ var binaryResult = gulp . src ( binaryDir + '/**/*' , { base : binaryDir } )
326+ . pipe ( gulp . dest ( destination + '/usr/share/code' ) ) ;
327+
328+ return es . merge ( all , binaryResult ) ;
329+ } ;
330+ }
331+
332+ function buildDebPackage ( arch ) {
333+ var debArch = getDebPackageArch ( arch ) ;
334+ return shell . task ( [ 'fakeroot dpkg-deb -b ' + path . join ( root , 'out-linux' , 'vscode-' + debArch ) ] ) ;
335+ }
336+
260337gulp . task ( 'clean-vscode-win32' , util . rimraf ( path . join ( path . dirname ( root ) , 'VSCode-win32' ) ) ) ;
261338gulp . task ( 'clean-vscode-darwin' , util . rimraf ( path . join ( path . dirname ( root ) , 'VSCode-darwin' ) ) ) ;
262339gulp . task ( 'clean-vscode-linux-ia32' , util . rimraf ( path . join ( path . dirname ( root ) , 'VSCode-linux-ia32' ) ) ) ;
263340gulp . task ( 'clean-vscode-linux-x64' , util . rimraf ( path . join ( path . dirname ( root ) , 'VSCode-linux-x64' ) ) ) ;
264341gulp . task ( 'clean-vscode-linux-arm' , util . rimraf ( path . join ( path . dirname ( root ) , 'VSCode-linux-arm' ) ) ) ;
342+ gulp . task ( 'clean-vscode-linux-ia32-deb' , util . rimraf ( 'out-linux/vscode-i386*' ) ) ;
343+ gulp . task ( 'clean-vscode-linux-x64-deb' , util . rimraf ( 'out-linux/vscode-amd64*' ) ) ;
265344
266345gulp . task ( 'vscode-win32' , [ 'optimize-vscode' , 'clean-vscode-win32' ] , packageTask ( 'win32' ) ) ;
267346gulp . task ( 'vscode-darwin' , [ 'optimize-vscode' , 'clean-vscode-darwin' ] , packageTask ( 'darwin' ) ) ;
@@ -275,6 +354,12 @@ gulp.task('vscode-linux-ia32-min', ['minify-vscode', 'clean-vscode-linux-ia32'],
275354gulp . task ( 'vscode-linux-x64-min' , [ 'minify-vscode' , 'clean-vscode-linux-x64' ] , packageTask ( 'linux' , 'x64' , { minified : true } ) ) ;
276355gulp . task ( 'vscode-linux-arm-min' , [ 'minify-vscode' , 'clean-vscode-linux-arm' ] , packageTask ( 'linux' , 'arm' , { minified : true } ) ) ;
277356
357+ gulp . task ( 'vscode-linux-ia32-prepare-deb' , [ 'clean-vscode-linux-ia32-deb' , 'vscode-linux-ia32' ] , prepareDebPackage ( 'ia32' ) ) ;
358+ gulp . task ( 'vscode-linux-x64-prepare-deb' , [ 'clean-vscode-linux-x64-deb' /*, 'vscode-linux-x64'*/ ] , prepareDebPackage ( 'x64' ) ) ;
359+ gulp . task ( 'vscode-linux-ia32-build-deb' , [ 'vscode-linux-ia32-prepare-deb' ] , buildDebPackage ( 'ia32' ) ) ;
360+ gulp . task ( 'vscode-linux-x64-build-deb' , [ 'vscode-linux-x64-prepare-deb' ] , buildDebPackage ( 'x64' ) ) ;
361+ gulp . task ( 'vscode-linux-packages' , [ 'vscode-linux-ia32-build-deb' , 'vscode-linux-x64-build-deb' ] ) ;
362+
278363// Sourcemaps
279364
280365gulp . task ( 'vscode-sourcemaps' , [ 'minify-vscode' ] , function ( ) {
@@ -285,4 +370,4 @@ gulp.task('vscode-sourcemaps', ['minify-vscode'], function () {
285370 container : 'sourcemaps' ,
286371 prefix : commit + '/'
287372 } ) ) ;
288- } ) ;
373+ } ) ;
0 commit comments