* [BUG] git status doesn't handle submodules properly on OSX @ 2008-10-15 12:07 Lars Hoss 2008-10-15 12:49 ` Jeff King ` (2 more replies) 0 siblings, 3 replies; 21+ messages in thread From: Lars Hoss @ 2008-10-15 12:07 UTC (permalink / raw) To: git Greetings all, two days ago I posted about an issue: http://thread.gmane.org/gmane.comp.version-control.git/98171 After more testing I can confirm it is indeed a bug. 1.6.0.2 on OSX Leopard doesn't work. After adding a submodule the folder of the submodule will always get listed under "Untracked files" when calling git status. 1.5.6, however, works fine. I have not tested trunk yet. So as a workaround I have to go back to 1.5.6 for now. Yours, Lars ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 12:07 [BUG] git status doesn't handle submodules properly on OSX Lars Hoss @ 2008-10-15 12:49 ` Jeff King 2008-10-15 14:30 ` Lars Hoss 2008-10-15 14:38 ` Pieter de Bie 2008-10-16 9:43 ` [BUG] git status doesn't handle submodules properly on OSX Pedro Melo 2 siblings, 1 reply; 21+ messages in thread From: Jeff King @ 2008-10-15 12:49 UTC (permalink / raw) To: Lars Hoss; +Cc: git On Wed, Oct 15, 2008 at 02:07:17PM +0200, Lars Hoss wrote: > two days ago I posted about an issue: > http://thread.gmane.org/gmane.comp.version-control.git/98171 > > After more testing I can confirm it is indeed a bug. > > 1.6.0.2 on OSX Leopard doesn't work. After adding a submodule > the folder of the submodule will always get listed under > "Untracked files" when calling git status. > > 1.5.6, however, works fine. I have not tested trunk yet. I wasn't able to reproduce your bug on my Linux box. Can you bisect to find the faulty commit? -Peff ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 12:49 ` Jeff King @ 2008-10-15 14:30 ` Lars Hoss 0 siblings, 0 replies; 21+ messages in thread From: Lars Hoss @ 2008-10-15 14:30 UTC (permalink / raw) To: Jeff King; +Cc: Lars Hoss, git > I wasn't able to reproduce your bug on my Linux box. Can you bisect to > find the faulty commit? Yes, you are right. This bug does neither appear on Linux nor on Windows (mysysgit). So far it seems to be a OSX only bug. Never used bisect myself before since I am new to git. But will try to do my best - hehehe :) Yours, Lars ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 12:07 [BUG] git status doesn't handle submodules properly on OSX Lars Hoss 2008-10-15 12:49 ` Jeff King @ 2008-10-15 14:38 ` Pieter de Bie 2008-10-15 14:51 ` Lars Hoss 2008-10-16 9:43 ` [BUG] git status doesn't handle submodules properly on OSX Pedro Melo 2 siblings, 1 reply; 21+ messages in thread From: Pieter de Bie @ 2008-10-15 14:38 UTC (permalink / raw) To: Lars Hoss, Jeff King, Git Mailinglist On 15 okt 2008, at 14:07, Lars Hoss wrote: > two days ago I posted about an issue: > http://thread.gmane.org/gmane.comp.version-control.git/98171 > > After more testing I can confirm it is indeed a bug. > > 1.6.0.2 on OSX Leopard doesn't work. After adding a submodule > the folder of the submodule will always get listed under > "Untracked files" when calling git status. > > 1.5.6, however, works fine. I have not tested trunk yet. > > So as a workaround I have to go back to 1.5.6 for now. Works for me on Leopard Vienna:a pieter$ git submodule add ~/projects/GitX/ gitx Initialized empty Git repository in /Users/pieter/a/gitx/.git/ Vienna:a pieter$ git st # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: .gitmodules # new file: gitx # Vienna:a pieter$ git --version git version 1.6.0.2.415.gf9137 - Pieter ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 14:38 ` Pieter de Bie @ 2008-10-15 14:51 ` Lars Hoss 2008-10-15 14:59 ` Pieter de Bie ` (2 more replies) 0 siblings, 3 replies; 21+ messages in thread From: Lars Hoss @ 2008-10-15 14:51 UTC (permalink / raw) To: Pieter de Bie; +Cc: Lars Hoss, Jeff King, Git Mailinglist > Works for me on Leopard > > Vienna:a pieter$ git submodule add ~/projects/GitX/ gitx > Initialized empty Git repository in /Users/pieter/a/gitx/.git/ > Vienna:a pieter$ git st > # On branch master > # Changes to be committed: > # (use "git reset HEAD <file>..." to unstage) > # > # new file: .gitmodules > # new file: gitx > # > Vienna:a pieter$ git --version > git version 1.6.0.2.415.gf9137 My git version "1.6.0.2" says: # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: .gitmodules # new file: lib # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # lib/ git --version git version 1.6.0.2 Git was build from macports. Yours, Lars ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 14:51 ` Lars Hoss @ 2008-10-15 14:59 ` Pieter de Bie 2008-10-15 15:14 ` Lars Hoss 2008-10-15 15:01 ` Richard Bubel 2008-10-16 9:48 ` Pedro Melo 2 siblings, 1 reply; 21+ messages in thread From: Pieter de Bie @ 2008-10-15 14:59 UTC (permalink / raw) To: Lars Hoss; +Cc: Jeff King, Git Mailinglist On 15 okt 2008, at 16:51, Lars Hoss wrote: > My git version "1.6.0.2" says: > > # Untracked files: > # (use "git add <file>..." to include in what will be committed) > # > # lib/ > git --version > git version 1.6.0.2 I just tested 1.6.0.2, and had no problems. Perhaps macports is doing something odd? ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 14:59 ` Pieter de Bie @ 2008-10-15 15:14 ` Lars Hoss 0 siblings, 0 replies; 21+ messages in thread From: Lars Hoss @ 2008-10-15 15:14 UTC (permalink / raw) To: Pieter de Bie; +Cc: Lars Hoss, Jeff King, Git Mailinglist > I just tested 1.6.0.2, and had no problems. Perhaps macports is doing > something odd? Actually this was my idea first. Thus I build git from the sources the portfile links to myself. The bug, however, remains. The link is: http://www.kernel.org/pub/software/scm/git/git-1.6.0.2.tar.bz2. I've tested this on two machines, both using latest version of Leopard. And there was another poster on this forum who had the very same issue. Now the interesting question is what is different between Pieter's system and mine? And why does 1.5.6 work fine? As soon as I am at home I will try bisect. I am currently at work behind a big bad firewall ;) Yours, Lars ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 14:51 ` Lars Hoss 2008-10-15 14:59 ` Pieter de Bie @ 2008-10-15 15:01 ` Richard Bubel 2008-10-15 15:21 ` Lars Hoss 2008-10-16 9:48 ` Pedro Melo 2 siblings, 1 reply; 21+ messages in thread From: Richard Bubel @ 2008-10-15 15:01 UTC (permalink / raw) To: Lars Hoss; +Cc: Pieter de Bie, Jeff King, Git Mailinglist Hi, On Oct 15, 2008, at 16:51 , Lars Hoss wrote: >> Works for me on Leopard >> [...] >> Vienna:a pieter$ git --version >> git version 1.6.0.2.415.gf9137 > > My git version "1.6.0.2" says: > > # On branch master > [...] > git --version > git version 1.6.0.2 > > Git was build from macports. works for me too on OS X 10.5.5 with git 1.6.0.2 from MacPorts. As it deviates from the default, it might be worth mentioning that the filesystem in use here is the case-sensitive version of HFS+. Best Regards, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 15:01 ` Richard Bubel @ 2008-10-15 15:21 ` Lars Hoss 2008-10-16 9:49 ` Pedro Melo 0 siblings, 1 reply; 21+ messages in thread From: Lars Hoss @ 2008-10-15 15:21 UTC (permalink / raw) To: Richard Bubel; +Cc: Lars Hoss, Pieter de Bie, Jeff King, Git Mailinglist Ok, this might be the difference. I am pretty sure my filesystem is not case-sensitive (default?). At least "mkdir Foo" fails when "foo" exists. Yours, Lars > Hi, > > On Oct 15, 2008, at 16:51 , Lars Hoss wrote: > >>> Works for me on Leopard >>> [...] >>> Vienna:a pieter$ git --version >>> git version 1.6.0.2.415.gf9137 >> >> My git version "1.6.0.2" says: >> >> # On branch master >> [...] >> git --version >> git version 1.6.0.2 >> >> Git was build from macports. > > > works for me too on OS X 10.5.5 with git 1.6.0.2 from MacPorts. As it > deviates from the default, it might be worth mentioning that the > filesystem in use here is the case-sensitive version of HFS+. > > Best Regards, > Richard > ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 15:21 ` Lars Hoss @ 2008-10-16 9:49 ` Pedro Melo 0 siblings, 0 replies; 21+ messages in thread From: Pedro Melo @ 2008-10-16 9:49 UTC (permalink / raw) To: Lars Hoss; +Cc: Richard Bubel, Pieter de Bie, Jeff King, Git Mailinglist Hi, On Oct 15, 2008, at 4:21 PM, Lars Hoss wrote: > Ok, this might be the difference. I am pretty sure my > filesystem is not case-sensitive (default?). > At least "mkdir Foo" fails when "foo" exists. My filesystem is Mac OS Extended (Journaled) case-insensitive like yours, and submodules work. Best regards, > > > Yours, > Lars > >> Hi, >> >> On Oct 15, 2008, at 16:51 , Lars Hoss wrote: >> >>>> Works for me on Leopard >>>> [...] >>>> Vienna:a pieter$ git --version >>>> git version 1.6.0.2.415.gf9137 >>> >>> My git version "1.6.0.2" says: >>> >>> # On branch master >>> [...] >>> git --version >>> git version 1.6.0.2 >>> >>> Git was build from macports. >> >> >> works for me too on OS X 10.5.5 with git 1.6.0.2 from MacPorts. As it >> deviates from the default, it might be worth mentioning that the >> filesystem in use here is the case-sensitive version of HFS+. >> >> Best Regards, >> Richard >> > > > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Pedro Melo Blog: http://www.simplicidade.org/notes/ XMPP ID: melo@simplicidade.org Use XMPP! ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 14:51 ` Lars Hoss 2008-10-15 14:59 ` Pieter de Bie 2008-10-15 15:01 ` Richard Bubel @ 2008-10-16 9:48 ` Pedro Melo 2008-10-16 10:30 ` Lars Hoss 2008-10-16 11:23 ` Lars Hoss 2 siblings, 2 replies; 21+ messages in thread From: Pedro Melo @ 2008-10-16 9:48 UTC (permalink / raw) To: Lars Hoss; +Cc: Pieter de Bie, Jeff King, Git Mailinglist On Oct 15, 2008, at 3:51 PM, Lars Hoss wrote: >> Works for me on Leopard >> >> Vienna:a pieter$ git submodule add ~/projects/GitX/ gitx >> Initialized empty Git repository in /Users/pieter/a/gitx/.git/ >> Vienna:a pieter$ git st >> # On branch master >> # Changes to be committed: >> # (use "git reset HEAD <file>..." to unstage) >> # >> # new file: .gitmodules >> # new file: gitx >> # >> Vienna:a pieter$ git --version >> git version 1.6.0.2.415.gf9137 > > My git version "1.6.0.2" says: > > # On branch master > # Changes to be committed: > # (use "git reset HEAD <file>..." to unstage) > # > # new file: .gitmodules > # new file: lib > # > # Untracked files: > # (use "git add <file>..." to include in what will be committed) > # > # lib/ > git --version > git version 1.6.0.2 > > Git was build from macports. hmms.. Really, I know about fink and Macports and all others, but I'm using Mac OS X since version 10.1 (when compiling OSS software was near impossible due to Apple decisions) and I've always had better results with compiling my own than using any of those OSS repositories. I understand the appeal, it seems easier, but I would recommend that you compile yourself the software packages you depend on. Regarding git, I saw a git-build.sh script floating around. If you cannot find it, you might want to try my own recipe (http://tinyurl.com/4ayze6 ). I compile git master every day (cron) and thats the one I use on my main machine. Best regards, -- Pedro Melo Blog: http://www.simplicidade.org/notes/ XMPP ID: melo@simplicidade.org Use XMPP! ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-16 9:48 ` Pedro Melo @ 2008-10-16 10:30 ` Lars Hoss 2008-10-16 11:23 ` Lars Hoss 1 sibling, 0 replies; 21+ messages in thread From: Lars Hoss @ 2008-10-16 10:30 UTC (permalink / raw) To: Pedro Melo; +Cc: Lars Hoss, Pieter de Bie, Jeff King, Git Mailinglist Hi! I've cloned git this morning in order to try a build from this. But chances are small that it will make a difference. Because from the portfile I can see that macports just downloads 1.6.0.2 release and builds it without any special patches or configure options. As I said before, 1.5.6 works fine for me. But why 1.6.0.2 does not work on my box - I don't know yet. Since Pedro uses a case-insensitive volume as well, the problem seems not be related to sensitve/insensitive. Now that I have a git clone on my box I might try bisect as well. Yours, Lars > On Oct 15, 2008, at 3:51 PM, Lars Hoss wrote: > >>> Works for me on Leopard >>> >>> Vienna:a pieter$ git submodule add ~/projects/GitX/ gitx >>> Initialized empty Git repository in /Users/pieter/a/gitx/.git/ >>> Vienna:a pieter$ git st >>> # On branch master >>> # Changes to be committed: >>> # (use "git reset HEAD <file>..." to unstage) >>> # >>> # new file: .gitmodules >>> # new file: gitx >>> # >>> Vienna:a pieter$ git --version >>> git version 1.6.0.2.415.gf9137 >> >> My git version "1.6.0.2" says: >> >> # On branch master >> # Changes to be committed: >> # (use "git reset HEAD <file>..." to unstage) >> # >> # new file: .gitmodules >> # new file: lib >> # >> # Untracked files: >> # (use "git add <file>..." to include in what will be committed) >> # >> # lib/ >> git --version >> git version 1.6.0.2 >> >> Git was build from macports. > > hmms.. Really, I know about fink and Macports and all others, but I'm > using Mac OS X since version 10.1 (when compiling OSS software was > near impossible due to Apple decisions) and I've always had better > results with compiling my own than using any of those OSS repositories. > > I understand the appeal, it seems easier, but I would recommend that > you compile yourself the software packages you depend on. > > Regarding git, I saw a git-build.sh script floating around. If you > cannot find it, you might want to try my own recipe > (http://tinyurl.com/4ayze6 > ). I compile git master every day (cron) and thats the one I use on my > main machine. > > Best regards, > -- > Pedro Melo > Blog: http://www.simplicidade.org/notes/ > XMPP ID: melo@simplicidade.org > Use XMPP! > > > ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-16 9:48 ` Pedro Melo 2008-10-16 10:30 ` Lars Hoss @ 2008-10-16 11:23 ` Lars Hoss 2008-10-16 11:39 ` Johannes Sixt 1 sibling, 1 reply; 21+ messages in thread From: Lars Hoss @ 2008-10-16 11:23 UTC (permalink / raw) To: Pedro Melo; +Cc: Lars Hoss, Pieter de Bie, Jeff King, Git Mailinglist Update: Ok, I compiled several git versions from the git repo with the following results: v1.5.6.5 works v1.6.0.2 fails v1.6.0 fails v1.6.0-rc0 fails Given a git repo with a submodule 1.5.6.5 works (no untracked files) but the same repo fails with 1.6.0-rc0 (lists submodule folders under untracked files). So something between 1.5.6.5 and 1.6.0-rc0 broke it for me. A quick diff between the two version revealed a lot of changes. Thus tracking down the issue might not be easy for someone who is not involved in the code. Maybe someone can give me a hint where to look? For example where does "git status" decide whether a given filesystem folder should be ignored with regard to .gitmodules? Yours, Lars > > On Oct 15, 2008, at 3:51 PM, Lars Hoss wrote: > >>> Works for me on Leopard >>> >>> Vienna:a pieter$ git submodule add ~/projects/GitX/ gitx >>> Initialized empty Git repository in /Users/pieter/a/gitx/.git/ >>> Vienna:a pieter$ git st >>> # On branch master >>> # Changes to be committed: >>> # (use "git reset HEAD <file>..." to unstage) >>> # >>> # new file: .gitmodules >>> # new file: gitx >>> # >>> Vienna:a pieter$ git --version >>> git version 1.6.0.2.415.gf9137 >> >> My git version "1.6.0.2" says: >> >> # On branch master >> # Changes to be committed: >> # (use "git reset HEAD <file>..." to unstage) >> # >> # new file: .gitmodules >> # new file: lib >> # >> # Untracked files: >> # (use "git add <file>..." to include in what will be committed) >> # >> # lib/ >> git --version >> git version 1.6.0.2 >> >> Git was build from macports. > > hmms.. Really, I know about fink and Macports and all others, but I'm > using Mac OS X since version 10.1 (when compiling OSS software was > near impossible due to Apple decisions) and I've always had better > results with compiling my own than using any of those OSS repositories. > > I understand the appeal, it seems easier, but I would recommend that > you compile yourself the software packages you depend on. > > Regarding git, I saw a git-build.sh script floating around. If you > cannot find it, you might want to try my own recipe > (http://tinyurl.com/4ayze6 > ). I compile git master every day (cron) and thats the one I use on my > main machine. > > Best regards, > -- > Pedro Melo > Blog: http://www.simplicidade.org/notes/ > XMPP ID: melo@simplicidade.org > Use XMPP! > > > ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-16 11:23 ` Lars Hoss @ 2008-10-16 11:39 ` Johannes Sixt 2008-10-16 11:53 ` Lars Hoss 2008-10-16 12:30 ` Lars Hoss 0 siblings, 2 replies; 21+ messages in thread From: Johannes Sixt @ 2008-10-16 11:39 UTC (permalink / raw) To: Lars Hoss; +Cc: Pedro Melo, Pieter de Bie, Jeff King, Git Mailinglist Lars Hoss schrieb: > Ok, I compiled several git versions from the git repo with the following > results: > > v1.5.6.5 works > v1.6.0.2 fails > v1.6.0 fails > v1.6.0-rc0 fails ... > So something between 1.5.6.5 and 1.6.0-rc0 broke it for me. > A quick diff between the two version revealed a lot of changes. Thus > tracking down the issue might not be easy for someone who is not involved > in the code. Start with: $ git bisect start v1.6.0-rc0 v1.5.6.5 v1.6.0~6^2 v1.6.0.2~16^2 # [*] and test the version that this command gives you. Then say either $ git bisect good # if the version works $ git bisect bad # if the version fails Test again and repeat until the command tells you "First bad revision is..." and report back. (Finally, say 'git bisect reset' to get you back to where you started.) [*] The revisions v1.6.0~6^2 v1.6.0.2~16^2 are from gitk and git-gui, which we assume are good. -- Hannes ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-16 11:39 ` Johannes Sixt @ 2008-10-16 11:53 ` Lars Hoss 2008-10-16 12:30 ` Lars Hoss 1 sibling, 0 replies; 21+ messages in thread From: Lars Hoss @ 2008-10-16 11:53 UTC (permalink / raw) To: Johannes Sixt Cc: Lars Hoss, Pedro Melo, Pieter de Bie, Jeff King, Git Mailinglist >> So something between 1.5.6.5 and 1.6.0-rc0 broke it for me. >> A quick diff between the two version revealed a lot of changes. Thus >> tracking down the issue might not be easy for someone who is not >> involved >> in the code. > > Start with: > > $ git bisect start v1.6.0-rc0 v1.5.6.5 v1.6.0~6^2 v1.6.0.2~16^2 # [*] > > and test the version that this command gives you. Then say either > > $ git bisect good # if the version works > $ git bisect bad # if the version fails > > Test again and repeat until the command tells you "First bad revision > is..." and report back. (Finally, say 'git bisect reset' to get you back > to where you started.) > > [*] The revisions v1.6.0~6^2 v1.6.0.2~16^2 are from gitk and git-gui, > which we assume are good. > > -- Hannes Wow, thank you Hannes! Will do so. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-16 11:39 ` Johannes Sixt 2008-10-16 11:53 ` Lars Hoss @ 2008-10-16 12:30 ` Lars Hoss 2008-10-16 14:18 ` Jeff King 1 sibling, 1 reply; 21+ messages in thread From: Lars Hoss @ 2008-10-16 12:30 UTC (permalink / raw) To: Johannes Sixt Cc: Lars Hoss, Pedro Melo, Pieter de Bie, Jeff King, Git Mailinglist Thanks again for your feedback, guys! Ok, I've done it and tracked it down. Unfortunately my MacBook has no access to the company network or internet (must get an iPhone ;-), so I cannot copy&paste my finding. For now I can you give this: 1.5.6.rc1.24.gd629 fails 1.5.6.rc1.23.g6c2ce works The commit was on Jun 5, 14:47:50 by Marius Storm-Olsen and the relevant file is wt-status.c. Ok, I think I found the issue. I enabled showUntrackedFiles in my gitconfig: status.showUntrackedFiles = all On the one hand it makes sense to list submodule folder as untracked files. Then again it feels wrong because it is a registered submodule. Hm :-) Anyway, bisect is really impressive! Yours, Lars ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-16 12:30 ` Lars Hoss @ 2008-10-16 14:18 ` Jeff King 2008-10-16 14:59 ` [PATCH] refactor handling of "other" files in ls-files and status Jeff King 0 siblings, 1 reply; 21+ messages in thread From: Jeff King @ 2008-10-16 14:18 UTC (permalink / raw) To: Lars Hoss; +Cc: Johannes Sixt, Pedro Melo, Pieter de Bie, Git Mailinglist On Thu, Oct 16, 2008 at 02:30:00PM +0200, Lars Hoss wrote: > The commit was on Jun 5, 14:47:50 by Marius Storm-Olsen and the relevant > file is wt-status.c. > > Ok, I think I found the issue. I enabled showUntrackedFiles in my gitconfig: > > status.showUntrackedFiles = all Ah, OK. I see what is going on. All code paths call the read_directory infrastructure to find untracked files. If status.showUntrackedFiles is "normal", then we set dir.show_other_directories, to indicate that we want to see the directories, but not their constituent files. If status.showuntrackedfiles is set to "all", then we don't set the show_other_directories flag, because we want each file. But the code in dir.c:treat_directory uses the "show_other_directories" flag to say "oh, we're just interested in untracked files" and decide whether to ignore gitlinks. Meaning that we must still filter the results of read_directory based on the cache. And indeed, this is what "git ls-files -o" does, as explained in 5698454e (Fix some "git ls-files -o" fallout from gitlinks). It's also what the code in wt_status_print_untracked is _supposed_ to do, but it was never updated to handle this case when git-ls-files was. Which is probably my fault a long time ago for cutting and pasting the 5 lines of "is this thing in the cache" when writing wt-status.c. So the quick fix is to re-cut-and-paste the code: diff --git a/wt-status.c b/wt-status.c index d2eac36..792d5f1 100644 --- a/wt-status.c +++ b/wt-status.c @@ -280,10 +280,14 @@ static void wt_status_print_untracked(struct wt_status *s) /* check for matching entry, which is unmerged; lifted from * builtin-ls-files:show_other_files */ struct dir_entry *ent = dir.entries[i]; - int pos = cache_name_pos(ent->name, ent->len); + int len, pos; + len = ent->len; + if (len && ent->name[len-1] == '/') + len--; + pos = cache_name_pos(ent->name, len); struct cache_entry *ce; if (0 <= pos) - die("bug in wt_status_print_untracked"); + continue; pos = -pos - 1; if (pos < active_nr) { ce = active_cache[pos]; But the right solution is to refactor this so the code isn't duplicated. And I'll post a patch for that in a second. I do have to wonder, though, whether an even better solution would be to more explicitly tell read_directory "I'm interested only in 'other' files" rather than relying on guessing based on dir.show_other_directories. Then we could just avoid ever passing these gitlinks back to ls-files and status in the first place. -Peff ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH] refactor handling of "other" files in ls-files and status 2008-10-16 14:18 ` Jeff King @ 2008-10-16 14:59 ` Jeff King 2008-10-16 15:07 ` Jeff King 2008-10-17 23:58 ` Junio C Hamano 0 siblings, 2 replies; 21+ messages in thread From: Jeff King @ 2008-10-16 14:59 UTC (permalink / raw) To: Junio C Hamano Cc: Lars Hoss, Johannes Sixt, Pedro Melo, Pieter de Bie, Git Mailinglist When the "git status" display code was originally converted to C, we copied the code from ls-files to discover whether a pathname returned by read_directory was an "other", or untracked, file. Much later, 5698454e updated the code in ls-files to handle some new cases caused by gitlinks. This left the code in wt-status.c broken: it would display submodule directories as untracked directories. Nobody noticed until now, however, because unless status.showUntrackedFiles was set to "all", submodule directories were not actually reported by read_directory. So the bug was only triggered in the presence of a submodule _and_ this config option. This patch pulls the ls-files code into a new function, cache_name_is_other, and uses it in both places. This should leave the ls-files functionality the same and fix the bug in status. Signed-off-by: Jeff King <peff@peff.net> --- On Thu, Oct 16, 2008 at 10:18:13AM -0400, Jeff King wrote: > But the right solution is to refactor this so the code isn't duplicated. > And I'll post a patch for that in a second. Here it is. > I do have to wonder, though, whether an even better solution would be to > more explicitly tell read_directory "I'm interested only in 'other' > files" rather than relying on guessing based on > dir.show_other_directories. Then we could just avoid ever passing these > gitlinks back to ls-files and status in the first place. I was thinking such a change would get rid of the need for my patch, since all files returned _would_ be "others". However, we would still need to deal with the "unmerged entries" problem, so I think this refactoring is worth it regardless. builtin-ls-files.c | 33 ++------------------------------- cache.h | 2 ++ read-cache.c | 27 +++++++++++++++++++++++++++ t/t7502-status.sh | 6 ++++++ wt-status.c | 15 ++------------- 5 files changed, 39 insertions(+), 44 deletions(-) diff --git a/builtin-ls-files.c b/builtin-ls-files.c index 068f424..b48327d 100644 --- a/builtin-ls-files.c +++ b/builtin-ls-files.c @@ -91,39 +91,10 @@ static void show_other_files(struct dir_struct *dir) { int i; - - /* - * Skip matching and unmerged entries for the paths, - * since we want just "others". - * - * (Matching entries are normally pruned during - * the directory tree walk, but will show up for - * gitlinks because we don't necessarily have - * dir->show_other_directories set to suppress - * them). - */ for (i = 0; i < dir->nr; i++) { struct dir_entry *ent = dir->entries[i]; - int len, pos; - struct cache_entry *ce; - - /* - * Remove the '/' at the end that directory - * walking adds for directory entries. - */ - len = ent->len; - if (len && ent->name[len-1] == '/') - len--; - pos = cache_name_pos(ent->name, len); - if (0 <= pos) - continue; /* exact match */ - pos = -pos - 1; - if (pos < active_nr) { - ce = active_cache[pos]; - if (ce_namelen(ce) == len && - !memcmp(ce->name, ent->name, len)) - continue; /* Yup, this one exists unmerged */ - } + if (!cache_name_is_other(ent->name, ent->len)) + continue; show_dir_entry(tag_other, ent); } } diff --git a/cache.h b/cache.h index 991544c..ae6647e 100644 --- a/cache.h +++ b/cache.h @@ -277,6 +277,7 @@ static inline void remove_name_hash(struct cache_entry *ce) #define ce_match_stat(ce, st, options) ie_match_stat(&the_index, (ce), (st), (options)) #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options)) #define cache_name_exists(name, namelen, igncase) index_name_exists(&the_index, (name), (namelen), (igncase)) +#define cache_name_is_other(name, namelen) index_name_is_other(&the_index, (name), (namelen)) #endif enum object_type { @@ -393,6 +394,7 @@ extern int add_to_index(struct index_state *, const char *path, struct stat *, i extern int add_file_to_index(struct index_state *, const char *path, int flags); extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh); extern int ce_same_name(struct cache_entry *a, struct cache_entry *b); +extern int index_name_is_other(const struct index_state *, const char *, int); /* do stat comparison even if CE_VALID is true */ #define CE_MATCH_IGNORE_VALID 01 diff --git a/read-cache.c b/read-cache.c index c229fd4..780f2c7 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1565,3 +1565,30 @@ int add_files_to_cache(const char *prefix, const char **pathspec, int flags) return !!data.add_errors; } +/* + * Returns 1 if the path is an "other" path with respect to + * the index; that is, the path is not mentioned in the index at all, + * either as a file, a directory with some files in the index, + * or as an unmerged entry. + * + * We helpfully remove a trailing "/" from directories so that + * the output of read_directory can be used as-is. + */ +int index_name_is_other(const struct index_state *istate, const char *name, + int namelen) +{ + int pos; + if (namelen && name[namelen - 1] == '/') + namelen--; + pos = index_name_pos(istate, name, namelen); + if (0 <= pos) + return 0; /* exact match */ + pos = -pos - 1; + if (pos < istate->cache_nr) { + struct cache_entry *ce = istate->cache[pos]; + if (ce_namelen(ce) == namelen && + !memcmp(ce->name, name, namelen)) + return 0; /* Yup, this one exists unmerged */ + } + return 1; +} diff --git a/t/t7502-status.sh b/t/t7502-status.sh index 1905fb3..93f875f 100755 --- a/t/t7502-status.sh +++ b/t/t7502-status.sh @@ -292,6 +292,12 @@ test_expect_success 'status submodule summary is disabled by default' ' test_cmp expect output ' +# we expect the same as the previous test +test_expect_success 'status --untracked-files=all does not show submodule' ' + git status --untracked-files=all >output && + test_cmp expect output +' + head=$(cd sm && git rev-parse --short=7 --verify HEAD) cat >expect <<EOF diff --git a/wt-status.c b/wt-status.c index d2eac36..c3a9cab 100644 --- a/wt-status.c +++ b/wt-status.c @@ -277,20 +277,9 @@ static void wt_status_print_untracked(struct wt_status *s) read_directory(&dir, ".", "", 0, NULL); for(i = 0; i < dir.nr; i++) { - /* check for matching entry, which is unmerged; lifted from - * builtin-ls-files:show_other_files */ struct dir_entry *ent = dir.entries[i]; - int pos = cache_name_pos(ent->name, ent->len); - struct cache_entry *ce; - if (0 <= pos) - die("bug in wt_status_print_untracked"); - pos = -pos - 1; - if (pos < active_nr) { - ce = active_cache[pos]; - if (ce_namelen(ce) == ent->len && - !memcmp(ce->name, ent->name, ent->len)) - continue; - } + if (!cache_name_is_other(ent->name, ent->len)) + continue; if (!shown_header) { s->workdir_untracked = 1; wt_status_print_untracked_header(s); -- 1.6.0.2.710.gc3f34.dirty ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] refactor handling of "other" files in ls-files and status 2008-10-16 14:59 ` [PATCH] refactor handling of "other" files in ls-files and status Jeff King @ 2008-10-16 15:07 ` Jeff King 2008-10-17 23:58 ` Junio C Hamano 1 sibling, 0 replies; 21+ messages in thread From: Jeff King @ 2008-10-16 15:07 UTC (permalink / raw) To: Junio C Hamano; +Cc: Git Mailinglist On Thu, Oct 16, 2008 at 10:59:16AM -0400, Jeff King wrote: > This patch pulls the ls-files code into a new function, > cache_name_is_other, and uses it in both places. This should > leave the ls-files functionality the same and fix the bug > in status. BTW, this is probably maint-worthy, but I prepared it on 'master'. Unfortunately, there is a purely textual conflict when applying to maint. For your convenience, here's a rebase to maint: -- >8 -- refactor handling of "other" files in ls-files and status When the "git status" display code was originally converted to C, we copied the code from ls-files to discover whether a pathname returned by read_directory was an "other", or untracked, file. Much later, 5698454e updated the code in ls-files to handle some new cases caused by gitlinks. This left the code in wt-status.c broken: it would display submodule directories as untracked directories. Nobody noticed until now, however, because unless status.showUntrackedFiles was set to "all", submodule directories were not actually reported by read_directory. So the bug was only triggered in the presence of a submodule _and_ this config option. This patch pulls the ls-files code into a new function, cache_name_is_other, and uses it in both places. This should leave the ls-files functionality the same and fix the bug in status. Signed-off-by: Jeff King <peff@peff.net> --- builtin-ls-files.c | 33 ++------------------------------- cache.h | 2 ++ read-cache.c | 28 ++++++++++++++++++++++++++++ t/t7502-status.sh | 6 ++++++ wt-status.c | 15 ++------------- 5 files changed, 40 insertions(+), 44 deletions(-) diff --git a/builtin-ls-files.c b/builtin-ls-files.c index 068f424..b48327d 100644 --- a/builtin-ls-files.c +++ b/builtin-ls-files.c @@ -91,39 +91,10 @@ static void show_other_files(struct dir_struct *dir) { int i; - - /* - * Skip matching and unmerged entries for the paths, - * since we want just "others". - * - * (Matching entries are normally pruned during - * the directory tree walk, but will show up for - * gitlinks because we don't necessarily have - * dir->show_other_directories set to suppress - * them). - */ for (i = 0; i < dir->nr; i++) { struct dir_entry *ent = dir->entries[i]; - int len, pos; - struct cache_entry *ce; - - /* - * Remove the '/' at the end that directory - * walking adds for directory entries. - */ - len = ent->len; - if (len && ent->name[len-1] == '/') - len--; - pos = cache_name_pos(ent->name, len); - if (0 <= pos) - continue; /* exact match */ - pos = -pos - 1; - if (pos < active_nr) { - ce = active_cache[pos]; - if (ce_namelen(ce) == len && - !memcmp(ce->name, ent->name, len)) - continue; /* Yup, this one exists unmerged */ - } + if (!cache_name_is_other(ent->name, ent->len)) + continue; show_dir_entry(tag_other, ent); } } diff --git a/cache.h b/cache.h index 884fae8..76730ce 100644 --- a/cache.h +++ b/cache.h @@ -270,6 +270,7 @@ static inline void remove_name_hash(struct cache_entry *ce) #define ce_match_stat(ce, st, options) ie_match_stat(&the_index, (ce), (st), (options)) #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options)) #define cache_name_exists(name, namelen, igncase) index_name_exists(&the_index, (name), (namelen), (igncase)) +#define cache_name_is_other(name, namelen) index_name_is_other(&the_index, (name), (namelen)) #endif enum object_type { @@ -382,6 +383,7 @@ extern int add_to_index(struct index_state *, const char *path, struct stat *, i extern int add_file_to_index(struct index_state *, const char *path, int flags); extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh); extern int ce_same_name(struct cache_entry *a, struct cache_entry *b); +extern int index_name_is_other(const struct index_state *, const char *, int); /* do stat comparison even if CE_VALID is true */ #define CE_MATCH_IGNORE_VALID 01 diff --git a/read-cache.c b/read-cache.c index 8f96fd1..4e067e4 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1480,3 +1480,31 @@ int read_index_unmerged(struct index_state *istate) istate->cache_nr = dst - istate->cache; return !!last; } + +/* + * Returns 1 if the path is an "other" path with respect to + * the index; that is, the path is not mentioned in the index at all, + * either as a file, a directory with some files in the index, + * or as an unmerged entry. + * + * We helpfully remove a trailing "/" from directories so that + * the output of read_directory can be used as-is. + */ +int index_name_is_other(const struct index_state *istate, const char *name, + int namelen) +{ + int pos; + if (namelen && name[namelen - 1] == '/') + namelen--; + pos = index_name_pos(istate, name, namelen); + if (0 <= pos) + return 0; /* exact match */ + pos = -pos - 1; + if (pos < istate->cache_nr) { + struct cache_entry *ce = istate->cache[pos]; + if (ce_namelen(ce) == namelen && + !memcmp(ce->name, name, namelen)) + return 0; /* Yup, this one exists unmerged */ + } + return 1; +} diff --git a/t/t7502-status.sh b/t/t7502-status.sh index c8e4c2e..187a13e 100755 --- a/t/t7502-status.sh +++ b/t/t7502-status.sh @@ -285,6 +285,12 @@ test_expect_success 'status submodule summary is disabled by default' ' test_cmp expect output ' +# we expect the same as the previous test +test_expect_success 'status --untracked-files=all does not show submodule' ' + git status --untracked-files=all >output && + test_cmp expect output +' + head=$(cd sm && git rev-parse --short=7 --verify HEAD) cat >expect <<EOF diff --git a/wt-status.c b/wt-status.c index 889e50f..64cedfc 100644 --- a/wt-status.c +++ b/wt-status.c @@ -275,20 +275,9 @@ static void wt_status_print_untracked(struct wt_status *s) read_directory(&dir, ".", "", 0, NULL); for(i = 0; i < dir.nr; i++) { - /* check for matching entry, which is unmerged; lifted from - * builtin-ls-files:show_other_files */ struct dir_entry *ent = dir.entries[i]; - int pos = cache_name_pos(ent->name, ent->len); - struct cache_entry *ce; - if (0 <= pos) - die("bug in wt_status_print_untracked"); - pos = -pos - 1; - if (pos < active_nr) { - ce = active_cache[pos]; - if (ce_namelen(ce) == ent->len && - !memcmp(ce->name, ent->name, ent->len)) - continue; - } + if (!cache_name_is_other(ent->name, ent->len)) + continue; if (!shown_header) { s->workdir_untracked = 1; wt_status_print_header(s, "Untracked files", -- 1.6.0.2.710.gc3f34.dirty ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] refactor handling of "other" files in ls-files and status 2008-10-16 14:59 ` [PATCH] refactor handling of "other" files in ls-files and status Jeff King 2008-10-16 15:07 ` Jeff King @ 2008-10-17 23:58 ` Junio C Hamano 1 sibling, 0 replies; 21+ messages in thread From: Junio C Hamano @ 2008-10-17 23:58 UTC (permalink / raw) To: Jeff King Cc: Lars Hoss, Johannes Sixt, Pedro Melo, Pieter de Bie, Git Mailinglist Thanks. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [BUG] git status doesn't handle submodules properly on OSX 2008-10-15 12:07 [BUG] git status doesn't handle submodules properly on OSX Lars Hoss 2008-10-15 12:49 ` Jeff King 2008-10-15 14:38 ` Pieter de Bie @ 2008-10-16 9:43 ` Pedro Melo 2 siblings, 0 replies; 21+ messages in thread From: Pedro Melo @ 2008-10-16 9:43 UTC (permalink / raw) To: Lars Hoss; +Cc: git Hi, On Oct 15, 2008, at 1:07 PM, Lars Hoss wrote: > Greetings all, > > two days ago I posted about an issue: > http://thread.gmane.org/gmane.comp.version-control.git/98171 > > After more testing I can confirm it is indeed a bug. > > 1.6.0.2 on OSX Leopard doesn't work. After adding a submodule > the folder of the submodule will always get listed under > "Untracked files" when calling git status. I'm using 1.6.0.2.526.g5c283 on Leopard with lots of submodules without any problems at all. I was going to reply to your original message but it slipped my mind (commuting et al). Can you provide a sequence of commands that demonstrate the problem so that I can try? Best regards, -- Pedro Melo Blog: http://www.simplicidade.org/notes/ XMPP ID: melo@simplicidade.org Use XMPP! ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2008-10-18 0:00 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-10-15 12:07 [BUG] git status doesn't handle submodules properly on OSX Lars Hoss 2008-10-15 12:49 ` Jeff King 2008-10-15 14:30 ` Lars Hoss 2008-10-15 14:38 ` Pieter de Bie 2008-10-15 14:51 ` Lars Hoss 2008-10-15 14:59 ` Pieter de Bie 2008-10-15 15:14 ` Lars Hoss 2008-10-15 15:01 ` Richard Bubel 2008-10-15 15:21 ` Lars Hoss 2008-10-16 9:49 ` Pedro Melo 2008-10-16 9:48 ` Pedro Melo 2008-10-16 10:30 ` Lars Hoss 2008-10-16 11:23 ` Lars Hoss 2008-10-16 11:39 ` Johannes Sixt 2008-10-16 11:53 ` Lars Hoss 2008-10-16 12:30 ` Lars Hoss 2008-10-16 14:18 ` Jeff King 2008-10-16 14:59 ` [PATCH] refactor handling of "other" files in ls-files and status Jeff King 2008-10-16 15:07 ` Jeff King 2008-10-17 23:58 ` Junio C Hamano 2008-10-16 9:43 ` [BUG] git status doesn't handle submodules properly on OSX Pedro Melo
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).