diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-08-28 19:38:56 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-08-28 19:38:56 -0700 |
commit | 232d4537667e32230c855777444abbe732536ed9 (patch) | |
tree | 33ede70043d40f186a37ce38fcb610abf89b2b03 | |
parent | 433233e0b60e55e1afcded413e78c85fde4db722 (diff) | |
parent | 86386829d425a3d3ae6ce713c58328607e50e523 (diff) | |
download | git-232d4537667e32230c855777444abbe732536ed9.tar.gz git-232d4537667e32230c855777444abbe732536ed9.tar.xz |
Merge branch 'np/maint-1.6.3-deepen'
* np/maint-1.6.3-deepen:
fix simple deepening of a repo
Conflicts:
t/t5500-fetch-pack.sh
-rwxr-xr-x | t/t5500-fetch-pack.sh | 47 | ||||
-rw-r--r-- | transport.c | 16 |
2 files changed, 62 insertions, 1 deletions
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index a8c2ca2a7..18376d660 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -139,6 +139,36 @@ test_expect_success 'fsck in shallow repo' ' ) ' +test_expect_success 'simple fetch in shallow repo' ' + ( + cd shallow && + git fetch + ) +' + +test_expect_success 'no changes expected' ' + ( + cd shallow && + git count-objects -v + ) > count.shallow.2 && + cmp count.shallow count.shallow.2 +' + +test_expect_success 'fetch same depth in shallow repo' ' + ( + cd shallow && + git fetch --depth=2 + ) +' + +test_expect_success 'no changes expected' ' + ( + cd shallow && + git count-objects -v + ) > count.shallow.3 && + cmp count.shallow count.shallow.3 +' + test_expect_success 'add two more' ' add B66 $B65 && add B67 $B66 @@ -201,4 +231,21 @@ test_expect_success 'pull in shallow repo with missing merge base' ' ) ' +test_expect_success 'additional simple shallow deepenings' ' + ( + cd shallow && + git fetch --depth=8 && + git fetch --depth=10 && + git fetch --depth=11 + ) +' + +test_expect_success 'clone shallow object count' ' + ( + cd shallow && + git count-objects -v + ) > count.shallow && + grep "^count: 52" count.shallow +' + test_done diff --git a/transport.c b/transport.c index faee154c3..f7e1663d1 100644 --- a/transport.c +++ b/transport.c @@ -1059,11 +1059,12 @@ const struct ref *transport_get_remote_refs(struct transport *transport) int transport_fetch_refs(struct transport *transport, const struct ref *refs) { int rc; - int nr_heads = 0, nr_alloc = 0; + int nr_heads = 0, nr_alloc = 0, nr_refs = 0; const struct ref **heads = NULL; const struct ref *rm; for (rm = refs; rm; rm = rm->next) { + nr_refs++; if (rm->peer_ref && !hashcmp(rm->peer_ref->old_sha1, rm->old_sha1)) continue; @@ -1071,6 +1072,19 @@ int transport_fetch_refs(struct transport *transport, const struct ref *refs) heads[nr_heads++] = rm; } + if (!nr_heads) { + /* + * When deepening of a shallow repository is requested, + * then local and remote refs are likely to still be equal. + * Just feed them all to the fetch method in that case. + * This condition shouldn't be met in a non-deepening fetch + * (see builtin-fetch.c:quickfetch()). + */ + heads = xmalloc(nr_refs * sizeof(*heads)); + for (rm = refs; rm; rm = rm->next) + heads[nr_heads++] = rm; + } + rc = transport->fetch(transport, nr_heads, heads); free(heads); return rc; |