Skip to content

Commit

Permalink
patch-id: ignore newline at end of file in diff_flush_patch_id()
Browse files Browse the repository at this point in the history
Whitespace is ignored when calculating patch IDs.  This is done by
removing all whitespace from diff lines before hashing them, including
a newline at the end of a file.  If that newline is missing, however,
diff reports that fact in a separate line containing "\ No newline at
end of file\n", and this marker is hashed like a context line.

This goes against our goal of making patch IDs independent of
whitespace.  Use the same heuristic that 2485eab (git-patch-id: do
not trip over "no newline" markers, 2011-02-17) added to git patch-id
instead and skip diff lines that start with a backslash and a space
and are longer than twelve characters.

Reported-by: Tilman Vogel <[email protected]>
Initial-test-by: Tilman Vogel <[email protected]>
Signed-off-by: René Scharfe <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
rscharfe authored and gitster committed Aug 18, 2020
1 parent 47ae905 commit 82a6201
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
2 changes: 2 additions & 0 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -6044,6 +6044,8 @@ static void patch_id_consume(void *priv, char *line, unsigned long len)
struct patch_id_t *data = priv;
int new_len;

if (len > 12 && starts_with(line, "\\ "))
return;
new_len = remove_space(line, len);

the_hash_algo->update_fn(data->ctx, line, new_len);
Expand Down
23 changes: 23 additions & 0 deletions t/t3500-cherry.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,27 @@ test_expect_success \
expr "$(echo $(git cherry master my-topic-branch) )" : "+ [^ ]* - .*"
'

test_expect_success 'cherry ignores whitespace' '
git switch --orphan=upstream-with-space &&
test_commit initial file &&
>expect &&
git switch --create=feature-without-space &&
# A spaceless file on the feature branch. Expect a match upstream.
printf space >file &&
git add file &&
git commit -m"file without space" &&
git log --format="- %H" -1 >>expect &&
# A further change. Should not match upstream.
test_commit change file &&
git log --format="+ %H" -1 >>expect &&
git switch upstream-with-space &&
# Same as the spaceless file, just with spaces and on upstream.
test_commit "file with space" file "s p a c e" file-with-space &&
git cherry upstream-with-space feature-without-space >actual &&
test_cmp expect actual
'

test_done

0 comments on commit 82a6201

Please sign in to comment.