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

Re: msysgit: merge, stat

From
Steffen Prohaska <prohaska@zib.de>
Date
Aug 14, 2007, 21:03 UTC
Message-ID
<557AE5F5-E937-4CA8-9280-C33CB640B458@zib.de>
In-Reply-To
<Pine.LNX.4.64.0708141013540.25989@racer.site>
On Aug 14, 2007, at 11:22 AM, Johannes Schindelin wrote:
Show 40 quoted lines
> Hi,
>
> On Mon, 13 Aug 2007, Junio C Hamano wrote:
>
>> Steffen Prohaska <prohaska@zib.de> writes:
>>
>>>> Wait a minute.
>>>>
>>>> What does the above "After a 'git merge'" exactly mean?  After a
>>>> successful automerge that made a commit, of stopped in the
>>>> middle because of conflicts?  I am getting an impression that
>>>> Steffen is talking about the former, but if that is the case,
>>>> somebody is seriously confused.
>>>
>>> Yes. I'm talking about a successful merge that made a commit.
>>>
>>>> When "merge-recursive" with a 3-way file level merge in core
>>>> writes the result out to the work tree, it uses a cache entry
>>>> that is stat clean (see merge-recursive.c::make_cache_entry(),
>>>> refresh option is passed and it calls refresh_cache_entry() to
>>>> obtain the cached stat bits).  The traditional "read-tree -m -u"
>>>> followed by merge-one-file of course runs "git update-index"
>>>> inside merge-one-file script and cleanly merged paths should be
>>>> stat clean after a merge.
>>>
>>> Well, they are not with msysgit. At least not all, or not always.
>>> I'm not completely sure about the details, but the problem
>>> happens frequently, near to always.
>>
>> Johannes, is this something you want me to look at?  I do not
>> know how much read-cache.c and other low level routines of
>> Windows version deviated from the mainline.
>
> I am reasonably sure that we did not deviate that much in lstat().  
> And in
> stat() we do not deviate at all; this is provided by mscrt.dll.
>
> Steffen, could you come up with a test script showing the behaviour  
> you
> described?  Then we could test where the problem comes from.
Not really.
If I run

--- snip --- git init && echo 1 > a1 && git add a1 && git commit -m 1 a1 &&

git checkout -b A master && echo A > a1 && git commit -m A a1 &&

git checkout -b B master && echo B > b1 && git add b1 && git commit -m B b1 &&

git merge A && git diff --- snip ---

it outputs
diff --git a/a1 b/a1

I planned to pack this into a test script. I started
with the following, which is not yet a full test script.

--- snip ---
#!/bin/sh

test_description='Test is work tree is clean after merge'
. ./test-lib.sh

test_expect_success 'sucessful merge should yield index in sync with  
work tree.' '
echo 1 > a1 &&
git add a1 &&
git commit -m 1 a1 &&

git checkout -b A master &&
echo A > a1 &&
git commit -m A a1 &&

git checkout -b B master &&
echo B > b1 &&
git add b1 &&
git commit -m B b1 &&

git merge A &&
git diff'

test_done
--- snip ---

But if I run the testscript with '-v', git diff doesn't
report anything. I can't tell you why.

	Steffen
Previous: Johannes Schindelin
Message 8 of 8 in “msysgit: merge, stat”
  1. Steffen ProhaskaAug 12, 2007
  2. Johannes SchindelinAug 13, 2007
  3. Steffen ProhaskaAug 13, 2007
  4. Junio C HamanoAug 13, 2007
  5. Steffen ProhaskaAug 13, 2007
  6. Junio C HamanoAug 13, 2007
  7. Johannes SchindelinAug 14, 2007
  8. Steffen ProhaskaAug 14, 2007

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.