| Index: trychange.py
|
| diff --git a/trychange.py b/trychange.py
|
| index e322f1794bdb257474dcc93cb9ee9e8a7bd4d67e..9825b1e8b7a53058eefc3baa3485c42c2eec77ca 100755
|
| --- a/trychange.py
|
| +++ b/trychange.py
|
| @@ -100,8 +100,7 @@ class SCM(object):
|
| items.append(None)
|
| self.diff_against = items[1]
|
| self.options = options
|
| - self._files = self.options.files
|
| - self._file_tuples = [('M', f) for f in self.files]
|
| + self.files = self.options.files
|
| self.options.files = None
|
| self.codereview_settings = None
|
| self.codereview_settings_file = 'codereview.settings'
|
| @@ -188,38 +187,6 @@ class SCM(object):
|
| logging.warning('Didn\'t find %s' % filename)
|
| return None
|
|
|
| - def _SetFileTuples(self, file_tuples):
|
| - excluded = ['!', '?', 'X', ' ', '~']
|
| - def Excluded(f):
|
| - if f[0][0] in excluded:
|
| - return True
|
| - for r in self.options.exclude:
|
| - if re.search(r, f[1]):
|
| - logging.info('Ignoring "%s"' % f[1])
|
| - return True
|
| - return False
|
| -
|
| - self._file_tuples = [f for f in file_tuples if not Excluded(f)]
|
| - self._files = [f[1] for f in self.file_tuples]
|
| -
|
| - def CaptureStatus(self):
|
| - """Returns the 'svn status' emulated output as an array of (status, file)
|
| - tuples."""
|
| - raise NotImplementedError(
|
| - "abstract method -- subclass %s must override" % self.__class__)
|
| -
|
| - @property
|
| - def files(self):
|
| - if not self._files:
|
| - self._SetFileTuples(self.CaptureStatus())
|
| - return self._files
|
| -
|
| - @property
|
| - def file_tuples(self):
|
| - if not self._file_tuples:
|
| - self._SetFileTuples(self.CaptureStatus())
|
| - return self._file_tuples
|
| -
|
|
|
| class SVN(SCM):
|
| """Gathers the options and diff for a subversion checkout."""
|
| @@ -243,19 +210,29 @@ class SVN(SCM):
|
| logging.debug('%s:\n%s' % (filename, data))
|
| return data
|
|
|
| - def CaptureStatus(self):
|
| - previous_cwd = os.getcwd()
|
| - os.chdir(self.checkout_root)
|
| - result = scm.SVN.CaptureStatus(self.checkout_root)
|
| - os.chdir(previous_cwd)
|
| - return result
|
| -
|
| def GenerateDiff(self):
|
| """Returns a string containing the diff for the given file list.
|
|
|
| The files in the list should either be absolute paths or relative to the
|
| given root.
|
| """
|
| + if not self.files:
|
| + previous_cwd = os.getcwd()
|
| + os.chdir(self.checkout_root)
|
| +
|
| + excluded = ['!', '?', 'X', ' ', '~']
|
| + def Excluded(f):
|
| + if f[0][0] in excluded:
|
| + return True
|
| + for r in self.options.exclude:
|
| + if re.search(r, f[1]):
|
| + logging.info('Ignoring "%s"' % f[1])
|
| + return True
|
| + return False
|
| +
|
| + self.files = [f[1] for f in scm.SVN.CaptureStatus(self.checkout_root)
|
| + if not Excluded(f)]
|
| + os.chdir(previous_cwd)
|
| return scm.SVN.GenerateDiff(self.files, self.checkout_root, full_move=True,
|
| revision=self.diff_against)
|
|
|
| @@ -278,10 +255,19 @@ class GIT(SCM):
|
| "(via the --track argument to \"git checkout -b ...\"")
|
| logging.info("GIT(%s)" % self.checkout_root)
|
|
|
| - def CaptureStatus(self):
|
| - return scm.GIT.CaptureStatus(self.checkout_root, self.diff_against)
|
| -
|
| def GenerateDiff(self):
|
| + if not self.files:
|
| + self.files = scm.GIT.GetDifferentFiles(self.checkout_root,
|
| + branch=self.diff_against)
|
| +
|
| + def NotExcluded(f):
|
| + for r in self.options.exclude:
|
| + if re.search(r, f):
|
| + logging.info('Ignoring "%s"' % f)
|
| + return False
|
| + return True
|
| +
|
| + self.files = filter(NotExcluded, self.files)
|
| return scm.GIT.GenerateDiff(self.checkout_root, files=self.files,
|
| full_move=True,
|
| branch=self.diff_against)
|
| @@ -478,7 +464,6 @@ def GetMungedDiff(path_diff, diff):
|
|
|
|
|
| def TryChange(argv,
|
| - change,
|
| file_list,
|
| swallow_exception,
|
| prog=None,
|
| @@ -716,18 +701,6 @@ def TryChange(argv,
|
| diffs.extend(GetMungedDiff(path_diff, diff))
|
| options.diff = ''.join(diffs)
|
|
|
| - if not options.name:
|
| - if options.issue:
|
| - options.name = 'Issue %s' % options.issue
|
| - else:
|
| - options.name = 'Unnamed'
|
| - print('Note: use --name NAME to change the try job name.')
|
| -
|
| - if not options.email:
|
| - parser.error('Using an anonymous checkout. Please use --email or set '
|
| - 'the TRYBOT_RESULTS_EMAIL_ADDRESS environment variable.')
|
| - print('Results will be emailed to: ' + options.email)
|
| -
|
| if not options.bot:
|
| # Get try slaves from PRESUBMIT.py files if not specified.
|
| # Even if the diff comes from options.url, use the local checkout for bot
|
| @@ -735,16 +708,7 @@ def TryChange(argv,
|
| try:
|
| import presubmit_support
|
| root_presubmit = checkouts[0].ReadRootFile('PRESUBMIT.py')
|
| - if change is None:
|
| - change = presubmit_support.Change(options.name,
|
| - '',
|
| - checkouts[0].checkout_root,
|
| - checkouts[0].file_tuples,
|
| - options.issue,
|
| - options.patchset,
|
| - options.email)
|
| options.bot = presubmit_support.DoGetTrySlaves(
|
| - change,
|
| checkouts[0].GetFileNames(),
|
| checkouts[0].checkout_root,
|
| root_presubmit,
|
| @@ -756,6 +720,18 @@ def TryChange(argv,
|
| # If no bot is specified, either the default pool will be selected or the
|
| # try server will refuse the job. Either case we don't need to interfere.
|
|
|
| + if options.name is None:
|
| + if options.issue:
|
| + options.name = 'Issue %s' % options.issue
|
| + else:
|
| + options.name = 'Unnamed'
|
| + print('Note: use --name NAME to change the try job name.')
|
| + if not options.email:
|
| + parser.error('Using an anonymous checkout. Please use --email or set '
|
| + 'the TRYBOT_RESULTS_EMAIL_ADDRESS environment variable.')
|
| + else:
|
| + print('Results will be emailed to: ' + options.email)
|
| +
|
| # Prevent rietveld updates if we aren't running all the tests.
|
| if options.testfilter is not None:
|
| options.issue = None
|
| @@ -791,4 +767,4 @@ def TryChange(argv,
|
|
|
| if __name__ == "__main__":
|
| fix_encoding.fix_encoding()
|
| - sys.exit(TryChange(None, None, [], False))
|
| + sys.exit(TryChange(None, [], False))
|
|
|