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