* msysgit: merge, stat @ 2007-08-12 21:00 Steffen Prohaska 2007-08-13 16:45 ` Johannes Schindelin 0 siblings, 1 reply; 8+ messages in thread From: Steffen Prohaska @ 2007-08-12 21:00 UTC (permalink / raw) To: Git Mailing List After a 'git merge' in msysgit some stat information of the index doesn't match the working tree. Thus 'git diff' looks at files, which it shouldn't look at. I need to do a 'git update-index --refresh' before everything's in sync. Is this a know issue? Do other experience the same? You should basically be able to reproduce the behaviour by any merge (maybe non-fast-forward, I'm not sure). Steffen ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-12 21:00 msysgit: merge, stat Steffen Prohaska @ 2007-08-13 16:45 ` Johannes Schindelin 2007-08-13 17:41 ` Steffen Prohaska 2007-08-13 19:54 ` Junio C Hamano 0 siblings, 2 replies; 8+ messages in thread From: Johannes Schindelin @ 2007-08-13 16:45 UTC (permalink / raw) To: Steffen Prohaska; +Cc: Git Mailing List Hi, On Sun, 12 Aug 2007, Steffen Prohaska wrote: > After a 'git merge' in msysgit some stat information of the index > doesn't match the working tree. Thus 'git diff' looks at files, > which it shouldn't look at. I need to do a > 'git update-index --refresh' before everything's in sync. > > Is this a know issue? Do other experience the same? Yes, it is. The real issue is that the index is out of date, and the full speed of git is not available until a refresh (which you can have with a "git status", too). There are people who want to change the behaviour, and hide the empty diff output, preventing the user from ever knowing why git is so slow. So just run a "git status" and continue. Ciao, Dscho ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-13 16:45 ` Johannes Schindelin @ 2007-08-13 17:41 ` Steffen Prohaska 2007-08-13 19:54 ` Junio C Hamano 1 sibling, 0 replies; 8+ messages in thread From: Steffen Prohaska @ 2007-08-13 17:41 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Git Mailing List On Aug 13, 2007, at 6:45 PM, Johannes Schindelin wrote: > Hi, > > On Sun, 12 Aug 2007, Steffen Prohaska wrote: > >> After a 'git merge' in msysgit some stat information of the index >> doesn't match the working tree. Thus 'git diff' looks at files, >> which it shouldn't look at. I need to do a >> 'git update-index --refresh' before everything's in sync. >> >> Is this a know issue? Do other experience the same? > > Yes, it is. The real issue is that the index is out of date, and > the full > speed of git is not available until a refresh (which you can have > with a > "git status", too). > > There are people who want to change the behaviour, and hide the > empty diff > output, preventing the user from ever knowing why git is so slow. > > So just run a "git status" and continue. Could we add 'git update-index --refresh' after a successful merge, or would it slow things down. I'm not that much concerned about the empty diff, but if I start gitk it also finds local changes, which are not real, and this is always a bit distracting. Steffen ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-13 16:45 ` Johannes Schindelin 2007-08-13 17:41 ` Steffen Prohaska @ 2007-08-13 19:54 ` Junio C Hamano 2007-08-13 21:31 ` Steffen Prohaska 1 sibling, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2007-08-13 19:54 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Steffen Prohaska, Git Mailing List Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > On Sun, 12 Aug 2007, Steffen Prohaska wrote: > >> After a 'git merge' in msysgit some stat information of the index >> doesn't match the working tree. Thus 'git diff' looks at files, >> which it shouldn't look at. I need to do a >> 'git update-index --refresh' before everything's in sync. >> >> Is this a know issue? Do other experience the same? > > Yes, it is. The real issue is that the index is out of date, and the full > speed of git is not available until a refresh (which you can have with a > "git status", too). 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. 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. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-13 19:54 ` Junio C Hamano @ 2007-08-13 21:31 ` Steffen Prohaska 2007-08-13 21:57 ` Junio C Hamano 0 siblings, 1 reply; 8+ messages in thread From: Steffen Prohaska @ 2007-08-13 21:31 UTC (permalink / raw) To: Junio C Hamano; +Cc: Johannes Schindelin, Git Mailing List On Aug 13, 2007, at 9:54 PM, Junio C Hamano wrote: > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > >> On Sun, 12 Aug 2007, Steffen Prohaska wrote: >> >>> After a 'git merge' in msysgit some stat information of the index >>> doesn't match the working tree. Thus 'git diff' looks at files, >>> which it shouldn't look at. I need to do a >>> 'git update-index --refresh' before everything's in sync. >>> >>> Is this a know issue? Do other experience the same? >> >> Yes, it is. The real issue is that the index is out of date, and >> the full >> speed of git is not available until a refresh (which you can have >> with a >> "git status", too). > > 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. Steffen ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-13 21:31 ` Steffen Prohaska @ 2007-08-13 21:57 ` Junio C Hamano 2007-08-14 9:22 ` Johannes Schindelin 0 siblings, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2007-08-13 21:57 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Steffen Prohaska, Git Mailing List 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 do not think we touched this area in any major way recently, but I wouldn't be surprised if refresh_cache_entry() around lstat() on the Windows side looked drastically from the POSIX version. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-13 21:57 ` Junio C Hamano @ 2007-08-14 9:22 ` Johannes Schindelin 2007-08-14 21:03 ` Steffen Prohaska 0 siblings, 1 reply; 8+ messages in thread From: Johannes Schindelin @ 2007-08-14 9:22 UTC (permalink / raw) To: Junio C Hamano; +Cc: Steffen Prohaska, Git Mailing List 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. Ciao, Dscho ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: msysgit: merge, stat 2007-08-14 9:22 ` Johannes Schindelin @ 2007-08-14 21:03 ` Steffen Prohaska 0 siblings, 0 replies; 8+ messages in thread From: Steffen Prohaska @ 2007-08-14 21:03 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Junio C Hamano, Git Mailing List On Aug 14, 2007, at 11:22 AM, Johannes Schindelin wrote: > 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 ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-08-14 21:04 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-08-12 21:00 msysgit: merge, stat Steffen Prohaska 2007-08-13 16:45 ` Johannes Schindelin 2007-08-13 17:41 ` Steffen Prohaska 2007-08-13 19:54 ` Junio C Hamano 2007-08-13 21:31 ` Steffen Prohaska 2007-08-13 21:57 ` Junio C Hamano 2007-08-14 9:22 ` Johannes Schindelin 2007-08-14 21:03 ` Steffen Prohaska
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).