git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Elijah Newren <newren@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, spearce@spearce.org, agladysh@gmail.com
Subject: Re: [PATCHv3 3/6] merge-recursive: Fix D/F conflicts
Date: Wed, 7 Jul 2010 22:34:50 -0600	[thread overview]
Message-ID: <AANLkTim1thwRF5boWeuhRsKpnY3DHAHq1ixIB-5GBIYA@mail.gmail.com> (raw)
In-Reply-To: <7v630rt1h3.fsf@alter.siamese.dyndns.org>

On Wed, Jul 7, 2010 at 3:40 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Style aside, what happens when we cannot cleanly resolve D/F conflicts,
> i.e. when some untracked/modified paths still remain after the earlier
> removal?  We would signal conflict but at that point what happens to the
> files in the working tree that are involved in this new codepath?  They
> are already gone, I presume, and they at least match the original index
> entries, so not much is lost, but what would the recovery procedure out of
> the resulting mess?  "reset --hard"?

That's a really good point, and yes all those files are already gone.
However, isn't this already a problem with current git?  git does not
abort when it detects the D/F conflict, it simply creates the file
with an alternate name such as directory/file~branch, and then
continues processing all the other entries -- resulting in all those
same files under the directory being deleted.  So I don't think this
patch creates any new problem.

If you want to resolve such a merge by keeping the directory and the
files under it, it is possible, though not at all obvious or
straightforward:
$ git rm --cached file-that-used-to-be-dir
$ git status file-that-used-to-be-dir | grep deleted | sed -e
s/.*deleted:// | xargs git checkout $(git merge-base HEAD $(cat
.git/MERGE_HEAD)) --

I think we could fix this up, now that we have the D/F conflict
resolution being handled last: When process_df_entry() detects that
there's a directory in the way of the file that needs to be created
(and instead warns and creates it with an alternate name), it could
also restore those deleted entries at that time.  It seems like a bit
of unnecessary work to delete and then restore files, but I'm not sure
how to get around it given the basic strategy of having unpack_trees
do what it can and then trying to fix it up separately.


Elijah

  reply	other threads:[~2010-07-08  4:35 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-07  5:20 [PATCHv3 0/6] D/F conflict fixes newren
2010-07-07  5:20 ` [PATCHv3 1/6] Add additional testcases for D/F conflicts newren
2010-07-07 21:25   ` Junio C Hamano
2010-07-08  3:07     ` Elijah Newren
2010-07-08 16:03       ` Junio C Hamano
2010-07-07  5:20 ` [PATCHv3 2/6] Add a rename + D/F conflict testcase newren
2010-07-07 21:26   ` Junio C Hamano
2010-07-08  5:04     ` Elijah Newren
2010-07-07  5:20 ` [PATCHv3 3/6] merge-recursive: Fix D/F conflicts newren
2010-07-07 21:40   ` Junio C Hamano
2010-07-08  4:34     ` Elijah Newren [this message]
2010-07-07  5:20 ` [PATCHv3 4/6] merge_recursive: Fix renames across paths below " newren
2010-07-07  5:20 ` [PATCHv3 5/6] fast-export: Fix output order of D/F changes newren
2010-07-07 21:40   ` Junio C Hamano
2010-07-08  4:36     ` Elijah Newren
2010-07-08  6:04       ` Junio C Hamano
2010-07-07  5:20 ` [PATCHv3 6/6] fast-import: Improve robustness when D->F changes provided in wrong order newren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AANLkTim1thwRF5boWeuhRsKpnY3DHAHq1ixIB-5GBIYA@mail.gmail.com \
    --to=newren@gmail.com \
    --cc=agladysh@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).