Merge branch 'jc/maint-protect-sh-from-ifs'
authorJunio C Hamano <gitster@pobox.com>
Wed, 29 Aug 2012 21:49:45 +0000 (14:49 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 29 Aug 2012 21:49:45 +0000 (14:49 -0700)
When the user exports a non-default IFS without HT, scripts that
rely on being able to parse "ls-files -s | while read a b c..."
start to fail. Protect them from such a misconfiguration.

* jc/maint-protect-sh-from-ifs:
sh-setup: protect from exported IFS

1  2 
git-sh-setup.sh
diff --combined git-sh-setup.sh
index 770a86e2b7a5e517e51d9897b274b876a6b9e0e1,69472e4125ae6b9962fc47c73bcb3f9ecc3a1772..ee0e0bc045bb7d92045a3afb0a042748834e6163
@@@ -9,8 -9,12 +9,12 @@@
  # you would cause "cd" to be taken to unexpected places.  If you
  # like CDPATH, define it for your interactive shell sessions without
  # exporting it.
+ # But we protect ourselves from such a user mistake nevertheless.
  unset CDPATH
  
+ # Similarly for IFS
+ unset IFS
  git_broken_path_fix () {
        case ":$PATH:" in
        *:$1:*) : ok ;;
@@@ -218,8 -222,27 +222,8 @@@ clear_local_git_env() 
        unset $(git rev-parse --local-env-vars)
  }
  
 -# Make sure we are in a valid repository of a vintage we understand,
 -# if we require to be in a git repository.
 -if test -z "$NONGIT_OK"
 -then
 -      GIT_DIR=$(git rev-parse --git-dir) || exit
 -      if [ -z "$SUBDIRECTORY_OK" ]
 -      then
 -              test -z "$(git rev-parse --show-cdup)" || {
 -                      exit=$?
 -                      echo >&2 "You need to run this command from the toplevel of the working tree."
 -                      exit $exit
 -              }
 -      fi
 -      test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd) || {
 -              echo >&2 "Unable to determine absolute path of git directory"
 -              exit 1
 -      }
 -      : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
 -fi
  
 -# Fix some commands on Windows
 +# Platform specific tweaks to work around some commands
  case $(uname -s) in
  *MINGW*)
        # Windows has its own (incompatible) sort and find
        find () {
                /usr/bin/find "$@"
        }
 +      # git sees Windows-style pwd
 +      pwd () {
 +              builtin pwd -W
 +      }
        is_absolute_path () {
                case "$1" in
                [/\\]* | [A-Za-z]:*)
                return 1
        }
  esac
 +
 +# Make sure we are in a valid repository of a vintage we understand,
 +# if we require to be in a git repository.
 +if test -z "$NONGIT_OK"
 +then
 +      GIT_DIR=$(git rev-parse --git-dir) || exit
 +      if [ -z "$SUBDIRECTORY_OK" ]
 +      then
 +              test -z "$(git rev-parse --show-cdup)" || {
 +                      exit=$?
 +                      echo >&2 "You need to run this command from the toplevel of the working tree."
 +                      exit $exit
 +              }
 +      fi
 +      test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd) || {
 +              echo >&2 "Unable to determine absolute path of git directory"
 +              exit 1
 +      }
 +      : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
 +fi