From: Junio C Hamano <gitster@pobox.com>
To: Christian Couder <chriscool@tuxfamily.org>
Cc: git@vger.kernel.org, krh@redhat.com
Subject: Re: Possible d/f conflict bug or regression
Date: Sun, 30 Mar 2008 16:46:29 -0700 [thread overview]
Message-ID: <7v4panyduy.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 200803290813.08419.chriscool@tuxfamily.org
Christian Couder <chriscool@tuxfamily.org> writes:
> mkdir testdir &&
> cd testdir &&
> touch foo &&
> git init &&
> git add . &&
> git commit -m 'Initial commit.' &&
> rm foo &&
> mkdir foo &&
> git commit -a -m 'Test.'
>
> I get:
>
> Initialized empty Git repository in .git/
> Created initial commit 3f945ca: Initial commit.
> 0 files changed, 0 insertions(+), 0 deletions(-)
> create mode 100644 foo
> fatal: unable to index file foo
I haven't had time to fully clean-up the patch series, but I have a fix
for this (and a bit broader set of cases). "git add -u" shares the same
issue as the "git commit -a" at the last step in your sequence.
"commit -a" and "add -u" are about "check the index and work tree to
see if anything that is in the index is changed in the work tree, and
update the entry (either remove or add)". When we are looking at an
existing index entry "foo", possible cases include:
- it has not been changed (=> do nothing);
- it is not there anymore (=> do "git update-index --add --remove foo")
- its contents or executableness changed (ditto);
- its type changed (e.g. reg-to-symlink) (ditto);
If you did "rm foo; mkdir foo", then that is "it is not there anymore"
case.
If you did "rm foo; mkdir foo; (cd foo && git init)", and worked in this
new foo/ repository to cause its HEAD to point at a commit, then that is
"its type changed to a gitlink" case (iow, you added a submodule).
The above two cases are not handled properly; the breakage is in
diff-files but non-cached diff-index shares the same issue. The root
cause is not Kristian's "rewrite commit in C", but is much more older
"gitlink to support submodules" series, that started at f35a6d3 (Teach
core object handling functions about gitlinks, 2007-04-09).
Will send the patches out tonight but I have to tend some other chores
first.
next prev parent reply other threads:[~2008-03-30 23:47 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-29 7:13 Possible d/f conflict bug or regression Christian Couder
2008-03-29 8:01 ` Christian Couder
2008-03-30 1:29 ` Bryan Donlan
2008-03-30 4:44 ` Christian Couder
2008-03-30 4:51 ` Bryan Donlan
2008-03-30 23:46 ` Junio C Hamano [this message]
2008-03-31 0:28 ` [PATCH 1/3] Add corner case tests for diff-index and diff-files Junio C Hamano
2008-03-31 0:29 ` [PATCH 2/3] diff-index: careful when inspecting work tree items Junio C Hamano
2008-03-31 3:12 ` Junio C Hamano
2008-03-31 3:47 ` Christian Couder
2008-03-31 0:30 ` [PATCH 3/3] diff-files: " 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=7v4panyduy.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=krh@redhat.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 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 NNTP newsgroup(s).