Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions 5 diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -7046,6 +7046,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
if (!diffopt->flags.no_index)
diffopt->skip_stat_unmatch++;
diff_free_filepair(p);
q->queue[i] = NULL;
}
}
free(q->queue);
Expand Down Expand Up @@ -7089,6 +7090,10 @@ void diff_queued_diff_prefetch(void *repository)

for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];

if (!p)
continue;

diff_add_if_missing(repo, &to_fetch, p->one);
diff_add_if_missing(repo, &to_fetch, p->two);
}
Expand Down
35 changes: 35 additions & 0 deletions 35 t/t4067-diff-partial-clone.sh
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,41 @@ test_expect_success 'diff with rename detection batches blobs' '
test_line_count = 1 done_lines
'

test_expect_success 'diff succeeds even if entries are removed from queue' '
test_when_finished "rm -rf server client trace" &&

test_create_repo server &&
for l in a c e g i p
do
echo $l >server/$l &&
git -C server add $l || return 1
done &&
git -C server commit -m x &&

for l in a e i
do
git -C server rm $l || return 1
done &&

for l in b d f i
do
echo $l$l >server/$l &&
git -C server add $l || return 1
done &&
git -C server commit -a -m x &&

test_config -C server uploadpack.allowfilter 1 &&
test_config -C server uploadpack.allowanysha1inwant 1 &&
git clone --filter=blob:limit=0 "file://$(pwd)/server" client &&

for file in $(ls client)
do
cat client/$file >$file &&
mv $file client/$file || return 1
done &&
git -C client diff --name-only --relative HEAD^
'

test_expect_success 'diff does not fetch anything if inexact rename detection is not needed' '
test_when_finished "rm -rf server client trace" &&

Expand Down
Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.