git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git-ls-files in subdirectories ignore higher-up .gitignore
@ 2006-01-24 17:59 Pavel Roskin
  2006-01-25  2:08 ` Junio C Hamano
  2006-01-25  6:11 ` Sam Ravnborg
  0 siblings, 2 replies; 6+ messages in thread
From: Pavel Roskin @ 2006-01-24 17:59 UTC (permalink / raw)
  To: git

Hello!

git-ls-files appears to behave in a way that may be unexpected to the
users.  When run in a subdirectory, git-ls-files never reads .gitignore
or whatever is specified by --exclude-per-directory in the parent
directories.

This can be demonstrated in git's own repository:

$ touch t/test.o
$ git-ls-files --others --exclude-per-directory=.gitignore
$ cd t
$ git-ls-files --others --exclude-per-directory=.gitignore
test.o
$

Before I attempt to fix it, I'd like to make sure it's a bug, not a
feature.

-- 
Regards,
Pavel Roskin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: git-ls-files in subdirectories ignore higher-up .gitignore
  2006-01-24 17:59 git-ls-files in subdirectories ignore higher-up .gitignore Pavel Roskin
@ 2006-01-25  2:08 ` Junio C Hamano
  2006-01-25  6:11 ` Sam Ravnborg
  1 sibling, 0 replies; 6+ messages in thread
From: Junio C Hamano @ 2006-01-25  2:08 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: git

Pavel Roskin <proski@gnu.org> writes:

> This can be demonstrated in git's own repository:
>
> $ touch t/test.o
> $ git-ls-files --others --exclude-per-directory=.gitignore
> $ cd t
> $ git-ls-files --others --exclude-per-directory=.gitignore
> test.o
> $
>
> Before I attempt to fix it, I'd like to make sure it's a bug, not a
> feature.

I am not sure if that is a bug or a feature, but you are right.
We do not bother to go uplevel and look for .gitignore in the
current code.

It would probably be a welcome addition if your fix made these
two sequences work similarly modulo leading paths from the
command output.  I think it is natural to expect they are moral
equivalents:

	(Sequence 1)
	$ touch t/test.o t/garbage
        $ git-ls-files -o --exclude-per-directory=.gitignore t/

	(Sequence 2)
	$ touch t/test.o t/garbage
        $ cd t
        $ git-ls-files -o --exclude-per-directory=.gitignore

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: git-ls-files in subdirectories ignore higher-up .gitignore
  2006-01-24 17:59 git-ls-files in subdirectories ignore higher-up .gitignore Pavel Roskin
  2006-01-25  2:08 ` Junio C Hamano
@ 2006-01-25  6:11 ` Sam Ravnborg
  2006-02-09  8:16   ` [PATCH] ls-files: honour per-directory ignore file from higher directories Junio C Hamano
  1 sibling, 1 reply; 6+ messages in thread
From: Sam Ravnborg @ 2006-01-25  6:11 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: git

On Tue, Jan 24, 2006 at 12:59:30PM -0500, Pavel Roskin wrote:
> Hello!
> 
> git-ls-files appears to behave in a way that may be unexpected to the
> users.  When run in a subdirectory, git-ls-files never reads .gitignore
> or whatever is specified by --exclude-per-directory in the parent
> directories.
> 
> This can be demonstrated in git's own repository:
> 
> $ touch t/test.o
> $ git-ls-files --others --exclude-per-directory=.gitignore
> $ cd t
> $ git-ls-files --others --exclude-per-directory=.gitignore
> test.o
> $
> 
> Before I attempt to fix it, I'd like to make sure it's a bug, not a
> feature.

I for one consider it a bug.
I expect exactly same output if I do
git ls-files t/
or
cd t; git ls-files

Very usefull when I limit grep to some part of the kernel tree for
example.

	Sam

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] ls-files: honour per-directory ignore file from higher directories.
  2006-01-25  6:11 ` Sam Ravnborg
@ 2006-02-09  8:16   ` Junio C Hamano
  2006-02-10  3:38     ` Pavel Roskin
  0 siblings, 1 reply; 6+ messages in thread
From: Junio C Hamano @ 2006-02-09  8:16 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: Sam Ravnborg, git

When git-ls-files -o --exclude-per-directory=.gitignore is run
from a subdirectory, it did not read from .gitignore from its
parent directory.  Reading from them makes output from these two
commands consistent:

    $ git ls-files -o --exclude-per-directory=.gitignore Documentation
    $ cd Documentation &&
      git ls-files -o --exclude-per-directory=.gitignore

Signed-off-by: Junio C Hamano <junkio@cox.net>

---

 * If there are positive feedbacks on this one, I consider it
   a safe enough candidate to be included in 1.2.0 release.

 ls-files.c |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

701ca744e386c2429ca44072ea987bbb4bdac7ce
diff --git a/ls-files.c b/ls-files.c
index 6af3b09..7024cf1 100644
--- a/ls-files.c
+++ b/ls-files.c
@@ -474,8 +474,28 @@ static void show_files(void)
 		const char *path = ".", *base = "";
 		int baselen = prefix_len;
 
-		if (baselen)
+		if (baselen) {
 			path = base = prefix;
+			if (exclude_per_dir) {
+				char *p, *pp = xmalloc(baselen+1);
+				memcpy(pp, prefix, baselen+1);
+				p = pp;
+				while (1) {
+					char save = *p;
+					*p = 0;
+					push_exclude_per_directory(pp, p-pp);
+					*p++ = save;
+					if (!save)
+						break;
+					p = strchr(p, '/');
+					if (p)
+						p++;
+					else
+						p = pp + baselen;
+				}
+				free(pp);
+			}
+		}
 		read_directory(path, base, baselen);
 		qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name);
 		if (show_others)
-- 
1.1.6.gbb042

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] ls-files: honour per-directory ignore file from higher directories.
  2006-02-09  8:16   ` [PATCH] ls-files: honour per-directory ignore file from higher directories Junio C Hamano
@ 2006-02-10  3:38     ` Pavel Roskin
  2006-02-10  4:44       ` Junio C Hamano
  0 siblings, 1 reply; 6+ messages in thread
From: Pavel Roskin @ 2006-02-10  3:38 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Sam Ravnborg, git

Hello, Junio!

On Thu, 2006-02-09 at 00:16 -0800, Junio C Hamano wrote:
> When git-ls-files -o --exclude-per-directory=.gitignore is run
> from a subdirectory, it did not read from .gitignore from its
> parent directory.  Reading from them makes output from these two
> commands consistent:

You beat me at that.  Thank you!

With this patch, the simplified version of cg-clean passes the cogito
testsuite.  That's where the original bug was caught.

>  * If there are positive feedbacks on this one, I consider it
>    a safe enough candidate to be included in 1.2.0 release.

Yes, it would be nice to see it released.

-- 
Regards,
Pavel Roskin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] ls-files: honour per-directory ignore file from higher directories.
  2006-02-10  3:38     ` Pavel Roskin
@ 2006-02-10  4:44       ` Junio C Hamano
  0 siblings, 0 replies; 6+ messages in thread
From: Junio C Hamano @ 2006-02-10  4:44 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: Sam Ravnborg, git

Pavel Roskin <proski@gnu.org> writes:

> With this patch, the simplified version of cg-clean passes the cogito
> testsuite.  That's where the original bug was caught.

Thanks for testing it.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-02-10  4:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-24 17:59 git-ls-files in subdirectories ignore higher-up .gitignore Pavel Roskin
2006-01-25  2:08 ` Junio C Hamano
2006-01-25  6:11 ` Sam Ravnborg
2006-02-09  8:16   ` [PATCH] ls-files: honour per-directory ignore file from higher directories Junio C Hamano
2006-02-10  3:38     ` Pavel Roskin
2006-02-10  4:44       ` Junio C Hamano

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).