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