[PATCH 2 of 2 STABLE V3] subrepo: support Git being named "git.cmd" on Windows (issue3173)

Benjamin Pollack benjamin at bitquabit.com
Wed Jun 13 14:06:38 CDT 2012


# HG changeset patch
# User Benjamin Pollack <benjamin at bitquabit.com>
# Date 1339507864 14400
# Branch stable
# Node ID e0cd5e9462b7a753c08533b5db8a68e4d24fa8a7
# Parent  5dba02a299162197f1b41774802e9f5d07ee6203
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 @@
         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 @@
         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


More information about the Mercurial-devel mailing list