| Index: git-cl.py
|
| diff --git a/git-cl.py b/git-cl.py
|
| index 4763fd169d0df79b41712f0c0bfbf57f251df01d..a8ebf6cefe13f41e50adedde6261ac4d7a47307a 100755
|
| --- a/git-cl.py
|
| +++ b/git-cl.py
|
| @@ -6,7 +6,6 @@ import getpass
|
| import optparse
|
| import os
|
| import re
|
| -import readline
|
| import subprocess
|
| import sys
|
| import tempfile
|
| @@ -14,6 +13,11 @@ import textwrap
|
| import upload
|
| import urllib2
|
|
|
| +try:
|
| + import readline
|
| +except ImportError:
|
| + pass
|
| +
|
| DEFAULT_SERVER = 'codereview.appspot.com'
|
|
|
| def DieWithError(message):
|
| @@ -21,11 +25,16 @@ def DieWithError(message):
|
| sys.exit(1)
|
|
|
|
|
| -def RunGit(args, error_ok=False, error_message=None, exit_code=False):
|
| +def RunGit(args, error_ok=False, error_message=None, exit_code=False,
|
| + redirect_stdout=True):
|
| cmd = ['git'] + args
|
| # Useful for debugging:
|
| # print >>sys.stderr, ' '.join(cmd)
|
| - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
| + if redirect_stdout:
|
| + stdout = subprocess.PIPE
|
| + else:
|
| + stdout = None
|
| + proc = subprocess.Popen(cmd, stdout=stdout)
|
| output = proc.communicate()[0]
|
| if exit_code:
|
| return proc.returncode
|
| @@ -86,10 +95,6 @@ class Settings:
|
| 'refs/remotes']).splitlines()
|
| svn_refs = {}
|
| for ref in remotes:
|
| - # git-svn remote refs are generally directly in the refs/remotes/dir,
|
| - # not a subdirectory (like refs/remotes/origin/master).
|
| - if '/' in ref[len('refs/remotes/'):]:
|
| - continue
|
| match = git_svn_re.search(RunGit(['cat-file', '-p', ref]))
|
| if match:
|
| svn_refs[match.group(1)] = ref
|
| @@ -377,7 +382,9 @@ def UserEditedLog(starting_text):
|
| if ret != 0:
|
| return
|
|
|
| - text = open(filename).read()
|
| + file.flush()
|
| + file.seek(0)
|
| + text = file.read()
|
| file.close()
|
| stripcomment_re = re.compile(r'^#.*$', re.MULTILINE)
|
| return stripcomment_re.sub('', text).strip()
|
| @@ -521,6 +528,14 @@ def CmdDCommit(args):
|
| if RunGit(['show-ref', '--quiet', '--verify', 'refs/heads/' + MERGE_BRANCH],
|
| exit_code=True) == 0:
|
| RunGit(['branch', '-D', MERGE_BRANCH])
|
| +
|
| + # We might be in a directory that's present in this branch but not in the
|
| + # trunk. Move up to the top of the tree so that git commands that expect a
|
| + # valid CWD won't fail after we check out the merge branch.
|
| + rel_base_path = RunGit(['rev-parse', '--show-cdup']).strip()
|
| + if rel_base_path:
|
| + os.chdir(rel_base_path)
|
| +
|
| # Stuff our change into the merge branch.
|
| RunGit(['checkout', '-q', '-b', MERGE_BRANCH, base_branch])
|
| RunGit(['merge', '--squash', cl.GetBranchRef()])
|
| @@ -618,7 +633,7 @@ def CmdPatch(args):
|
| def CmdRebase(args):
|
| # Provide a wrapper for git svn rebase to help avoid accidental
|
| # git svn dcommit.
|
| - RunGit(['svn', 'rebase'])
|
| + RunGit(['svn', 'rebase'], redirect_stdout=False)
|
|
|
| def GetTreeStatus():
|
| """Fetches the tree status and returns either 'open', 'closed',
|
|
|