Merge branch 'fix'
authorJunio C Hamano <junkio@cox.net>
Sat, 18 Feb 2006 01:34:31 +0000 (17:34 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 18 Feb 2006 01:34:31 +0000 (17:34 -0800)
* fix:
  Document --short and --git-dir in git-rev-parse(1)
  git-rev-parse: Fix --short= option parsing
  Prevent git-upload-pack segfault if object cannot be found
  Abstract test_create_repo out for use in tests.
  Trap exit to clean up created directory if clone fails.

Documentation/git-rev-parse.txt
git-clone.sh
rev-parse.c
sha1_file.c
t/test-lib.sh
upload-pack.c

index d638bfc..1662e06 100644 (file)
@@ -77,6 +77,14 @@ OPTIONS
        path of the top-level directory relative to the current
        directory (typically a sequence of "../", or an empty string).
 
+--git-dir::
+       Show `$GIT_DIR` if defined else show the path to the .git directory.
+
+--short, short=number::
+       Instead of outputting the full SHA1 values of object names try to
+       abbriviate them to a shorter unique name. When no length is specified
+       7 is used. The minimum length is 4.
+
 --since=datestring, --after=datestring::
        Parses the date string, and outputs corresponding
        --max-age= parameter for git-rev-list command.
index e192b08..d184ceb 100755 (executable)
@@ -118,6 +118,7 @@ dir="$2"
 [ -e "$dir" ] && echo "$dir already exists." && usage
 mkdir -p "$dir" &&
 D=$(cd "$dir" && pwd) &&
+trap 'err=$?; rm -r $D; exit $err' exit
 case "$bare" in
 yes) GIT_DIR="$D" ;;
 *) GIT_DIR="$D/.git" ;;
@@ -255,3 +256,6 @@ Pull: $head_points_at:$origin" &&
                git checkout
        esac
 fi
+
+trap - exit
+
index 9161fae..a5fb93c 100644 (file)
@@ -226,12 +226,12 @@ int main(int argc, char **argv)
                                continue;
                        }
                        if (!strcmp(arg, "--short") ||
-                           !strncmp(arg, "--short=", 9)) {
+                           !strncmp(arg, "--short=", 8)) {
                                filter &= ~(DO_FLAGS|DO_NOREV);
                                verify = 1;
                                abbrev = DEFAULT_ABBREV;
-                               if (arg[8] == '=')
-                                       abbrev = strtoul(arg + 9, NULL, 10);
+                               if (arg[7] == '=')
+                                       abbrev = strtoul(arg + 8, NULL, 10);
                                if (abbrev < MINIMUM_ABBREV)
                                        abbrev = MINIMUM_ABBREV;
                                else if (40 <= abbrev)
index 0a3a721..9cab99a 100644 (file)
@@ -551,8 +551,10 @@ static void prepare_packed_git_one(char *objdir, int local)
        sprintf(path, "%s/pack", objdir);
        len = strlen(path);
        dir = opendir(path);
-       if (!dir)
+       if (!dir) {
+               fprintf(stderr, "unable to open object pack directory: %s: %s\n", path, strerror(errno));
                return;
+       }
        path[len++] = '/';
        while ((de = readdir(dir)) != NULL) {
                int namelen = strlen(de->d_name);
index 7a58a86..66f62b9 100755 (executable)
@@ -149,6 +149,21 @@ test_expect_code () {
        fi
 }
 
+# Most tests can use the created repository, but some amy need to create more.
+# Usage: test_create_repo <directory>
+test_create_repo () {
+       test "$#" = 1 ||
+       error "bug in the test script: not 1 parameter to test-create-repo"
+       owd=`pwd`
+       repo="$1"
+       mkdir "$repo"
+       cd "$repo" || error "Cannot setup test environment"
+       "$GIT_EXEC_PATH/git" init-db --template=$GIT_EXEC_PATH/templates/blt/ 2>/dev/null ||
+       error "cannot run git init-db -- have you built things yet?"
+       mv .git/hooks .git/hooks-disabled
+       cd "$owd"
+}
+       
 test_done () {
        trap - exit
        case "$test_failure" in
@@ -196,9 +211,5 @@ test -d ../templates/blt || {
 # Test repository
 test=trash
 rm -fr "$test"
-mkdir "$test"
-cd "$test" || error "Cannot setup test environment"
-"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
-error "cannot run git init-db -- have you built things yet?"
-
-mv .git/hooks .git/hooks-disabled
+test_create_repo $test
+cd "$test"
index d198055..3606529 100644 (file)
@@ -216,6 +216,9 @@ static int send_ref(const char *refname, const unsigned char *sha1)
        static char *capabilities = "multi_ack";
        struct object *o = parse_object(sha1);
 
+       if (!o)
+               die("git-upload-pack: cannot find object %s:", sha1_to_hex(sha1));
+
        if (capabilities)
                packet_write(1, "%s %s%c%s\n", sha1_to_hex(sha1), refname,
                        0, capabilities);