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