comparison mercurial/subrepo.py @ 17025:8ad08dcab7d9 stable

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.
author Benjamin Pollack <benjamin@bitquabit.com>
date Tue, 12 Jun 2012 09:31:04 -0400
parents 33b057778cd2
children 6c05eebd9fab ba0286e149aa
comparison
equal deleted inserted replaced
17024:33b057778cd2 17025:8ad08dcab7d9
848 self._subparent = ctx._repo 848 self._subparent = ctx._repo
849 self._ui = ctx._repo.ui 849 self._ui = ctx._repo.ui
850 self._ensuregit() 850 self._ensuregit()
851 851
852 def _ensuregit(self): 852 def _ensuregit(self):
853 out, err = self._gitnodir(['--version']) 853 try:
854 self._gitexecutable = 'git'
855 out, err = self._gitnodir(['--version'])
856 except OSError, e:
857 if e.errno != 2 or os.name != 'nt':
858 raise
859 self._gitexecutable = 'git.cmd'
860 out, err = self._gitnodir(['--version'])
854 m = re.search(r'^git version (\d+)\.(\d+)\.(\d+)', out) 861 m = re.search(r'^git version (\d+)\.(\d+)\.(\d+)', out)
855 if not m: 862 if not m:
856 self._ui.warn(_('cannot retrieve git version')) 863 self._ui.warn(_('cannot retrieve git version'))
857 return 864 return
858 version = (int(m.group(1)), m.group(2), m.group(3)) 865 version = (int(m.group(1)), m.group(2), m.group(3))
881 # unless ui.quiet is set, print git's stderr, 888 # unless ui.quiet is set, print git's stderr,
882 # which is mostly progress and useful info 889 # which is mostly progress and useful info
883 errpipe = None 890 errpipe = None
884 if self._ui.quiet: 891 if self._ui.quiet:
885 errpipe = open(os.devnull, 'w') 892 errpipe = open(os.devnull, 'w')
886 p = subprocess.Popen(['git'] + commands, bufsize=-1, cwd=cwd, env=env, 893 p = subprocess.Popen([self._gitexecutable] + commands, bufsize=-1,
887 close_fds=util.closefds, 894 cwd=cwd, env=env, close_fds=util.closefds,
888 stdout=subprocess.PIPE, stderr=errpipe) 895 stdout=subprocess.PIPE, stderr=errpipe)
889 if stream: 896 if stream:
890 return p.stdout, None 897 return p.stdout, None
891 898
892 retdata = p.stdout.read().strip() 899 retdata = p.stdout.read().strip()