diff --git a/git_cl.py b/git_cl.py index c967d8ff41..e632d08aad 100755 --- a/git_cl.py +++ b/git_cl.py @@ -48,6 +48,7 @@ import watchlists DEFAULT_SERVER = 'https://codereview.appspot.com' POSTUPSTREAM_HOOK_PATTERN = '.git/hooks/post-cl-%s' DESCRIPTION_BACKUP_FILE = '~/.git_cl_description_backup' +GIT_INSTRUCTIONS_URL = 'http://code.google.com/p/chromium/wiki/UsingNewGit' # Initialized in main() @@ -308,6 +309,7 @@ class Changelist(object): self._rpc_server = None self.cc = None self.watchers = () + self._remote = None def GetCCList(self): """Return the users cc'd on this CL. @@ -386,14 +388,36 @@ or verify this branch is set up to track another (via the --track argument to self.upstream_branch = upstream_branch return self.upstream_branch + def GetRemote(self): + if not self._remote: + self._remote = self.FetchUpstreamTuple()[0] + if self._remote == '.': + + remotes = RunGit(['remote'], error_ok=True).split() + if len(remotes) == 1: + self._remote, = remotes + elif 'origin' in remotes: + self._remote = 'origin' + logging.warning('Could not determine which remote this change is ' + 'associated with, so defaulting to "%s". This may ' + 'not be what you want. You may prevent this message ' + 'by running "git svn info" as documented here: %s', + self._remote, + GIT_INSTRUCTIONS_URL) + else: + logging.warn('Could not determine which remote this change is ' + 'associated with. You may prevent this message by ' + 'running "git svn info" as documented here: %s', + GIT_INSTRUCTIONS_URL) + return self._remote + + def GetRemoteUrl(self): """Return the configured remote URL, e.g. 'git://example.org/foo.git/'. Returns None if there is no remote. """ - remote = self.FetchUpstreamTuple()[0] - if remote == '.': - return None + remote = self.GetRemote() return RunGit(['config', 'remote.%s.url' % remote], error_ok=True).strip() def GetIssue(self):