Add "git-sh-setup-script" for common git shell script setup
authorLinus Torvalds <torvalds@g5.osdl.org>
Fri, 8 Jul 2005 17:57:21 +0000 (10:57 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 8 Jul 2005 17:57:21 +0000 (10:57 -0700)
It sets up the normal git environment variables and a few helper
functions (currently just "die()"), and returns ok if it all looks like
a git archive.  So use it something like

. git-sh-setup-script || die "Not a git archive"

to make the rest of the git scripts more careful and readable.

Makefile
git-checkout-script
git-commit-script
git-fetch-script
git-prune-script
git-pull-script
git-repack-script
git-reset-script
git-resolve-script
git-sh-setup-script [new file with mode: 0644]

index 82f63cd..d613a8c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \
        git-log-script git-shortlog git-cvsimport-script git-diff-script \
        git-reset-script git-add-script git-checkout-script git-clone-script \
        gitk git-cherry git-rebase-script git-relink-script git-repack-script \
-       git-format-patch-script
+       git-format-patch-script git-sh-setup-script
 
 PROG=   git-update-cache git-diff-files git-init-db git-write-tree \
        git-read-tree git-commit-tree git-cat-file git-fsck-cache \
index ea7fef5..bf52e3b 100755 (executable)
@@ -1,5 +1,6 @@
 #!/bin/sh
-: ${GIT_DIR=.git}
+. git-sh-setup-script || die "Not a git archive"
+
 old=$(git-rev-parse HEAD)
 new=
 force=
index 2632afd..c6f8ee2 100755 (executable)
@@ -3,16 +3,12 @@
 # Copyright (c) 2005 Linus Torvalds
 #
 
+. git-sh-setup-script || die "Not a git archive"
+
 usage () {
-    echo 'git commit [-m existing-commit] [<path>...]'
-    exit 1
+       die 'git commit [-m existing-commit] [<path>...]'
 }
 
-: ${GIT_DIR=.git}
-if [ ! -d "$GIT_DIR" ]; then
-       echo Not a git directory 1>&2
-       exit 1
-fi
 while case "$#" in 0) break ;; esac
 do
     case "$1" in
index 8a2d37d..acb1e56 100755 (executable)
@@ -9,8 +9,8 @@ if [ "$2" = "tag" ]; then
        destination="$merge_name"
 fi
 
-: ${GIT_DIR=.git}
-: ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"}
+. git-sh-setup-script || die "Not a git archive"
+
 TMP_HEAD="$GIT_DIR/TMP_HEAD"
 
 case "$merge_repo" in
index ec9f72d..9764668 100755 (executable)
@@ -1,4 +1,7 @@
 #!/bin/sh
+
+. git-sh-setup-script || die "Not a git archive"
+
 dryrun=
 while case "$#" in 0) break ;; esac
 do
@@ -11,9 +14,6 @@ do
     shift;
 done
 
-: ${GIT_DIR=.git}
-: ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"}
-
 git-fsck-cache --cache --unreachable "$@" |
 sed -ne '/unreachable /{
     s/unreachable [^ ][^ ]* //
index 961edc4..0ef6be3 100755 (executable)
@@ -1,5 +1,7 @@
 #!/bin/sh
 #
+. git-sh-setup-script || die "Not a git archive"
+
 merge_repo=$1
 
 merge_name=$(echo "$1" | sed 's:\.git/*$::')
@@ -15,9 +17,6 @@ then
    merge_head="refs/${type}s/$2"
 fi
 
-: ${GIT_DIR=.git}
-: ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"}
-
 git-fetch-script "$merge_repo" "$merge_head" || exit 1
 
 git-resolve-script \
index 92281c2..15b7fd6 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
-: ${GIT_DIR=.git}
-: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
+. git-sh-setup-script || die "Not a git archive"
+       
 rm -f .tmp-pack-*
 packname=$(git-rev-list --unpacked --objects $(git-rev-parse --all) |
        git-pack-objects --non-empty --incremental .tmp-pack) ||
@@ -9,5 +9,6 @@ if [ -z "$packname" ]; then
        echo Nothing new to pack
        exit 0
 fi
-mv .tmp-pack-$packname.pack "$GIT_OBJECT_DIRECTORY/pack/pack-$packname.pack"
+mkdir -p "$GIT_OBJECT_DIRECTORY/pack" &&
+mv .tmp-pack-$packname.pack "$GIT_OBJECT_DIRECTORY/pack/pack-$packname.pack" &&
 mv .tmp-pack-$packname.idx  "$GIT_OBJECT_DIRECTORY/pack/pack-$packname.idx"
index fe77338..0c02aa6 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/sh
-: ${GIT_DIR=.git}
+. git-sh-setup-script || die "Not a git archive"
 git-read-tree --reset HEAD
 git-update-cache --refresh
 rm -f "$GIT_DIR/MERGE_HEAD"
index bf2fb2d..03c15a9 100755 (executable)
@@ -4,13 +4,12 @@
 #
 # Resolve two trees.
 #
+. git-sh-setup-script || die "Not a git archive"
+
 head=$(git-rev-parse --revs-only "$1")
 merge=$(git-rev-parse --revs-only "$2")
 merge_repo="$3"
 
-: ${GIT_DIR=.git}
-: ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"}
-
 dropheads() {
        rm -f -- "$GIT_DIR/MERGE_HEAD" \
                "$GIT_DIR/LAST_MERGE" || exit 1
@@ -21,8 +20,7 @@ dropheads() {
 # but we do want it.
 #
 if [ -z "$head" -o -z "$merge" -o -z "$merge_repo" ]; then
-       echo "git-resolve-script <head> <remote> <merge-repo-name>"
-       exit 1
+       die "git-resolve-script <head> <remote> <merge-repo-name>"
 fi
 
 dropheads
@@ -31,8 +29,7 @@ echo $merge > "$GIT_DIR"/LAST_MERGE
 
 common=$(git-merge-base $head $merge)
 if [ -z "$common" ]; then
-       echo "Unable to find common commit between" $merge $head
-       exit 1
+       die "Unable to find common commit between" $merge $head
 fi
 
 if [ "$common" == "$merge" ]; then
@@ -57,8 +54,7 @@ if [ $? -ne 0 ]; then
        git-merge-cache -o git-merge-one-file-script -a
        if [ $? -ne 0 ]; then
                echo $merge > "$GIT_DIR"/MERGE_HEAD
-               echo "Automatic merge failed, fix up by hand"
-               exit 1
+               die "Automatic merge failed, fix up by hand"
        fi
        result_tree=$(git-write-tree) || exit 1
 fi
diff --git a/git-sh-setup-script b/git-sh-setup-script
new file mode 100644 (file)
index 0000000..660c524
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Set up GIT_DIR and GIT_OBJECT_DIRECTORY
+# and return true if everything looks ok
+#
+: ${GIT_DIR=.git}
+: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
+
+die() {
+       echo "$@" >&2
+       exit 1
+}
+
+[ -d "$GIT_DIR" ] &&
+[ -d "$GIT_DIR/refs" ]
+[ -d "$GIT_OBJECT_DIRECTORY" ] &&
+[ -d "$GIT_OBJECT_DIRECTORY/00" ]