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 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 31is_bare_repository () { 32 git rev-parse --is-bare-repository 33} 34 35cd_to_toplevel () { 36 cdup=$(git rev-parse --show-cdup) 37iftest!-z"$cdup" 38then 39cd"$cdup"|| { 40echo>&2"Cannot chdir to$cdup, the toplevel of the working tree" 41exit1 42} 43fi 44} 45 46require_work_tree () { 47test$(git rev-parse --is-inside-work-tree)= true && 48test$(git rev-parse --is-inside-git-dir)= false || 49 die "fatal:$0cannot be used without a working tree." 50} 51 52get_author_ident_from_commit () { 53 pick_author_script=' 54 /^author /{ 55 s/'\''/'\''\\'\'\''/g 56 h 57 s/^author \([^<]*\) <[^>]*> .*$/\1/ 58 s/'\''/'\''\'\'\''/g 59 s/.*/GIT_AUTHOR_NAME='\''&'\''/p 60 61 g 62 s/^author [^<]* <\([^>]*\)> .*$/\1/ 63 s/'\''/'\''\'\'\''/g 64 s/.*/GIT_AUTHOR_EMAIL='\''&'\''/p 65 66 g 67 s/^author [^<]* <[^>]*> \(.*\)$/\1/ 68 s/'\''/'\''\'\'\''/g 69 s/.*/GIT_AUTHOR_DATE='\''&'\''/p 70 71 q 72} 73' 74 encoding=$(git config i18n.commitencoding || echo UTF-8) 75 git show -s --pretty=raw --encoding="$encoding" "$1" | 76 LANG=C LC_ALL=C sed -ne "$pick_author_script" 77} 78 79if [ -z "$LONG_USAGE" ] 80then 81 LONG_USAGE="Usage:$0$USAGE" 82else 83 LONG_USAGE="Usage:$0$USAGE 84 85$LONG_USAGE" 86fi 87 88case "$1" in 89 -h|--h|--he|--hel|--help) 90 echo "$LONG_USAGE" 91 exit 92esac 93 94# Make sure we are in a valid repository of a vintage we understand. 95if [ -z "$SUBDIRECTORY_OK" ] 96then 97 :${GIT_DIR=.git} 98 GIT_DIR=$(GIT_DIR="$GIT_DIR" git rev-parse --git-dir)|| { 99 exit=$? 100 echo >&2 "You need to run this command from the toplevel of the working tree." 101 exit$exit 102 } 103else 104 GIT_DIR=$(git rev-parse --git-dir)|| exit 105fi 106:${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}