From: David Turner <dturner@twopensource.com>
To: Junio C Hamano <gitster@pobox.com>,
git mailing list <git@vger.kernel.org>
Subject: Re: [PATCH] merge-recursive.c: Fix case-changing merge bug
Date: Tue, 06 May 2014 10:36:14 -0700 [thread overview]
Message-ID: <1399397774.11843.46.camel@stross> (raw)
In-Reply-To: <xmqqwqdyg7jt.fsf@gitster.dls.corp.google.com>
On Tue, 2014-05-06 at 10:07 -0700, Junio C Hamano wrote:
> David Turner <dturner@twopensource.com> writes:
>
> > On a case-insensitive filesystem, when merging, a file would be
> > wrongly deleted from the working tree if an incoming commit had
> > renamed it changing only its case. When merging a rename, the file
> > with the old name would be deleted -- but since the filesystem
> > considers the old name to be the same as the new name, the new
> > file would in fact be deleted.
> >
> > We avoid this by not deleting files that have a case-clone in the
> > index at stage 0.
> >
> > Signed-off-by: David Turner <dturner@twitter.com>
> > ---
> > merge-recursive.c | 6 ++++++
> > t/t7063-merge-ignorecase.sh | 32 ++++++++++++++++++++++++++++++++
> > 2 files changed, 38 insertions(+)
> > create mode 100755 t/t7063-merge-ignorecase.sh
> >
> > diff --git a/merge-recursive.c b/merge-recursive.c
> > index 4177092..cab16fa 100644
> > --- a/merge-recursive.c
> > +++ b/merge-recursive.c
> > @@ -589,6 +589,12 @@ static int remove_file(struct merge_options *o, int clean,
> > return -1;
> > }
> > if (update_working_directory) {
> > + if (ignore_case) {
> > + struct cache_entry *ce;
> > + ce = cache_file_exists(path, strlen(path), ignore_case);
> > + if (ce && ce_stage(ce) == 0)
> > + return 0;
> > + }
> > if (remove_path(path))
> > return -1;
> > }
>
> Thanks.
>
> I wonder what happens if you did the same merge using the resolve
> strategy, though. If you see a similar issue, and the true reason
> of the breakage turns out to be because three-way merge performed by
> unpack_trees() (with opts.update set to 1) considers that these
> paths that only differ in case in "our" tree, in the index and in
> the working tree are different paths (I am not saying that is the
> case, but that was one of my first hunches after seeing the initial
> report) then it may suggest that the above might not be the best
> change to fix the issue.
I changed the test to -s resolve, and it changed from failing to
passing. So while I still don't know whether this is the right change,
it's at least not wrong for that reason.
> > diff --git a/t/t7063-merge-ignorecase.sh b/t/t7063-merge-ignorecase.sh
> > new file mode 100755
> > index 0000000..6d4959f
> > --- /dev/null
> > +++ b/t/t7063-merge-ignorecase.sh
>
> Hmmm, did you really have to add a file dedicated for this single
> test?
Would you prefer that I add it to t6022-merge-rename.sh? Or I could
add it to t7062-wtstatus-ignorecase.sh and rename that file to
t7062-ignorecase.sh.
next prev parent reply other threads:[~2014-05-06 17:36 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-29 19:02 Bug: Case-insensitive filesystems can cause merge and checkout problems David Turner
2014-05-02 0:21 ` [PATCH] merge-recursive.c: Fix case-changing merge bug David Turner
2014-05-06 17:07 ` Junio C Hamano
2014-05-06 17:36 ` David Turner [this message]
2014-05-06 19:46 ` Junio C Hamano
2014-05-06 22:59 ` [PATCH 1/2] merge-recursive.c: Fix case-changing merge dturner
2014-05-06 22:59 ` [PATCH 2/2] ignorecase: Fix git mv on insensitive filesystems dturner
2014-05-07 6:17 ` Johannes Sixt
2014-05-07 16:42 ` David Turner
2014-05-07 17:46 ` Junio C Hamano
2014-05-07 18:01 ` David Turner
2014-05-08 6:37 ` Johannes Sixt
2014-05-08 8:55 ` Torsten Bögershausen
2014-05-08 17:23 ` [PATCH 0/2] " dturner
2014-05-08 17:23 ` [PATCH 1/2] merge-recursive.c: Fix case-changing merge dturner
2014-05-08 19:45 ` Junio C Hamano
2014-05-08 17:23 ` [PATCH 2/2] ignorecase: Fix git mv on insensitive filesystems dturner
2014-05-08 19:54 ` Junio C Hamano
2014-05-08 20:40 ` David Turner
2014-05-08 20:55 ` Junio C Hamano
2014-05-08 1:22 ` brian m. carlson
2014-05-07 18:01 ` [PATCH 1/2] merge-recursive.c: Fix case-changing merge Junio C Hamano
2014-05-07 18:13 ` Jonathan Nieder
2014-05-07 20:53 ` Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1399397774.11843.46.camel@stross \
--to=dturner@twopensource.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.