From: Junio C Hamano Date: Sat, 18 Feb 2006 01:34:31 +0000 (-0800) Subject: Merge branch 'fix' X-Git-Tag: v1.3.0-rc1~54^2~65 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=0f4aa3993de5fc7252e43ebd872fd9e4b615873d;hp=07e8ab9be913bd50595707f21a896ac15c4f5a89;p=git.git Merge branch 'fix' * 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. --- diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index d638bfc2..1662e065 100644 --- a/Documentation/git-rev-parse.txt +++ b/Documentation/git-rev-parse.txt @@ -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. diff --git a/git-clone.sh b/git-clone.sh index e192b08c..d184ceb7 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -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 + diff --git a/rev-parse.c b/rev-parse.c index 9161faed..a5fb93c3 100644 --- a/rev-parse.c +++ b/rev-parse.c @@ -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) diff --git a/sha1_file.c b/sha1_file.c index 0a3a721e..9cab99ae 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -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); diff --git a/t/test-lib.sh b/t/test-lib.sh index 7a58a86f..66f62b9c 100755 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -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 +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" diff --git a/upload-pack.c b/upload-pack.c index d1980556..3606529f 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -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);