Skip to content
  • Junio C Hamano's avatar
    core.excludesfile clean-up · 039bc64e
    Junio C Hamano authored
    
    
    There are inconsistencies in the way commands currently handle
    the core.excludesfile configuration variable.  The problem is
    the variable is too new to be noticed by anything other than
    git-add and git-status.
    
     * git-ls-files does not notice any of the "ignore" files by
       default, as it predates the standardized set of ignore files.
       The calling scripts established the convention to use
       .git/info/exclude, .gitignore, and later core.excludesfile.
    
     * git-add and git-status know about it because they call
       add_excludes_from_file() directly with their own notion of
       which standard set of ignore files to use.  This is just a
       stupid duplication of code that need to be updated every time
       the definition of the standard set of ignore files is
       changed.
    
     * git-read-tree takes --exclude-per-directory=<gitignore>,
       not because the flexibility was needed.  Again, this was
       because the option predates the standardization of the ignore
       files.
    
     * git-merge-recursive uses hardcoded per-directory .gitignore
       and nothing else.  git-clean (scripted version) does not
       honor core.* because its call to underlying ls-files does not
       know about it.  git-clean in C (parked in 'pu') doesn't either.
    
    We probably could change git-ls-files to use the standard set
    when no excludes are specified on the command line and ignore
    processing was asked, or something like that, but that will be a
    change in semantics and might break people's scripts in a subtle
    way.  I am somewhat reluctant to make such a change.
    
    On the other hand, I think it makes perfect sense to fix
    git-read-tree, git-merge-recursive and git-clean to follow the
    same rule as other commands.  I do not think of a valid use case
    to give an exclude-per-directory that is nonstandard to
    read-tree command, outside a "negative" test in the t1004 test
    script.
    
    This patch is the first step to untangle this mess.
    
    The next step would be to teach read-tree, merge-recursive and
    clean (in C) to use setup_standard_excludes().
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    039bc64e