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 d638bfc202ef9ad0386d640cbf70b9cdb2fff665..1662e0656128829bbbefe2c07ab5d6cc7372f052 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 e192b08c0dc3ab410e371fe07af96b9b5b59f22a..d184ceb7a6f2a7d4ffc3a002b1a8846c46297f33 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 9161faed1e916c0a3d53c0df4905a2261e626131..a5fb93c3ca993dc240f87a9ac5ee6447b10b7cad 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 0a3a721e97c89f1dd494831a9321de4668f214c8..9cab99ae7c2b1e59db7be26d79d287254db21211 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 7a58a86f967fdb114bb980a631292da2cee2a352..66f62b9c6f2a31965c856fc9b7d056a86abbcfbc 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 d1980556ca5b9c62a76129907cc511cd5c0c6c83..3606529f61c50aa1c4d73877ccc4601ef036fcb5 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);