git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 1/4] t6436: tests how merge behave when there is untracked file with the same content

From
Matthieu Moy <matthieu.moy@univ-lyon1.fr>
Date
Jun 4, 2022, 09:44 UTC
Message-ID
<2c6ee145-5116-25db-9fbf-bcffe67a9360@univ-lyon1.fr>
In-Reply-To
<dfea1d98c15047428b1a11adbc002eef@SAMBXP02.univ-lyon1.fr>
On 5/27/22 21:55, Jonathan Bressat wrote:
> add test to show explicitly that merge doesn't overwrite untracked files
> or unstaged even when they have the same content than files int the
> merged commit
Nit: capital at the beginning of the sentence, period at the end.
"untracked files or unstaged" -> "untracked or unstaged files"
Show 6 quoted lines
> +test_expect_success 'create branch A' '
> +	git reset --hard c0 &&
> +	git checkout -b A
> +'
> +
> +test_expect_success 'fastforward will not overwrite untracked file with the same content' '
Git usually spells fast-forward with a hyphen, not fastforward.
Show 6 quoted lines
> +	test_when_finished "git branch -D B && git reset --hard c0 && git clean --force" &&
> +	git checkout -b B &&
> +	test_commit --no-tag "tracked" file "content" &&
> +	git checkout A &&
> +	echo content >file &&
> +	test_must_fail git merge B

Other tests in the same file test a bit more: the file mustn't be touched. It's a very important thing with Git: 99% of the times, when an operation fails, it fails before starting any change on-disk, as opposed to "I started messing up with your repo, I can't go further, go fix the mess yourself" ;-).

The way it's done is by creating a file with the content, using "cp" instead of "echo >" and "test_cmp" to check the content.

Other tests also check the absence of .git/MERGE_HEAD, which seems to be a sensible thing to do.

Show 19 quoted lines
> +test_expect_success 'will not overwrite untracked file with the same content' '
> +	test_when_finished "git branch -D B && git reset --hard c0 && git clean --force" &&
> +	git checkout -b B &&
> +	test_commit --no-tag "tracked" file "content" fileB "content" &&
> +	git checkout A &&
> +	test_commit --no-tag "exA" fileA "content" &&
> +	echo content >file &&
> +	test_must_fail git merge B
> +'
> +
> +test_expect_success 'will not overwrite unstaged file with the same content' '
> +	test_when_finished "git branch -D B && git reset --hard c0 && git clean --force" &&
> +	test_commit --no-tag "unstaged" file "other" &&
> +	git checkout -b B &&
> +	test_commit --no-tag "staged" file "content" &&
> +	git checkout A &&
> +	echo content >file &&
> +	test_must_fail git merge B
> +'
As discussed IRL, I think two more cases should be tested:
- index matches commit being merged, but the worktree file doesn't
- worktree file doesn't match content, but index does

in both cases, I'd expect the old and the new behavior to abort the merge. Perhaps there are use-cases where one would expect a successful merge silently, but for rare corner-cases, it's safe to ask the user to fix the situation manually and too much magic can only confuse the user.

-- 
Matthieu Moy
https://matthieu-moy.fr/
Previous: Guillaume CogoniNext: Matthieu Moy
Message 25 of 27 in “[WIP]: make merge nicer to the user”
  1. Guillaume CogoniMar 27, 2022
  2. 0/1 Be nicer to the user on tracked/untracked merge conflictsJonathan, Apr 12, 2022
  3. 1/1 Merge with untracked file that are the same without failure and testJonathan, Apr 12, 2022
  4. Ævar Arnfjörð BjarmasonApr 12, 2022
  5. Junio C HamanoApr 13, 2022
  6. 0/2 Be nicer to the user on tracked/untracked merge conflictsJonathan, Apr 25, 2022
  7. 1/2 t7615: test how merge behave when there is untracked fileJonathan, Apr 25, 2022
  8. 2/2 merge with untracked file that are the same without failureJonathan, Apr 25, 2022
  9. Junio C HamanoApr 25, 2022
  10. Guillaume CogoniApr 25, 2022
  11. Junio C HamanoApr 25, 2022
  12. Ævar Arnfjörð BjarmasonApr 12, 2022
  13. Jonathan BressatApr 14, 2022
  14. Matthieu MoyApr 26, 2022
  15. Junio C HamanoApr 26, 2022
  16. Jonathan BressatApr 28, 2022
  17. 0/4 Be nicer to the user on tracked/untracked merge conflictsJonathan Bressat, May 27, 2022
  18. 1/4 t6436: tests how merge behave when there is untracked file with the same contentJonathan Bressat, May 27, 2022
  19. 2/4 merge with untracked file that are the same without failureJonathan Bressat, May 27, 2022
  20. 3/4 add configuration variable corresponding to --overwrite-same-contentJonathan Bressat, May 27, 2022
  21. 4/4 error message now advice to use the new optionJonathan Bressat, May 27, 2022
  22. Matthieu MoyApr 26, 2022
  23. Matthieu MoyJun 4, 2022
  24. Guillaume CogoniJun 10, 2022
  25. Matthieu MoyJun 4, 2022
  26. Matthieu MoyJun 4, 2022
  27. Matthieu MoyJun 4, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.