Index: trychange.py |
diff --git a/trychange.py b/trychange.py |
index cf3d45929e65d9aa636e5310567b4f0e91285afa..d8d019f88f666b3d431b0778349ca359dec3c0f6 100755 |
--- a/trychange.py |
+++ b/trychange.py |
@@ -74,8 +74,12 @@ def EscapeDot(name): |
class SCM(object): |
"""Simplistic base class to implement one function: ProcessOptions.""" |
- def __init__(self, options, cwd): |
- self.checkout_root = cwd |
+ def __init__(self, options, path): |
+ items = path.split('@') |
+ assert len(items) <= 2 |
+ self.checkout_root = items[0] |
+ items.append(None) |
+ self.diff_against = items[1] |
self.options = options |
self.files = self.options.files |
self.options.files = None |
@@ -176,7 +180,8 @@ class SVN(SCM): |
if f[0][0] not in excluded |
] |
os.chdir(previous_cwd) |
- return scm.SVN.GenerateDiff(self.files, self.checkout_root, full_move=True) |
+ return scm.SVN.GenerateDiff(self.files, self.checkout_root, full_move=True, |
+ revision=self.diff_against) |
class GIT(SCM): |
@@ -202,7 +207,8 @@ class GIT(SCM): |
def GenerateDiff(self): |
# For now, ignores self.files |
- return scm.GIT.GenerateDiff(self.checkout_root, full_move=True) |
+ return scm.GIT.GenerateDiff(self.checkout_root, full_move=True, |
+ branch=self.diff_against) |
def _ParseSendChangeOptions(options): |
@@ -365,16 +371,17 @@ def GuessVCS(options, path): |
A SCM instance. Exits if the SCM can't be guessed. |
""" |
__pychecker__ = 'no-returnvalues' |
+ real_path = path.split('@')[0] |
logging.info("GuessVCS(%s)" % path) |
# Subversion has a .svn in all working directories. |
- if os.path.isdir(os.path.join(path, '.svn')): |
+ if os.path.isdir(os.path.join(real_path, '.svn')): |
return SVN(options, path) |
# 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. |
try: |
gclient_utils.CheckCall(["git", "rev-parse", "--is-inside-work-tree"], |
- path) |
+ real_path) |
return GIT(options, path) |
except gclient_utils.CheckCallError, e: |
if e.retcode != errno.ENOENT and e.retcode != 128: |
@@ -464,7 +471,9 @@ def TryChange(argv, |
help="Used as -pN parameter to patch") |
group.add_option("-s", "--sub_rep", action="append", default=[], |
help="Subcheckout to use in addition. This is mainly " |
- "useful for gclient-style checkouts.") |
+ "useful for gclient-style checkouts. Use @rev or " |
+ "@branch or @branch1..branch2 to specify the " |
+ "revision/branch to diff against.") |
group.add_option("--no_gclient", action="store_true", |
help="Disable automatic search for gclient checkout.") |
parser.add_option_group(group) |