1#!/bin/sh 2# 3# This is included in commands that either have to be run from the toplevel 4# of the repository, or with GIT_DIR environment variable properly. 5# If the GIT_DIR does not look like the right correct git-repository, 6# it dies. 7 8# Having this variable in your environment would break scripts because 9# you would cause "cd" to be taken to unexpected places. If you 10# like CDPATH, define it for your interactive shell sessions without 11# exporting it. 12unset CDPATH 13 14die() { 15echo>&2"$@" 16exit1 17} 18 19iftest -n"$OPTIONS_SPEC";then 20 usage() { 21"$0"-h 22exit1 23} 24 25 parseopt_extra= 26[-n"$OPTIONS_KEEPDASHDASH"] && 27 parseopt_extra="--keep-dashdash" 28 29eval"$( 30 echo "$OPTIONS_SPEC" | 31 git rev-parse --parseopt$parseopt_extra-- "$@" || 32 echo exit $? 33 )" 34else 35 dashless=$(basename "$0" | sed -e 's/-/ /') 36 usage() { 37 die "Usage:$dashless$USAGE" 38} 39 40if[-z"$LONG_USAGE"] 41then 42 LONG_USAGE="Usage:$dashless$USAGE" 43else 44 LONG_USAGE="Usage:$dashless$USAGE 45 46$LONG_USAGE" 47fi 48 49case"$1"in 50-h|--h|--he|--hel|--help) 51echo"$LONG_USAGE" 52exit 53esac 54fi 55 56set_reflog_action() { 57if[-z"${GIT_REFLOG_ACTION:+set}"] 58then 59 GIT_REFLOG_ACTION="$*" 60export GIT_REFLOG_ACTION 61fi 62} 63 64git_editor() { 65:"${GIT_EDITOR:=$(git config core.editor)}" 66:"${GIT_EDITOR:=${VISUAL:-${EDITOR}}}" 67case"$GIT_EDITOR,$TERM"in 68,dumb) 69echo>&2"No editor specified in GIT_EDITOR, core.editor, VISUAL," 70echo>&2"or EDITOR. Tried to fall back to vi but terminal is dumb." 71echo>&2"Please set one of these variables to an appropriate" 72echo>&2"editor or run$0with options that will not cause an" 73echo>&2"editor to be invoked (e.g., -m or -F for git-commit)." 74exit1 75;; 76esac 77eval"${GIT_EDITOR:=vi}"'"$@"' 78} 79 80is_bare_repository () { 81 git rev-parse --is-bare-repository 82} 83 84cd_to_toplevel () { 85 cdup=$(git rev-parse --show-cdup) 86iftest!-z"$cdup" 87then 88# The "-P" option says to follow "physical" directory 89# structure instead of following symbolic links. When cdup is 90# "../", this means following the ".." entry in the current 91# directory instead textually removing a symlink path element 92# from the PWD shell variable. The "-P" behavior is more 93# consistent with the C-style chdir used by most of Git. 94cd -P"$cdup"|| { 95echo>&2"Cannot chdir to$cdup, the toplevel of the working tree" 96exit1 97} 98fi 99} 100 101require_work_tree () { 102test$(git rev-parse --is-inside-work-tree)= true || 103 die "fatal:$0cannot be used without a working tree." 104} 105 106get_author_ident_from_commit () { 107 pick_author_script=' 108 /^author /{ 109 s/'\''/'\''\\'\'\''/g 110 h 111 s/^author \([^<]*\) <[^>]*> .*$/\1/ 112 s/'\''/'\''\'\'\''/g 113 s/.*/GIT_AUTHOR_NAME='\''&'\''/p 114 115 g 116 s/^author [^<]* <\([^>]*\)> .*$/\1/ 117 s/'\''/'\''\'\'\''/g 118 s/.*/GIT_AUTHOR_EMAIL='\''&'\''/p 119 120 g 121 s/^author [^<]* <[^>]*> \(.*\)$/\1/ 122 s/'\''/'\''\'\'\''/g 123 s/.*/GIT_AUTHOR_DATE='\''&'\''/p 124 125 q 126} 127' 128 encoding=$(git config i18n.commitencoding || echo UTF-8) 129 git show -s --pretty=raw --encoding="$encoding" "$1" -- | 130 LANG=C LC_ALL=C sed -ne "$pick_author_script" 131} 132 133# Make sure we are in a valid repository of a vintage we understand, 134# if we require to be in a git repository. 135if test -z "$NONGIT_OK" 136then 137 GIT_DIR=$(git rev-parse --git-dir)|| exit 138 if [ -z "$SUBDIRECTORY_OK" ] 139 then 140 test -z "$(git rev-parse --show-cdup)" || { 141 exit=$? 142 echo >&2 "You need to run this command from the toplevel of the working tree." 143 exit$exit 144 } 145 fi 146 test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd)|| { 147 echo >&2 "Unable to determine absolute path of git directory" 148 exit 1 149 } 150 :${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} 151fi 152 153# Fix some commands on Windows 154case$(uname -s)in 155*MINGW*) 156 # Windows has its own (incompatible) sort and find 157 sort () { 158 /usr/bin/sort "$@" 159 } 160 find () { 161 /usr/bin/find "$@" 162 } 163 ;; 164esac