Code

Merge branch 'gf/maint-sh-setup-nongit-ok' into maint-1.6.6
authorJunio C Hamano <gitster@pobox.com>
Sun, 7 Mar 2010 22:53:53 +0000 (14:53 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sun, 7 Mar 2010 22:53:53 +0000 (14:53 -0800)
* gf/maint-sh-setup-nongit-ok:
  require_work_tree broken with NONGIT_OK

1  2 
git-sh-setup.sh

diff --combined git-sh-setup.sh
index dfcb8078f508d6cc26d312d61b64e0185e90b74b,d2789410de3dc833cc7d3503ed9ea7d343d040ac..dcf9d0a31030ce4b6a7e7f2268ed8d25fdb57322
@@@ -6,90 -6,20 +6,90 @@@
  # it dies.
  
  # Having this variable in your environment would break scripts because
 -# you would cause "cd" to be be taken to unexpected places.  If you
 +# you would cause "cd" to be taken to unexpected places.  If you
  # like CDPATH, define it for your interactive shell sessions without
  # exporting it.
  unset CDPATH
  
 +git_broken_path_fix () {
 +      case ":$PATH:" in
 +      *:$1:*) : ok ;;
 +      *)
 +              PATH=$(
 +                      SANE_TOOL_PATH="$1"
 +                      IFS=: path= sep=
 +                      set x $PATH
 +                      shift
 +                      for elem
 +                      do
 +                              case "$SANE_TOOL_PATH:$elem" in
 +                              (?*:/bin | ?*:/usr/bin)
 +                                      path="$path$sep$SANE_TOOL_PATH"
 +                                      sep=:
 +                                      SANE_TOOL_PATH=
 +                              esac
 +                              path="$path$sep$elem"
 +                              sep=:
 +                      done
 +                      echo "$path"
 +              )
 +              ;;
 +      esac
 +}
 +
 +# @@BROKEN_PATH_FIX@@
 +
  die() {
        echo >&2 "$@"
        exit 1
  }
  
 -usage() {
 -      die "Usage: $0 $USAGE"
 +GIT_QUIET=
 +
 +say () {
 +      if test -z "$GIT_QUIET"
 +      then
 +              printf '%s\n' "$*"
 +      fi
  }
  
 +if test -n "$OPTIONS_SPEC"; then
 +      usage() {
 +              "$0" -h
 +              exit 1
 +      }
 +
 +      parseopt_extra=
 +      [ -n "$OPTIONS_KEEPDASHDASH" ] &&
 +              parseopt_extra="--keep-dashdash"
 +
 +      eval "$(
 +              echo "$OPTIONS_SPEC" |
 +                      git rev-parse --parseopt $parseopt_extra -- "$@" ||
 +              echo exit $?
 +      )"
 +else
 +      dashless=$(basename "$0" | sed -e 's/-/ /')
 +      usage() {
 +              die "Usage: $dashless $USAGE"
 +      }
 +
 +      if [ -z "$LONG_USAGE" ]
 +      then
 +              LONG_USAGE="Usage: $dashless $USAGE"
 +      else
 +              LONG_USAGE="Usage: $dashless $USAGE
 +
 +$LONG_USAGE"
 +      fi
 +
 +      case "$1" in
 +              -h|--h|--he|--hel|--help)
 +              echo "$LONG_USAGE"
 +              exit
 +      esac
 +fi
 +
  set_reflog_action() {
        if [ -z "${GIT_REFLOG_ACTION:+set}" ]
        then
  }
  
  git_editor() {
 -      GIT_EDITOR=${GIT_EDITOR:-$(git config core.editor || echo ${VISUAL:-${EDITOR}})}
 -      case "$GIT_EDITOR,$TERM" in
 -      ,dumb)
 -              echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL,"
 -              echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb."
 -              echo >&2 "Please set one of these variables to an appropriate"
 -              echo >&2 "editor or run $0 with options that will not cause an"
 -              echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)."
 -              exit 1
 -              ;;
 -      esac
 -      "${GIT_EDITOR:-vi}" "$1"
 +      if test -z "${GIT_EDITOR:+set}"
 +      then
 +              GIT_EDITOR="$(git var GIT_EDITOR)" || return $?
 +      fi
 +
 +      eval "$GIT_EDITOR" '"$@"'
 +}
 +
 +sane_grep () {
 +      GREP_OPTIONS= LC_ALL=C grep "$@"
 +}
 +
 +sane_egrep () {
 +      GREP_OPTIONS= LC_ALL=C egrep "$@"
  }
  
  is_bare_repository () {
@@@ -123,13 -51,7 +123,13 @@@ cd_to_toplevel () 
        cdup=$(git rev-parse --show-cdup)
        if test ! -z "$cdup"
        then
 -              cd "$cdup" || {
 +              # The "-P" option says to follow "physical" directory
 +              # structure instead of following symbolic links.  When cdup is
 +              # "../", this means following the ".." entry in the current
 +              # directory instead textually removing a symlink path element
 +              # from the PWD shell variable.  The "-P" behavior is more
 +              # consistent with the C-style chdir used by most of Git.
 +              cd -P "$cdup" || {
                        echo >&2 "Cannot chdir to $cdup, the toplevel of the working tree"
                        exit 1
                }
  }
  
  require_work_tree () {
-       test $(git rev-parse --is-inside-work-tree) = true ||
+       test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true ||
        die "fatal: $0 cannot be used without a working tree."
  }
  
@@@ -164,39 -86,35 +164,39 @@@ get_author_ident_from_commit () 
        }
        '
        encoding=$(git config i18n.commitencoding || echo UTF-8)
 -      git show -s --pretty=raw --encoding="$encoding" "$1" |
 +      git show -s --pretty=raw --encoding="$encoding" "$1" -- |
        LANG=C LC_ALL=C sed -ne "$pick_author_script"
  }
  
 -if [ -z "$LONG_USAGE" ]
 +# 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
 -      LONG_USAGE="Usage: $0 $USAGE"
 -else
 -      LONG_USAGE="Usage: $0 $USAGE
 -
 -$LONG_USAGE"
 +      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
  
 -case "$1" in
 -      -h|--h|--he|--hel|--help)
 -      echo "$LONG_USAGE"
 -      exit
 -esac
 -
 -# Make sure we are in a valid repository of a vintage we understand.
 -if [ -z "$SUBDIRECTORY_OK" ]
 -then
 -      : ${GIT_DIR=.git}
 -      GIT_DIR=$(GIT_DIR="$GIT_DIR" git rev-parse --git-dir) || {
 -              exit=$?
 -              echo >&2 "You need to run this command from the toplevel of the working tree."
 -              exit $exit
 +# Fix some commands on Windows
 +case $(uname -s) in
 +*MINGW*)
 +      # Windows has its own (incompatible) sort and find
 +      sort () {
 +              /usr/bin/sort "$@"
        }
 -else
 -      GIT_DIR=$(git rev-parse --git-dir) || exit
 -fi
 -: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
 +      find () {
 +              /usr/bin/find "$@"
 +      }
 +      ;;
 +esac