gitweb.git
http: allow selection of proxy authentication methodKnut Franke Tue, 26 Jan 2016 13:02:47 +0000 (13:02 +0000)

http: allow selection of proxy authentication method

CURLAUTH_ANY does not work with proxies which answer unauthenticated requests
with a 307 redirect to an error page instead of a 407 listing supported
authentication methods. Therefore, allow the authentication method to be set
using the environment variable GIT_HTTP_PROXY_AUTHMETHOD or configuration
variables http.proxyAuthmethod and remote.<name>.proxyAuthmethod (in analogy
to http.proxy and remote.<name>.proxy).

The following values are supported:

* anyauth (default)
* basic
* digest
* negotiate
* ntlm

Signed-off-by: Knut Franke <k.franke@science-computing.de>
Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: explicity use container-based infrastructureLars Schneider Tue, 26 Jan 2016 09:53:43 +0000 (10:53 +0100)

travis-ci: explicity use container-based infrastructure

Set `sudo: false` to explicitly use the (faster) container-based
infrastructure for the Travis-CI Linux build.

More info:
https://docs.travis-ci.com/user/ci-environment/#Virtualization-environments

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: run previously failed tests first, then... Lars Schneider Tue, 26 Jan 2016 09:53:42 +0000 (10:53 +0100)

travis-ci: run previously failed tests first, then slowest to fastest

The Travis-CI machines are in a clean state in the beginning of every run
(transient by default). Use the Travis-CI cache feature to make the prove
state persistent across consecutive Travis-CI runs on the same branch.
This allows to run previously failed tests first and run remaining tests
in slowest to fastest order. As a result it is less likely that Travis-CI
needs to wait for a single test at the end which speeds up the test suite
execution by ~2 min.

Travis-CI can only cache entire directories. Prove stores the .prove file
always in the t/ directory but we don't want to cache the entire t/ directory.
Therefore we create a symlink from $HOME/travis-cache/.prove to t/.prove and
cache the $HOME/travis-cache directory.

Unfortunately the cache feature is only available (for free) on the
Travis-CI Linux environment.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: update completion arguments for stashPaul Wagland Tue, 26 Jan 2016 09:37:19 +0000 (10:37 +0100)

completion: update completion arguments for stash

Add --all and --include-untracked to the git stash save completions.
Add --quiet to the git stash drop completions.
Update git stash branch so that the first argument expands out to the
possible branch names, and the other arguments expand to the stash
names.

Signed-off-by: Paul Wagland <paul@kungfoocoder.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: complete show-branch "--date-order"Paul Wagland Sat, 23 Jan 2016 01:25:54 +0000 (02:25 +0100)

completion: complete show-branch "--date-order"

Signed-off-by: Paul Wagland <paul@kungfoocoder.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add missing git-rebase optionsJohn Keeping Thu, 21 Jan 2016 20:52:24 +0000 (20:52 +0000)

completion: add missing git-rebase options

This adds the --no-* variants where those are documented in
git-rebase(1).

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: avoid linking to the C library's isalpha()Johannes Sixt Mon, 25 Jan 2016 21:47:56 +0000 (22:47 +0100)

mingw: avoid linking to the C library's isalpha()

The implementation of mingw_skip_dos_drive_prefix() calls isalpha() via
has_dos_drive_prefix(). Since the definition occurs long before isalpha()
is defined in git-compat-util.h, my build environment reports:

CC alloc.o
In file included from git-compat-util.h:186,
from cache.h:4,
from alloc.c:12:
compat/mingw.h: In function 'mingw_skip_dos_drive_prefix':
compat/mingw.h:365: warning: implicit declaration of function 'isalpha'

Dscho does not see a similar warning in his build and suspects that
ctype.h is included somehow behind the scenes. This implies that his build
links to the C library's isalpha() and does not use git's isalpha().

To fix both the warning in my build and the inconsistency in Dscho's
build, move the function definition to mingw.c. Then it picks up git's
isalpha() because git-compat-util.h is included at the top of the file.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

dir: simplify untracked cache "ident" fieldChristian Couder Sun, 24 Jan 2016 15:28:21 +0000 (16:28 +0100)

dir: simplify untracked cache "ident" field

It is not a good idea to compare kernel versions and disable
the untracked cache if it changes, as people may upgrade and
still want the untracked cache to work. So let's just
compare work tree locations and kernel name to decide if we
should disable it.

Also storing many locations in the ident field and comparing
to any of them can be dangerous if GIT_WORK_TREE is used with
different values. So let's just store one location, the
location of the current work tree.

The downside is that untracked cache can only be used by one
type of OS for now. Exporting a git repo to different clients
via a network to e.g. Linux and Windows means that only one
can use the untracked cache.

If the location changed in the ident field and we still want
an untracked cache, let's delete the cache and recreate it.

Note that if an untracked cache has been created by a
previous Git version, then the kernel version is stored in
the ident field. As we now compare with just the kernel
name the comparison will fail and the untracked cache will
be disabled until it's recreated.

Helped-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

dir: add remove_untracked_cache()Christian Couder Sun, 24 Jan 2016 15:28:20 +0000 (16:28 +0100)

dir: add remove_untracked_cache()

Factor out code into remove_untracked_cache(), which will be used
in a later commit.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

dir: add {new,add}_untracked_cache()Christian Couder Sun, 24 Jan 2016 15:28:19 +0000 (16:28 +0100)

dir: add {new,add}_untracked_cache()

Factor out code into new_untracked_cache() and
add_untracked_cache(), which will be used
in later commits.

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: move 'uc' var declarationChristian Couder Sun, 24 Jan 2016 15:28:18 +0000 (16:28 +0100)

update-index: move 'uc' var declaration

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: add untracked cache notificationsChristian Couder Sun, 24 Jan 2016 15:28:17 +0000 (16:28 +0100)

update-index: add untracked cache notifications

Attempting to flip the untracked-cache feature on for a random index
file with

cd /random/unrelated/place
git --git-dir=/somewhere/else/.git update-index --untracked-cache

would not work as you might expect. Because flipping the feature on
in the index also records the location of the corresponding working
tree (/random/unrelated/place in the above example), when the index
is subsequently used to keep track of files in the working tree in
/somewhere/else, the feature is disabled.

With this patch "git update-index --[test-]untracked-cache" tells the
user in which directory tests are performed. This makes it easy to
spot any problem.

Also in verbose mode, let's tell the user when the cache is enabled
or disabled.

Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: add --test-untracked-cacheChristian Couder Sun, 24 Jan 2016 15:28:16 +0000 (16:28 +0100)

update-index: add --test-untracked-cache

It is nice to just be able to test if untracked cache is
supported without enabling it.

Helped-by: David Turner <dturner@twopensource.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: use enum for untracked cache optionsChristian Couder Sun, 24 Jan 2016 15:28:15 +0000 (16:28 +0100)

update-index: use enum for untracked cache options

Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6300: use test_atom for some un-modern testsJeff King Sun, 24 Jan 2016 23:08:18 +0000 (18:08 -0500)

t6300: use test_atom for some un-modern tests

Because this script has to test so many formatters, we have
the nice "test_atom" helper, but we don't use it
consistently. Let's do so. This is shorter, gets rid of some
tests that have their "expected" setup outside of a
test_expect_success block, and lets us organize the changes
better (e.g., putting "refname:short" near "refname").

We also expand the "%(push)" tests a little to match the
"%(upstream)" ones.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

resolve_gitlink_ref: ignore non-repository pathsJeff King Fri, 22 Jan 2016 22:29:30 +0000 (17:29 -0500)

resolve_gitlink_ref: ignore non-repository paths

When we want to look up a submodule ref, we use
get_ref_cache(path) to find or auto-create its ref cache.
But if we feed a path that isn't actually a git repository,
we blindly create the ref cache, and then may die deeper in
the code when we try to access it. This is a problem because
many callers speculatively feed us a path that looks vaguely
like a repository, and expect us to tell them when it is
not.

This patch teaches resolve_gitlink_ref to reject
non-repository paths without creating a ref_cache. This
avoids the die(), and also performs better if you have a
large number of these faux-submodule directories (because
the ref_cache lookup is linear, under the assumption that
there won't be a large number of submodules).

To accomplish this, we also break get_ref_cache into two
pieces: the lookup and auto-creation (the latter is lumped
into create_ref_cache). This lets us first cheaply ask our
cache "is it a submodule we know about?" If so, we can avoid
repeating our filesystem lookup. So lookups of real
submodules are not penalized; they examine the submodule's
.git directory only once.

The test in t3000 demonstrates a case where this improves
correctness (we used to just die). The new perf case in
p7300 shows off the speed improvement in an admittedly
pathological repository:

Test HEAD^ HEAD
----------------------------------------------------------------
7300.4: ls-files -o 66.97(66.15+0.87) 0.33(0.08+0.24) -99.5%

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clean: make is_git_repository a public functionJeff King Fri, 22 Jan 2016 22:27:33 +0000 (17:27 -0500)

clean: make is_git_repository a public function

We have always had is_git_directory(), for looking at a
specific directory to see if it contains a git repo. In
0179ca7 (clean: improve performance when removing lots of
directories, 2015-06-15), we added is_git_repository() which
checks for a non-bare repository by looking at its ".git"
entry.

However, the fix in 0179ca7 needs to be applied other
places, too. Let's make this new helper globally available.
We need to give it a better name, though, to avoid confusion
with is_git_directory(). This patch does that, documents
both functions with a comment to reduce confusion, and
removes the clean-specific references in the comments.

Based-on-a-patch-by: Andreas Krey <a.krey@gmx.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: stop supporting moving worktrees manuallyNguyễn Thái Ngọc Duy Fri, 22 Jan 2016 08:35:49 +0000 (15:35 +0700)

worktree: stop supporting moving worktrees manually

The current update_linked_gitdir() has a bug that can create "gitdir"
file in non-multi-worktree setup. Worse, sometimes it can write relative
path to "gitdir" file, which will not work (e.g. "git worktree list"
will display the worktree's location incorrectly)

Instead of fixing this, we step back a bit. The original design was
probably not well thought out. For now, if the user manually moves a
worktree, they have to fix up "gitdir" file manually or the worktree
will get pruned.

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ep/shell-command-substitution-style'Junio C Hamano Fri, 22 Jan 2016 21:08:46 +0000 (13:08 -0800)

Merge branch 'ep/shell-command-substitution-style'

A shell script style update to change `command substitution` into
$(command substitution). Coverts contrib/ and much of the t/
directory contents.

* ep/shell-command-substitution-style: (92 commits)
t9901-git-web--browse.sh: use the $( ... ) construct for command substitution
t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
t9350-fast-export.sh: use the $( ... ) construct for command substitution
t9300-fast-import.sh: use the $( ... ) construct for command substitution
t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
...

Merge branch 'rm/subtree-unwrap-tags'Junio C Hamano Fri, 22 Jan 2016 21:08:45 +0000 (13:08 -0800)

Merge branch 'rm/subtree-unwrap-tags'

"git subtree" (in contrib/) records the tag object name in the
commit log message when a subtree is added using a tag, without
peeling it down to the underlying commit. The tag needs to be
peeled when "git subtree split" wants to work on the commit, but
the command forgot to do so.

* rm/subtree-unwrap-tags:
contrib/subtree: unwrap tag refs

unpack-trees: fix accidentally quadratic behaviorDavid Turner Fri, 22 Jan 2016 19:58:43 +0000 (14:58 -0500)

unpack-trees: fix accidentally quadratic behavior

While unpacking trees (e.g. during git checkout), when we hit a cache
entry that's past and outside our path, we cut off iteration.

This provides about a 45% speedup on git checkout between master and
master^20000 on Twitter's monorepo. Speedup in general will depend on
repostitory structure, number of changes, and packfile packing
decisions.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: make -O and --output work in subdirectoryDuy Nguyen Thu, 21 Jan 2016 11:48:44 +0000 (18:48 +0700)

diff: make -O and --output work in subdirectory

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

diff-no-index: do not take a redundant prefix argumentNguyễn Thái Ngọc Duy Wed, 20 Jan 2016 11:06:02 +0000 (18:06 +0700)

diff-no-index: do not take a redundant prefix argument

Prefix is already set up in "revs". The same prefix should be used for
all options parsing. So kill the last argument. This patch does not
actually change anything because the only caller does use the same
prefix for init_revisions() and diff_no_index().

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

git-add doc: do not say working directory when you... Lars Vogel Thu, 21 Jan 2016 10:09:15 +0000 (11:09 +0100)

git-add doc: do not say working directory when you mean working tree

The usage of working directory is inconsistent in the git add help.
Also http://git-scm.com/docs/git-clone speaks only about working tree.
Remaining entry found by "git grep -B1 '^directory' git-add.txt" really
relates to a directory.

Signed-off-by: Lars Vogel <Lars.Vogel@vogella.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: complete "diff --word-diff-regex="Thomas Braun Wed, 20 Jan 2016 17:34:58 +0000 (18:34 +0100)

completion: complete "diff --word-diff-regex="

Signed-off-by: Thomas Braun <thomas.braun@virtuell-zuhause.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: remove unnecessary backslashesMatthew Kraai Wed, 20 Jan 2016 17:21:37 +0000 (09:21 -0800)

Documentation: remove unnecessary backslashes

asciidoctor does not remove backslashes used to escape curly brackets from
the HTML output if the contents of the curly brackets are empty or contain
at least a <, -, or space. asciidoc does not require the backslashes in
these cases, so just remove them.

Signed-off-by: Matthew Kraai <matt.kraai@abbott.com>
Reported-by: Philip Oakley <philipoakley@iee.org>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: fix "subtree split" skipped-merge bugDave Ware Fri, 15 Jan 2016 00:41:43 +0000 (13:41 +1300)

contrib/subtree: fix "subtree split" skipped-merge bug

'git subtree split' can incorrectly skip a merge even when both parents
act on the subtree, provided the merge results in a tree identical to
one of the parents. Fix by copying the merge if at least one parent is
non-identical, and the non-identical parent is not an ancestor of the
identical parent.

Also, add a test case which checks that a descendant remains a
descendent on the subtree in this case.

Signed-off-by: Dave Ware <davidw@realtimegenomics.com>
Reviewed-by: David A. Greene <greened@obbligato.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Second batch for 2.8 cycleJunio C Hamano Wed, 20 Jan 2016 19:54:46 +0000 (11:54 -0800)

Second batch for 2.8 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'tg/grep-no-index-fallback'Junio C Hamano Wed, 20 Jan 2016 19:43:38 +0000 (11:43 -0800)

Merge branch 'tg/grep-no-index-fallback'

"git grep" by default does not fall back to its "--no-index"
behaviour outside a directory under Git's control (otherwise the
user may by mistake end up running a huge recursive search); with a
new configuration (set in $HOME/.gitconfig--by definition this
cannot be set in the config file per project), this safety can be
disabled.

* tg/grep-no-index-fallback:
builtin/grep: add grep.fallbackToNoIndex config
t7810: correct --no-index test

Merge branch 'ho/gitweb-squelch-undef-warning'Junio C Hamano Wed, 20 Jan 2016 19:43:36 +0000 (11:43 -0800)

Merge branch 'ho/gitweb-squelch-undef-warning'

Asking gitweb for a nonexistent commit left a warning in the server
log.

Somebody may want to follow this up with a new test, perhaps?
IIRC, we do test that no Perl warnings are given to the server log,
so this should have been caught if our test coverage were good.

* ho/gitweb-squelch-undef-warning:
gitweb: squelch "uninitialized value" warning

Merge branch 'js/fopen-harder'Junio C Hamano Wed, 20 Jan 2016 19:43:35 +0000 (11:43 -0800)

Merge branch 'js/fopen-harder'

Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
(e.g. COMMIT_EDITMSG) that is meant to be left after the command is
done. This however did not work well if the repository is set to
be shared with core.sharedRepository and the umask of the previous
user is tighter. They have been made to work better by calling
unlink(2) and retrying after fopen(3) fails with EPERM.

* js/fopen-harder:
Handle more file writes correctly in shared repos
commit: allow editing the commit message even in shared repos

Merge branch 'ss/clone-depth-single-doc'Junio C Hamano Wed, 20 Jan 2016 19:43:35 +0000 (11:43 -0800)

Merge branch 'ss/clone-depth-single-doc'

Documentation for "git fetch --depth" has been updated for clarity.

* ss/clone-depth-single-doc:
docs: clarify that --depth for git-fetch works with newly initialized repos
docs: say "commits" in the --depth option wording for git-clone
docs: clarify that passing --depth to git-clone implies --single-branch

Merge branch 'nd/exclusion-regression-fix'Junio C Hamano Wed, 20 Jan 2016 19:43:33 +0000 (11:43 -0800)

Merge branch 'nd/exclusion-regression-fix'

The ignore mechanism saw a few regressions around untracked file
listing and sparse checkout selection areas in 2.7.0; the change
that is responsible for the regression has been reverted.

* nd/exclusion-regression-fix:
Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"

Merge branch 'dk/reflog-walk-with-non-commit'Junio C Hamano Wed, 20 Jan 2016 19:43:32 +0000 (11:43 -0800)

Merge branch 'dk/reflog-walk-with-non-commit'

"git reflog" incorrectly assumed that all objects that used to be
at the tip of a ref must be commits, which caused it to segfault.

* dk/reflog-walk-with-non-commit:
reflog-walk: don't segfault on non-commit sha1's in the reflog

Merge branch 'sg/t6050-failing-editor-test-fix'Junio C Hamano Wed, 20 Jan 2016 19:43:31 +0000 (11:43 -0800)

Merge branch 'sg/t6050-failing-editor-test-fix'

* sg/t6050-failing-editor-test-fix:
t6050-replace: make failing editor test more robust

Merge branch 'ew/for-each-ref-doc'Junio C Hamano Wed, 20 Jan 2016 19:43:30 +0000 (11:43 -0800)

Merge branch 'ew/for-each-ref-doc'

* ew/for-each-ref-doc:
for-each-ref: document `creatordate` and `creator` fields

Merge branch 'dw/signoff-doc'Junio C Hamano Wed, 20 Jan 2016 19:43:29 +0000 (11:43 -0800)

Merge branch 'dw/signoff-doc'

The documentation has been updated to hint the connection between
the '--signoff' option and DCO.

* dw/signoff-doc:
Expand documentation describing --signoff

Merge branch 'jk/clang-pedantic'Junio C Hamano Wed, 20 Jan 2016 19:43:29 +0000 (11:43 -0800)

Merge branch 'jk/clang-pedantic'

A few unportable C construct have been spotted by clang compiler
and have been fixed.

* jk/clang-pedantic:
bswap: add NO_UNALIGNED_LOADS define
avoid shifting signed integers 31 bits

Merge branch 'ew/send-email-mutt-alias-fix'Junio C Hamano Wed, 20 Jan 2016 19:43:28 +0000 (11:43 -0800)

Merge branch 'ew/send-email-mutt-alias-fix'

"git send-email" was confused by escaped quotes stored in the alias
files saved by "mutt", which has been corrected.

* ew/send-email-mutt-alias-fix:
git-send-email: do not double-escape quotes from mutt

Merge branch 'ss/user-manual'Junio C Hamano Wed, 20 Jan 2016 19:43:27 +0000 (11:43 -0800)

Merge branch 'ss/user-manual'

Drop a few old "todo" items by deciding that the change one of them
suggests is not such a good idea, and doing the change the other
one suggested to do.

* ss/user-manual:
user-manual: add addition gitweb information
user-manual: add section documenting shallow clones
glossary: define the term shallow clone
user-manual: remove temporary branch entry from todo list

Merge branch 'nd/clear-gitenv-upon-use-of-alias'Junio C Hamano Wed, 20 Jan 2016 19:43:26 +0000 (11:43 -0800)

Merge branch 'nd/clear-gitenv-upon-use-of-alias'

d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
$GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
handling by overwriting GIT_WORK_TREE environment variable to
affect subprocesses when set_git_work_tree() gets called, which
resulted in a rather unpleasant regression to "clone" and "init".
Try to address the same issue by always restoring the environment
and respawning the real underlying command when handling alias.

* nd/clear-gitenv-upon-use-of-alias:
run-command: don't warn on SIGPIPE deaths
git.c: make sure we do not leak GIT_* to alias scripts
setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
git.c: make it clear save_env() is for alias handling only

Merge branch 'nd/ita-cleanup'Junio C Hamano Wed, 20 Jan 2016 19:43:25 +0000 (11:43 -0800)

Merge branch 'nd/ita-cleanup'

Paths that have been told the index about with "add -N" are not
quite yet in the index, but a few commands behaved as if they
already are in a harmful way.

* nd/ita-cleanup:
grep: make it clear i-t-a entries are ignored
add and use a convenience macro ce_intent_to_add()
blame: remove obsolete comment

Merge branch 'nd/dir-exclude-cleanup'Junio C Hamano Wed, 20 Jan 2016 19:43:24 +0000 (11:43 -0800)

Merge branch 'nd/dir-exclude-cleanup'

The "exclude_list" structure has the usual "alloc, nr" pair of
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
to reset 'alloc' to 0 when it cleared 'nr'to discard the managed
array.

* nd/dir-exclude-cleanup:
dir.c: clean the entire struct in clear_exclude_list()

Merge branch 'jk/pack-revindex'Junio C Hamano Wed, 20 Jan 2016 19:43:22 +0000 (11:43 -0800)

Merge branch 'jk/pack-revindex'

In-core storage of the reverse index for .pack files (which lets
you go from a pack offset to an object name) has been streamlined.

* jk/pack-revindex:
pack-revindex: store entries directly in packed_git
pack-revindex: drop hash table

Merge branch 'mh/notes-allow-reading-treeish'Junio C Hamano Wed, 20 Jan 2016 19:43:21 +0000 (11:43 -0800)

Merge branch 'mh/notes-allow-reading-treeish'

Some "git notes" operations, e.g. "git log --notes=<note>", should
be able to read notes from any tree-ish that is shaped like a notes
tree, but the notes infrastructure required that the argument must
be a ref under refs/notes/. Loosen it to require a valid ref only
when the operation would update the notes (in which case we must
have a place to store the updated notes tree, iow, a ref).

* mh/notes-allow-reading-treeish:
notes: allow treeish expressions as notes ref

filter-branch: resolve $commit^{tree} in no-index caseJeff King Tue, 19 Jan 2016 22:07:22 +0000 (17:07 -0500)

filter-branch: resolve $commit^{tree} in no-index case

Commit 348d4f2 (filter-branch: skip index read/write when
possible, 2015-11-06) taught filter-branch to optimize out
the final "git write-tree" when we know we haven't touched
the tree with any of our filters. It does by simply putting
the literal text "$commit^{tree}" into the "$tree" variable,
avoiding a useless rev-parse call.

However, when we pass this to git_commit_non_empty_tree(),
it gets confused; it resolves "$commit^{tree}" itself, and
compares our string to the 40-hex sha1, which obviously
doesn't match. As a result, "--prune-empty" (or any custom
filter using git_commit_non_empty_tree) will fail to drop
an empty commit (when filter-branch is used without a tree
or index filter).

Let's resolve $tree to the 40-hex ourselves, so that
git_commit_non_empty_tree can work. Unfortunately, this is a
bit slower due to the extra process overhead:

$ cd t/perf && ./run 348d4f2 HEAD p7000-filter-branch.sh
[...]
Test 348d4f2 HEAD
--------------------------------------------------------------
7000.2: noop filter 3.76(0.24+0.26) 4.54(0.28+0.24) +20.7%

We could try to make git_commit_non_empty_tree more clever.
However, the value of $tree here is technically
user-visible. The user can provide arbitrary shell code at
this stage, which could itself have a similar assumption to
what is in git_commit_non_empty_tree. So the conservative
choice to fix this regression is to take the 20% hit and
give the pre-348d4f2 behavior. We still end up much faster
than before the optimization:

$ cd t/perf && ./run 348d4f2^ HEAD p7000-filter-branch.sh
[...]
Test 348d4f2^ HEAD
--------------------------------------------------------------
7000.2: noop filter 9.51(4.32+0.40) 4.51(0.28+0.23) -52.6%

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: clarify and tighten SANITYJunio C Hamano Tue, 19 Jan 2016 22:09:37 +0000 (14:09 -0800)

test-lib: clarify and tighten SANITY

f400e51c (test-lib.sh: set prerequisite SANITY by testing what we
really need, 2015-01-27) improved the way SANITY prerequisite was
determined, but made the resulting code (incorrectly) imply that
SANITY is all about effects of permission bits of the containing
directory has on the files contained in it by the comment it added,
its log message and the actual tests.

State what SANITY is about more clearly in the comment, and test
that a file whose permission bits says should be unreadble truly
cannot be read.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree.c: fix indentationNguyễn Thái Ngọc Duy Mon, 18 Jan 2016 11:21:29 +0000 (18:21 +0700)

worktree.c: fix indentation

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

contrib/subtree: Make testing easierDavid A. Greene Sun, 17 Jan 2016 23:47:59 +0000 (17:47 -0600)

contrib/subtree: Make testing easier

Add some Makefile dependencies to ensure an updated git-subtree
gets copied to the main area before testing begins.

Signed-off-by: David A. Greene <greened@obbligato.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-remote: add support for showing symrefsThomas Gummerer Mon, 18 Jan 2016 23:20:50 +0000 (00:20 +0100)

ls-remote: add support for showing symrefs

Sometimes it's useful to know the main branch of a git repository
without actually downloading the repository. This can be done by
looking at the symrefs stored in the remote repository. Currently git
doesn't provide a simple way to show the symrefs stored on the remote
repository, even though the information is available. Add a --symref
command line argument to the ls-remote command, which shows the symrefs
in the remote repository.

While there, replace a literal tab in the format string with \t to make
it more obvious to the reader.

Suggested-by: pedro rijo <pedrorijo91@gmail.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-remote: use parse-options apiThomas Gummerer Mon, 18 Jan 2016 23:20:49 +0000 (00:20 +0100)

ls-remote: use parse-options api

Currently ls-remote uses a hand rolled parser for its command line
arguments. Use the parse-options api instead of the hand rolled parser
to simplify the code and make it easier to add new arguments. In
addition this improves the help message.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-remote: fix synopsisThomas Gummerer Mon, 18 Jan 2016 23:20:48 +0000 (00:20 +0100)

ls-remote: fix synopsis

git ls-remote takes an optional get-url argument, and specifying the
repository is optional. Fix the synopsis in the documentation to
reflect this.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-remote: document --refs optionThomas Gummerer Mon, 18 Jan 2016 23:20:47 +0000 (00:20 +0100)

ls-remote: document --refs option

The --refs option was originally introduced in 2718ff0 ("Improve
git-peek-remote"). The ls-remote command was first documented in
972b6fe ("ls-remote: drop storing operation and add documentation."),
but the --refs option was never documented. Fix this.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-remote: document --quiet optionThomas Gummerer Mon, 18 Jan 2016 23:20:46 +0000 (00:20 +0100)

ls-remote: document --quiet option

cefb2a5e3 ("ls-remote: print URL when no repo is specified") added a
quiet option to ls-remote, but didn't add it to the documentation. Add
it.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: don't warn on empty authorJeff King Mon, 18 Jan 2016 23:04:35 +0000 (18:04 -0500)

shortlog: don't warn on empty author

Git tries to avoid creating a commit with an empty author
name or email. However, commits created by older, less
strict versions of git may still be in the history. There's
not much point in issuing a warning to stderr for an empty
author. The user can't do anything about it now, and we are
better off to simply include it in the shortlog output as an
empty name/email, and let the caller process it however they
see fit.

Older versions of shortlog differentiated between "author
header not present" (which complained) and "author
name/email are blank" (which included the empty ident in the
output). But since switching to format_commit_message, we
complain to stderr about either case (linux.git has a blank
author deep in its history which triggers this).

We could try to restore the older behavior (complaining only
about the missing header), but in retrospect, there's not
much point in differentiating these cases. A missing
author header is bogus, but as for the "blank" case, the
only useful behavior is to add it to the "empty name"
collection.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: optimize out useless string listJeff King Mon, 18 Jan 2016 20:02:59 +0000 (15:02 -0500)

shortlog: optimize out useless string list

If we are in "--summary" mode, then we do not care about the
actual list of subject onelines associated with each author.
We care only about the number. So rather than store a
string-list for each author full of "<none>", let's just
keep a count.

This drops my best-of-five for "git shortlog -ns HEAD" on
linux.git from:

real 0m5.194s
user 0m5.028s
sys 0m0.168s

to:

real 0m5.057s
user 0m4.916s
sys 0m0.144s

That's about 2.5%.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: optimize out useless "<none>" normalizationJeff King Mon, 18 Jan 2016 20:02:56 +0000 (15:02 -0500)

shortlog: optimize out useless "<none>" normalization

If we are in --summary mode, we will always pass <none> to
insert_one_record, which will then do some normalization
(e.g., cutting out "[PATCH]"). There's no point in doing so
if we aren't going to use the result anyway.

This drops my best-of-five for "git shortlog -ns HEAD" on
linux.git from:

real 0m5.257s
user 0m5.104s
sys 0m0.156s

to:

real 0m5.194s
user 0m5.028s
sys 0m0.168s

That's only 1%, but arguably the result is clearer to read,
as we're able to group our variable declarations inside the
conditional block. It also opens up further optimization
possibilities for future patches.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: optimize "--summary" modeJeff King Mon, 18 Jan 2016 20:02:52 +0000 (15:02 -0500)

shortlog: optimize "--summary" mode

If the user asked us only to show counts for each author,
rather than the individual summary lines, then there is no
point in us generating the summaries only to throw them
away. With this patch, I measured the following speedup for
"git shortlog -ns HEAD" on linux.git (best-of-five):

[before]
real 0m5.644s
user 0m5.472s
sys 0m0.176s

[after]
real 0m5.257s
user 0m5.104s
sys 0m0.156s

That's only ~7%, but it's so easy to do, there's no good
reason not to. We don't have to touch any downstream code,
since we already fill in the magic string "<none>" to handle
commits without a message.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: replace hand-parsing of author with pretty... Jeff King Mon, 18 Jan 2016 20:02:48 +0000 (15:02 -0500)

shortlog: replace hand-parsing of author with pretty-printer

When gathering the author and oneline subject for each
commit, we hand-parse the commit headers to find the
"author" line, and then continue past to the blank line at
the end of the header.

We can replace this tricky hand-parsing by simply asking the
pretty-printer for the relevant items. This also decouples
the author and oneline parsing, opening up some new
optimizations in further commits.

One reason to avoid the pretty-printer is that it might be
less efficient than hand-parsing. However, I measured no
slowdown at all running "git shortlog -ns HEAD" on
linux.git.

As a bonus, we also fix a memory leak in the (uncommon) case
that the author field is blank.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: use strbufs to read from stdinJeff King Mon, 18 Jan 2016 20:02:44 +0000 (15:02 -0500)

shortlog: use strbufs to read from stdin

We currently use fixed-size buffers with fgets(), which
could lead to incorrect results in the unlikely event that a
line had something like "Author:" at exactly its 1024th
character.

But it's easy to convert this to a strbuf, and because we
can reuse the same buffer through the loop, we don't even
pay the extra allocation cost.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shortlog: match both "Author:" and "author" on stdinJeff King Mon, 18 Jan 2016 20:02:40 +0000 (15:02 -0500)

shortlog: match both "Author:" and "author" on stdin

The original git-shortlog could read both the normal "git
log" output as well as "git log --format=raw". However, when
it was converted to C by b8ec592 (Build in shortlog,
2006-10-22), the trailing colon became mandatory, and we no
longer matched the raw output.

Given the amount of intervening time without any bug
reports, it's probable that nobody cares. But it's
relatively easy to fix, and the end result is hopefully more
readable than the original.

Note that this no longer matches "author: ", which we did
before, but that has never been a format generated by git.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-files: add eol diagnosticsTorsten Bögershausen Sat, 16 Jan 2016 06:50:02 +0000 (07:50 +0100)

ls-files: add eol diagnostics

When working in a cross-platform environment, a user may want to
check if text files are stored normalized in the repository and
if .gitattributes are set appropriately.

Make it possible to let Git show the line endings in the index and
in the working tree and the effective text/eol attributes.

The end of line ("eolinfo") are shown like this:

"-text" binary (or with bare CR) file
"none" text file without any EOL
"lf" text file with LF
"crlf" text file with CRLF
"mixed" text file with mixed line endings.

The effective text/eol attribute is one of these:

"", "-text", "text", "text=auto", "text eol=lf", "text eol=crlf"

git ls-files --eol gives an output like this:

i/none w/none attr/text=auto t/t5100/empty
i/-text w/-text attr/-text t/test-binary-2.png
i/lf w/lf attr/text eol=lf t/t5100/rfc2047-info-0007
i/lf w/crlf attr/text eol=crlf doit.bat
i/mixed w/mixed attr/ locale/XX.po

to show what eol convention is used in the data in the index ('i'),
and in the working tree ('w'), and what attribute is in effect,
for each path that is shown.

Add test cases in t0027.

Helped-By: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

notes: allow merging from arbitrary referencesJacob Keller Tue, 29 Dec 2015 22:40:28 +0000 (14:40 -0800)

notes: allow merging from arbitrary references

Create a new expansion function, expand_loose_notes_ref which will first
check whether the ref can be found using get_sha1. If it can't be found
then it will fallback to using expand_notes_ref. The content of the
strbuf will not be changed if the notes ref can be located using
get_sha1. Otherwise, it may be updated as done by expand_notes_ref.

Since we now support merging from non-notes refs, remove the test case
associated with that behavior. Add a test case for merging from a
non-notes ref.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Reviewed-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: uglify (a, 0) definitions to shut up warningsJohannes Schindelin Fri, 15 Jan 2016 13:24:45 +0000 (14:24 +0100)

mingw: uglify (a, 0) definitions to shut up warnings

When the result of a (a, 0) expression is not used, MSys2's GCC version
finds it necessary to complain with a warning:

right-hand operand of comma expression has no effect

Let's just pretend to use the 0 value and have a peaceful and quiet life
again.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: squash another warning about a castJohannes Schindelin Fri, 15 Jan 2016 13:24:39 +0000 (14:24 +0100)

mingw: squash another warning about a cast

MSys2's compiler is correct that casting a "void *" to a "DWORD" loses
precision, but in the case of pthread_exit() we know that the value
fits into a DWORD.

Just like casting handles to DWORDs, let's work around this issue by
casting to "intrptr_t" first, and immediately cast to the final type.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: avoid warnings when casting HANDLEs to intJohannes Schindelin Fri, 15 Jan 2016 13:24:34 +0000 (14:24 +0100)

mingw: avoid warnings when casting HANDLEs to int

HANDLE is defined internally as a void *, but in many cases it is
actually guaranteed to be a 32-bit integer. In these cases, GCC should
not warn about a cast of a pointer to an integer of a different type
because we know exactly what we are doing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: avoid redefining S_* constantsJohannes Schindelin Fri, 15 Jan 2016 13:24:29 +0000 (14:24 +0100)

mingw: avoid redefining S_* constants

When compiling with MSys2's compiler, these constants are already defined.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-sha1-array: read command stream with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:32:10 +0000 (13:32 -0700)

test-sha1-array: read command stream with strbuf_getline()

The input to this command comes from a pipeline in t0064, whose
upstream has bunch of "echo"s. It is not unreasonable to expect
that it may be fed CRLF lines on DOSsy systems.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep: read -f file with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:53:47 +0000 (13:53 -0700)

grep: read -f file with strbuf_getline()

List of patterns file could come from a DOS editor.

This is iffy; you may actually be trying to find a line with ^M in
it on a system whose line ending is LF. You can of course work it
around by having a line that has "^M^M^J", let the strbuf_getline()
eat the last "^M^J", leaving just the single "^M" as the pattern.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

send-pack: read list of refs with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 21:00:59 +0000 (14:00 -0700)

send-pack: read list of refs with strbuf_getline()

Signed-off-by: Junio C Hamano <gitster@pobox.com>

column: read lines with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:52:11 +0000 (13:52 -0700)

column: read lines with strbuf_getline()

Multiple lines read here are concatenated on a single line to form a
multi-column output line. We do not want to have a CR at the end,
even if the input file consists of CRLF terminated lines.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: read batch stream with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:38:56 +0000 (13:38 -0700)

cat-file: read batch stream with strbuf_getline()

It is possible to prepare a text file with a DOS editor and feed it
as a batch command stream to the command.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport-helper: read helper response with strbuf_getl... Junio C Hamano Wed, 28 Oct 2015 20:36:00 +0000 (13:36 -0700)

transport-helper: read helper response with strbuf_getline()

Our implementation of helpers never use CRLF line endings, and they
do not depend on the ability to place a CR as payload at the end of
the line, so this is essentially a no-op for in-tree users. However,
this allows third-party implementation of helpers to give us their
line with CRLF line ending (they cannot expect us to feed CRLF to
them, though).

Signed-off-by: Junio C Hamano <gitster@pobox.com>

clone/sha1_file: read info/alternates with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:29:24 +0000 (13:29 -0700)

clone/sha1_file: read info/alternates with strbuf_getline()

$GIT_OBJECT_DIRECTORY/info/alternates is a text file that can be
edited with a DOS editor. We do not want to use the real path with
CR appended at the end.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote.c: read $GIT_DIR/remotes/* with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:27:33 +0000 (13:27 -0700)

remote.c: read $GIT_DIR/remotes/* with strbuf_getline()

These files can be edited with a DOS editor, leaving CR at the end
of the line if read with strbuf_getline().

Signed-off-by: Junio C Hamano <gitster@pobox.com>

ident.c: read /etc/mailname with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:24:41 +0000 (13:24 -0700)

ident.c: read /etc/mailname with strbuf_getline()

Just in case /etc/mailname file was edited with a DOS editor,
read it with strbuf_getline() so that a stray CR is not included
as the last character of the mail hostname.

We _might_ want to more aggressively discard whitespace characters
around the line with strbuf_trim(), but that is a bit outside the
scope of this series.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-parse: read parseopt spec with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:59:44 +0000 (13:59 -0700)

rev-parse: read parseopt spec with strbuf_getline()

"rev-parse --parseopt" specification is clearly text and we
should anticipate that we may be fed CRLF lines.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision: read --stdin with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 21:05:53 +0000 (14:05 -0700)

revision: read --stdin with strbuf_getline()

Reading with getwholeline() and manually stripping the terminating
'\n' would leave CR at the end of the line if the input comes from
a DOS editor.

Constrasting this with the other changes around "--stdin" in this
series, one may realize that the way "log" family of commands read
the paths with "--stdin" looks inconsistent and sloppy. It does not
allow us to C-quote a textual input, neither does it accept records
that are NUL-terminated. These are unfortunately way too late to
fix X-<.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

hash-object: read --stdin-paths with strbuf_getline()Junio C Hamano Wed, 28 Oct 2015 20:56:23 +0000 (13:56 -0700)

hash-object: read --stdin-paths with strbuf_getline()

The list of paths could have been written with a DOS editor.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

strbuf: give strbuf_getline() to the "most text friendl... Junio C Hamano Thu, 14 Jan 2016 02:32:23 +0000 (18:32 -0800)

strbuf: give strbuf_getline() to the "most text friendly" variant

Now there is no direct caller to strbuf_getline(), we can demote it
to file-scope static that is private to strbuf.c and rename it to
strbuf_getdelim(). Rename strbuf_getline_crlf(), which is designed
to be the most "text friendly" variant, and allow it to take over
this simplest name, strbuf_getline(), so we can add more uses of it
without having to type _crlf over and over again in the coming
steps.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

checkout-index: there are only two possible line termin... Junio C Hamano Thu, 14 Jan 2016 00:14:48 +0000 (16:14 -0800)

checkout-index: there are only two possible line terminations

The program by default reads LF terminated lines, with an option to
use NUL terminated records. Instead of pretending that there can be
other useful values for line_termination, use a boolean variable,
nul_term_line, to tell if NUL terminated records are used, and
switch between strbuf_getline_{lf,nul} based on it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: there are only two possible line terminationsJunio C Hamano Thu, 14 Jan 2016 21:34:29 +0000 (13:34 -0800)

update-index: there are only two possible line terminations

The program by default reads LF terminated lines, with an option to
use NUL terminated records. Instead of pretending that there can be
other useful values for line_termination, use a boolean variable,
nul_term_line, to tell if NUL terminated records are used, and
switch between strbuf_getline_{lf,nul} based on it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

check-ignore: there are only two possible line terminationsJunio C Hamano Thu, 14 Jan 2016 21:31:17 +0000 (13:31 -0800)

check-ignore: there are only two possible line terminations

The program by default reads LF terminated lines, with an option to
use NUL terminated records. Instead of pretending that there can be
other useful values for line_termination, use a boolean variable,
nul_term_line, to tell if NUL terminated records are used, and
switch between strbuf_getline_{lf,nul} based on it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

check-attr: there are only two possible line terminationsJunio C Hamano Thu, 14 Jan 2016 21:26:20 +0000 (13:26 -0800)

check-attr: there are only two possible line terminations

The program by default reads LF terminated lines, with an option to
use NUL terminated records. Instead of pretending that there can be
other useful values for line_termination, use a boolean variable,
nul_term_line, to tell if NUL terminated records are used, and
switch between strbuf_getline_{lf,nul} based on it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

mktree: there are only two possible line terminationsJunio C Hamano Wed, 13 Jan 2016 23:55:12 +0000 (15:55 -0800)

mktree: there are only two possible line terminations

The program by default reads LF terminated lines, with an option to
use NUL terminated records. Instead of pretending that there can be
other useful values for line_termination, use a boolean variable,
nul_term_line, to tell if NUL terminated records are used, and
switch between strbuf_getline_{lf,nul} based on it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

strbuf: introduce strbuf_getline_{lf,nul}()Junio C Hamano Wed, 13 Jan 2016 23:31:17 +0000 (15:31 -0800)

strbuf: introduce strbuf_getline_{lf,nul}()

The strbuf_getline() interface allows a byte other than LF or NUL as
the line terminator, but this is only because I wrote these
codepaths anticipating that there might be a value other than NUL
and LF that could be useful when I introduced line_termination long
time ago. No useful caller that uses other value has emerged.

By now, it is clear that the interface is overly broad without a
good reason. Many codepaths have hardcoded preference to read
either LF terminated or NUL terminated records from their input, and
then call strbuf_getline() with LF or NUL as the third parameter.

This step introduces two thin wrappers around strbuf_getline(),
namely, strbuf_getline_lf() and strbuf_getline_nul(), and
mechanically rewrites these call sites to call either one of
them. The changes contained in this patch are:

* introduction of these two functions in strbuf.[ch]

* mechanical conversion of all callers to strbuf_getline() with
either '\n' or '\0' as the third parameter to instead call the
respective thin wrapper.

After this step, output from "git grep 'strbuf_getline('" would
become a lot smaller. An interim goal of this series is to make
this an empty set, so that we can have strbuf_getline_crlf() take
over the shorter name strbuf_getline().

Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0060: loosen overly strict expectationsJohannes Schindelin Thu, 14 Jan 2016 06:48:27 +0000 (07:48 +0100)

t0060: loosen overly strict expectations

The dirname() tests file were developed and tested on only the five
platforms available to the developer at the time, namely: Linux (both 32
and 64bit), Windows XP 32-bit (MSVC), MinGW 32-bit and Cygwin 32-bit.

http://pubs.opengroup.org/onlinepubs/9699919799/functions/basename.html
(i.e. the POSIX spec) says, in part:

If the string pointed to by path consists entirely of the '/'
character, basename() shall return a pointer to the string "/".
If the string pointed to by path is exactly "//", it is
implementation-defined whether "/" or "//" is returned.

The thinking behind testing precise, OS-dependent output values was to
document that different setups produce different values. However, as the
test failures on MacOSX illustrated eloquently: hardcoding pretty much each
and every setup's expectations is pretty fragile.

This is not limited to the "//" vs "/" case, of course, other inputs are
also allowed to produce multiple outputs by the POSIX specs.

So let's just test for all allowed values and be done with it. This still
documents that Git cannot rely on one particular output value in those
cases, so the intention of the original tests is still met.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

strbuf: make strbuf_getline_crlf() globalJunio C Hamano Wed, 28 Oct 2015 20:17:29 +0000 (13:17 -0700)

strbuf: make strbuf_getline_crlf() global

Often we read "text" files that are supplied by the end user
(e.g. commit log message that was edited with $GIT_EDITOR upon 'git
commit -e'), and in some environments lines in a text file are
terminated with CRLF. Existing strbuf_getline() knows to read a
single line and then strip the terminating byte from the result, but
it is handy to have a version that is more tailored for a "text"
input that takes both '\n' and '\r\n' as line terminator (aka
<newline> in POSIX lingo) and returns the body of the line after
stripping <newline>.

Recently reimplemented "git am" uses such a function implemented
privately; move it to strbuf.[ch] and make it available for others.

Note that we do not blindly replace calls to strbuf_getline() that
uses LF as the line terminator with calls to strbuf_getline_crlf()
and this is very much deliberate. Some callers may want to treat an
incoming line that ends with CR (and terminated with LF) to have a
payload that includes the final CR, and such a blind replacement
will result in misconversion when done without code audit.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

strbuf: miniscule style fixJunio C Hamano Wed, 13 Jan 2016 23:10:45 +0000 (15:10 -0800)

strbuf: miniscule style fix

We write one SP on each side of an operator, even inside an [] pair
that computes the array index.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

interpret-trailers: add option for in-place editingTobias Klauser Thu, 14 Jan 2016 16:57:55 +0000 (17:57 +0100)

interpret-trailers: add option for in-place editing

Add a command line option --in-place to support in-place editing akin to
sed -i. This allows to write commands like the following:

git interpret-trailers --trailer "X: Y" a.txt > b.txt && mv b.txt a.txt

in a more concise way:

git interpret-trailers --trailer "X: Y" --in-place a.txt

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

trailer: allow to write to files other than stdoutTobias Klauser Thu, 14 Jan 2016 16:57:54 +0000 (17:57 +0100)

trailer: allow to write to files other than stdout

Use fprintf instead of printf in trailer.c in order to allow printing
to a file other than stdout. This will be needed to support in-place
editing in git interpret-trailers.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

compat/winansi: support compiling with MSys2Johannes Schindelin Thu, 14 Jan 2016 16:52:02 +0000 (17:52 +0100)

compat/winansi: support compiling with MSys2

MSys2 already defines the _CONSOLE_FONT_INFOEX structure.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

compat/mingw: support MSys2-based MinGW buildJohannes Schindelin Thu, 14 Jan 2016 16:51:59 +0000 (17:51 +0100)

compat/mingw: support MSys2-based MinGW build

The excellent MSys2 project brings a substantially updated MinGW
environment including newer GCC versions and new headers. To support
compiling Git, let's special-case the new MinGW (tell-tale: the
_MINGW64_VERSION_MAJOR constant is defined).

Note: this commit only addresses compile failures, not compile warnings
(that task is left for a future patch).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

nedmalloc: allow compiling with MSys2's compilerJohannes Schindelin Thu, 14 Jan 2016 16:51:54 +0000 (17:51 +0100)

nedmalloc: allow compiling with MSys2's compiler

With MSys2's GCC, `ReadWriteBarrier` is already defined, and FORCEINLINE
unfortunately gets defined incorrectly.

Let's work around both problems, using the MSys2-specific
__MINGW64_VERSION_MAJOR constant to guard the FORCEINLINE definition so
as not to affect other platforms.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add missing branch.*.rebase valuesJohannes Schindelin Wed, 13 Jan 2016 12:17:22 +0000 (13:17 +0100)

completion: add missing branch.*.rebase values

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote: handle the config setting branch.*.rebase=inter... Johannes Schindelin Wed, 13 Jan 2016 12:17:19 +0000 (13:17 +0100)

remote: handle the config setting branch.*.rebase=interactive

The config variable branch.<branchname>.rebase is not only used by `git
pull`, but also by `git remote` when showing details about a remote.
Therefore, it needs to be taught to accept the newly-introduced
`interactive` value of said variable.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pull: allow interactive rebase with --rebase=interactiveJohannes Schindelin Wed, 13 Jan 2016 12:17:15 +0000 (13:17 +0100)

pull: allow interactive rebase with --rebase=interactive

A couple of years ago, I found the need to collaborate on topic
branches that were rebased all the time, and I really needed to see
what I was rebasing when pulling, so I introduced an
interactively-rebasing pull.

The way builtin pull works, this change also supports the value
'interactive' for the 'branch.<name>.rebase' config variable, which
is a neat thing because users can now configure given branches for
interactively-rebasing pulls without having to type out the complete
`--rebase=interactive` option every time they pull.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase: ignore failures from "gc --auto"Jeff King Wed, 13 Jan 2016 18:47:18 +0000 (13:47 -0500)

rebase: ignore failures from "gc --auto"

After rebasing, we call "gc --auto" to clean up if we
created a lot of loose objects. However, we do so inside an
&&-chain. If "gc --auto" fails (e.g., because a previous
background gc blocked us by leaving "gc.log" in place),
then:

1. We will fail to clean up the state directory, leaving
the user stuck in the rebase forever (even "git am
--abort" doesn't work, because it calls "gc --auto"!).

2. In some cases, we may return a bogus exit code from
rebase, indicating failure when everything except the
auto-gc succeeded.

We can fix this by ignoring the exit code of "gc --auto".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

receive-pack: release pack files before garbage-collectingJohannes Schindelin Wed, 13 Jan 2016 17:20:26 +0000 (18:20 +0100)

receive-pack: release pack files before garbage-collecting

Before auto-gc'ing, we need to make sure that the pack files are
released in case they need to be repacked and garbage-collected.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge: release pack files before garbage-collectingJohannes Schindelin Wed, 13 Jan 2016 17:20:21 +0000 (18:20 +0100)

merge: release pack files before garbage-collecting

Before auto-gc'ing, we need to make sure that the pack files are
released in case they need to be repacked and garbage-collected.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>