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 usage() { 36 die "Usage:$0$USAGE" 37} 38 39if[-z"$LONG_USAGE"] 40then 41 LONG_USAGE="Usage:$0$USAGE" 42else 43 LONG_USAGE="Usage:$0$USAGE 44 45$LONG_USAGE" 46fi 47 48case"$1"in 49-h|--h|--he|--hel|--help) 50echo"$LONG_USAGE" 51exit 52esac 53fi 54 55set_reflog_action() { 56if[-z"${GIT_REFLOG_ACTION:+set}"] 57then 58 GIT_REFLOG_ACTION="$*" 59export GIT_REFLOG_ACTION 60fi 61} 62 63git_editor() { 64:"${GIT_EDITOR:=$(git config core.editor)}" 65:"${GIT_EDITOR:=${VISUAL:-${EDITOR}}}" 66case"$GIT_EDITOR,$TERM"in 67,dumb) 68echo>&2"No editor specified in GIT_EDITOR, core.editor, VISUAL," 69echo>&2"or EDITOR. Tried to fall back to vi but terminal is dumb." 70echo>&2"Please set one of these variables to an appropriate" 71echo>&2"editor or run$0with options that will not cause an" 72echo>&2"editor to be invoked (e.g., -m or -F for git-commit)." 73exit1 74;; 75esac 76eval"${GIT_EDITOR:=vi}"'"$@"' 77} 78 79is_bare_repository () { 80 git rev-parse --is-bare-repository 81} 82 83cd_to_toplevel () { 84 cdup=$(git rev-parse --show-cdup) 85iftest!-z"$cdup" 86then 87cd"$cdup"|| { 88echo>&2"Cannot chdir to$cdup, the toplevel of the working tree" 89exit1 90} 91fi 92} 93 94require_work_tree () { 95test$(git rev-parse --is-inside-work-tree)= true || 96 die "fatal:$0cannot be used without a working tree." 97} 98 99get_author_ident_from_commit () { 100 pick_author_script=' 101 /^author /{ 102 s/'\''/'\''\\'\'\''/g 103 h 104 s/^author \([^<]*\) <[^>]*> .*$/\1/ 105 s/'\''/'\''\'\'\''/g 106 s/.*/GIT_AUTHOR_NAME='\''&'\''/p 107 108 g 109 s/^author [^<]* <\([^>]*\)> .*$/\1/ 110 s/'\''/'\''\'\'\''/g 111 s/.*/GIT_AUTHOR_EMAIL='\''&'\''/p 112 113 g 114 s/^author [^<]* <[^>]*> \(.*\)$/\1/ 115 s/'\''/'\''\'\'\''/g 116 s/.*/GIT_AUTHOR_DATE='\''&'\''/p 117 118 q 119} 120' 121 encoding=$(git config i18n.commitencoding || echo UTF-8) 122 git show -s --pretty=raw --encoding="$encoding" "$1" -- | 123 LANG=C LC_ALL=C sed -ne "$pick_author_script" 124} 125 126# Make sure we are in a valid repository of a vintage we understand, 127# if we require to be in a git repository. 128if test -z "$NONGIT_OK" 129then 130 GIT_DIR=$(git rev-parse --git-dir)|| exit 131 if [ -z "$SUBDIRECTORY_OK" ] 132 then 133 test -z "$(git rev-parse --show-cdup)" || { 134 exit=$? 135 echo >&2 "You need to run this command from the toplevel of the working tree." 136 exit$exit 137 } 138 fi 139 test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd)|| { 140 echo >&2 "Unable to determine absolute path of git directory" 141 exit 1 142 } 143 :${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} 144fi 145 146# Fix some commands on Windows 147case$(uname -s)in 148*MINGW*) 149 # Windows has its own (incompatible) sort and find 150 sort () { 151 /usr/bin/sort "$@" 152 } 153 find () { 154 /usr/bin/find "$@" 155 } 156 ;; 157esac