Index: trychange.py |
=================================================================== |
--- trychange.py (revision 104145) |
+++ trychange.py (working copy) |
@@ -93,7 +93,7 @@ |
class SCM(object): |
"""Simplistic base class to implement one function: ProcessOptions.""" |
- def __init__(self, options, path): |
+ def __init__(self, options, path, file_list): |
items = path.split('@') |
assert len(items) <= 2 |
self.checkout_root = items[0] |
@@ -103,8 +103,8 @@ |
# Lazy-load file list from the SCM unless files were specified in options. |
self._files = None |
self._file_tuples = None |
- if self.options.files: |
- self._files = self.options.files |
+ if file_list: |
+ self._files = file_list |
self._file_tuples = [('M', f) for f in self.files] |
self.options.files = None |
self.codereview_settings = None |
@@ -436,7 +436,7 @@ |
print(text) |
-def GuessVCS(options, path): |
+def GuessVCS(options, path, file_list): |
"""Helper to guess the version control system. |
NOTE: Very similar to upload.GuessVCS. Doesn't look for hg since we don't |
@@ -454,7 +454,7 @@ |
logging.info("GuessVCS(%s)" % path) |
# Subversion has a .svn in all working directories. |
if os.path.isdir(os.path.join(real_path, '.svn')): |
- return SVN(options, path) |
+ return SVN(options, path, file_list) |
# Git has a command to test if you're in a git tree. |
# Try running it, but don't die if we don't have git installed. |
@@ -462,7 +462,7 @@ |
subprocess2.check_output( |
['git', 'rev-parse', '--is-inside-work-tree'], cwd=real_path, |
stderr=subprocess2.VOID) |
- return GIT(options, path) |
+ return GIT(options, path, file_list) |
except subprocess2.CalledProcessError, e: |
if e.returncode != errno.ENOENT and e.returncode != 128: |
# ENOENT == 2 = they don't have git installed. |
@@ -499,10 +499,6 @@ |
change: Change instance corresponding to the CL. |
swallow_exception: Whether we raise or swallow exceptions. |
""" |
- file_list = [] |
- if change: |
- file_list = [f.LocalPath() for f in change.AffectedFiles()] |
- |
# Parse argv |
parser = optparse.OptionParser(usage=USAGE, |
version=__version__, |
@@ -569,7 +565,7 @@ |
parser.add_option_group(group) |
group = optparse.OptionGroup(parser, "Patch to run") |
- group.add_option("-f", "--file", default=file_list, dest="files", |
+ group.add_option("-f", "--file", default=[], dest="files", |
metavar="FILE", action="append", |
help="Use many times to list the files to include in the " |
"try, relative to the repository root") |
@@ -679,13 +675,23 @@ |
# Always include os.getcwd() in the checkout settings. |
checkouts = [] |
path = os.getcwd() |
+ |
+ file_list = [] |
+ if options.files: |
+ file_list = options.files |
+ elif change: |
+ file_list = [f.LocalPath() for f in change.AffectedFiles()] |
+ |
if options.upstream_branch: |
path += '@' + options.upstream_branch |
- checkouts.append(GuessVCS(options, path)) |
+ # Clear file list so that the correct list will be retrieved from the |
+ # upstream branch. |
+ file_list = [] |
+ checkouts.append(GuessVCS(options, path, file_list)) |
checkouts[0].AutomagicalSettings() |
for item in options.sub_rep: |
checkout = GuessVCS(options, os.path.join(checkouts[0].checkout_root, |
- item)) |
+ item), file_list) |
if checkout.checkout_root in [c.checkout_root for c in checkouts]: |
parser.error('Specified the root %s two times.' % |
checkout.checkout_root) |