Code

git.git
13 years agoUpdate release notes to 1.7.6
Junio C Hamano [Mon, 16 May 2011 23:58:35 +0000 (16:58 -0700)]
Update release notes to 1.7.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'js/maint-1.6.6-send-pack-stateless-rpc-deadlock-fix' into js/maint...
Junio C Hamano [Tue, 17 May 2011 00:01:03 +0000 (17:01 -0700)]
Merge branch 'js/maint-1.6.6-send-pack-stateless-rpc-deadlock-fix' into js/maint-send-pack-stateless-rpc-deadlock-fix

* js/maint-1.6.6-send-pack-stateless-rpc-deadlock-fix:
  sideband_demux(): fix decl-after-stmt

13 years agoMerge branch 'jc/convert'
Junio C Hamano [Mon, 16 May 2011 23:47:16 +0000 (16:47 -0700)]
Merge branch 'jc/convert'

* jc/convert:
  convert: make it harder to screw up adding a conversion attribute
  convert: make it safer to add conversion attributes
  convert: give saner names to crlf/eol variables, types and functions
  convert: rename the "eol" global variable to "core_eol"

13 years agoMerge branch 'ci/commit--interactive-atomic'
Junio C Hamano [Mon, 16 May 2011 23:47:10 +0000 (16:47 -0700)]
Merge branch 'ci/commit--interactive-atomic'

* ci/commit--interactive-atomic:
  Test atomic git-commit --interactive
  Add commit to list of config.singlekey commands
  Add support for -p/--patch to git-commit
  Allow git commit --interactive with paths
  t7501.8: feed a meaningful command
  Use a temporary index for git commit --interactive

13 years agoMerge branch 'sg/completion-updates'
Junio C Hamano [Mon, 16 May 2011 23:47:00 +0000 (16:47 -0700)]
Merge branch 'sg/completion-updates'

* sg/completion-updates:
  Revert "completion: don't declare 'local words' to make zsh happy"
  git-completion: fix regression in zsh support
  completion: move private shopt shim for zsh to __git_ namespace
  completion: don't declare 'local words' to make zsh happy

13 years agoMerge branch 'kk/maint-prefix-in-config-mak'
Junio C Hamano [Mon, 16 May 2011 23:46:53 +0000 (16:46 -0700)]
Merge branch 'kk/maint-prefix-in-config-mak'

* kk/maint-prefix-in-config-mak:
  Honor $(prefix) set in config.mak* when defining ETC_GIT*
  Revert "Honor $(prefix) set in config.mak* when defining ETC_GIT* and sysconfdir"
  Honor $(prefix) set in config.mak* when defining ETC_GIT* and sysconfdir

13 years agoMerge branch 'mg/merge-ff-config'
Junio C Hamano [Mon, 16 May 2011 23:46:23 +0000 (16:46 -0700)]
Merge branch 'mg/merge-ff-config'

* mg/merge-ff-config:
  tests: check git does not barf on merge.ff values for future versions of git
  merge: introduce merge.ff configuration variable

Conflicts:
t/t7600-merge.sh

13 years agoMerge branch 'maint'
Junio C Hamano [Mon, 16 May 2011 23:44:57 +0000 (16:44 -0700)]
Merge branch 'maint'

* maint:
  Update draft release notes to 1.7.5.2
  Documentation/git-fsck.txt: fix typo: unreadable -> unreachable

13 years agoUpdate draft release notes to 1.7.5.2
Junio C Hamano [Mon, 16 May 2011 23:44:50 +0000 (16:44 -0700)]
Update draft release notes to 1.7.5.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jn/maint-format-patch-doc' into maint
Junio C Hamano [Mon, 16 May 2011 23:39:09 +0000 (16:39 -0700)]
Merge branch 'jn/maint-format-patch-doc' into maint

* jn/maint-format-patch-doc:
  Documentation: describe the format of messages with inline patches

13 years agoMerge branch 'ss/cherry-pick-x-doc' into maint
Junio C Hamano [Mon, 16 May 2011 23:38:56 +0000 (16:38 -0700)]
Merge branch 'ss/cherry-pick-x-doc' into maint

* ss/cherry-pick-x-doc:
  doc: Clarify that "cherry-pick -x" does not use "git notes"

13 years agoMerge branch 'vr/merge-base-doc' into maint
Junio C Hamano [Mon, 16 May 2011 23:38:46 +0000 (16:38 -0700)]
Merge branch 'vr/merge-base-doc' into maint

* vr/merge-base-doc:
  Restructure documentation for git-merge-base.
  Documentation: update to git-merge-base --octopus

13 years agoMerge branch 'sr/maint-fast-import-tighten-option-parsing' into maint
Junio C Hamano [Mon, 16 May 2011 23:38:16 +0000 (16:38 -0700)]
Merge branch 'sr/maint-fast-import-tighten-option-parsing' into maint

* sr/maint-fast-import-tighten-option-parsing:
  fast-import: fix option parser for no-arg options

13 years agoMerge branch 'jc/t1506-shell-param-expansion-gotcha' into maint
Junio C Hamano [Mon, 16 May 2011 23:37:54 +0000 (16:37 -0700)]
Merge branch 'jc/t1506-shell-param-expansion-gotcha' into maint

* jc/t1506-shell-param-expansion-gotcha:
  t1507: avoid "${parameter<op>'word'}" inside double-quotes

13 years agoMerge branch 'jc/fix-add-u-unmerged' into maint
Junio C Hamano [Mon, 16 May 2011 23:37:33 +0000 (16:37 -0700)]
Merge branch 'jc/fix-add-u-unmerged' into maint

* jc/fix-add-u-unmerged:
  Fix "add -u" that sometimes fails to resolve unmerged paths

Conflicts:
builtin/add.c

13 years agoMerge branch 'jn/gitweb-dependency' into maint
Junio C Hamano [Mon, 16 May 2011 23:37:12 +0000 (16:37 -0700)]
Merge branch 'jn/gitweb-dependency' into maint

* jn/gitweb-dependency:
  Remove gitweb/gitweb.cgi and other legacy targets from main Makefile
  git-instaweb: Simplify build dependency on gitweb

13 years agoMerge branch 'jc/maint-branch-mergeoptions' into maint
Junio C Hamano [Mon, 16 May 2011 23:37:07 +0000 (16:37 -0700)]
Merge branch 'jc/maint-branch-mergeoptions' into maint

* jc/maint-branch-mergeoptions:
  merge: make branch.<name>.mergeoptions correctly override merge.<option>

Conflicts:
builtin/merge.c

13 years agoMerge branch 'jc/maint-add-p-overlapping-hunks' into maint
Junio C Hamano [Mon, 16 May 2011 23:36:46 +0000 (16:36 -0700)]
Merge branch 'jc/maint-add-p-overlapping-hunks' into maint

* jc/maint-add-p-overlapping-hunks:
  t3701: add-p-fix makes the last test to pass
  "add -p": work-around an old laziness that does not coalesce hunks
  add--interactive.perl: factor out repeated --recount option
  t3701: Editing a split hunk in an "add -p" session
  add -p: 'q' should really quit

13 years agoDocumentation/git-fsck.txt: fix typo: unreadable -> unreachable
Jim Meyering [Mon, 16 May 2011 18:23:35 +0000 (20:23 +0200)]
Documentation/git-fsck.txt: fix typo: unreadable -> unreachable

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agosend-pack: avoid deadlock on git:// push with failed pack-objects
Jeff King [Mon, 16 May 2011 06:52:57 +0000 (02:52 -0400)]
send-pack: avoid deadlock on git:// push with failed pack-objects

Commit 09c9957c fixes a deadlock in which pack-objects
fails, the remote end is still waiting for pack data, and we
are still waiting for the remote end to say something (see
that commit for a much more in-depth explanation).

We solved the problem there by making sure the output pipe
is closed on error; thus the remote sees EOF, and proceeds
to complain and close its end of the connection.

However, in the special case of push over git://, we don't
have a pipe, but rather a full-duplex socket, with another
dup()-ed descriptor in place of the second half of the pipe.
In this case, closing the second descriptor signals nothing
to the remote end, and we still deadlock.

This patch calls shutdown() explicitly to signal EOF to the
other side.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoconnect: let callers know if connection is a socket
Jeff King [Mon, 16 May 2011 06:52:11 +0000 (02:52 -0400)]
connect: let callers know if connection is a socket

They might care because they want to do a half-duplex close.
With pipes, that means simply closing the output descriptor;
with a socket, you must actually call shutdown.

Instead of exposing the magic no_fork child_process struct,
let's encapsulate the test in a function.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoconnect: treat generic proxy processes like ssh processes
Jeff King [Mon, 16 May 2011 06:46:07 +0000 (02:46 -0400)]
connect: treat generic proxy processes like ssh processes

The git_connect function returns two ends of a pipe for
talking with a remote, plus a struct child_process
representing the other end of the pipe. If we have a direct
socket connection, then this points to a special "no_fork"
child process.

The code path for doing git-over-pipes or git-over-ssh sets
up this child process to point to the child git command or
the ssh process. When we call finish_connect eventually, we
check wait() on the command and report its return value.

The code path for git://, on the other hand, always sets it
to no_fork. In the case of a direct TCP connection, this
makes sense; we have no child process. But in the case of a
proxy command (configured by core.gitproxy), we do have a
child process, but we throw away its pid, and therefore
ignore its return code.

Instead, let's keep that information in the proxy case, and
respect its return code, which can help catch some errors
(though depending on your proxy command, it will be errors
reported by the proxy command itself, and not propagated
from git commands. Still, it is probably better to propagate
such errors than to ignore them).

It also means that the child_process field can reliably be
used to determine whether the returned descriptors are
actually a full-duplex socket, which means we should be
using shutdown() instead of a simple close.

Signed-off-by: Jeff King <peff@peff.net>
Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agosideband_demux(): fix decl-after-stmt
Junio C Hamano [Mon, 16 May 2011 23:19:49 +0000 (16:19 -0700)]
sideband_demux(): fix decl-after-stmt

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot3503: test cherry picking and reverting root commits
Jeff King [Thu, 12 May 2011 11:10:07 +0000 (07:10 -0400)]
t3503: test cherry picking and reverting root commits

We already tested cherry-picking a root commit, but only
with the internal merge-recursive strategy. Let's also test
the recently-allowed reverting of a root commit, as well as
testing with external strategies (which until recently
triggered a segfault).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorevert: allow reverting a root commit
Jeff King [Thu, 12 May 2011 11:09:55 +0000 (07:09 -0400)]
revert: allow reverting a root commit

Although it is probably an uncommon operation, there is no
reason to disallow it, as it works just fine. It is the
reverse of a cherry-pick of a root commit, which is already
allowed.

We do have to tweak one check on whether we have a merge
commit, which assumed we had at least one parent.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocherry-pick: handle root commits with external strategies
Jeff King [Thu, 12 May 2011 11:09:46 +0000 (07:09 -0400)]
cherry-pick: handle root commits with external strategies

The merge-recursive strategy already handles root commits;
it cherry-picks the difference between the empty tree and
the root commit's tree.

However, for external strategies, we dereference NULL and
segfault while building the argument list. Instead, let's
handle this by passing the empty tree sha1 to the merge
script.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoSync release notes for 1.7.6 to exclude what are in maintenance track
Junio C Hamano [Sun, 15 May 2011 23:19:16 +0000 (16:19 -0700)]
Sync release notes for 1.7.6 to exclude what are in maintenance track

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'maint'
Junio C Hamano [Sun, 15 May 2011 23:16:56 +0000 (16:16 -0700)]
Merge branch 'maint'

* maint:
  Update draft release notes to 1.7.5.2
  git_open_noatime(): drop unused parameter
  sha1_file: typofix

13 years agoUpdate draft release notes to 1.7.5.2
Junio C Hamano [Sun, 15 May 2011 23:11:55 +0000 (16:11 -0700)]
Update draft release notes to 1.7.5.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'cn/format-patch-quiet' into maint
Junio C Hamano [Sun, 15 May 2011 23:10:49 +0000 (16:10 -0700)]
Merge branch 'cn/format-patch-quiet' into maint

* cn/format-patch-quiet:
  format-patch: document --quiet option
  format-patch: don't pass on the --quiet flag

13 years agoMerge branch 'jm/mergetool-submodules' into maint
Junio C Hamano [Sun, 15 May 2011 22:57:16 +0000 (15:57 -0700)]
Merge branch 'jm/mergetool-submodules' into maint

* jm/mergetool-submodules:
  mergetool: Teach about submodules

13 years agoMerge branch 'jk/format-patch-quote-special-in-from' into maint
Junio C Hamano [Sun, 15 May 2011 22:56:44 +0000 (15:56 -0700)]
Merge branch 'jk/format-patch-quote-special-in-from' into maint

* jk/format-patch-quote-special-in-from:
  pretty: quote rfc822 specials in email addresses

13 years agoMerge branch 'vh/git-svn-doc' into maint
Junio C Hamano [Sun, 15 May 2011 22:52:40 +0000 (15:52 -0700)]
Merge branch 'vh/git-svn-doc' into maint

* vh/git-svn-doc:
  git-svn.txt: small typeface improvements
  git-svn.txt: move option descriptions
  git-svn.txt: fix usage of --add-author-from

13 years agogit_open_noatime(): drop unused parameter
Junio C Hamano [Sun, 15 May 2011 19:16:29 +0000 (12:16 -0700)]
git_open_noatime(): drop unused parameter

Since commit c793430 (Limit file descriptors used by packs, 2011-02-28),
the extra parameter added in f2e872aa (Work around EMFILE when there are
too many pack files, 2010-11-01) is not used anymore.

Remove it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
13 years agosha1_file: typofix
Junio C Hamano [Sun, 15 May 2011 19:16:03 +0000 (12:16 -0700)]
sha1_file: typofix

The number zero is spelled "zero", not "zer0".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoread_sha1_file(): allow selective bypassing of replacement mechanism
Junio C Hamano [Sun, 15 May 2011 19:54:54 +0000 (12:54 -0700)]
read_sha1_file(): allow selective bypassing of replacement mechanism

The way "object replacement" mechanism was tucked to the read_sha1_file()
interface was suboptimal in a couple of ways:

 - Callers that want it to die with useful diagnosis upon seeing a corrupt
   object does not have a way to say that they do not want any object
   replacement.

 - Callers who do not want it to die but want to handle the errors
   themselves are told to arrange to call read_object(), but the function
   does not use the replacement mechanism, and also it is a file scope
   static function that not many callers can call to begin with.

This adds a read_sha1_file_extended() that takes a set of flags; the
callers of read_sha1_file() passes a flag READ_SHA1_FILE_REPLACE to ask
for object replacement mechanism to kick in.

Later, we could add another flag bit to tell the function to return an
error instead of dying and then remove the misguided "call read_object()
yourself".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoinline lookup_replace_object() calls
Junio C Hamano [Sun, 15 May 2011 19:54:53 +0000 (12:54 -0700)]
inline lookup_replace_object() calls

In a repository without object replacement, lookup_replace_object() should
be a no-op. Check the flag "read_replace_refs" on the side of the caller,
and bypess a function call when we know we are not dealing with replacement.

Also, even when we are set up to replace objects, if we do not find any
replacement defined, flip that flag off to avoid function call overhead
for all the later object accesses.

As this change the semantics of the flag from "do we need read the
replacement definition?" to "do we need to check with the lookup table?"
the flag needs to be renamed later to something saner, e.g. "use_replace",
when the codebase is calmer, but not now.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoread_sha1_file(): get rid of read_sha1_file_repl() madness
Junio C Hamano [Sun, 15 May 2011 19:54:52 +0000 (12:54 -0700)]
read_sha1_file(): get rid of read_sha1_file_repl() madness

Most callers want to silently get a replacement object, and they do not
care what the real name of the replacement object is.  Worse yet, no sane
interface to return the underlying object without replacement is provided.

Remove the function and make only the few callers that want the name of
the replacement object find it themselves.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot6050: make sure we test not just commit replacement
Junio C Hamano [Sun, 15 May 2011 19:54:51 +0000 (12:54 -0700)]
t6050: make sure we test not just commit replacement

The replacement mechanism should affect all types of objects not
just commits, so make sure it deals with at least a blob.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDeclare lookup_replace_object() in cache.h, not in commit.h
Junio C Hamano [Sun, 15 May 2011 19:54:50 +0000 (12:54 -0700)]
Declare lookup_replace_object() in cache.h, not in commit.h

The declaration is misplaced as the replace API is supposed to affect
not just commits, but all types of objects.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'maint'
Junio C Hamano [Sun, 15 May 2011 03:44:09 +0000 (20:44 -0700)]
Merge branch 'maint'

* maint:
  add, merge, diff: do not use strcasecmp to compare config variable names

13 years agoMakefile: add xgettext target for *.sh files
Ævar Arnfjörð Bjarmason [Sat, 14 May 2011 13:47:45 +0000 (13:47 +0000)]
Makefile: add xgettext target for *.sh files

Change the "pot" target to also extract strings from our $(SCRIPT_SH)
files with xgettext(1).

Note that due to Jonathan Nieder's trick of doing "mv $@+ $@" at the
end of the target the "pot" target will now warn:

    $ make pot
        XGETTEXT po/git.pot
    po/git.pot+: warning: Charset "CHARSET" is not a portable encoding name.
                          Message conversion to user's charset might not work.

This warnings is emitted because xgettext is writing into a non-*.pot
file, it's harmless however. The content that's written out is
equivalent to what it would be if we were writing directly into an
existing POT file with --join-existing.

As part of this change I've eliminated the && chain between xgettext
calls, this is incompatible with $(QUIET_XGETTEXT), if the && is left
in it'll emit:

    /bin/sh: @echo: not found

Since it's redundant (the Makefile will stop if there's an error) I've
removed it altogether.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-sh-i18n.sh: add GIT_GETTEXT_POISON support
Ævar Arnfjörð Bjarmason [Sat, 14 May 2011 13:47:44 +0000 (13:47 +0000)]
git-sh-i18n.sh: add GIT_GETTEXT_POISON support

Change git-sh-i18n.sh to support the GIT_GETTEXT_POISON environment
variable like gettext.c does, this ensures that tests that use
git-sh-i18n.sh will fail under GETTEXT_POISON=YesPlease if they rely
on Git's C locale messages without declaring that they do.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-sh-i18n.sh: add no-op gettext() and eval_gettext() wrappers
Ævar Arnfjörð Bjarmason [Sat, 14 May 2011 13:47:43 +0000 (13:47 +0000)]
git-sh-i18n.sh: add no-op gettext() and eval_gettext() wrappers

Add a no-op wrapper library for Git's shell scripts. To split up the
gettext series I'm first submitting patches to gettextize the source
tree before I add any of the Makefile and Shell library changes needed
to actually use them.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-sh-i18n--envsubst: our own envsubst(1) for eval_gettext()
Ævar Arnfjörð Bjarmason [Sat, 14 May 2011 13:47:42 +0000 (13:47 +0000)]
git-sh-i18n--envsubst: our own envsubst(1) for eval_gettext()

Add a git-sh-i18n--envsubst program which is a stripped-down version
of the GNU envsubst(1) program that comes with GNU gettext for use in
the eval_gettext() fallback.

We need a C helper program because implementing eval_gettext() purely
in shell turned out to be unworkable. Digging through the Git mailing
list archives will reveal two shell implementations of eval_gettext
that are almost good enough, but fail on an edge case which is tested
for in the tests which are part of this patch.

These are the modifications I made to envsubst.c as I turned it into
sh-i18n--envsubst.c:

 * Added our git-compat-util.h header for xrealloc() and friends.

 * Removed inclusion of gettext-specific headers.

 * Removed most of main() and replaced it with my own. The modified
   version only does option parsing for --variables. That's all it
   needs.

 * Modified error() invocations to use our error() instead of
   error(3).

 * Replaced the gettext XNMALLOC(n, size) macro with just
   xmalloc(n). Since XNMALLOC() only allocated char's.

 * Removed the string_list_destroy function. It's redundant (also in
   the upstream code).

 * Replaced the use of stdbool.h (a C99 header) by doing the following
   replacements on the code:

    * s/bool/unsigned short int/g
    * s/true/1/g
    * s/false/0/g

Reported-by: Johannes Sixt <j.sixt@viscovery.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoadd, merge, diff: do not use strcasecmp to compare config variable names
Jonathan Nieder [Sat, 14 May 2011 20:19:21 +0000 (15:19 -0500)]
add, merge, diff: do not use strcasecmp to compare config variable names

The config machinery already makes section and variable names
lowercase when parsing them, so using strcasecmp for comparison just
feels wasteful.  No noticeable change intended.

Noticed-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoSubmodules: Don't parse .gitmodules when it contains, merge conflicts
Jens Lehmann [Sat, 14 May 2011 16:26:58 +0000 (18:26 +0200)]
Submodules: Don't parse .gitmodules when it contains, merge conflicts

Commands like "git status", "git diff" and "git fetch" would fail when the
.gitmodules file contained merge conflicts because the config parser would
call die() when hitting the conflict markers:

    "fatal: bad config file line <n> in <path>/.gitmodules"

While this behavior was on the safe side, it is really unhelpful to the
user to have commands like status and diff fail, as these are needed to
find out what's going on. And the error message is only mildly helpful,
as it points to the right file but doesn't mention that it is unmerged.
Users of git gui were not shown any conflicts at all when this happened.

Improve the situation by checking if the index records .gitmodules as
unmerged. When that is the case we can't make any assumptions about the
configuration to be found there after the merge conflict is resolved by
the user, so assume that all recursion is disabled unless .git/config or
the global config say otherwise.

As soon as the merge conflict is resolved and the .gitmodules file has
been staged subsequent commands again honor any configuration done there.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agotest that git status works with merge conflict in, .gitmodules
Heiko Voigt [Sat, 14 May 2011 16:26:30 +0000 (18:26 +0200)]
test that git status works with merge conflict in, .gitmodules

For example: Two users independently adding a submodule will result in a
merge conflict in .gitmodules. Since configuration of the status and
diff machinery depends on the file being parseable they currently
fail to produce useable output in case .gitmodules is marked with a
merge conflict.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoBigfile: teach "git add" to send a large file straight to a pack
Junio C Hamano [Sun, 8 May 2011 08:47:35 +0000 (01:47 -0700)]
Bigfile: teach "git add" to send a large file straight to a pack

When adding a new content to the repository, we have always slurped
the blob in its entirety in-core first, and computed the object name
and compressed it into a loose object file.  Handling large binary
files (e.g.  video and audio asset for games) has been problematic
because of this design.

At the middle level of "git add" callchain is an internal API
index_fd() that takes an open file descriptor to read from the
working tree file being added with its size. Teach it to call out to
fast-import when adding a large blob.

The write-out codepath in entry.c::write_entry() should be taught to
stream, instead of reading everything in core. This should not be so
hard to implement, especially if we limit ourselves only to loose
object files and non-delta representation in packfiles.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-p4: warn if git authorship won't be retained
Luke Diamand [Fri, 13 May 2011 19:46:00 +0000 (20:46 +0100)]
git-p4: warn if git authorship won't be retained

If the git commits you are submitting contain changes made by
other people, the authorship will not be retained. Change git-p4
to warn of this and to note that --preserve-user can be used
to solve the problem (if you have suitable permissions).
The warning can be disabled.

Add a test case and update documentation.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoUpdate draft release notes to 1.7.6
Junio C Hamano [Fri, 13 May 2011 18:14:07 +0000 (11:14 -0700)]
Update draft release notes to 1.7.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'bf/commit-template-no-cleanup'
Junio C Hamano [Fri, 13 May 2011 18:03:08 +0000 (11:03 -0700)]
Merge branch 'bf/commit-template-no-cleanup'

* bf/commit-template-no-cleanup:
  Do not strip empty lines / trailing spaces from a commit message template

13 years agoMerge branch 'jc/t1506-shell-param-expansion-gotcha'
Junio C Hamano [Fri, 13 May 2011 18:02:47 +0000 (11:02 -0700)]
Merge branch 'jc/t1506-shell-param-expansion-gotcha'

* jc/t1506-shell-param-expansion-gotcha:
  t1507: avoid "${parameter<op>'word'}" inside double-quotes

13 years agoMerge branch 'rr/rerere-libify-clear-gc'
Junio C Hamano [Fri, 13 May 2011 18:02:40 +0000 (11:02 -0700)]
Merge branch 'rr/rerere-libify-clear-gc'

* rr/rerere-libify-clear-gc:
  rerere: libify rerere_clear() and rerere_gc()

13 years agoMerge branch 'js/maint-send-pack-stateless-rpc-deadlock-fix'
Junio C Hamano [Fri, 13 May 2011 18:02:29 +0000 (11:02 -0700)]
Merge branch 'js/maint-send-pack-stateless-rpc-deadlock-fix'

* js/maint-send-pack-stateless-rpc-deadlock-fix:
  send-pack: unbreak push over stateless rpc
  send-pack: avoid deadlock when pack-object dies early

13 years agoMerge branch 'jh/dirstat-lines'
Junio C Hamano [Fri, 13 May 2011 18:01:32 +0000 (11:01 -0700)]
Merge branch 'jh/dirstat-lines'

* jh/dirstat-lines:
  Mark dirstat error messages for translation
  Improve error handling when parsing dirstat parameters
  New --dirstat=lines mode, doing dirstat analysis based on diffstat
  Allow specifying --dirstat cut-off percentage as a floating point number
  Add config variable for specifying default --dirstat behavior
  Refactor --dirstat parsing; deprecate --cumulative and --dirstat-by-file
  Make --dirstat=0 output directories that contribute < 0.1% of changes
  Add several testcases for --dirstat and friends

13 years agoMerge branch 'jc/fix-add-u-unmerged'
Junio C Hamano [Fri, 13 May 2011 18:01:15 +0000 (11:01 -0700)]
Merge branch 'jc/fix-add-u-unmerged'

* jc/fix-add-u-unmerged:
  Fix "add -u" that sometimes fails to resolve unmerged paths

13 years agoMerge branch 'jn/setup-revisions-glob-and-friends-passthru'
Junio C Hamano [Fri, 13 May 2011 18:00:25 +0000 (11:00 -0700)]
Merge branch 'jn/setup-revisions-glob-and-friends-passthru'

* jn/setup-revisions-glob-and-friends-passthru:
  revisions: allow --glob and friends in parse_options-enabled commands
  revisions: split out handle_revision_pseudo_opt function

13 years agoMerge branch 'cn/log-parse-opt'
Junio C Hamano [Fri, 13 May 2011 17:59:57 +0000 (10:59 -0700)]
Merge branch 'cn/log-parse-opt'

* cn/log-parse-opt:
  log: convert to parse-options

13 years agoMerge branch 'maint'
Junio C Hamano [Fri, 13 May 2011 17:58:10 +0000 (10:58 -0700)]
Merge branch 'maint'

* maint:
  Prepare for 1.7.5.2
  t5400: Fix a couple of typos

Conflicts:
RelNotes

13 years agoPrepare for 1.7.5.2
Junio C Hamano [Fri, 13 May 2011 17:57:09 +0000 (10:57 -0700)]
Prepare for 1.7.5.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'aw/maint-rebase-i-p-no-ff' into maint
Junio C Hamano [Fri, 13 May 2011 17:45:21 +0000 (10:45 -0700)]
Merge branch 'aw/maint-rebase-i-p-no-ff' into maint

* aw/maint-rebase-i-p-no-ff:
  git-rebase--interactive.sh: preserve-merges fails on merges created with no-ff

13 years agoMerge branch 'js/blame-parsename' into maint
Junio C Hamano [Fri, 13 May 2011 17:45:00 +0000 (10:45 -0700)]
Merge branch 'js/blame-parsename' into maint

* js/blame-parsename:
  t/annotate-tests: Use echo & cat instead of sed
  blame: tolerate bogus e-mail addresses a bit better

13 years agoMerge branch 'gr/cvsimport-alternative-cvspass-location' into maint
Junio C Hamano [Fri, 13 May 2011 17:44:54 +0000 (10:44 -0700)]
Merge branch 'gr/cvsimport-alternative-cvspass-location' into maint

* gr/cvsimport-alternative-cvspass-location:
  Look for password in both CVS and CVSNT password files.

13 years agoMerge branch 'cj/p4merge' into maint
Junio C Hamano [Fri, 13 May 2011 17:44:46 +0000 (10:44 -0700)]
Merge branch 'cj/p4merge' into maint

* cj/p4merge:
  Pass empty file to p4merge where no base is suitable.

13 years agoMerge branch 'jk/merge-one-file-working-tree' into maint
Junio C Hamano [Fri, 13 May 2011 17:44:19 +0000 (10:44 -0700)]
Merge branch 'jk/merge-one-file-working-tree' into maint

* jk/merge-one-file-working-tree:
  merge-one-file: fix broken merges with alternate work trees
  add tests for merge-index / merge-one-file

13 years agoMerge branch 'jc/fix-diff-files-unmerged' into maint
Junio C Hamano [Fri, 13 May 2011 17:41:54 +0000 (10:41 -0700)]
Merge branch 'jc/fix-diff-files-unmerged' into maint

* jc/fix-diff-files-unmerged:
  diff-files: show unmerged entries correctly
  diff: remove often unused parameters from diff_unmerge()
  diff.c: return filepair from diff_unmerge()
  test: use $_z40 from test-lib

13 years agoMerge branch 'mz/maint-rename-unmerged' into maint
Junio C Hamano [Fri, 13 May 2011 17:41:24 +0000 (10:41 -0700)]
Merge branch 'mz/maint-rename-unmerged' into maint

* mz/maint-rename-unmerged:
  diffcore-rename: don't consider unmerged path as source

13 years agot5400: Fix a couple of typos
Johan Herland [Fri, 13 May 2011 16:43:29 +0000 (18:43 +0200)]
t5400: Fix a couple of typos

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'nd/struct-pathspec'
Junio C Hamano [Fri, 13 May 2011 05:36:41 +0000 (22:36 -0700)]
Merge branch 'nd/struct-pathspec'

* nd/struct-pathspec:
  Tweak t3102-ls-tree-wildcards to run on Windows

13 years agoTweak t3102-ls-tree-wildcards to run on Windows
Johannes Sixt [Thu, 12 May 2011 08:37:22 +0000 (10:37 +0200)]
Tweak t3102-ls-tree-wildcards to run on Windows

The test case fails on Windows, because "a*" is an invalid file name.
Therefore, use "a[a]" instead.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot3703: Skip tests using directory name ":" on Windows
Johannes Sixt [Thu, 12 May 2011 08:21:33 +0000 (10:21 +0200)]
t3703: Skip tests using directory name ":" on Windows

":" is not allowed in file names on Windows. Detect this case and skip a
test if necessary.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jc/maint-1.7.4-pathspec-stdin-and-cmdline'
Junio C Hamano [Wed, 11 May 2011 22:05:01 +0000 (15:05 -0700)]
Merge branch 'jc/maint-1.7.4-pathspec-stdin-and-cmdline'

Update the fix for 1.7.5 maintenance track.

* jc/maint-1.7.4-pathspec-stdin-and-cmdline:
  setup_revisions(): take pathspec from command line and --stdin correctly

13 years agoMerge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'
Junio C Hamano [Wed, 11 May 2011 21:57:45 +0000 (14:57 -0700)]
Merge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'

Update the fix for 1.7.4 maintenance track.

* jc/maint-1.6.6-pathspec-stdin-and-cmdline:
  setup_revisions(): take pathspec from command line and --stdin correctly

13 years agorevision.c: leave a note for "a lone :" enhancement
Junio C Hamano [Wed, 11 May 2011 22:23:25 +0000 (15:23 -0700)]
revision.c: leave a note for "a lone :" enhancement

If we later add a command in the log family that by default limit
its operation to the current subdirectory, we would need to resurrect
the "a lone ':' on the command line means no pathspec whatsoever".

Now the codepath was cleaned up, we can do so in one place.  Leave a
note to mark where it is for later generations.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'
Junio C Hamano [Wed, 11 May 2011 22:14:13 +0000 (15:14 -0700)]
Merge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'

* jc/maint-1.6.6-pathspec-stdin-and-cmdline:
  setup_revisions(): take pathspec from command line and --stdin correctly

13 years agoMerge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'
Junio C Hamano [Wed, 11 May 2011 21:57:45 +0000 (14:57 -0700)]
Merge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'

Update the fix for 1.7.4 maintenance track.

* jc/maint-1.6.6-pathspec-stdin-and-cmdline:
  setup_revisions(): take pathspec from command line and --stdin correctly

13 years agosetup_revisions(): take pathspec from command line and --stdin correctly
Junio C Hamano [Wed, 11 May 2011 21:01:19 +0000 (14:01 -0700)]
setup_revisions(): take pathspec from command line and --stdin correctly

When the command line has "--" disambiguator, we take the remainder of
argv[] as "prune_data", but when --stdin is given at the same time,
we need to append to the existing prune_data and end up attempting to
realloc(3) it.  That would not work.

Fix it by consistently using append_prune_data() throughout the input
processing.  Also avoid counting the number of existing paths in the
function over and over again.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoUpdate draft release notes to 1.7.6
Junio C Hamano [Wed, 11 May 2011 18:56:11 +0000 (11:56 -0700)]
Update draft release notes to 1.7.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jn/gitweb-dependency'
Junio C Hamano [Wed, 11 May 2011 18:38:39 +0000 (11:38 -0700)]
Merge branch 'jn/gitweb-dependency'

* jn/gitweb-dependency:
  Remove gitweb/gitweb.cgi and other legacy targets from main Makefile
  git-instaweb: Simplify build dependency on gitweb

13 years agoMerge branch 'jc/maint-branch-mergeoptions'
Junio C Hamano [Wed, 11 May 2011 18:38:36 +0000 (11:38 -0700)]
Merge branch 'jc/maint-branch-mergeoptions'

* jc/maint-branch-mergeoptions:
  merge: make branch.<name>.mergeoptions correctly override merge.<option>

Conflicts:
builtin/merge.c

13 years agoMerge branch 'jn/maint-test-merge-verify-parents'
Junio C Hamano [Wed, 11 May 2011 18:38:10 +0000 (11:38 -0700)]
Merge branch 'jn/maint-test-merge-verify-parents'

* jn/maint-test-merge-verify-parents:
  tests: teach verify_parents to check for extra parents
  tests: eliminate unnecessary setup test assertions

13 years agoMerge branch 'vh/config-interactive-singlekey-doc'
Junio C Hamano [Wed, 11 May 2011 18:38:06 +0000 (11:38 -0700)]
Merge branch 'vh/config-interactive-singlekey-doc'

* vh/config-interactive-singlekey-doc:
  git-reset.txt: better docs for '--patch'
  git-checkout.txt: better docs for '--patch'
  git-stash.txt: better docs for '--patch'
  git-add.txt: document 'interactive.singlekey'
  config.txt: 'interactive.singlekey; is used by...

13 years agoMerge branch 'jc/maint-add-p-overlapping-hunks'
Junio C Hamano [Wed, 11 May 2011 18:37:46 +0000 (11:37 -0700)]
Merge branch 'jc/maint-add-p-overlapping-hunks'

* jc/maint-add-p-overlapping-hunks:
  t3701: add-p-fix makes the last test to pass
  "add -p": work-around an old laziness that does not coalesce hunks
  add--interactive.perl: factor out repeated --recount option
  t3701: Editing a split hunk in an "add -p" session
  add -p: 'q' should really quit

13 years agoMerge branch 'sr/maint-fast-import-tighten-option-parsing'
Junio C Hamano [Wed, 11 May 2011 18:37:41 +0000 (11:37 -0700)]
Merge branch 'sr/maint-fast-import-tighten-option-parsing'

* sr/maint-fast-import-tighten-option-parsing:
  fast-import: fix option parser for no-arg options

13 years agoMerge branch 'dm/http-cleanup'
Junio C Hamano [Wed, 11 May 2011 18:37:38 +0000 (11:37 -0700)]
Merge branch 'dm/http-cleanup'

* dm/http-cleanup:
  t5541-http-push: add test for chunked
  http-push: refactor curl_easy_setup madness
  http-push: use const for strings in signatures
  http: make curl callbacks match contracts from curl header

13 years agoMerge branch 'jn/ctags'
Junio C Hamano [Wed, 11 May 2011 18:37:32 +0000 (11:37 -0700)]
Merge branch 'jn/ctags'

* jn/ctags:
  gitweb: Mark matched 'ctag' / contents tag (?by_tag=foo)
  gitweb: Change the way "content tags" ('ctags') are handled
  gitweb: Restructure projects list generation

13 years agoDo not strip empty lines / trailing spaces from a commit message template
Boris Faure [Sun, 8 May 2011 10:31:02 +0000 (12:31 +0200)]
Do not strip empty lines / trailing spaces from a commit message template

Templates should be just that: A form that the user fills out, and forms
have blanks. If people are attached to not having extra whitespace in the
editor, they can simply clean up their templates.

Added test with editor adding even more whitespace.

Signed-off-by: Boris Faure <billiob@gmail.com>
Based-on-patch-by:Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'fc/completion-zsh' into sg/completion-updates
Junio C Hamano [Tue, 10 May 2011 20:14:58 +0000 (13:14 -0700)]
Merge branch 'fc/completion-zsh' into sg/completion-updates

* fc/completion-zsh:
  git-completion: fix regression in zsh support

13 years agoRevert "completion: don't declare 'local words' to make zsh happy"
Junio C Hamano [Tue, 10 May 2011 20:13:50 +0000 (13:13 -0700)]
Revert "completion: don't declare 'local words' to make zsh happy"

This reverts commit 3bee6a4733a1ff03b9cc659ea026c6dc17567d4d, as the fix
that will be used by upstream zsh folks should make it unnecessary.

13 years agogit-completion: fix regression in zsh support
Felipe Contreras [Tue, 10 May 2011 12:20:39 +0000 (15:20 +0300)]
git-completion: fix regression in zsh support

The zsh support of git-completion script in contrib/ is broken for current
versions of zsh, and does not notice when there's a subcommand.

For example: "git log origi<TAB>" gives no completions because it would
try to find a "git origi..." command. This will be fixed by zsh 4.3.12,
but for now we can workaround it by backporting the same fix as zsh folks
implemented.

The problem started after commit v1.7.4-rc0~11^2~2 (bash: get
--pretty=m<tab> completion to work with bash v4), which introduced
_get_comp_words_by_ref() that comes from bash-completion[1] scripts, and
relies on the 'words' variable.

However, it turns out 'words' is a special variable used by zsh
completion. From zshcompwid(1):

  [...] the parameters are reset on each function exit (including nested
  function calls from within the completion widget) to the values they had
  when the function was entered.

As a result, subcommand words are lost.  Ouch.

This is now fixed in the latest master branch of zsh[2] by simply defining
'words' as hidden (typeset -h), which removes the special meaning inside
the emulated bash function. So let's do the same.

Jonathan Nieder helped on the commit message.

  [1] http://bash-completion.alioth.debian.org/
  [2] http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=commitdiff;h=e880604f029088f32fb1ecc39213d720ae526aaa

Reported-by: Stefan Haller <lists@haller-berlin.de>
Comments-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoTest atomic git-commit --interactive
Conrad Irwin [Tue, 10 May 2011 19:12:31 +0000 (12:12 -0700)]
Test atomic git-commit --interactive

Signed-off-by: Conrad Irwin <conrad.irwin@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot3703, t4208: add test cases for magic pathspec
Nguyễn Thái Ngọc Duy [Sun, 8 May 2011 11:08:26 +0000 (18:08 +0700)]
t3703, t4208: add test cases for magic pathspec

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorev/path disambiguation: further restrict "misspelled index entry" diag
Junio C Hamano [Tue, 10 May 2011 19:05:01 +0000 (12:05 -0700)]
rev/path disambiguation: further restrict "misspelled index entry" diag

A colon followed by anything !isalnum() (e.g. ":/heh") at this point is
known not to be an existing rev.  Just give a generic "neither a rev nor
a path" error message.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agofix overslow :/no-such-string-ever-existed diagnostics
Junio C Hamano [Tue, 10 May 2011 19:02:54 +0000 (12:02 -0700)]
fix overslow :/no-such-string-ever-existed diagnostics

"git cmd :/no-such-string-ever-existed" runs an extra round of get_sha1()
since 009fee4 (Detailed diagnosis when parsing an object name fails.,
2009-12-07).  Once without error diagnosis to see there is no commit with
such a string in the log message (hence "it cannot be a ref"), and after
seeing that :/no-such-string-ever-existed is not a filename (hence "it
cannot be a path, either"), another time to give "better diagnosis".

The thing is, the second time it runs, we already know that traversing the
history all the way down to the root will _not_ find any matching commit.

Rename misguided "gently" parameter, which is turned off _only_ when the
"detailed diagnosis" codepath knows that it cannot be a ref and making the
call only for the caller to die with a message.  Flip its meaning (and
adjust the callers) and call it "only_to_die", which is not a great name,
but it describes far more clearly what the codepaths that switches their
behaviour based on this variable do.

On my box, the command spends ~1.8 seconds without the patch to make the
report; with the patch it spends ~1.12 seconds.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agofix overstrict :<path> diagnosis
Junio C Hamano [Tue, 10 May 2011 18:10:30 +0000 (11:10 -0700)]
fix overstrict :<path> diagnosis

Given "git log :", we get a disambiguation message that tries to be
helpful and yet totally misses the point, i.e.

    $ git log :
    fatal: Path '' does not exist (neither on disk nor in the index).
    $ git log :/
    fatal: Path '/' exists on disk, but not in the index.

An empty path nor anything that begins with '/' cannot possibly in the
index, and it is wrong to guess that the user might have meant to access
such an index entry.

It should yield the same error message as "git log '*.c'", i.e.

    $ git log '*.c'
    fatal: ambiguous argument '*.c': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogrep: use get_pathspec() correctly
Junio C Hamano [Tue, 10 May 2011 04:34:04 +0000 (21:34 -0700)]
grep: use get_pathspec() correctly

When there is no remaining string in argv, get_pathspec(prefix, argv)
will return a two-element array that has prefix as the first element,
so there is no need to re-roll that logic in the code that uses
get_pathspec().

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agopathspec: drop "lone : means no pathspec" from get_pathspec()
Junio C Hamano [Tue, 10 May 2011 19:07:12 +0000 (12:07 -0700)]
pathspec: drop "lone : means no pathspec" from get_pathspec()

We may want to give the pathspec subsystem such a feature, but not while
we are still using get_pathspec() that returns a stupid "char **" that
loses subtle nuances that existed in the input string.

In the meantime, the callers of get_pathspec() that want to support it
could do an equivalent before feeding their argv[] to the function
themselves quite easily.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoRevert "magic pathspec: add ":(icase)path" to match case insensitively"
Junio C Hamano [Tue, 10 May 2011 17:23:41 +0000 (10:23 -0700)]
Revert "magic pathspec: add ":(icase)path" to match case insensitively"

This reverts commit d0546e2d488b1ba185c430b638619ab1d91af509, which
was only meant to be a Proof-of-concept used during the discussion.

The real implementation of the feature needs to wait until we migrate
all the code to use "struct pathspec", not "char **", to represent
richer semantics given to pathspec.

13 years agosparse checkout: do not eagerly decide the fate for whole directory
Nguyễn Thái Ngọc Duy [Mon, 9 May 2011 15:43:01 +0000 (22:43 +0700)]
sparse checkout: do not eagerly decide the fate for whole directory

Sparse-setting code follows closely how files are excluded in
read_directory(), every entry (including directories) are fed to
excluded_from_list() to decide if the entry is suitable. Directories
are treated no different than files. If a directory is matched (or
not), the whole directory is considered matched (or not) and the
process moves on.

This generally works as long as there are no patterns to exclude parts
of the directory. In case of sparse checkout code, the following patterns

  t
  !t/t0000-basic.sh

will produce a worktree with full directory "t" even if t0000-basic.sh
is requested to stay out.

By the same reasoning, if a directory is to be excluded, any rules to
re-include certain files within that directory will be ignored.

Fix it by always checking files against patterns. If no pattern can be
used to decide whether an entry is in our out
(ie. excluded_from_list() returns -1), the entry will be
included/excluded the same as their parent directory.

Noticed-by: <skillzero@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>