| OLD | NEW | 
|---|
| 1 # coding: utf-8 | 1 # coding: utf-8 | 
| 2 | 2 | 
| 3 # This Source Code Form is subject to the terms of the Mozilla Public | 3 # This Source Code Form is subject to the terms of the Mozilla Public | 
| 4 # License, v. 2.0. If a copy of the MPL was not distributed with this | 4 # License, v. 2.0. If a copy of the MPL was not distributed with this | 
| 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
| 6 | 6 | 
| 7 import os, sys, re, subprocess, shutil, buildtools | 7 import os, sys, re, subprocess, shutil, buildtools | 
| 8 from getopt import getopt, GetoptError | 8 from getopt import getopt, GetoptError | 
| 9 from StringIO import StringIO | 9 from StringIO import StringIO | 
| 10 from zipfile import ZipFile | 10 from zipfile import ZipFile | 
| 11 | 11 | 
| 12 knownTypes = ('gecko', 'chrome', 'opera', 'safari', 'generic') | 12 knownTypes = ('gecko', 'chrome', 'safari', 'generic') | 
| 13 | 13 | 
| 14 class Command(object): | 14 class Command(object): | 
| 15   name = property(lambda self: self._name) | 15   name = property(lambda self: self._name) | 
| 16   shortDescription = property(lambda self: self._shortDescription, | 16   shortDescription = property(lambda self: self._shortDescription, | 
| 17       lambda self, value: self.__dict__.update({'_shortDescription': value})) | 17       lambda self, value: self.__dict__.update({'_shortDescription': value})) | 
| 18   description = property(lambda self: self._description, | 18   description = property(lambda self: self._description, | 
| 19       lambda self, value: self.__dict__.update({'_description': value})) | 19       lambda self, value: self.__dict__.update({'_description': value})) | 
| 20   params = property(lambda self: self._params, | 20   params = property(lambda self: self._params, | 
| 21       lambda self, value: self.__dict__.update({'_params': value})) | 21       lambda self, value: self.__dict__.update({'_params': value})) | 
| 22   supportedTypes = property(lambda self: self._supportedTypes, | 22   supportedTypes = property(lambda self: self._supportedTypes, | 
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 179       releaseBuild = True | 179       releaseBuild = True | 
| 180     elif option == '--experimental': | 180     elif option == '--experimental': | 
| 181       experimentalAPI = True | 181       experimentalAPI = True | 
| 182   outFile = args[0] if len(args) > 0 else None | 182   outFile = args[0] if len(args) > 0 else None | 
| 183 | 183 | 
| 184   if type == 'gecko': | 184   if type == 'gecko': | 
| 185     import buildtools.packagerGecko as packager | 185     import buildtools.packagerGecko as packager | 
| 186     packager.createBuild(baseDir, type=type, outFile=outFile, locales=locales, b
     uildNum=buildNum, | 186     packager.createBuild(baseDir, type=type, outFile=outFile, locales=locales, b
     uildNum=buildNum, | 
| 187                          releaseBuild=releaseBuild, keyFile=keyFile, | 187                          releaseBuild=releaseBuild, keyFile=keyFile, | 
| 188                          multicompartment=multicompartment) | 188                          multicompartment=multicompartment) | 
| 189   elif type == 'chrome' or type == 'opera': | 189   elif type == 'chrome': | 
| 190     import buildtools.packagerChrome as packager | 190     import buildtools.packagerChrome as packager | 
| 191     packager.createBuild(baseDir, type=type, outFile=outFile, buildNum=buildNum, | 191     packager.createBuild(baseDir, type=type, outFile=outFile, buildNum=buildNum, | 
| 192                          releaseBuild=releaseBuild, keyFile=keyFile, | 192                          releaseBuild=releaseBuild, keyFile=keyFile, | 
| 193                          experimentalAPI=experimentalAPI) | 193                          experimentalAPI=experimentalAPI) | 
| 194   elif type == 'safari': | 194   elif type == 'safari': | 
| 195     import buildtools.packagerSafari as packager | 195     import buildtools.packagerSafari as packager | 
| 196     packager.createBuild(baseDir, type=type, outFile=outFile, buildNum=buildNum, | 196     packager.createBuild(baseDir, type=type, outFile=outFile, buildNum=buildNum, | 
| 197                          releaseBuild=releaseBuild, keyFile=keyFile) | 197                          releaseBuild=releaseBuild, keyFile=keyFile) | 
| 198 | 198 | 
| 199 | 199 | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 239 def readLocaleConfig(baseDir, type, metadata): | 239 def readLocaleConfig(baseDir, type, metadata): | 
| 240   if type == 'gecko': | 240   if type == 'gecko': | 
| 241     import buildtools.packagerGecko as packager | 241     import buildtools.packagerGecko as packager | 
| 242     localeDir = packager.getLocalesDir(baseDir) | 242     localeDir = packager.getLocalesDir(baseDir) | 
| 243     localeConfig = { | 243     localeConfig = { | 
| 244       'name_format': 'BCP-47', | 244       'name_format': 'BCP-47', | 
| 245       'file_format': 'gecko-dtd', | 245       'file_format': 'gecko-dtd', | 
| 246       'target_platforms': {'gecko'}, | 246       'target_platforms': {'gecko'}, | 
| 247       'default_locale': packager.defaultLocale | 247       'default_locale': packager.defaultLocale | 
| 248     } | 248     } | 
| 249   elif type == 'chrome' or type == 'opera': | 249   elif type == 'chrome': | 
| 250     import buildtools.packagerChrome as packager | 250     import buildtools.packagerChrome as packager | 
| 251     localeDir = os.path.join(baseDir, '_locales') | 251     localeDir = os.path.join(baseDir, '_locales') | 
| 252     localeConfig = { | 252     localeConfig = { | 
| 253       'name_format': 'ISO-15897', | 253       'name_format': 'ISO-15897', | 
| 254       'file_format': 'chrome-json', | 254       'file_format': 'chrome-json', | 
| 255       'target_platforms': {'chrome'}, | 255       'target_platforms': {'chrome'}, | 
| 256       'default_locale': packager.defaultLocale, | 256       'default_locale': packager.defaultLocale, | 
| 257     } | 257     } | 
| 258   else: | 258   else: | 
| 259     localeDir = os.path.join(baseDir, | 259     localeDir = os.path.join(baseDir, | 
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 452 | 452 | 
| 453 with addCommand(lambda baseDir, scriptName, opts, args, type: usage(scriptName, 
     type), ('help', '-h', '--help')) as command: | 453 with addCommand(lambda baseDir, scriptName, opts, args, type: usage(scriptName, 
     type), ('help', '-h', '--help')) as command: | 
| 454   command.shortDescription = 'Show this message' | 454   command.shortDescription = 'Show this message' | 
| 455 | 455 | 
| 456 with addCommand(runBuild, 'build') as command: | 456 with addCommand(runBuild, 'build') as command: | 
| 457   command.shortDescription = 'Create a build' | 457   command.shortDescription = 'Create a build' | 
| 458   command.description = 'Creates an extension build with given file name. If out
     put_file is missing a default name will be chosen.' | 458   command.description = 'Creates an extension build with given file name. If out
     put_file is missing a default name will be chosen.' | 
| 459   command.params = '[options] [output_file]' | 459   command.params = '[options] [output_file]' | 
| 460   command.addOption('Only include the given locales (if omitted: all locales not
      marked as incomplete)', short='l', long='locales', value='l1,l2,l3', types=('ge
     cko')) | 460   command.addOption('Only include the given locales (if omitted: all locales not
      marked as incomplete)', short='l', long='locales', value='l1,l2,l3', types=('ge
     cko')) | 
| 461   command.addOption('Use given build number (if omitted the build number will be
      retrieved from Mercurial)', short='b', long='build', value='num') | 461   command.addOption('Use given build number (if omitted the build number will be
      retrieved from Mercurial)', short='b', long='build', value='num') | 
| 462   command.addOption('File containing private key and certificates required to si
     gn the package', short='k', long='key', value='file', types=('gecko', 'chrome', 
     'opera', 'safari')) | 462   command.addOption('File containing private key and certificates required to si
     gn the package', short='k', long='key', value='file', types=('gecko', 'chrome', 
     'safari')) | 
| 463   command.addOption('Create a build for leak testing', short='m', long='multi-co
     mpartment', types=('gecko')) | 463   command.addOption('Create a build for leak testing', short='m', long='multi-co
     mpartment', types=('gecko')) | 
| 464   command.addOption('Create a release build', short='r', long='release') | 464   command.addOption('Create a release build', short='r', long='release') | 
| 465   command.addOption('Enable use of experimental APIs', long='experimental') | 465   command.addOption('Enable use of experimental APIs', long='experimental') | 
| 466   command.supportedTypes = ('gecko', 'chrome', 'opera', 'safari') | 466   command.supportedTypes = ('gecko', 'chrome', 'safari') | 
| 467 | 467 | 
| 468 with addCommand(runAutoInstall, 'autoinstall') as command: | 468 with addCommand(runAutoInstall, 'autoinstall') as command: | 
| 469   command.shortDescription = 'Install extension automatically' | 469   command.shortDescription = 'Install extension automatically' | 
| 470   command.description = 'Will automatically install the extension in a browser r
     unning Extension Auto-Installer. If host parameter is omitted assumes that the b
     rowser runs on localhost.' | 470   command.description = 'Will automatically install the extension in a browser r
     unning Extension Auto-Installer. If host parameter is omitted assumes that the b
     rowser runs on localhost.' | 
| 471   command.params = '[<host>:]<port>' | 471   command.params = '[<host>:]<port>' | 
| 472   command.addOption('Create a build for leak testing', short='m', long='multi-co
     mpartment') | 472   command.addOption('Create a build for leak testing', short='m', long='multi-co
     mpartment') | 
| 473   command.supportedTypes = ('gecko') | 473   command.supportedTypes = ('gecko') | 
| 474 | 474 | 
| 475 with addCommand(createDevEnv, 'devenv') as command: | 475 with addCommand(createDevEnv, 'devenv') as command: | 
| 476   command.shortDescription = 'Set up a development environment' | 476   command.shortDescription = 'Set up a development environment' | 
| 477   command.description = 'Will set up or update the devenv folder as an unpacked 
     extension folder for development.' | 477   command.description = 'Will set up or update the devenv folder as an unpacked 
     extension folder for development.' | 
| 478   command.supportedTypes = ('chrome', 'opera', 'safari') | 478   command.supportedTypes = ('chrome', 'safari') | 
| 479 | 479 | 
| 480 with addCommand(setupTranslations, 'setuptrans') as command: | 480 with addCommand(setupTranslations, 'setuptrans') as command: | 
| 481   command.shortDescription = 'Sets up translation languages' | 481   command.shortDescription = 'Sets up translation languages' | 
| 482   command.description = 'Sets up translation languages for the project on crowdi
     n.net.' | 482   command.description = 'Sets up translation languages for the project on crowdi
     n.net.' | 
| 483   command.params = '[options] project-key' | 483   command.params = '[options] project-key' | 
| 484   command.supportedTypes = ('gecko', 'chrome', 'opera', 'generic') | 484   command.supportedTypes = ('gecko', 'chrome', 'generic') | 
| 485 | 485 | 
| 486 with addCommand(updateTranslationMaster, 'translate') as command: | 486 with addCommand(updateTranslationMaster, 'translate') as command: | 
| 487   command.shortDescription = 'Updates translation master files' | 487   command.shortDescription = 'Updates translation master files' | 
| 488   command.description = 'Updates the translation master files in the project on 
     crowdin.net.' | 488   command.description = 'Updates the translation master files in the project on 
     crowdin.net.' | 
| 489   command.params = '[options] project-key' | 489   command.params = '[options] project-key' | 
| 490   command.supportedTypes = ('gecko', 'chrome', 'opera', 'generic') | 490   command.supportedTypes = ('gecko', 'chrome', 'generic') | 
| 491 | 491 | 
| 492 with addCommand(uploadTranslations, 'uploadtrans') as command: | 492 with addCommand(uploadTranslations, 'uploadtrans') as command: | 
| 493   command.shortDescription = 'Uploads existing translations' | 493   command.shortDescription = 'Uploads existing translations' | 
| 494   command.description = 'Uploads already existing translations to the project on
      crowdin.net.' | 494   command.description = 'Uploads already existing translations to the project on
      crowdin.net.' | 
| 495   command.params = '[options] project-key' | 495   command.params = '[options] project-key' | 
| 496   command.supportedTypes = ('gecko', 'chrome', 'opera', 'generic') | 496   command.supportedTypes = ('gecko', 'chrome', 'generic') | 
| 497 | 497 | 
| 498 with addCommand(getTranslations, 'gettranslations') as command: | 498 with addCommand(getTranslations, 'gettranslations') as command: | 
| 499   command.shortDescription = 'Downloads translation updates' | 499   command.shortDescription = 'Downloads translation updates' | 
| 500   command.description = 'Downloads updated translations from crowdin.net.' | 500   command.description = 'Downloads updated translations from crowdin.net.' | 
| 501   command.params = '[options] project-key' | 501   command.params = '[options] project-key' | 
| 502   command.supportedTypes = ('gecko', 'chrome', 'opera', 'generic') | 502   command.supportedTypes = ('gecko', 'chrome', 'generic') | 
| 503 | 503 | 
| 504 with addCommand(showDescriptions, 'showdesc') as command: | 504 with addCommand(showDescriptions, 'showdesc') as command: | 
| 505   command.shortDescription = 'Print description strings for all locales' | 505   command.shortDescription = 'Print description strings for all locales' | 
| 506   command.description = 'Display description strings for all locales as specifie
     d in the corresponding meta.properties files.' | 506   command.description = 'Display description strings for all locales as specifie
     d in the corresponding meta.properties files.' | 
| 507   command.addOption('Only include the given locales', short='l', long='locales',
      value='l1,l2,l3') | 507   command.addOption('Only include the given locales', short='l', long='locales',
      value='l1,l2,l3') | 
| 508   command.params = '[options]' | 508   command.params = '[options]' | 
| 509   command.supportedTypes = ('gecko') | 509   command.supportedTypes = ('gecko') | 
| 510 | 510 | 
| 511 with addCommand(generateDocs, 'docs') as command: | 511 with addCommand(generateDocs, 'docs') as command: | 
| 512   command.shortDescription = 'Generate documentation (requires node.js)' | 512   command.shortDescription = 'Generate documentation (requires node.js)' | 
| 513   command.description = 'Generate documentation files and write them into the sp
     ecified directory. This operation requires JsDoc 3 to be installed.' | 513   command.description = 'Generate documentation files and write them into the sp
     ecified directory. This operation requires JsDoc 3 to be installed.' | 
| 514   command.addOption('Suppress JsDoc output', short='q', long='quiet') | 514   command.addOption('Suppress JsDoc output', short='q', long='quiet') | 
| 515   command.params = '[options] <directory>' | 515   command.params = '[options] <directory>' | 
| 516   command.supportedTypes = ('gecko', 'chrome') | 516   command.supportedTypes = ('gecko', 'chrome') | 
| 517 | 517 | 
| 518 with addCommand(runReleaseAutomation, 'release') as command: | 518 with addCommand(runReleaseAutomation, 'release') as command: | 
| 519   command.shortDescription = 'Run release automation' | 519   command.shortDescription = 'Run release automation' | 
| 520   command.description = 'Note: If you are not the project owner then you '\ | 520   command.description = 'Note: If you are not the project owner then you '\ | 
| 521     'probably don\'t want to run this!\n\n'\ | 521     'probably don\'t want to run this!\n\n'\ | 
| 522     'Runs release automation: creates downloads for the new version, tags '\ | 522     'Runs release automation: creates downloads for the new version, tags '\ | 
| 523     'source code repository as well as downloads and buildtools repository.' | 523     'source code repository as well as downloads and buildtools repository.' | 
| 524   command.addOption('File containing private key and certificates required to si
     gn the release. Note that for Chrome releases this option needs to be specified 
     twice: first a key to sign Chrome/Opera builds, then another to sign the Safari 
     build.', short='k', long='key', value='file', types=('gecko', 'chrome')) | 524   command.addOption('File containing private key and certificates required to si
     gn the release. Note that for Chrome releases this option needs to be specified 
     twice: first a key to sign Chrome builds, then another to sign the Safari build.
     ', short='k', long='key', value='file', types=('gecko', 'chrome')) | 
| 525   command.addOption('Directory containing downloads repository (if omitted ../do
     wnloads is assumed)', short='d', long='downloads', value='dir') | 525   command.addOption('Directory containing downloads repository (if omitted ../do
     wnloads is assumed)', short='d', long='downloads', value='dir') | 
| 526   command.params = '[options] <version>' | 526   command.params = '[options] <version>' | 
| 527   command.supportedTypes = ('gecko', 'chrome') | 527   command.supportedTypes = ('gecko', 'chrome') | 
| 528 | 528 | 
| 529 with addCommand(updatePSL, 'updatepsl') as command: | 529 with addCommand(updatePSL, 'updatepsl') as command: | 
| 530   command.shortDescription = 'Updates Public Suffix List' | 530   command.shortDescription = 'Updates Public Suffix List' | 
| 531   command.description = 'Downloads Public Suffix List (see http://publicsuffix.o
     rg/) and generates lib/publicSuffixList.js from it.' | 531   command.description = 'Downloads Public Suffix List (see http://publicsuffix.o
     rg/) and generates lib/publicSuffixList.js from it.' | 
| 532   command.supportedTypes = ('chrome', 'opera') | 532   command.supportedTypes = ('chrome',) | 
| 533 | 533 | 
| 534 def getType(baseDir, scriptName, args): | 534 def getType(baseDir, scriptName, args): | 
| 535   # Look for an explicit type parameter (has to be the first parameter) | 535   # Look for an explicit type parameter (has to be the first parameter) | 
| 536   if len(args) >= 2 and args[0] == '-t': | 536   if len(args) >= 2 and args[0] == '-t': | 
| 537     type = args[1] | 537     type = args[1] | 
| 538     del args[1] | 538     del args[1] | 
| 539     del args[0] | 539     del args[0] | 
| 540     if type not in knownTypes: | 540     if type not in knownTypes: | 
| 541       print ''' | 541       print ''' | 
| 542 Unknown type %s specified, supported types are: %s | 542 Unknown type %s specified, supported types are: %s | 
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 595         if option in ('-h', '--help'): | 595         if option in ('-h', '--help'): | 
| 596           usage(scriptName, type, command) | 596           usage(scriptName, type, command) | 
| 597           sys.exit() | 597           sys.exit() | 
| 598       commands[command](baseDir, scriptName, opts, args, type) | 598       commands[command](baseDir, scriptName, opts, args, type) | 
| 599     else: | 599     else: | 
| 600       print 'Command %s is not supported for this application type' % command | 600       print 'Command %s is not supported for this application type' % command | 
| 601       usage(scriptName, type) | 601       usage(scriptName, type) | 
| 602   else: | 602   else: | 
| 603     print 'Command %s is unrecognized' % command | 603     print 'Command %s is unrecognized' % command | 
| 604     usage(scriptName, type) | 604     usage(scriptName, type) | 
| OLD | NEW | 
|---|