git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: Petr Baudis <pasky@suse.cz>
Cc: Catalin Marinas <catalin.marinas@gmail.com>,
	Linus Torvalds <torvalds@osdl.org>,
	git@vger.kernel.org, Marco Costalba <mcostalba@yahoo.it>
Subject: Re: [RFC] extending git-ls-files --exclude.
Date: Thu, 28 Jul 2005 22:04:36 -0700	[thread overview]
Message-ID: <7vack6mcd7.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: 20050728155210.GA17952@pasky.ji.cz

Petr Baudis <pasky@suse.cz> writes:

> You generally don't say "I never want this ignored, but I want
> the rest of that ignored", but "I want that ignored, except
> this".

OK.

> But more importantly,
>
> 	.gitignore: *.txt
> 	Documentation/.gitignore: !*.txt
>
> will not work, which was the whole _point_ of the exclusion.

I agree that this is a bigger issue.

My updated proposal is as follows:

 * We collect --exclude patterns in "command line patterns"
   list, in the same order as given on the command line.

 * We collect patterns read from the files specified with
   --exclude-from in "exclude-from patterns" list, in the same
   order as given on the command line and the same order
   patterns appear in the file.

 * While we descend the directories, files named by EPD flag, if
   found, are read from top to bottom and concatenated into the
   "per directory patterns" list.  When leaving the directory,
   the patterns read from that directory's EPD file are popped
   off.

 * When checking a file to see if it is excluded, we first look
   at "exclude-from patterns" list, then "per directory
   patterns" list, and then "command line patterns list", in
   that order.  The last match wins [*1*].

An example:

You have three files in your git source tree and your $HOME:

    git/.gitignore                      lists patterns A and B
    git/Documentation/.gitignore        lists patterns C and D
    git/.git/info/ignore                lists patterns E and F
    $HOME/.gitrc/ignore                 lists patterns G and H

You say:

    git-ls-files --others \
        --exclude=I --exclude=J \
        --exclude-from=.git/info/ignore \
        --exclude-from=~/.gitrc/ignore \
        --exclude-per-directory=.gitignore \

While in git/ directory itself, the following patterns are
checked and the last match wins:

    E F G H   A B       I J

When we descend into git/Documentation, the list of patterns
used becomes the following, still the last match wins:

    E F G H   A B C D   I J

The reason --exclude-from comes first (i.e. having the least say
in the outcome) and --exclude comes last (i.e. having the most
say) is because the former is to give the overall fallback
default, and the latter is the ultimate end user preference.

Does this sound reasonable?

[Footnote]

*1* In real implementation, I would probably scan in reverse
from the end and stop at the first match, but that is an
implementation detail.

  parent reply	other threads:[~2005-07-29  5:04 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-21 20:23 [PATCH 1/1] Tell vim the textwidth is 75 Bryan larsen
2005-07-22  2:50 ` Junio C Hamano
2005-07-22 10:37   ` Catalin Marinas
2005-07-22 19:24     ` Sam Ravnborg
2005-07-22 20:39       ` Junio C Hamano
2005-07-22 20:59         ` Petr Baudis
2005-07-24 22:49           ` [RFC] extending git-ls-files --exclude Junio C Hamano
2005-07-24 22:50             ` [PATCH] git-ls-files: --exclude mechanism updates Junio C Hamano
2005-07-24 22:51             ` [PATCH] Documentation: describe git-ls-files --exclude patterns Junio C Hamano
2005-07-25  9:19             ` [RFC] extending git-ls-files --exclude Catalin Marinas
2005-07-25 19:58               ` Junio C Hamano
2005-07-25 20:09                 ` Linus Torvalds
2005-07-25 20:27                   ` Junio C Hamano
2005-07-25 20:51                     ` Catalin Marinas
2005-07-28 15:57                     ` Petr Baudis
2005-07-25 20:59                 ` Catalin Marinas
2005-07-28 15:52             ` Petr Baudis
2005-07-28 16:04               ` A Large Angry SCM
2005-07-28 19:25                 ` Matthias Urlichs
2005-07-29  7:21                   ` Petr Baudis
2005-07-29  7:37                     ` Matthias Urlichs
2005-07-29 13:49                     ` A Large Angry SCM
2005-07-29  5:04               ` Junio C Hamano [this message]
2005-07-29  7:36                 ` Petr Baudis
2005-07-29  8:24                   ` Junio C Hamano
2005-07-29  8:41                     ` Petr Baudis
2005-08-01 16:14                     ` Wayne Scott
2005-07-29  7:50                 ` [PATCH] ls-files: rework exclude patterns Junio C Hamano
2005-07-29  7:51                 ` [PATCH] Documentation and tests: ls-files exclude pattern Junio C Hamano
2005-07-22 21:43         ` [PATCH 1/1] Tell vim the textwidth is 75 Catalin Marinas
2005-07-22 23:07           ` Junio C Hamano
2005-07-23  8:41             ` Catalin Marinas
2005-07-23  9:30               ` Petr Baudis
2005-07-23 10:27                 ` Catalin Marinas
2005-07-23 16:33                   ` Bryan Larsen
2005-07-23 20:52                     ` Catalin Marinas
2005-07-28 19:47                   ` Petr Baudis
2005-07-29  2:24                     ` Junio C Hamano
2005-07-29  2:59                       ` Linus Torvalds
2005-07-29  9:55                     ` Catalin Marinas
2005-07-29 11:10                       ` Petr Baudis
2005-07-29 12:34                         ` Catalin Marinas
2005-07-30  2:11                         ` Junio C Hamano
2005-07-23  9:04             ` Petr Baudis
2005-07-24  1:13               ` Junio C Hamano
2005-07-22 21:00       ` Catalin Marinas
2005-07-22 20:41     ` Petr Baudis
2005-07-22 21:16       ` Junio C Hamano
2005-07-22 21:27         ` Petr Baudis
2005-07-22 23:24           ` Junio C Hamano
2005-07-22 23:50             ` Petr Baudis
2005-07-23 10:32             ` Catalin Marinas
2005-07-26  0:18             ` Updating diff-raw status letter to 'A' for added files Junio C Hamano
2005-07-26  0:20               ` [PATCH 1/2] Use symbolic constants for diff-raw status indicators Junio C Hamano
2005-07-26  0:21               ` [PATCH 2/2] diff-raw: Use 'A' instead of 'N' for added files Junio C Hamano
  -- strict thread matches above, loose matches on Subject: below --
2005-07-25  6:41 [RFC] extending git-ls-files --exclude Marco Costalba
2005-07-25  7:32 ` Junio C Hamano
2005-07-25 19:56 ` Junio C Hamano
     [not found] <20050725213456.23910.qmail@web26310.mail.ukl.yahoo.com>
2005-07-25 22:06 ` 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=7vack6mcd7.fsf@assigned-by-dhcp.cox.net \
    --to=junkio@cox.net \
    --cc=catalin.marinas@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=mcostalba@yahoo.it \
    --cc=pasky@suse.cz \
    --cc=torvalds@osdl.org \
    /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).