Skip to content

Commit

Permalink
Merge branch 'np/maint-1.6.3-deepen'
Browse files Browse the repository at this point in the history
* np/maint-1.6.3-deepen:
  fix simple deepening of a repo

Conflicts:
	t/t5500-fetch-pack.sh
  • Loading branch information
Junio C Hamano committed Aug 29, 2009
2 parents 433233e + 8638682 commit 232d453
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
47 changes: 47 additions & 0 deletions t/t5500-fetch-pack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
16 changes: 15 additions & 1 deletion transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -1059,18 +1059,32 @@ 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;
ALLOC_GROW(heads, nr_heads + 1, nr_alloc);
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;
Expand Down

0 comments on commit 232d453

Please sign in to comment.