From 582c7393a47894ea299a82c2ae91fec3101e7559 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 26 Jun 2007 23:19:41 +0200 Subject: [PATCH 1/5] Ignore submodule commits when fetching over dumb protocols Without this patch, the code would look for the submodule commits in the superproject and (needlessly) fail when it couldn't find them. Signed-off-by: Sven Verdoolaege Acked-by: Linus Torvalds Signed-off-by: Junio C Hamano --- fetch.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fetch.c b/fetch.c index 8e29d313f8..6f1f420be2 100644 --- a/fetch.c +++ b/fetch.c @@ -46,6 +46,9 @@ static int process_tree(struct tree *tree) while (tree_entry(&desc, &entry)) { struct object *obj = NULL; + /* submodule commits are not stored in the superproject */ + if (S_ISDIRLNK(entry.mode)) + continue; if (S_ISDIR(entry.mode)) { struct tree *tree = lookup_tree(entry.sha1); if (tree) From 1164f1e48d7c8ed613e8a371ecfce27220606e09 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Tue, 26 Jun 2007 14:34:02 -0700 Subject: [PATCH 2/5] Fix zero-object version-2 packs A pack-file can get created without any objects in it (to transfer "no data" - which can happen if you use a reference git repo, for example, or just otherwise just end up transferring only branch head information and already have all the objects themselves). And while we probably should never create an index for such a pack, if we do (and we do), the index file size sanity checking was incorrect. This fixes it. Reported-and-tested-by: Jocke Tjernlund Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- sha1_file.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sha1_file.c b/sha1_file.c index c2f807f4c2..b9d07de156 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -509,7 +509,10 @@ static int check_packed_git_idx(const char *path, struct packed_git *p) * for offsets larger than 2^31. */ unsigned long min_size = 8 + 4*256 + nr*(20 + 4 + 4) + 20 + 20; - if (idx_size < min_size || idx_size > min_size + (nr - 1)*8) { + unsigned long max_size = min_size; + if (nr) + max_size += (nr - 1)*8; + if (idx_size < min_size || idx_size > max_size) { munmap(idx_map, idx_size); return error("wrong index file size in %s", path); } From e3ae6bb9aaf030251f1d13c4de3aa220cf282460 Mon Sep 17 00:00:00 2001 From: Sam Vilain Date: Wed, 27 Jun 2007 11:44:22 +1200 Subject: [PATCH 3/5] cleanup merge-base test script Add a picture, and keep the setup and the tests together. Signed-off-by: Sam Vilain Signed-off-by: Junio C Hamano --- t/t6010-merge-base.sh | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh index b15920b852..22e0893056 100755 --- a/t/t6010-merge-base.sh +++ b/t/t6010-merge-base.sh @@ -34,6 +34,12 @@ doit() { echo $commit } +# E---D---C---B---A +# \'-_ \ \ +# \ `---------G \ +# \ \ +# F----------------H + # Setup... E=$(doit 5 E) D=$(doit 4 D $E) @@ -44,6 +50,18 @@ A=$(doit 1 A $B) G=$(doit 7 G $B $E) H=$(doit 8 H $A $F) +test_expect_success 'compute merge-base (single)' \ + 'MB=$(git-merge-base G H) && + expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' + +test_expect_success 'compute merge-base (all)' \ + 'MB=$(git-merge-base --all G H) && + expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' + +test_expect_success 'compute merge-base with show-branch' \ + 'MB=$(git-show-branch --merge-base G H) && + expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' + # Setup for second test to demonstrate that relying on timestamps in a # distributed SCM to provide a _consistent_ partial ordering of commits # leads to insanity. @@ -81,18 +99,6 @@ R2=$(doit 3 R2 $R1) PL=$(doit 4 PL $L2 $C2) PR=$(doit 4 PR $C2 $R2) -test_expect_success 'compute merge-base (single)' \ - 'MB=$(git-merge-base G H) && - expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' - -test_expect_success 'compute merge-base (all)' \ - 'MB=$(git-merge-base --all G H) && - expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' - -test_expect_success 'compute merge-base with show-branch' \ - 'MB=$(git-show-branch --merge-base G H) && - expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' - test_expect_success 'compute merge-base (single)' \ 'MB=$(git-merge-base PL PR) && expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/C2"' From e373bb73889e15452b622df67465b77803876aa6 Mon Sep 17 00:00:00 2001 From: Frank Lichtenheld Date: Mon, 25 Jun 2007 16:03:53 +0200 Subject: [PATCH 4/5] config: Complete documentation of --get-regexp The asciidoc documentation of the --get-regexp option was incomplete. Add some missing pieces: - List the option in SYNOPSIS - Mention that key names are printed Signed-off-by: Frank Lichtenheld Signed-off-by: Junio C Hamano --- Documentation/git-config.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 056b14724c..387d7bc841 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -14,6 +14,7 @@ SYNOPSIS 'git-config' [--system | --global] --replace-all name [value [value_regex]] 'git-config' [--system | --global] [type] --get name [value_regex] 'git-config' [--system | --global] [type] --get-all name [value_regex] +'git-config' [--system | --global] [type] --get-regexp name_regex [value_regex] 'git-config' [--system | --global] --unset name [value_regex] 'git-config' [--system | --global] --unset-all name [value_regex] 'git-config' [--system | --global] --rename-section old_name new_name @@ -73,6 +74,7 @@ OPTIONS --get-regexp:: Like --get-all, but interprets the name as a regular expression. + Also outputs the key names. --global:: For writing options: write to global ~/.gitconfig file rather than From b69ba460bb0710b2af8a20b4b0d62233f29401ec Mon Sep 17 00:00:00 2001 From: Frank Lichtenheld Date: Mon, 25 Jun 2007 16:03:54 +0200 Subject: [PATCH 5/5] config: Change output of --get-regexp for valueless keys Print no space after the name of a key without value. Otherwise keys without values are printed exactly the same as keys with empty values. Signed-off-by: Frank Lichtenheld Signed-off-by: Junio C Hamano --- builtin-config.c | 8 ++++++-- t/t1300-repo-config.sh | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/builtin-config.c b/builtin-config.c index b2515f7e65..dbc2339d0f 100644 --- a/builtin-config.c +++ b/builtin-config.c @@ -38,8 +38,12 @@ static int show_config(const char* key_, const char* value_) regexec(regexp, (value_?value_:""), 0, NULL, 0))) return 0; - if (show_keys) - printf("%s ", key_); + if (show_keys) { + if (value_) + printf("%s ", key_); + else + printf("%s", key_); + } if (seen && !do_all) dup_error = 1; if (type == T_INT) diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 3f3fd2d7f7..f1a78b19ac 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -283,6 +283,12 @@ EOF test_expect_success 'get variable with no value' \ 'git-config --get novalue.variable ^$' +echo novalue.variable > expect + +test_expect_success 'get-regexp variable with no value' \ + 'git-config --get-regexp novalue > output && + cmp output expect' + git-config > output 2>&1 test_expect_success 'no arguments, but no crash' \