# HG changeset patch # User Benjamin Pollack # Date 2012-06-12 13:31:04 # Node ID 8ad08dcab7d95fe73b10765aa24c84c4ae51d6fa # Parent 33b057778cd24fc6881fe0532ed75f69b6a8a677 subrepo: support Git being named "git.cmd" on Windows (issue3173) Popen does not consider "foo.cmd" equivalent to "foo" on Windows. Unfortunately, the default MSYS Git installation installs only "git.cmd" into the path by default. This patch probes for both possible names on Windows. diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -850,7 +850,14 @@ class gitsubrepo(abstractsubrepo): self._ensuregit() def _ensuregit(self): - out, err = self._gitnodir(['--version']) + try: + self._gitexecutable = 'git' + out, err = self._gitnodir(['--version']) + except OSError, e: + if e.errno != 2 or os.name != 'nt': + raise + self._gitexecutable = 'git.cmd' + out, err = self._gitnodir(['--version']) m = re.search(r'^git version (\d+)\.(\d+)\.(\d+)', out) if not m: self._ui.warn(_('cannot retrieve git version')) @@ -883,8 +890,8 @@ class gitsubrepo(abstractsubrepo): errpipe = None if self._ui.quiet: errpipe = open(os.devnull, 'w') - p = subprocess.Popen(['git'] + commands, bufsize=-1, cwd=cwd, env=env, - close_fds=util.closefds, + p = subprocess.Popen([self._gitexecutable] + commands, bufsize=-1, + cwd=cwd, env=env, close_fds=util.closefds, stdout=subprocess.PIPE, stderr=errpipe) if stream: return p.stdout, None