diff --git a/gclient b/gclient index c37766000..4cec87231 100755 --- a/gclient +++ b/gclient @@ -7,14 +7,48 @@ base_dir=$(dirname "$0") +# Test git and git --version. +function test_git { + local GITV="$(git --version)" || { + echo "git isn't installed, please install it" + exit 1 + } + + GITV="${GITV##* }" # Only examine last word (i.e. version number) + local GITD=( ${GITV//./ } ) # Split version number into decimals + if ((GITD[0] < 1 || (GITD[0] == 1 && GITD[1] < 6) )); then + echo "git version is ${GITV}, please update to a version later than 1.6" + exit 1 + fi +} + +# Test git svn and git svn --version. +function test_git_svn { + local GITV="$(git svn --version)" || { + echo "git-svn isn't installed, please install it" + exit 1 + } + + GITV="${GITV#* version }" # git svn --version has extra output to remove. + GITV="${GITV% (svn*}" + local GITD=( ${GITV//./ } ) # Split version number into decimals + if ((GITD[0] < 1 || (GITD[0] == 1 && GITD[1] < 6) )); then + echo "git version is ${GITV}, please update to a version later than 1.6" + exit 1 + fi +} + + # Update git checkouts prior the cygwin check, we don't want to use msysgit. if [ "X$DEPOT_TOOLS_UPDATE" != "X0" -a -e "$base_dir/.git" ] then + test_git_svn (cd "$base_dir"; git svn rebase -q -q) fi if [ "X$DEPOT_TOOLS_UPDATE" != "X0" -a -e "$base_dir/git-cl-repo/.git" ] then + test_git (cd "$base_dir/git-cl-repo"; git pull -q) fi diff --git a/gclient_scm.py b/gclient_scm.py index 6986bb7eb..93f69974b 100644 --- a/gclient_scm.py +++ b/gclient_scm.py @@ -286,8 +286,13 @@ class GitWrapper(SCMWrapper, scm.GIT): cwd = self.checkout_path cmd = [self.COMMAND] cmd.extend(args) - sp = subprocess.Popen(cmd, cwd=cwd, stdout=stdout) - output = sp.communicate()[0] + logging.debug(cmd) + try: + sp = subprocess.Popen(cmd, cwd=cwd, stdout=stdout) + output = sp.communicate()[0] + except OSError: + raise gclient_utils.Error("git command '%s' failed to run." % + ' '.join(cmd) + "\nCheck that you have git installed.") if checkrc and sp.returncode: raise gclient_utils.Error('git command %s returned %d' % (args[0], sp.returncode))