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