diff options
-rw-r--r-- | Documentation/core-tutorial.txt | 2 | ||||
-rw-r--r-- | Documentation/git-repo-config.txt | 9 | ||||
-rw-r--r-- | Documentation/git-rev-list.txt | 7 | ||||
-rw-r--r-- | apply.c | 18 | ||||
-rw-r--r-- | builtin-diff.c | 3 | ||||
-rw-r--r-- | cat-file.c | 7 | ||||
-rw-r--r-- | checkout-index.c | 13 | ||||
-rw-r--r-- | commit-tree.c | 8 | ||||
-rw-r--r-- | config.c | 20 | ||||
-rw-r--r-- | convert-objects.c | 4 | ||||
-rw-r--r-- | describe.c | 6 | ||||
-rw-r--r-- | diff.c | 2 | ||||
-rwxr-xr-x | git-clone.sh | 2 | ||||
-rwxr-xr-x | git-repack.sh | 14 | ||||
-rw-r--r-- | ls-tree.c | 4 | ||||
-rw-r--r-- | merge-base.c | 8 | ||||
-rw-r--r-- | merge-tree.c | 2 | ||||
-rw-r--r-- | read-cache.c | 2 | ||||
-rw-r--r-- | read-tree.c | 4 | ||||
-rw-r--r-- | revision.c | 4 | ||||
-rw-r--r-- | ssh-upload.c | 2 | ||||
-rwxr-xr-x | t/t1300-repo-config.sh | 31 | ||||
-rwxr-xr-x | t/t5700-clone-reference.sh | 78 | ||||
-rw-r--r-- | tar-tree.c | 4 | ||||
-rw-r--r-- | unpack-file.c | 4 | ||||
-rw-r--r-- | update-index.c | 30 | ||||
-rw-r--r-- | update-ref.c | 4 |
27 files changed, 215 insertions, 77 deletions
diff --git a/Documentation/core-tutorial.txt b/Documentation/core-tutorial.txt index 4211c8197..d1360ecde 100644 --- a/Documentation/core-tutorial.txt +++ b/Documentation/core-tutorial.txt @@ -971,7 +971,7 @@ $ git show-branch --topo-order master mybranch The first two lines indicate that it is showing the two branches and the first line of the commit log message from their top-of-the-tree commits, you are currently on `master` branch -(notice the asterisk `*` character), and the first column for +(notice the asterisk `\*` character), and the first column for the later output lines is used to show commits contained in the `master` branch, and the second column for the `mybranch` branch. Three commits are shown along with their log messages. diff --git a/Documentation/git-repo-config.txt b/Documentation/git-repo-config.txt index fd44f629f..660c18ff8 100644 --- a/Documentation/git-repo-config.txt +++ b/Documentation/git-repo-config.txt @@ -23,10 +23,11 @@ You can query/set/replace/unset options with this command. The name is actually the section and the key separated by a dot, and the value will be escaped. -If you want to set/unset an option which can occur on multiple lines, you -should provide a POSIX regex for the value. If you want to handle the lines -*not* matching the regex, just prepend a single exclamation mark in front -(see EXAMPLES). +If you want to set/unset an option which can occur on multiple +lines, a POSIX regexp `value_regex` needs to be given. Only the +existing values that match the regexp are updated or unset. If +you want to handle the lines that do *not* match the regex, just +prepend a single exclamation mark in front (see EXAMPLES). The type specifier can be either '--int' or '--bool', which will make 'git-repo-config' ensure that the variable(s) are of the given type and diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt index 8255ae1bc..ad6d14c55 100644 --- a/Documentation/git-rev-list.txt +++ b/Documentation/git-rev-list.txt @@ -68,9 +68,10 @@ OPTIONS --bisect:: Limit output to the one commit object which is roughly halfway between the included and excluded commits. Thus, if 'git-rev-list - --bisect foo ^bar ^baz' outputs 'midpoint', the output - of 'git-rev-list foo ^midpoint' and 'git-rev-list midpoint - ^bar ^baz' would be of roughly the same length. Finding the change + --bisect foo {caret}bar {caret}baz' outputs 'midpoint', the output + of 'git-rev-list foo {caret}midpoint' and 'git-rev-list midpoint + {caret}bar {caret}baz' would be of roughly the same length. + Finding the change which introduces a regression is thus reduced to a binary search: repeatedly generate and test new 'midpoint's until the commit chain is of length one. @@ -20,6 +20,7 @@ // static const char *prefix; static int prefix_length = -1; +static int newfd = -1; static int p_value = 1; static int allow_binary_replacement = 0; @@ -2048,7 +2049,6 @@ static int use_patch(struct patch *p) static int apply_patch(int fd, const char *filename) { - int newfd; unsigned long offset, size; char *buffer = read_patch_file(fd, &size); struct patch *list = NULL, **listp = &list; @@ -2079,12 +2079,11 @@ static int apply_patch(int fd, const char *filename) size -= nr; } - newfd = -1; if (whitespace_error && (new_whitespace == error_on_whitespace)) apply = 0; write_index = check_index && apply; - if (write_index) + if (write_index && newfd < 0) newfd = hold_index_file_for_update(&cache_file, get_index_file()); if (check_index) { if (read_cache() < 0) @@ -2097,12 +2096,6 @@ static int apply_patch(int fd, const char *filename) if (apply) write_out_results(list, skipped_patch); - if (write_index) { - if (write_cache(newfd, active_cache, active_nr) || - commit_index_file(&cache_file)) - die("Unable to write new cachefile"); - } - if (show_index_info) show_index_list(list); @@ -2261,5 +2254,12 @@ int main(int argc, char **argv) whitespace_error == 1 ? "" : "s", whitespace_error == 1 ? "s" : ""); } + + if (write_index) { + if (write_cache(newfd, active_cache, active_nr) || + commit_index_file(&cache_file)) + die("Unable to write new cachefile"); + } + return 0; } diff --git a/builtin-diff.c b/builtin-diff.c index 636edbf2a..d3ac581f2 100644 --- a/builtin-diff.c +++ b/builtin-diff.c @@ -84,8 +84,7 @@ static void stuff_change(struct diff_options *opt, if (opt->reverse_diff) { unsigned tmp; - const - const unsigned char *tmp_u; + const unsigned char *tmp_u; const char *tmp_c; tmp = old_mode; old_mode = new_mode; new_mode = tmp; tmp_u = old_sha1; old_sha1 = new_sha1; new_sha1 = tmp_u; diff --git a/cat-file.c b/cat-file.c index 628f6cada..7413feed7 100644 --- a/cat-file.c +++ b/cat-file.c @@ -103,8 +103,10 @@ int main(int argc, char **argv) setup_git_directory(); git_config(git_default_config); - if (argc != 3 || get_sha1(argv[2], sha1)) + if (argc != 3) usage("git-cat-file [-t|-s|-e|-p|<type>] <sha1>"); + if (get_sha1(argv[2], sha1)) + die("Not a valid object name %s", argv[2]); opt = 0; if ( argv[1][0] == '-' ) { @@ -133,8 +135,7 @@ int main(int argc, char **argv) return !has_sha1_file(sha1); case 'p': - if (get_sha1(argv[2], sha1) || - sha1_object_info(sha1, type, NULL)) + if (sha1_object_info(sha1, type, NULL)) die("Not a valid object name %s", argv[2]); /* custom pretty-print here */ diff --git a/checkout-index.c b/checkout-index.c index dd6a2d86f..cc3a745c1 100644 --- a/checkout-index.c +++ b/checkout-index.c @@ -269,12 +269,16 @@ int main(int argc, char **argv) /* Check out named files first */ for ( ; i < argc; i++) { const char *arg = argv[i]; + const char *p; if (all) die("git-checkout-index: don't mix '--all' and explicit filenames"); if (read_from_stdin) die("git-checkout-index: don't mix '--stdin' and explicit filenames"); - checkout_file(prefix_path(prefix, prefix_length, arg)); + p = prefix_path(prefix, prefix_length, arg); + checkout_file(p); + if (p < arg || p > arg + strlen(arg)) + free((char*)p); } if (read_from_stdin) { @@ -284,6 +288,8 @@ int main(int argc, char **argv) strbuf_init(&buf); while (1) { char *path_name; + const char *p; + read_line(&buf, stdin, line_termination); if (buf.eof) break; @@ -291,7 +297,10 @@ int main(int argc, char **argv) path_name = unquote_c_style(buf.buf, NULL); else path_name = buf.buf; - checkout_file(prefix_path(prefix, prefix_length, path_name)); + p = prefix_path(prefix, prefix_length, path_name); + checkout_file(p); + if (p < path_name || p > path_name + strlen(path_name)) + free((char *)p); if (path_name != buf.buf) free(path_name); } diff --git a/commit-tree.c b/commit-tree.c index bad72e89e..0320036e8 100644 --- a/commit-tree.c +++ b/commit-tree.c @@ -91,15 +91,19 @@ int main(int argc, char **argv) git_config(git_default_config); - if (argc < 2 || get_sha1(argv[1], tree_sha1) < 0) + if (argc < 2) usage(commit_tree_usage); + if (get_sha1(argv[1], tree_sha1)) + die("Not a valid object name %s", argv[1]); check_valid(tree_sha1, tree_type); for (i = 2; i < argc; i += 2) { char *a, *b; a = argv[i]; b = argv[i+1]; - if (!b || strcmp(a, "-p") || get_sha1(b, parent_sha1[parents])) + if (!b || strcmp(a, "-p")) usage(commit_tree_usage); + if (get_sha1(b, parent_sha1[parents])) + die("Not a valid object name %s", b); check_valid(parent_sha1[parents], commit_type); if (new_parent(parents)) parents++; @@ -336,8 +336,10 @@ static int store_aux(const char* key, const char* value) store.state = KEY_SEEN; store.seen++; } else if (strrchr(key, '.') - key == store.baselen && - !strncmp(key, store.key, store.baselen)) + !strncmp(key, store.key, store.baselen)) { store.state = SECTION_SEEN; + store.offset[store.seen] = ftell(config_file); + } } return 0; } @@ -420,7 +422,7 @@ int git_config_set_multivar(const char* key, const char* value, const char* value_regex, int multi_replace) { int i; - int fd, in_fd; + int fd = -1, in_fd; int ret; char* config_filename = strdup(git_path("config")); char* lock_file = strdup(git_path("config.lock")); @@ -478,15 +480,11 @@ int git_config_set_multivar(const char* key, const char* value, if ( ENOENT != errno ) { error("opening %s: %s", config_filename, strerror(errno)); - close(fd); - unlink(lock_file); ret = 3; /* same as "invalid config file" */ goto out_free; } /* if nothing to unset, error out */ if (value == NULL) { - close(fd); - unlink(lock_file); ret = 5; goto out_free; } @@ -549,8 +547,6 @@ int git_config_set_multivar(const char* key, const char* value, /* if nothing to unset, or too many matches, error out */ if ((store.seen == 0 && value == NULL) || (store.seen > 1 && multi_replace == 0)) { - close(fd); - unlink(lock_file); ret = 5; goto out_free; } @@ -599,8 +595,6 @@ int git_config_set_multivar(const char* key, const char* value, unlink(config_filename); } - close(fd); - if (rename(lock_file, config_filename) < 0) { fprintf(stderr, "Could not rename the lock file?\n"); ret = 4; @@ -610,10 +604,14 @@ int git_config_set_multivar(const char* key, const char* value, ret = 0; out_free: + if (0 <= fd) + close(fd); if (config_filename) free(config_filename); - if (lock_file) + if (lock_file) { + unlink(lock_file); free(lock_file); + } return ret; } diff --git a/convert-objects.c b/convert-objects.c index 12aacef5a..a67d6b479 100644 --- a/convert-objects.c +++ b/convert-objects.c @@ -321,8 +321,10 @@ int main(int argc, char **argv) setup_git_directory(); - if (argc != 2 || get_sha1(argv[1], sha1)) + if (argc != 2) usage("git-convert-objects <sha1>"); + if (get_sha1(argv[1], sha1)) + die("Not a valid object name %s", argv[1]); entry = convert_entry(sha1); printf("new sha1: %s\n", sha1_to_hex(entry->new_sha1)); diff --git a/describe.c b/describe.c index ff6574261..8a9cd5d52 100644 --- a/describe.c +++ b/describe.c @@ -105,11 +105,11 @@ static void describe(char *arg, int last_one) static int initialized = 0; struct commit_name *n; - if (get_sha1(arg, sha1) < 0) - usage(describe_usage); + if (get_sha1(arg, sha1)) + die("Not a valid object name %s", arg); cmit = lookup_commit_reference(sha1); if (!cmit) - usage(describe_usage); + die("%s is not a valid '%s' object", arg, commit_type); if (!initialized) { initialized = 1; @@ -297,7 +297,6 @@ static const char minuses[]= "-------------------------------------------------- static void show_stats(struct diffstat_t* data) { - char *prefix = ""; int i, len, add, del, total, adds = 0, dels = 0; int max, max_change = 0, max_len = 0; int total_files = data->nr; @@ -319,6 +318,7 @@ static void show_stats(struct diffstat_t* data) } for (i = 0; i < data->nr; i++) { + char *prefix = ""; char *name = data->files[i]->name; int added = data->files[i]->added; int deleted = data->files[i]->deleted; diff --git a/git-clone.sh b/git-clone.sh index 080516805..b78524767 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -265,7 +265,7 @@ yes,yes) test -f "$repo/objects/info/alternates" && cat "$repo/objects/info/alternates"; echo "$repo/objects" - } >"$GIT_DIR/objects/info/alternates" + } >>"$GIT_DIR/objects/info/alternates" ;; esac git-ls-remote "$repo" >"$GIT_DIR/CLONE_HEAD" diff --git a/git-repack.sh b/git-repack.sh index e0c9f323c..4fb3f26e8 100755 --- a/git-repack.sh +++ b/git-repack.sh @@ -48,15 +48,15 @@ name=$(git-rev-list --objects --all $rev_list 2>&1 | exit 1 if [ -z "$name" ]; then echo Nothing new to pack. - exit 0 -fi -echo "Pack pack-$name created." +else + echo "Pack pack-$name created." -mkdir -p "$PACKDIR" || exit + mkdir -p "$PACKDIR" || exit -mv .tmp-pack-$name.pack "$PACKDIR/pack-$name.pack" && -mv .tmp-pack-$name.idx "$PACKDIR/pack-$name.idx" || -exit + mv .tmp-pack-$name.pack "$PACKDIR/pack-$name.pack" && + mv .tmp-pack-$name.idx "$PACKDIR/pack-$name.idx" || + exit +fi if test "$remove_redundant" = t then @@ -142,8 +142,8 @@ int main(int argc, const char **argv) if (argc < 2) usage(ls_tree_usage); - if (get_sha1(argv[1], sha1) < 0) - usage(ls_tree_usage); + if (get_sha1(argv[1], sha1)) + die("Not a valid object name %s", argv[1]); pathspec = get_pathspec(prefix, argv + 2); tree = parse_tree_indirect(sha1); diff --git a/merge-base.c b/merge-base.c index 07f5ab4d1..f0dc06ef5 100644 --- a/merge-base.c +++ b/merge-base.c @@ -247,10 +247,12 @@ int main(int argc, char **argv) usage(merge_base_usage); argc--; argv++; } - if (argc != 3 || - get_sha1(argv[1], rev1key) || - get_sha1(argv[2], rev2key)) + if (argc != 3) usage(merge_base_usage); + if (get_sha1(argv[1], rev1key)) + die("Not a valid object name %s", argv[1]); + if (get_sha1(argv[2], rev2key)) + die("Not a valid object name %s", argv[2]); rev1 = lookup_commit_reference(rev1key); rev2 = lookup_commit_reference(rev2key); if (!rev1 || !rev2) diff --git a/merge-tree.c b/merge-tree.c index cc7b5bd89..9dcaab7a8 100644 --- a/merge-tree.c +++ b/merge-tree.c @@ -149,7 +149,7 @@ static void *get_tree_descriptor(struct tree_desc *desc, const char *rev) unsigned char sha1[20]; void *buf; - if (get_sha1(rev, sha1) < 0) + if (get_sha1(rev, sha1)) die("unknown rev %s", rev); buf = fill_tree_descriptor(desc, sha1); if (!buf) diff --git a/read-cache.c b/read-cache.c index f97f92d90..a917ab0cf 100644 --- a/read-cache.c +++ b/read-cache.c @@ -552,7 +552,7 @@ int read_cache(void) active_nr = ntohl(hdr->hdr_entries); active_alloc = alloc_nr(active_nr); - active_cache = calloc(active_alloc, sizeof(struct cache_entry *)); + active_cache = xcalloc(active_alloc, sizeof(struct cache_entry *)); offset = sizeof(*hdr); for (i = 0; i < active_nr; i++) { diff --git a/read-tree.c b/read-tree.c index 26f4f7e32..e926e4c88 100644 --- a/read-tree.c +++ b/read-tree.c @@ -794,8 +794,8 @@ int main(int argc, char **argv) if (1 < index_only + update) usage(read_tree_usage); - if (get_sha1(arg, sha1) < 0) - usage(read_tree_usage); + if (get_sha1(arg, sha1)) + die("Not a valid object name %s", arg); if (list_tree(sha1) < 0) die("failed to unpack tree object %s", arg); stage++; diff --git a/revision.c b/revision.c index f8ee38e54..2294b16ea 100644 --- a/revision.c +++ b/revision.c @@ -794,7 +794,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch local_flags = UNINTERESTING; arg++; } - if (get_sha1(arg, sha1) < 0) { + if (get_sha1(arg, sha1)) { int j; if (seen_dashdash || local_flags) @@ -820,7 +820,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch if (def && !revs->pending_objects) { unsigned char sha1[20]; struct object *object; - if (get_sha1(def, sha1) < 0) + if (get_sha1(def, sha1)) die("bad default revision '%s'", def); object = get_reference(revs, def, sha1, 0); add_pending_object(revs, object, def); diff --git a/ssh-upload.c b/ssh-upload.c index b675a0b1f..2da66618f 100644 --- a/ssh-upload.c +++ b/ssh-upload.c @@ -134,7 +134,7 @@ int main(int argc, char **argv) commit_id = argv[arg]; url = argv[arg + 1]; if (get_sha1(commit_id, sha1)) - usage(ssh_push_usage); + die("Not a valid object name %s", commit_id); memcpy(hex, sha1_to_hex(sha1), sizeof(hex)); argv[arg] = hex; diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 1bf728fb0..7090ea92c 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -278,5 +278,36 @@ git-repo-config > output 2>&1 test_expect_success 'no arguments, but no crash' \ "test $? = 129 && grep usage output" +cat > .git/config << EOF +[a.b] + c = d +EOF + +git-repo-config a.x y + +cat > expect << EOF +[a.b] + c = d +[a] + x = y +EOF + +test_expect_success 'new section is partial match of another' 'cmp .git/config expect' + +git-repo-config b.x y +git-repo-config a.b c + +cat > expect << EOF +[a.b] + c = d +[a] + x = y + b = c +[b] + x = y +EOF + +test_expect_success 'new variable inserts into proper section' 'cmp .git/config expect' + test_done diff --git a/t/t5700-clone-reference.sh b/t/t5700-clone-reference.sh new file mode 100755 index 000000000..916ee15ba --- /dev/null +++ b/t/t5700-clone-reference.sh @@ -0,0 +1,78 @@ +#!/bin/sh +# +# Copyright (C) 2006 Martin Waitz <tali@admingilde.org> +# + +test_description='test clone --reference' +. ./test-lib.sh + +base_dir=`pwd` + +test_expect_success 'preparing first repository' \ +'test_create_repo A && cd A && +echo first > file1 && +git add file1 && +git commit -m initial' + +cd "$base_dir" + +test_expect_success 'preparing second repository' \ +'git clone A B && cd B && +echo second > file2 && +git add file2 && +git commit -m addition && +git repack -a -d && +git prune' + +cd "$base_dir" + +test_expect_success 'cloning with reference' \ +'git clone -l -s --reference B A C' + +cd "$base_dir" + +test_expect_success 'existance of info/alternates' \ +'test `wc -l <C/.git/objects/info/alternates` = 2' + +cd "$base_dir" + +test_expect_success 'pulling from reference' \ +'cd C && +git pull ../B' + +cd "$base_dir" + +test_expect_success 'that reference gets used' \ +'cd C && +echo "0 objects, 0 kilobytes" > expected && +git count-objects > current && +diff expected current' + +cd "$base_dir" + +test_expect_success 'updating origin' \ +'cd A && +echo third > file3 && +git add file3 && +git commit -m update && +git repack -a -d && +git prune' + +cd "$base_dir" + +test_expect_success 'pulling changes from origin' \ +'cd C && +git pull origin' + +cd "$base_dir" + +# the 2 local objects are commit and tree from the merge +test_expect_success 'that alternate to origin gets used' \ +'cd C && +echo "2 objects" > expected && +git count-objects | cut -d, -f1 > current && +diff expected current' + +cd "$base_dir" + +test_done diff --git a/tar-tree.c b/tar-tree.c index fc60a9087..33087366c 100644 --- a/tar-tree.c +++ b/tar-tree.c @@ -321,8 +321,8 @@ int main(int argc, char **argv) strbuf_append_string(¤t_path, "/"); /* FALLTHROUGH */ case 2: - if (get_sha1(argv[1], sha1) < 0) - usage(tar_tree_usage); + if (get_sha1(argv[1], sha1)) + die("Not a valid object name %s", argv[1]); break; default: usage(tar_tree_usage); diff --git a/unpack-file.c b/unpack-file.c index 23a856230..ccddf1d4b 100644 --- a/unpack-file.c +++ b/unpack-file.c @@ -27,8 +27,10 @@ int main(int argc, char **argv) { unsigned char sha1[20]; - if (argc != 2 || get_sha1(argv[1], sha1)) + if (argc != 2) usage("git-unpack-file <sha1>"); + if (get_sha1(argv[1], sha1)) + die("Not a valid object name %s", argv[1]); setup_git_directory(); git_config(git_default_config); diff --git a/update-index.c b/update-index.c index 9fa3d2bb9..00cde7064 100644 --- a/update-index.c +++ b/update-index.c @@ -364,23 +364,26 @@ static void update_one(const char *path, const char *prefix, int prefix_length) const char *p = prefix_path(prefix, prefix_length, path); if (!verify_path(p)) { fprintf(stderr, "Ignoring path %s\n", path); - return; + goto free_return; } if (mark_valid_only) { if (mark_valid(p)) die("Unable to mark file %s", path); - return; + goto free_return; } if (force_remove) { if (remove_file_from_cache(p)) die("git-update-index: unable to remove %s", path); report("remove '%s'", path); - return; + goto free_return; } if (add_file_to_cache(p)) die("Unable to process file %s", path); report("add '%s'", path); + free_return: + if (p < path || p > path + strlen(path)) + free((char*)p); } static void read_index_info(int line_termination) @@ -576,7 +579,8 @@ static void read_head_pointers(void) } } -static int do_unresolve(int ac, const char **av) +static int do_unresolve(int ac, const char **av, + const char *prefix, int prefix_length) { int i; int err = 0; @@ -588,7 +592,10 @@ static int do_unresolve(int ac, const char **av) for (i = 1; i < ac; i++) { const char *arg = av[i]; - err |= unresolve_one(arg); + const char *p = prefix_path(prefix, prefix_length, arg); + err |= unresolve_one(p); + if (p < arg || p > arg + strlen(arg)) + free((char*)p); } return err; } @@ -704,7 +711,8 @@ int main(int argc, const char **argv) break; } if (!strcmp(path, "--unresolve")) { - has_errors = do_unresolve(argc - i, argv + i); + has_errors = do_unresolve(argc - i, argv + i, + prefix, prefix_length); if (has_errors) active_cache_changed = 0; goto finish; @@ -730,6 +738,7 @@ int main(int argc, const char **argv) strbuf_init(&buf); while (1) { char *path_name; + const char *p; read_line(&buf, stdin, line_termination); if (buf.eof) break; @@ -737,11 +746,12 @@ int main(int argc, const char **argv) path_name = unquote_c_style(buf.buf, NULL); else path_name = buf.buf; - update_one(path_name, prefix, prefix_length); - if (set_executable_bit) { - const char *p = prefix_path(prefix, prefix_length, path_name); + p = prefix_path(prefix, prefix_length, path_name); + update_one(p, NULL, 0); + if (set_executable_bit) chmod_path(set_executable_bit, p); - } + if (p < path_name || p > path_name + strlen(path_name)) + free((char*) p); if (path_name != buf.buf) free(path_name); } diff --git a/update-ref.c b/update-ref.c index ba4bf5153..fd487421c 100644 --- a/update-ref.c +++ b/update-ref.c @@ -32,10 +32,10 @@ int main(int argc, char **argv) refname = argv[1]; value = argv[2]; oldval = argv[3]; - if (get_sha1(value, sha1) < 0) + if (get_sha1(value, sha1)) die("%s: not a valid SHA1", value); memset(oldsha1, 0, 20); - if (oldval && get_sha1(oldval, oldsha1) < 0) + if (oldval && get_sha1(oldval, oldsha1)) die("%s: not a valid old SHA1", oldval); path = resolve_ref(git_path("%s", refname), currsha1, !!oldval); |