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 88cd"$cdup"|| { 89echo>&2"Cannot chdir to$cdup, the toplevel of the working tree" 90exit1 91} 92fi 93} 94 95require_work_tree () { 96test$(git rev-parse --is-inside-work-tree)= true || 97 die "fatal:$0cannot be used without a working tree." 98} 99 100get_author_ident_from_commit () { 101 pick_author_script=' 102 /^author /{ 103 s/'\''/'\''\\'\'\''/g 104 h 105 s/^author \([^<]*\) <[^>]*> .*$/\1/ 106 s/'\''/'\''\'\'\''/g 107 s/.*/GIT_AUTHOR_NAME='\''&'\''/p 108 109 g 110 s/^author [^<]* <\([^>]*\)> .*$/\1/ 111 s/'\''/'\''\'\'\''/g 112 s/.*/GIT_AUTHOR_EMAIL='\''&'\''/p 113 114 g 115 s/^author [^<]* <[^>]*> \(.*\)$/\1/ 116 s/'\''/'\''\'\'\''/g 117 s/.*/GIT_AUTHOR_DATE='\''&'\''/p 118 119 q 120} 121' 122 encoding=$(git config i18n.commitencoding || echo UTF-8) 123 git show -s --pretty=raw --encoding="$encoding" "$1" -- | 124 LANG=C LC_ALL=C sed -ne "$pick_author_script" 125} 126 127# Make sure we are in a valid repository of a vintage we understand, 128# if we require to be in a git repository. 129if test -z "$NONGIT_OK" 130then 131 GIT_DIR=$(git rev-parse --git-dir)|| exit 132 if [ -z "$SUBDIRECTORY_OK" ] 133 then 134 test -z "$(git rev-parse --show-cdup)" || { 135 exit=$? 136 echo >&2 "You need to run this command from the toplevel of the working tree." 137 exit$exit 138 } 139 fi 140 test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd)|| { 141 echo >&2 "Unable to determine absolute path of git directory" 142 exit 1 143 } 144 :${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} 145fi 146 147# Fix some commands on Windows 148case$(uname -s)in 149*MINGW*) 150 # Windows has its own (incompatible) sort and find 151 sort () { 152 /usr/bin/sort "$@" 153 } 154 find () { 155 /usr/bin/find "$@" 156 } 157 ;; 158esac