| 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)
|
|
|