| OLD | NEW | 
|---|
| 1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, | 
| 2 # Copyright (C) 2006-2016 Eyeo GmbH | 2 # Copyright (C) 2006-2016 Eyeo GmbH | 
| 3 # | 3 # | 
| 4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify | 
| 5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as | 
| 6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. | 
| 7 # | 7 # | 
| 8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, | 
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 163         self.extensionID = metadata.get('general', 'id') | 163         self.extensionID = metadata.get('general', 'id') | 
| 164         self.version = packager.getBuildVersion(self.tempdir, metadata, False, | 164         self.version = packager.getBuildVersion(self.tempdir, metadata, False, | 
| 165                                                 self.buildNum) | 165                                                 self.buildNum) | 
| 166         self.basename = metadata.get('general', 'basename') | 166         self.basename = metadata.get('general', 'basename') | 
| 167         self.compat = [] | 167         self.compat = [] | 
| 168         for key, value in packager.KNOWN_APPS.iteritems(): | 168         for key, value in packager.KNOWN_APPS.iteritems(): | 
| 169             if metadata.has_option('compat', key): | 169             if metadata.has_option('compat', key): | 
| 170                 minVersion, maxVersion = metadata.get('compat', key).split('/') | 170                 minVersion, maxVersion = metadata.get('compat', key).split('/') | 
| 171                 self.compat.append({'id': value, 'minVersion': minVersion, 'maxV
     ersion': maxVersion}) | 171                 self.compat.append({'id': value, 'minVersion': minVersion, 'maxV
     ersion': maxVersion}) | 
| 172 | 172 | 
|  | 173         if metadata.has_option('compat', 'gecko'): | 
|  | 174             self.compat.append({ | 
|  | 175                 'id': 'gecko', | 
|  | 176                 'minVersion': metadata.get('compat', 'gecko') | 
|  | 177             }) | 
|  | 178 | 
| 173     def readAndroidMetadata(self): | 179     def readAndroidMetadata(self): | 
| 174         """ | 180         """ | 
| 175           Read Android-specific metadata from AndroidManifest.xml file. | 181           Read Android-specific metadata from AndroidManifest.xml file. | 
| 176         """ | 182         """ | 
| 177         manifestFile = open(os.path.join(self.tempdir, 'AndroidManifest.xml'), '
     r') | 183         manifestFile = open(os.path.join(self.tempdir, 'AndroidManifest.xml'), '
     r') | 
| 178         manifest = parseXml(manifestFile) | 184         manifest = parseXml(manifestFile) | 
| 179         manifestFile.close() | 185         manifestFile.close() | 
| 180 | 186 | 
| 181         root = manifest.documentElement | 187         root = manifest.documentElement | 
| 182         self.version = root.attributes['android:versionName'].value | 188         self.version = root.attributes['android:versionName'].value | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 221 | 227 | 
| 222         self.certificateID = packager.get_developer_identifier(certs) | 228         self.certificateID = packager.get_developer_identifier(certs) | 
| 223         self.version = packager.getBuildVersion(self.tempdir, metadata, False, | 229         self.version = packager.getBuildVersion(self.tempdir, metadata, False, | 
| 224                                                 self.buildNum) | 230                                                 self.buildNum) | 
| 225         self.shortVersion = metadata.get('general', 'version') | 231         self.shortVersion = metadata.get('general', 'version') | 
| 226         self.basename = metadata.get('general', 'basename') | 232         self.basename = metadata.get('general', 'basename') | 
| 227         self.updatedFromGallery = False | 233         self.updatedFromGallery = False | 
| 228 | 234 | 
| 229     def writeUpdateManifest(self): | 235     def writeUpdateManifest(self): | 
| 230         """ | 236         """ | 
| 231           Writes update.rdf file for the current build | 237           Writes update manifest for the current build | 
| 232         """ | 238         """ | 
| 233         baseDir = os.path.join(self.config.nightliesDirectory, self.basename) | 239         baseDir = os.path.join(self.config.nightliesDirectory, self.basename) | 
| 234         if self.config.type == 'safari': | 240         if self.config.type == 'safari': | 
| 235             manifestPath = os.path.join(baseDir, 'updates.plist') | 241             manifestPath = os.path.join(baseDir, 'updates.plist') | 
| 236             templateName = 'safariUpdateManifest' | 242             templateName = 'safariUpdateManifest' | 
|  | 243             autoescape = True | 
| 237         elif self.config.type == 'android': | 244         elif self.config.type == 'android': | 
| 238             manifestPath = os.path.join(baseDir, 'updates.xml') | 245             manifestPath = os.path.join(baseDir, 'updates.xml') | 
| 239             templateName = 'androidUpdateManifest' | 246             templateName = 'androidUpdateManifest' | 
|  | 247             autoescape = True | 
|  | 248         elif self.config.type == 'gecko-webext': | 
|  | 249             manifestPath = os.path.join(baseDir, 'updates.json') | 
|  | 250             templateName = 'geckoUpdateManifest' | 
|  | 251             autoescape = False | 
| 240         else: | 252         else: | 
| 241             return | 253             return | 
| 242 | 254 | 
| 243         if not os.path.exists(baseDir): | 255         if not os.path.exists(baseDir): | 
| 244             os.makedirs(baseDir) | 256             os.makedirs(baseDir) | 
| 245 | 257 | 
| 246         # ABP for Android used to have its own update manifest format. We need t
     o | 258         # ABP for Android used to have its own update manifest format. We need t
     o | 
| 247         # generate both that and the new one in the libadblockplus format as lon
     g | 259         # generate both that and the new one in the libadblockplus format as lon
     g | 
| 248         # as a significant amount of users is on an old version. | 260         # as a significant amount of users is on an old version. | 
| 249         if self.config.type == 'android': | 261         if self.config.type == 'android': | 
| 250             newManifestPath = os.path.join(baseDir, 'update.json') | 262             newManifestPath = os.path.join(baseDir, 'update.json') | 
| 251             writeAndroidUpdateManifest(newManifestPath, [{ | 263             writeAndroidUpdateManifest(newManifestPath, [{ | 
| 252                 'basename': self.basename, | 264                 'basename': self.basename, | 
| 253                 'version': self.version, | 265                 'version': self.version, | 
| 254                 'updateURL': self.updateURL | 266                 'updateURL': self.updateURL | 
| 255             }]) | 267             }]) | 
| 256 | 268 | 
| 257         template = get_template(get_config().get('extensions', templateName)) | 269         template = get_template(get_config().get('extensions', templateName), | 
|  | 270                                 autoescape=autoescape) | 
| 258         template.stream({'extensions': [self]}).dump(manifestPath) | 271         template.stream({'extensions': [self]}).dump(manifestPath) | 
| 259 | 272 | 
| 260     def writeIEUpdateManifest(self, versions): | 273     def writeIEUpdateManifest(self, versions): | 
| 261         """ | 274         """ | 
| 262           Writes update.json file for the latest IE build | 275           Writes update.json file for the latest IE build | 
| 263         """ | 276         """ | 
| 264         if len(versions) == 0: | 277         if len(versions) == 0: | 
| 265             return | 278             return | 
| 266 | 279 | 
| 267         version = versions[0] | 280         version = versions[0] | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 318                     os.remove(self.path) | 331                     os.remove(self.path) | 
| 319                 raise | 332                 raise | 
| 320         else: | 333         else: | 
| 321             env = os.environ | 334             env = os.environ | 
| 322             spiderMonkeyBinary = self.config.spiderMonkeyBinary | 335             spiderMonkeyBinary = self.config.spiderMonkeyBinary | 
| 323             if spiderMonkeyBinary: | 336             if spiderMonkeyBinary: | 
| 324                 env = dict(env, SPIDERMONKEY_BINARY=spiderMonkeyBinary) | 337                 env = dict(env, SPIDERMONKEY_BINARY=spiderMonkeyBinary) | 
| 325 | 338 | 
| 326             command = [os.path.join(self.tempdir, 'build.py'), | 339             command = [os.path.join(self.tempdir, 'build.py'), | 
| 327                        '-t', self.config.type, 'build', '-b', self.buildNum] | 340                        '-t', self.config.type, 'build', '-b', self.buildNum] | 
| 328             if self.config.type != 'gecko': | 341             if self.config.type not in {'gecko', 'gecko-webext'}: | 
| 329                 command.extend(['-k', self.config.keyFile]) | 342                 command.extend(['-k', self.config.keyFile]) | 
| 330             command.append(self.path) | 343             command.append(self.path) | 
| 331             subprocess.check_call(command, env=env) | 344             subprocess.check_call(command, env=env) | 
| 332 | 345 | 
| 333         if not os.path.exists(self.path): | 346         if not os.path.exists(self.path): | 
| 334             raise Exception("Build failed, output file hasn't been created") | 347             raise Exception("Build failed, output file hasn't been created") | 
| 335 | 348 | 
| 336         linkPath = os.path.join(baseDir, '00latest%s' % self.config.packageSuffi
     x) | 349         linkPath = os.path.join(baseDir, '00latest%s' % self.config.packageSuffi
     x) | 
| 337         if hasattr(os, 'symlink'): | 350         if hasattr(os, 'symlink'): | 
| 338             if os.path.exists(linkPath): | 351             if os.path.exists(linkPath): | 
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 521                 self.copyRepository() | 534                 self.copyRepository() | 
| 522                 self.buildNum = self.getCurrentBuild() | 535                 self.buildNum = self.getCurrentBuild() | 
| 523 | 536 | 
| 524                 # get meta data from the repository | 537                 # get meta data from the repository | 
| 525                 if self.config.type == 'android': | 538                 if self.config.type == 'android': | 
| 526                     self.readAndroidMetadata() | 539                     self.readAndroidMetadata() | 
| 527                 elif self.config.type == 'chrome': | 540                 elif self.config.type == 'chrome': | 
| 528                     self.readChromeMetadata() | 541                     self.readChromeMetadata() | 
| 529                 elif self.config.type == 'safari': | 542                 elif self.config.type == 'safari': | 
| 530                     self.readSafariMetadata() | 543                     self.readSafariMetadata() | 
|  | 544                 elif self.config.type in {'gecko', 'gecko-webext'}: | 
|  | 545                     self.readGeckoMetadata() | 
| 531                 else: | 546                 else: | 
| 532                     self.readGeckoMetadata() | 547                     raise Exception('Unknown build type {}' % self.config.type) | 
| 533 | 548 | 
| 534                 # create development build | 549                 # create development build | 
| 535                 self.build() | 550                 self.build() | 
| 536 | 551 | 
| 537                 # write out changelog | 552                 # write out changelog | 
| 538                 self.writeChangelog(self.getChanges()) | 553                 self.writeChangelog(self.getChanges()) | 
| 539 | 554 | 
| 540                 # write update manifest | 555                 # write update manifest | 
| 541                 if self.config.type != 'gecko': | 556                 if self.config.type != 'gecko': | 
| 542                     self.writeUpdateManifest() | 557                     self.writeUpdateManifest() | 
| 543 | 558 | 
| 544             # retire old builds | 559             # retire old builds | 
| 545             versions = self.retireBuilds() | 560             versions = self.retireBuilds() | 
| 546 | 561 | 
| 547             if self.config.type == 'ie': | 562             if self.config.type == 'ie': | 
| 548                 self.writeIEUpdateManifest(versions) | 563                 self.writeIEUpdateManifest(versions) | 
| 549 | 564 | 
| 550             # update index page | 565             # update index page | 
| 551             self.updateIndex(versions) | 566             self.updateIndex(versions) | 
| 552 | 567 | 
| 553             # update nightlies config | 568             # update nightlies config | 
| 554             self.config.latestRevision = self.revision | 569             self.config.latestRevision = self.revision | 
| 555 | 570 | 
| 556             if self.config.type == 'gecko' and self.config.galleryID and get_con
     fig().has_option('extensions', 'amo_key'): | 571             if (self.config.type in {'gecko', 'gecko-webext'} and | 
|  | 572                     self.config.galleryID and | 
|  | 573                     get_config().has_option('extensions', 'amo_key')): | 
| 557                 self.uploadToMozillaAddons() | 574                 self.uploadToMozillaAddons() | 
| 558             elif self.config.type == 'chrome' and self.config.clientID and self.
     config.clientSecret and self.config.refreshToken: | 575             elif self.config.type == 'chrome' and self.config.clientID and self.
     config.clientSecret and self.config.refreshToken: | 
| 559                 self.uploadToChromeWebStore() | 576                 self.uploadToChromeWebStore() | 
| 560         finally: | 577         finally: | 
| 561             # clean up | 578             # clean up | 
| 562             if self.tempdir: | 579             if self.tempdir: | 
| 563                 shutil.rmtree(self.tempdir, ignore_errors=True) | 580                 shutil.rmtree(self.tempdir, ignore_errors=True) | 
| 564 | 581 | 
| 565 | 582 | 
| 566 def main(): | 583 def main(): | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 584         except Exception as ex: | 601         except Exception as ex: | 
| 585             logging.error('The build for %s failed:', repo) | 602             logging.error('The build for %s failed:', repo) | 
| 586             logging.exception(ex) | 603             logging.exception(ex) | 
| 587 | 604 | 
| 588     file = open(nightlyConfigFile, 'wb') | 605     file = open(nightlyConfigFile, 'wb') | 
| 589     nightlyConfig.write(file) | 606     nightlyConfig.write(file) | 
| 590 | 607 | 
| 591 | 608 | 
| 592 if __name__ == '__main__': | 609 if __name__ == '__main__': | 
| 593     main() | 610     main() | 
| OLD | NEW | 
|---|