From 153bb839aa0c36bf5c056a0b74b6d4d2fe99c157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Th=C3=A1i=20Ng=E1=BB=8Dc=20Duy?= Date: Tue, 29 Dec 2009 15:13:18 +0700 Subject: [PATCH 1/9] t7102: make the test fail if one of its check fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- t/t7102-reset.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh index e637c7d4dbdce3..5f3916bf4ffe1f 100755 --- a/t/t7102-reset.sh +++ b/t/t7102-reset.sh @@ -139,19 +139,19 @@ test_expect_success \ test_expect_success \ 'resetting to HEAD with no changes should succeed and do nothing' ' git reset --hard && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset --hard HEAD && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset --soft && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset --soft HEAD && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset --mixed && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset --mixed HEAD && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset && - check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc + check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc && git reset HEAD && check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc ' From c985ddf318a8c41c6e1abc8bebd058b31c7413c1 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 29 Dec 2009 20:09:15 +0100 Subject: [PATCH 2/9] git count-objects: handle packs bigger than 4G Use off_t to count sizes of packs and objects to avoid overflow after 4Gb. Signed-off-by: Andreas Schwab Signed-off-by: Junio C Hamano --- builtin-count-objects.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/builtin-count-objects.c b/builtin-count-objects.c index 38b033fd711ac7..80b2614fd4dab2 100644 --- a/builtin-count-objects.c +++ b/builtin-count-objects.c @@ -10,7 +10,7 @@ static void count_objects(DIR *d, char *path, int len, int verbose, unsigned long *loose, - unsigned long *loose_size, + off_t *loose_size, unsigned long *packed_loose, unsigned long *garbage) { @@ -78,7 +78,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix) int len = strlen(objdir); char *path = xmalloc(len + 50); unsigned long loose = 0, packed = 0, packed_loose = 0, garbage = 0; - unsigned long loose_size = 0; + off_t loose_size = 0; struct option opts[] = { OPT__VERBOSE(&verbose), OPT_END(), @@ -104,7 +104,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix) if (verbose) { struct packed_git *p; unsigned long num_pack = 0; - unsigned long size_pack = 0; + off_t size_pack = 0; if (!packed_git) prepare_packed_git(); for (p = packed_git; p; p = p->next) { @@ -117,15 +117,15 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix) num_pack++; } printf("count: %lu\n", loose); - printf("size: %lu\n", loose_size / 1024); + printf("size: %lu\n", (unsigned long) (loose_size / 1024)); printf("in-pack: %lu\n", packed); printf("packs: %lu\n", num_pack); - printf("size-pack: %lu\n", size_pack / 1024); + printf("size-pack: %lu\n", (unsigned long) (size_pack / 1024)); printf("prune-packable: %lu\n", packed_loose); printf("garbage: %lu\n", garbage); } else printf("%lu objects, %lu kilobytes\n", - loose, loose_size / 1024); + loose, (unsigned long) (loose_size / 1024)); return 0; } From e97ca7f41f2b9bbdfc93d103c3f64337bb6dcc20 Mon Sep 17 00:00:00 2001 From: Greg Price Date: Tue, 29 Dec 2009 16:54:49 -0500 Subject: [PATCH 3/9] commit: --cleanup is a message option In the usage message for "git commit", the --cleanup option appeared at the end, as one of the "contents options": usage: git commit [options] [--] ... ... Commit message options ... Commit contents options ... --allow-empty ok to record an empty change --cleanup how to strip spaces and #comments from message This is confusing, in part because it makes it ambiguous whether --allow-empty, just above, refers to an empty diff or an empty message. Move --cleanup into the 'message options' group. Also add a pair of comments to prevent similar oversights in the future. Signed-off-by: Greg Price Signed-off-by: Junio C Hamano --- builtin-commit.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/builtin-commit.c b/builtin-commit.c index fde7b891d9d015..cd4eff4719ec22 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -86,8 +86,8 @@ static int opt_parse_m(const struct option *opt, const char *arg, int unset) static struct option builtin_commit_options[] = { OPT__QUIET(&quiet), OPT__VERBOSE(&verbose), - OPT_GROUP("Commit message options"), + OPT_GROUP("Commit message options"), OPT_STRING('F', "file", &logfile, "FILE", "read log from file"), OPT_STRING(0, "author", &force_author, "AUTHOR", "override author for commit"), OPT_CALLBACK('m', "message", &message, "MESSAGE", "specify commit message", opt_parse_m), @@ -96,6 +96,8 @@ static struct option builtin_commit_options[] = { OPT_BOOLEAN('s', "signoff", &signoff, "add Signed-off-by:"), OPT_STRING('t', "template", &template_file, "FILE", "use specified template file"), OPT_BOOLEAN('e', "edit", &edit_flag, "force edit of commit"), + OPT_STRING(0, "cleanup", &cleanup_arg, "default", "how to strip spaces and #comments from message"), + /* end commit message options */ OPT_GROUP("Commit contents options"), OPT_BOOLEAN('a', "all", &all, "commit all changed files"), @@ -106,7 +108,7 @@ static struct option builtin_commit_options[] = { OPT_BOOLEAN(0, "amend", &amend, "amend previous commit"), { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, "mode", "show untracked files, optional modes: all, normal, no. (Default: all)", PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, OPT_BOOLEAN(0, "allow-empty", &allow_empty, "ok to record an empty change"), - OPT_STRING(0, "cleanup", &cleanup_arg, "default", "how to strip spaces and #comments from message"), + /* end commit contents options */ OPT_END() }; From 70d7099916c9621e157c620f9cc7fc982f109c55 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Wed, 30 Dec 2009 04:02:53 -0500 Subject: [PATCH 4/9] textconv: stop leaking file descriptors We read the output from textconv helpers over a pipe, but we never actually closed our end of the pipe after using it. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/diff.c b/diff.c index 387d19fdedef65..69147b802f7320 100644 --- a/diff.c +++ b/diff.c @@ -3485,11 +3485,13 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec, if (start_command(&child) != 0 || strbuf_read(&buf, child.out, 0) < 0 || finish_command(&child) != 0) { + close(child.out); if (temp.name == temp.tmp_path) unlink(temp.name); error("error running textconv command '%s'", pgm); return NULL; } + close(child.out); if (temp.name == temp.tmp_path) unlink(temp.name); From 6e8f993a5a17f71edfd26a026bbc83cbbd3c0638 Mon Sep 17 00:00:00 2001 From: Matthieu Moy Date: Wed, 30 Dec 2009 15:45:31 +0100 Subject: [PATCH 5/9] branch: die explicitly why when calling "git branch [-a|-r] branchname". The -a and -r options used to be silently ignored in such a command. Signed-off-by: Matthieu Moy Signed-off-by: Junio C Hamano --- builtin-branch.c | 6 ++++-- t/t5403-post-checkout-hook.sh | 26 +++++++++++++------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/builtin-branch.c b/builtin-branch.c index 4b4abfd3639d2c..7dd51d1fed23da 100644 --- a/builtin-branch.c +++ b/builtin-branch.c @@ -582,10 +582,12 @@ int cmd_branch(int argc, const char **argv, const char *prefix) rename_branch(head, argv[0], rename > 1); else if (rename && (argc == 2)) rename_branch(argv[0], argv[1], rename > 1); - else if (argc <= 2) + else if (argc <= 2) { + if (kinds != REF_LOCAL_BRANCH) + die("-a and -r options to 'git branch' do not make sense with a branch name"); create_branch(head, argv[0], (argc == 2) ? argv[1] : head, force_create, reflog, track); - else + } else usage_with_options(builtin_branch_usage, options); return 0; diff --git a/t/t5403-post-checkout-hook.sh b/t/t5403-post-checkout-hook.sh index 9b2e1a94c5fb5a..a7bef9371fc190 100755 --- a/t/t5403-post-checkout-hook.sh +++ b/t/t5403-post-checkout-hook.sh @@ -7,19 +7,19 @@ test_description='Test the post-checkout hook.' . ./test-lib.sh test_expect_success setup ' - echo Data for commit0. >a && - echo Data for commit0. >b && - git update-index --add a && - git update-index --add b && - tree0=$(git write-tree) && - commit0=$(echo setup | git commit-tree $tree0) && - git update-ref refs/heads/master $commit0 && - git clone ./. clone1 && - git clone ./. clone2 && - GIT_DIR=clone2/.git git branch -a new2 && - echo Data for commit1. >clone2/b && - GIT_DIR=clone2/.git git add clone2/b && - GIT_DIR=clone2/.git git commit -m new2 + echo Data for commit0. >a && + echo Data for commit0. >b && + git update-index --add a && + git update-index --add b && + tree0=$(git write-tree) && + commit0=$(echo setup | git commit-tree $tree0) && + git update-ref refs/heads/master $commit0 && + git clone ./. clone1 && + git clone ./. clone2 && + GIT_DIR=clone2/.git git branch new2 && + echo Data for commit1. >clone2/b && + GIT_DIR=clone2/.git git add clone2/b && + GIT_DIR=clone2/.git git commit -m new2 ' for clone in 1 2; do From 64da3ae5c188b2b09bc1ed1eedca7e84c1aff940 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 6 Jan 2010 23:51:47 -0800 Subject: [PATCH 6/9] checkout -m: do not try to fall back to --merge from an unborn branch If switching from an unborn branch (= empty tree) to a valid commit failed without -m, it would fail with -m option as well. Signed-off-by: Junio C Hamano --- builtin-checkout.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/builtin-checkout.c b/builtin-checkout.c index c107fd643a452e..b76cd227762999 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -272,7 +272,7 @@ static int merge_working_tree(struct checkout_opts *opts, topts.initial_checkout = is_cache_unborn(); topts.update = 1; topts.merge = 1; - topts.gently = opts->merge; + topts.gently = opts->merge && old->commit; topts.verbose_update = !opts->quiet; topts.fn = twoway_merge; topts.dir = xcalloc(1, sizeof(*topts.dir)); @@ -294,7 +294,13 @@ static int merge_working_tree(struct checkout_opts *opts, struct tree *work; if (!opts->merge) return 1; - parse_commit(old->commit); + + /* + * Without old->commit, the below is the same as + * the two-tree unpack we already tried and failed. + */ + if (!old->commit) + return 1; /* Do more real merge */ From 75b7e16b6ea49d0a0da821373ae5ee3a0ee36f2e Mon Sep 17 00:00:00 2001 From: Andreas Gruenbacher Date: Fri, 8 Jan 2010 14:39:58 +0100 Subject: [PATCH 7/9] base85 debug code: Fix length byte calculation Signed-off-by: Andreas Gruenbacher Signed-off-by: Junio C Hamano --- base85.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base85.c b/base85.c index b88270f9084409..7b76542531b936 100644 --- a/base85.c +++ b/base85.c @@ -118,7 +118,7 @@ int main(int ac, char **av) int len = strlen(av[2]); encode_85(buf, av[2], len); if (len <= 26) len = len + 'A' - 1; - else len = len + 'a' - 26 + 1; + else len = len + 'a' - 26 - 1; printf("encoded: %c%s\n", len, buf); return 0; } From b0bec518aa4a90485c411cebc7260425271af949 Mon Sep 17 00:00:00 2001 From: Andreas Gruenbacher Date: Fri, 8 Jan 2010 17:22:18 +0100 Subject: [PATCH 8/9] base85: encode_85() does not use the decode table Signed-off-by: Andreas Gruenbacher Signed-off-by: Junio C Hamano --- base85.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/base85.c b/base85.c index 7b76542531b936..f2b9a24d5ec9f4 100644 --- a/base85.c +++ b/base85.c @@ -84,8 +84,6 @@ int decode_85(char *dst, const char *buffer, int len) void encode_85(char *buf, const unsigned char *data, int bytes) { - prep_base85(); - say("encode 85"); while (bytes) { unsigned acc = 0; From 0606c36a73449e76d8f6133253c1eff291ee8c97 Mon Sep 17 00:00:00 2001 From: Andreas Gruenbacher Date: Fri, 8 Jan 2010 14:40:00 +0100 Subject: [PATCH 9/9] base85: Make the code more obvious instead of explaining the non-obvious Here is another cleanup ... Signed-off-by: Andreas Gruenbacher Signed-off-by: Junio C Hamano --- base85.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/base85.c b/base85.c index f2b9a24d5ec9f4..24ddf60eb0a20f 100644 --- a/base85.c +++ b/base85.c @@ -57,14 +57,8 @@ int decode_85(char *dst, const char *buffer, int len) de = de85[ch]; if (--de < 0) return error("invalid base85 alphabet %c", ch); - /* - * Detect overflow. The largest - * 5-letter possible is "|NsC0" to - * encode 0xffffffff, and "|NsC" gives - * 0x03030303 at this point (i.e. - * 0xffffffff = 0x03030303 * 85). - */ - if (0x03030303 < acc || + /* Detect overflow. */ + if (0xffffffff / 85 < acc || 0xffffffff - de < (acc *= 85)) return error("invalid base85 sequence %.5s", buffer-5); acc += de;