| 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   58       Performs the build process for an extension, |   58       Performs the build process for an extension, | 
|   59       generating changelogs and documentation. |   59       generating changelogs and documentation. | 
|   60     """ |   60     """ | 
|   61  |   61  | 
|   62     def __init__(self, config): |   62     def __init__(self, config): | 
|   63         """ |   63         """ | 
|   64           Creates a NightlyBuild instance; we are simply |   64           Creates a NightlyBuild instance; we are simply | 
|   65           recording the configuration settings here. |   65           recording the configuration settings here. | 
|   66         """ |   66         """ | 
|   67         self.config = config |   67         self.config = config | 
 |   68         try: | 
 |   69             self.bookmark = self.config.get( | 
 |   70                 'extensions', 'abp{}_bookmark'.format(self.config.type) | 
 |   71             ) | 
 |   72         except ConfigParser.NoOptionError: | 
 |   73             self.bookmark = 'master' | 
 |   74  | 
|   68         self.revision = self.getCurrentRevision() |   75         self.revision = self.getCurrentRevision() | 
|   69         try: |   76         try: | 
|   70             self.previousRevision = config.latestRevision |   77             self.previousRevision = config.latestRevision | 
|   71         except: |   78         except: | 
|   72             self.previousRevision = '0' |   79             self.previousRevision = '0' | 
|   73         self.buildNum = None |   80         self.buildNum = None | 
|   74         self.tempdir = None |   81         self.tempdir = None | 
|   75         self.outputFilename = None |   82         self.outputFilename = None | 
|   76         self.changelogFilename = None |   83         self.changelogFilename = None | 
|   77  |   84  | 
|   78     def hasChanges(self): |   85     def hasChanges(self): | 
|   79         return self.revision != self.previousRevision |   86         return self.revision != self.previousRevision | 
|   80  |   87  | 
|   81     def getCurrentRevision(self): |   88     def getCurrentRevision(self): | 
|   82         """ |   89         """ | 
|   83             retrieves the current revision ID from the repository |   90             retrieves the current revision ID from the repository | 
|   84         """ |   91         """ | 
|   85         command = [ |   92         command = [ | 
|   86             'hg', 'id', '-i', '-r', 'default', '--config', 'defaults.id=', |   93             'hg', 'id', '-i', '-r', self.bookmark, '--config', | 
|   87             self.config.repository |   94             'defaults.id=', self.config.repository | 
|   88         ] |   95         ] | 
|   89         return subprocess.check_output(command).strip() |   96         return subprocess.check_output(command).strip() | 
|   90  |   97  | 
|   91     def getCurrentBuild(self): |   98     def getCurrentBuild(self): | 
|   92         """ |   99         """ | 
|   93             calculates the (typically numerical) build ID for the current build |  100             calculates the (typically numerical) build ID for the current build | 
|   94         """ |  101         """ | 
|   95         command = ['hg', 'id', '-n', '--config', 'defaults.id=', self.tempdir] |  102         command = ['hg', 'id', '-n', '--config', 'defaults.id=', self.tempdir] | 
|   96         build = subprocess.check_output(command).strip() |  103         build = subprocess.check_output(command).strip() | 
|   97         if self.config.type == 'gecko': |  104         if self.config.type == 'gecko': | 
|   98             build += '-beta' |  105             build += '-beta' | 
|   99         return build |  106         return build | 
|  100  |  107  | 
|  101     def getChanges(self): |  108     def getChanges(self): | 
|  102         """ |  109         """ | 
|  103           retrieve changes between the current and previous ("first") revision |  110           retrieve changes between the current and previous ("first") revision | 
|  104         """ |  111         """ | 
|  105  |  112  | 
|  106         command = ['hg', 'log', '-R', self.tempdir, '-r', 'tip:0', |  113         command = [ | 
|  107                    '-b', 'default', '-l', '50', '--encoding', 'utf-8', |  114             'hg', 'log', '-R', self.tempdir, '-r', self.bookmark + ':0', | 
|  108                    '--template', '{date|isodate}\\0{author|person}\\0{rev}\\0{de
     sc}\\0\\0', |  115             '-b', 'default', '-l', '50', '--encoding', 'utf-8', '--template', | 
|  109                    '--config', 'defaults.log='] |  116             '{date|isodate}\\0{author|person}\\0{rev}\\0{desc}\\0\\0', | 
 |  117             '--config', 'defaults.log=' | 
 |  118         ] | 
|  110         result = subprocess.check_output(command).decode('utf-8') |  119         result = subprocess.check_output(command).decode('utf-8') | 
|  111  |  120  | 
|  112         for change in result.split('\x00\x00'): |  121         for change in result.split('\x00\x00'): | 
|  113             if change: |  122             if change: | 
|  114                 date, author, revision, description = change.split('\x00') |  123                 date, author, revision, description = change.split('\x00') | 
|  115                 yield {'date': date, 'author': author, 'revision': revision, 'de
     scription': description} |  124                 yield {'date': date, 'author': author, 'revision': revision, 'de
     scription': description} | 
|  116  |  125  | 
|  117     def copyRepository(self): |  126     def copyRepository(self): | 
|  118         """ |  127         """ | 
|  119           Create a repository copy in a temporary directory |  128           Create a repository copy in a temporary directory | 
|  120         """ |  129         """ | 
|  121         self.tempdir = tempfile.mkdtemp(prefix=self.config.repositoryName) |  130         self.tempdir = tempfile.mkdtemp(prefix=self.config.repositoryName) | 
|  122         command = ['hg', 'clone', '-q', self.config.repository, '-u', 'default',
      self.tempdir] |  131         command = ['hg', 'clone', '-q', self.config.repository,  '-u', | 
 |  132                    'default', self.tempdir] | 
|  123         subprocess.check_call(command) |  133         subprocess.check_call(command) | 
|  124  |  134  | 
|  125         # Make sure to run ensure_dependencies.py if present |  135         # Make sure to run ensure_dependencies.py if present | 
|  126         depscript = os.path.join(self.tempdir, 'ensure_dependencies.py') |  136         depscript = os.path.join(self.tempdir, 'ensure_dependencies.py') | 
|  127         if os.path.isfile(depscript): |  137         if os.path.isfile(depscript): | 
|  128             subprocess.check_call([sys.executable, depscript, '-q']) |  138             subprocess.check_call([sys.executable, depscript, '-q']) | 
|  129  |  139  | 
|  130     def writeChangelog(self, changes): |  140     def writeChangelog(self, changes): | 
|  131         """ |  141         """ | 
|  132           write the changelog file into the cloned repository |  142           write the changelog file into the cloned repository | 
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  581         except Exception as ex: |  591         except Exception as ex: | 
|  582             logging.error('The build for %s failed:', repo) |  592             logging.error('The build for %s failed:', repo) | 
|  583             logging.exception(ex) |  593             logging.exception(ex) | 
|  584  |  594  | 
|  585     file = open(nightlyConfigFile, 'wb') |  595     file = open(nightlyConfigFile, 'wb') | 
|  586     nightlyConfig.write(file) |  596     nightlyConfig.write(file) | 
|  587  |  597  | 
|  588  |  598  | 
|  589 if __name__ == '__main__': |  599 if __name__ == '__main__': | 
|  590     main() |  600     main() | 
| OLD | NEW |