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

Re: [PATCHv2 0/3] Fix unnecessary (mtime) updates of files during merge

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 2, 2011, 23:22 UTC
Message-ID
<7vaahdaz1j.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1298941732-19763-1-git-send-email-newren@gmail.com>
Elijah Newren <newren@gmail.com> writes:
Show 6 quoted lines
> We could fix this second testcase by recording stat information for
> files removed by make_room_for_directories_of_df_conflicts(), and
> then, if those files are reinstated at the end of conflict resolution
> (i.e. the directory of the D/F conflict went away during the merge),
> then call utime() to reset the modification times on those files back
> to what they originally were.
Which is a big Yuck.  I agree that we don't want to go there.

The real cause of the problem is that the code removes the files that could potentially involved in conflict _way_ too early, and unfortunately this is coming from the way merge-recursive tracks d/f conflicts, which is to grab set of path that can potentially appear as directories by throwing all directories into a single string list from both sides of the merge (same for non directory paths using another single string list) upfront, and after that point, it becomes very hard to tell if the potential directory is on your (i.e. stage #2) side or on their side, and to make things worse, it doesn't wait writing partial results out to the working tree before it knows the result of the merge to say something intelligent like "all these files under the directory will go away and we can safely keep the file there". Your earlier series, e.g. 2ff739f (merge-recursive: New function to assist resolving renames in-core only, 2010-09-20), was a step in the right direction, but we are not there yet while functions like make_room_for_path() and make_room_for_directories_of_df_conflicts() are used.

So I think it would need a lot major restructuring of the merge-recursive, especially its d/f conflict logic, to fix the second one correctly.

Thanks.
Previous: Elijah Newren
Message 14 of 14 in “[PATCHv2 0/3] Fix unnecessary (mtime) updates of files during merge”
  1. Elijah NewrenMar 1, 2011
  2. 1/3 t6022: New test checking for unnecessary updates of renamed+modified filesElijah Newren, Mar 1, 2011
  3. Johannes SixtMar 1, 2011
  4. Jeff KingMar 1, 2011
  5. Elijah NewrenMar 2, 2011
  6. 2/3 t6022: New test checking for unnecessary updates of files in D/F conflictsElijah Newren, Mar 1, 2011
  7. 3/3 merge-recursive: When we detect we can skip an update, actually skip itElijah Newren, Mar 1, 2011
  8. Junio C HamanoMar 2, 2011
  9. Elijah NewrenMar 2, 2011
  10. Junio C HamanoMar 2, 2011
  11. Jeff KingMar 1, 2011
  12. Jeff KingMar 1, 2011
  13. Elijah NewrenMar 2, 2011
  14. Junio C HamanoMar 2, 2011

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.