diff options
author | Junio C Hamano <junkio@cox.net> | 2006-02-17 17:34:31 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-02-17 17:34:31 -0800 |
commit | 0f4aa3993de5fc7252e43ebd872fd9e4b615873d (patch) | |
tree | c1bc426473d26ac243cf75999e308bd31bcadf0e | |
parent | 07e8ab9be913bd50595707f21a896ac15c4f5a89 (diff) | |
parent | 735d80b3bf1be9513d030e61af1ef6512cec015a (diff) | |
download | git-0f4aa3993de5fc7252e43ebd872fd9e4b615873d.tar.gz git-0f4aa3993de5fc7252e43ebd872fd9e4b615873d.tar.xz |
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.
-rw-r--r-- | Documentation/git-rev-parse.txt | 8 | ||||
-rwxr-xr-x | git-clone.sh | 4 | ||||
-rw-r--r-- | rev-parse.c | 6 | ||||
-rw-r--r-- | sha1_file.c | 4 | ||||
-rwxr-xr-x | t/test-lib.sh | 23 | ||||
-rw-r--r-- | upload-pack.c | 3 |
6 files changed, 38 insertions, 10 deletions
diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index d638bfc20..1662e0656 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 e192b08c0..d184ceb7a 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 9161faed1..a5fb93c3c 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 0a3a721e9..9cab99ae7 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 7a58a86f9..66f62b9c6 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 <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" diff --git a/upload-pack.c b/upload-pack.c index d1980556c..3606529f6 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); |