gitweb.git
ref_transaction_commit(): inline call to write_ref_sha1()Michael Haggerty Sat, 9 May 2015 15:29:20 +0000 (17:29 +0200)

ref_transaction_commit(): inline call to write_ref_sha1()

That was the last caller, so delete function write_ref_sha1().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rename_ref(): inline calls to write_ref_sha1() from... Michael Haggerty Sat, 9 May 2015 15:20:39 +0000 (17:20 +0200)

rename_ref(): inline calls to write_ref_sha1() from this function

Most of what it does is unneeded from these call sites.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit_ref_update(): new function, extracted from write... Michael Haggerty Sat, 9 May 2015 15:18:36 +0000 (17:18 +0200)

commit_ref_update(): new function, extracted from write_ref_sha1()

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

write_ref_to_lockfile(): new function, extracted from... Michael Haggerty Fri, 24 Apr 2015 11:35:45 +0000 (13:35 +0200)

write_ref_to_lockfile(): new function, extracted from write_ref_sha1()

This is the first step towards separating the checking and writing of
the new reference value to committing the change.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZEStefan Beller Tue, 14 Apr 2015 22:25:07 +0000 (15:25 -0700)

t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE

During creation of the patch series our discussion we could have a
more descriptive name for the prerequisite for the test so it stays
unique when other limits of ulimit are introduced.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-ref: test handling large transactions properlyStefan Beller Tue, 14 Apr 2015 22:25:06 +0000 (15:25 -0700)

update-ref: test handling large transactions properly

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'mh/write-refs-sooner-2.2' into mh/write... Junio C Hamano Wed, 13 May 2015 04:26:09 +0000 (21:26 -0700)

Merge branch 'mh/write-refs-sooner-2.2' into mh/write-refs-sooner-2.3

* mh/write-refs-sooner-2.2:
ref_transaction_commit(): fix atomicity and avoid fd exhaustion
ref_transaction_commit(): remove the local flags variable
ref_transaction_commit(): inline call to write_ref_sha1()
rename_ref(): inline calls to write_ref_sha1() from this function
commit_ref_update(): new function, extracted from write_ref_sha1()
write_ref_to_lockfile(): new function, extracted from write_ref_sha1()
t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE
update-ref: test handling large transactions properly

ref_transaction_commit(): fix atomicity and avoid fd... Michael Haggerty Sun, 10 May 2015 02:45:37 +0000 (04:45 +0200)

ref_transaction_commit(): fix atomicity and avoid fd exhaustion

The old code was roughly

for update in updates:
acquire locks and check old_sha
for update in updates:
if changing value:
write_ref_to_lockfile()
commit_ref_update()
for update in updates:
if deleting value:
unlink()
rewrite packed-refs file
for update in updates:
if reference still locked:
unlock_ref()

This has two problems.

Non-atomic updates
==================

The atomicity of the reference transaction depends on all pre-checks
being done in the first loop, before any changes have started being
committed in the second loop. The problem is that
write_ref_to_lockfile() (previously part of write_ref_sha1()), which
is called from the second loop, contains two more checks:

* It verifies that new_sha1 is a valid object

* If the reference being updated is a branch, it verifies that
new_sha1 points at a commit object (as opposed to a tag, tree, or
blob).

If either of these checks fails, the "transaction" is aborted during
the second loop. But this might happen after some reference updates
have already been permanently committed. In other words, the
all-or-nothing promise of "git update-ref --stdin" could be violated.

So these checks have to be moved to the first loop.

File descriptor exhaustion
==========================

The old code locked all of the references in the first loop, leaving
all of the lockfiles open until later loops. Since we might be
updating a lot of references, this could result in file descriptor
exhaustion.

The solution
============

After this patch, the code looks like

for update in updates:
acquire locks and check old_sha
if changing value:
write_ref_to_lockfile()
else:
close_ref()
for update in updates:
if changing value:
commit_ref_update()
for update in updates:
if deleting value:
unlink()
rewrite packed-refs file
for update in updates:
if reference still locked:
unlock_ref()

This fixes both problems:

1. The pre-checks in write_ref_to_lockfile() are now done in the first
loop, before any changes have been committed. If any of the checks
fails, the whole transaction can now be rolled back correctly.

2. All lockfiles are closed in the first loop immediately after they
are created (either by write_ref_to_lockfile() or by close_ref()).
This means that there is never more than one open lockfile at a
time, preventing file descriptor exhaustion.

To simplify the bookkeeping across loops, add a new REF_NEEDS_COMMIT
bit to update->flags, which keeps track of whether the corresponding
lockfile needs to be committed, as opposed to just unlocked. (Since
"struct ref_update" is internal to the refs module, this change is not
visible to external callers.)

This change fixes two tests in t1400.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ref_transaction_commit(): remove the local flags variableMichael Haggerty Sun, 10 May 2015 02:45:36 +0000 (04:45 +0200)

ref_transaction_commit(): remove the local flags variable

Instead, work directly with update->flags. This has the advantage that
the REF_DELETING bit, set in the first loop, can be read in the second
loop instead of having to be recomputed. Plus, it was potentially
confusing having both update->flags and flags, which sometimes had
different values.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ref_transaction_commit(): inline call to write_ref_sha1()Michael Haggerty Sun, 10 May 2015 02:45:35 +0000 (04:45 +0200)

ref_transaction_commit(): inline call to write_ref_sha1()

And remove the function write_ref_sha1(), as it is no longer used.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rename_ref(): inline calls to write_ref_sha1() from... Michael Haggerty Sun, 10 May 2015 02:45:34 +0000 (04:45 +0200)

rename_ref(): inline calls to write_ref_sha1() from this function

Most of what it does is unneeded from these call sites.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit_ref_update(): new function, extracted from write... Michael Haggerty Sun, 10 May 2015 02:45:33 +0000 (04:45 +0200)

commit_ref_update(): new function, extracted from write_ref_sha1()

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

write_ref_to_lockfile(): new function, extracted from... Michael Haggerty Sun, 10 May 2015 02:45:32 +0000 (04:45 +0200)

write_ref_to_lockfile(): new function, extracted from write_ref_sha1()

This is the first step towards separating the checking and writing of
the new reference value to committing the change.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZEStefan Beller Sun, 10 May 2015 02:45:31 +0000 (04:45 +0200)

t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE

During creation of the patch series, our discussion revealed that
we could have a more descriptive name for the prerequisite for the
test so it stays unique when other limits of ulimit are introduced.

Let's rename the existing ulimit about setting the stack size to
a more explicit ULIMIT_STACK_SIZE.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add: check return value of launch_editorJeff King Wed, 13 May 2015 01:21:58 +0000 (21:21 -0400)

add: check return value of launch_editor

When running "add -e", if launching the editor fails, we do
not notice and continue as if the output is what the user
asked for. The likely case is that the editor did not touch
the contents at all, and we end up adding everything.

Reported-by: Russ Cox <rsc@golang.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: simplify query for config variablesSZEDER Gábor Sun, 10 May 2015 12:50:18 +0000 (14:50 +0200)

completion: simplify query for config variables

To get the name of all config variables in a given section we perform a
'git config --get-regex' query for all config variables containing the
name of that section, and then filter its output through a case statement
to throw away those that though contain but don't start with the given
section.

Modify the regex to match only at the beginning, so the case statement
becomes unnecessary and we can get rid of it. Add a test to check that a
match in the middle doesn't fool us.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add a helper function to get config variablesSZEDER Gábor Sun, 10 May 2015 12:50:17 +0000 (14:50 +0200)

completion: add a helper function to get config variables

Currently there are a few completion functions that perform similar 'git
config' queries and filtering to get config variable names: the completion
of pretty aliases, aliases, and remote groups for 'git remote update'.

Unify those 'git config' queries in a helper function to eliminate code
duplication.

Though the helper functions to get pretty aliases and alieses are reduced
to mere one-liner wrappers around the newly added function, keep these
helpers still, because users' completion functions out there might depend
on them. And they keep their callers a tad easier to read, too.

Add tests for the pretty alias and alias helper to show that they work
as before; not for the remote groups query, though, because that's not
extracted into a helper function and it's not worth the effort to do so
for a sole callsite.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: fix unmatched code fencesJean-Noel Avila Tue, 12 May 2015 17:23:20 +0000 (19:23 +0200)

doc: fix unmatched code fences

This mismatch upsets the renderer on git-scm.com.

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Mon, 11 May 2015 21:39:39 +0000 (14:39 -0700)

Merge branch 'maint'

* maint:
Git 2.3.8

Sync with 2.3.8Junio C Hamano Mon, 11 May 2015 21:39:28 +0000 (14:39 -0700)

Sync with 2.3.8

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

Git 2.3.8 v2.3.8Junio C Hamano Mon, 11 May 2015 21:36:31 +0000 (14:36 -0700)

Git 2.3.8

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

Merge branch 'mm/usage-log-l-can-take-regex' into maint-2.3Junio C Hamano Mon, 11 May 2015 21:34:01 +0000 (14:34 -0700)

Merge branch 'mm/usage-log-l-can-take-regex' into maint-2.3

Documentation fix.

* mm/usage-log-l-can-take-regex:
log -L: improve error message on malformed argument
Documentation: change -L:<regex> to -L:<funcname>

Merge branch 'jc/diff-no-index-d-f' into maint-2.3Junio C Hamano Mon, 11 May 2015 21:34:00 +0000 (14:34 -0700)

Merge branch 'jc/diff-no-index-d-f' into maint-2.3

The usual "git diff" when seeing a file turning into a directory
showed a patchset to remove the file and create all files in the
directory, but "git diff --no-index" simply refused to work. Also,
when asked to compare a file and a directory, imitate POSIX "diff"
and compare the file with the file with the same name in the
directory, instead of refusing to run.

* jc/diff-no-index-d-f:
diff-no-index: align D/F handling with that of normal Git
diff-no-index: DWIM "diff D F" into "diff D/F F"

Merge branch 'oh/fix-config-default-user-name-section... Junio C Hamano Mon, 11 May 2015 21:33:59 +0000 (14:33 -0700)

Merge branch 'oh/fix-config-default-user-name-section' into maint-2.3

The default $HOME/.gitconfig file created upon "git config --global"
that edits it had incorrectly spelled user.name and user.email
entries in it.

* oh/fix-config-default-user-name-section:
config: fix settings in default_user_config template

Merge branch 'jc/epochtime-wo-tz' into maint-2.3Junio C Hamano Mon, 11 May 2015 21:33:58 +0000 (14:33 -0700)

Merge branch 'jc/epochtime-wo-tz' into maint-2.3

"git commit --date=now" or anything that relies on approxidate lost
the daylight-saving-time offset.

* jc/epochtime-wo-tz:
parse_date_basic(): let the system handle DST conversion
parse_date_basic(): return early when given a bogus timestamp

Second batch for 2.5 cycleJunio C Hamano Mon, 11 May 2015 21:31:28 +0000 (14:31 -0700)

Second batch for 2.5 cycle

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

Merge branch 'pt/xdg-config-path'Junio C Hamano Mon, 11 May 2015 21:24:01 +0000 (14:24 -0700)

Merge branch 'pt/xdg-config-path'

Code clean-up for xdg configuration path support.

* pt/xdg-config-path:
path.c: remove home_config_paths()
git-config: replace use of home_config_paths()
git-commit: replace use of home_config_paths()
credential-store.c: replace home_config_paths() with xdg_config_home()
dir.c: replace home_config_paths() with xdg_config_home()
attr.c: replace home_config_paths() with xdg_config_home()
path.c: implement xdg_config_home()

Merge branch 'ep/do-not-feed-a-pointer-to-array-size'Junio C Hamano Mon, 11 May 2015 21:24:00 +0000 (14:24 -0700)

Merge branch 'ep/do-not-feed-a-pointer-to-array-size'

Catch a programmer mistake to feed a pointer not an array to
ARRAY_SIZE() macro, by using a couple of GCC extensions.

* ep/do-not-feed-a-pointer-to-array-size:
git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array

Merge branch 'jc/hash-object'Junio C Hamano Mon, 11 May 2015 21:23:59 +0000 (14:23 -0700)

Merge branch 'jc/hash-object'

"hash-object --literally" introduced in v2.2 was not prepared to
take a really long object type name.

* jc/hash-object:
write_sha1_file(): do not use a separate sha1[] array
t1007: add hash-object --literally tests
hash-object --literally: fix buffer overrun with extra-long object type
git-hash-object.txt: document --literally option

Merge branch 'sb/prefix-path-free-results'Junio C Hamano Mon, 11 May 2015 21:23:57 +0000 (14:23 -0700)

Merge branch 'sb/prefix-path-free-results'

Code clean-up (not a leak-fix).

* sb/prefix-path-free-results:
prefix_path(): unconditionally free results in the callers

Merge branch 'sg/completion-no-redundant-all-command... Junio C Hamano Mon, 11 May 2015 21:23:57 +0000 (14:23 -0700)

Merge branch 'sg/completion-no-redundant-all-command-list'

Code simplification.

* sg/completion-no-redundant-all-command-list:
completion: remove redundant __git_compute_all_commands() call

Merge branch 'sg/complete-decorate-full-not-long'Junio C Hamano Mon, 11 May 2015 21:23:55 +0000 (14:23 -0700)

Merge branch 'sg/complete-decorate-full-not-long'

The completion for "log --decorate=" parameter value was incorrect.

* sg/complete-decorate-full-not-long:
completion: fix and update 'git log --decorate=' options

Merge branch 'jk/filter-branch-use-of-sed-on-incomplete... Junio C Hamano Mon, 11 May 2015 21:23:54 +0000 (14:23 -0700)

Merge branch 'jk/filter-branch-use-of-sed-on-incomplete-line'

"filter-branch" corrupted commit log message that ends with an
incomplete line on platforms with some "sed" implementations that
munge such a line. Work it around by avoiding to use "sed".

* jk/filter-branch-use-of-sed-on-incomplete-line:
filter-branch: avoid passing commit message through sed

Merge branch 'jc/daemon-no-ipv6-for-2.4.1'Junio C Hamano Mon, 11 May 2015 21:23:53 +0000 (14:23 -0700)

Merge branch 'jc/daemon-no-ipv6-for-2.4.1'

"git daemon" fails to build from the source under NO_IPV6
configuration (regression in 2.4).

* jc/daemon-no-ipv6-for-2.4.1:
daemon: unbreak NO_IPV6 build regression

Merge branch 'jn/clean-use-error-not-fprintf-on-stderr'Junio C Hamano Mon, 11 May 2015 21:23:52 +0000 (14:23 -0700)

Merge branch 'jn/clean-use-error-not-fprintf-on-stderr'

Some error messages in "git config" were emitted without calling
the usual error() facility.

* jn/clean-use-error-not-fprintf-on-stderr:
config: use error() instead of fprintf(stderr, ...)

Merge branch 'tb/blame-resurrect-convert-to-git'Junio C Hamano Mon, 11 May 2015 21:23:52 +0000 (14:23 -0700)

Merge branch 'tb/blame-resurrect-convert-to-git'

Some time ago, "git blame" (incorrectly) lost the convert_to_git()
call when synthesizing a fake "tip" commit that represents the
state in the working tree, which broke folks who record the history
with LF line ending to make their project portabile across
platforms while terminating lines in their working tree files with
CRLF for their platform.

* tb/blame-resurrect-convert-to-git:
blame: CRLF in the working tree and LF in the repo

Merge branch 'va/fix-git-p4-tests'Junio C Hamano Mon, 11 May 2015 21:23:51 +0000 (14:23 -0700)

Merge branch 'va/fix-git-p4-tests'

* va/fix-git-p4-tests:
git-p4: t9814: prevent --chain-lint failure

Merge branch 'ld/p4-case-fold'Junio C Hamano Mon, 11 May 2015 21:23:50 +0000 (14:23 -0700)

Merge branch 'ld/p4-case-fold'

* ld/p4-case-fold:
git-p4: add failing tests for case-folding p4d

Merge branch 'jk/rebase-quiet-noop'Junio C Hamano Mon, 11 May 2015 21:23:49 +0000 (14:23 -0700)

Merge branch 'jk/rebase-quiet-noop'

"git rebase --quiet" was not quite quiet when there is nothing to
do.

* jk/rebase-quiet-noop:
rebase: silence "git checkout" for noop rebase

Merge branch 'va/p4-client-path'Junio C Hamano Mon, 11 May 2015 21:23:48 +0000 (14:23 -0700)

Merge branch 'va/p4-client-path'

git p4 attempts to better handle branches in Perforce.

* va/p4-client-path:
git-p4: improve client path detection when branches are used
t9801: check git-p4's branch detection with client spec enabled

Merge branch 'mm/add-p-split-error'Junio C Hamano Mon, 11 May 2015 21:23:47 +0000 (14:23 -0700)

Merge branch 'mm/add-p-split-error'

When "add--interactive" splits a hunk into two overlapping hunks
and then let the user choose only one, it sometimes feeds an
incorrect patch text to "git apply". Add tests to demonstrate
this.

I have a slight suspicion that this may be $gmane/87202 coming back
and biting us (I seem to have said "let's run with this and see
what happens" back then).

* mm/add-p-split-error:
stash -p: demonstrate failure of split with mixed y/n
t3904-stash-patch: factor PERL prereq at the top of the file
t3904-stash-patch: fix test description
add -p: demonstrate failure when running 'edit' after a split
t3701-add-interactive: simplify code

Merge branch 'tb/t0027-crlf'Junio C Hamano Mon, 11 May 2015 21:23:47 +0000 (14:23 -0700)

Merge branch 'tb/t0027-crlf'

More line-ending tests.

* tb/t0027-crlf:
t0027: Add repoMIX and LF_nul
t0027: support NATIVE_CRLF platforms
t0027: cleanup: rename functions; avoid non-leading TABs

Merge branch 'ls/p4-changes-block-size'Junio C Hamano Mon, 11 May 2015 21:23:46 +0000 (14:23 -0700)

Merge branch 'ls/p4-changes-block-size'

"git p4" learned "--changes-block-size <n>" to read the changes in
chunks from Perforce, instead of making one call to "p4 changes"
that may trigger "too many rows scanned" error from Perforce.

* ls/p4-changes-block-size:
git-p4: use -m when running p4 changes

Merge branch 'jc/plug-fmt-merge-msg-leak'Junio C Hamano Mon, 11 May 2015 21:23:45 +0000 (14:23 -0700)

Merge branch 'jc/plug-fmt-merge-msg-leak'

* jc/plug-fmt-merge-msg-leak:
fmt-merge-msg: plug small leak of commit buffer

Merge branch 'nd/slim-index-pack-memory-usage'Junio C Hamano Mon, 11 May 2015 21:23:44 +0000 (14:23 -0700)

Merge branch 'nd/slim-index-pack-memory-usage'

Memory usage of "git index-pack" has been trimmed by tens of
per-cent.

* nd/slim-index-pack-memory-usage:
index-pack: kill union delta_base to save memory
index-pack: reduce object_entry size to save memory

Merge branch 'jk/still-interesting'Junio C Hamano Mon, 11 May 2015 21:23:43 +0000 (14:23 -0700)

Merge branch 'jk/still-interesting'

"git rev-list --objects $old --not --all" to see if everything that
is reachable from $old is already connected to the existing refs
was very inefficient.

* jk/still-interesting:
limit_list: avoid quadratic behavior from still_interesting

Merge branch 'jk/reading-packed-refs'Junio C Hamano Mon, 11 May 2015 21:23:42 +0000 (14:23 -0700)

Merge branch 'jk/reading-packed-refs'

An earlier rewrite to use strbuf_getwholeline() instead of fgets(3)
to read packed-refs file revealed that the former is unacceptably
inefficient.

* jk/reading-packed-refs:
t1430: add another refs-escape test
read_packed_refs: avoid double-checking sane refs
strbuf_getwholeline: use getdelim if it is available
strbuf_getwholeline: avoid calling strbuf_grow
strbuf_addch: avoid calling strbuf_grow
config: use getc_unlocked when reading from file
strbuf_getwholeline: use getc_unlocked
git-compat-util: add fallbacks for unlocked stdio
strbuf_getwholeline: use getc macro

Merge branch 'lm/squelch-bg-progress'Junio C Hamano Mon, 11 May 2015 21:23:42 +0000 (14:23 -0700)

Merge branch 'lm/squelch-bg-progress'

Many long-running operations show progress eye-candy, even when
they are later backgrounded. Hide the eye-candy when the process
is sent to the background instead.

* lm/squelch-bg-progress:
compat/mingw: stubs for getpgid() and tcgetpgrp()
progress: no progress in background

Merge branch 'jk/sha1-file-reduce-useless-warnings'Junio C Hamano Mon, 11 May 2015 21:23:40 +0000 (14:23 -0700)

Merge branch 'jk/sha1-file-reduce-useless-warnings'

* jk/sha1-file-reduce-useless-warnings:
sha1_file: squelch "packfile cannot be accessed" warnings

Merge branch 'nd/multiple-work-trees'Junio C Hamano Mon, 11 May 2015 21:23:39 +0000 (14:23 -0700)

Merge branch 'nd/multiple-work-trees'

A replacement for contrib/workdir/git-new-workdir that does not
rely on symbolic links and make sharing of objects and refs safer
by making the borrowee and borrowers aware of each other.

* nd/multiple-work-trees: (41 commits)
prune --worktrees: fix expire vs worktree existence condition
t1501: fix test with split index
t2026: fix broken &&-chain
t2026 needs procondition SANITY
git-checkout.txt: a note about multiple checkout support for submodules
checkout: add --ignore-other-wortrees
checkout: pass whole struct to parse_branchname_arg instead of individual flags
git-common-dir: make "modules/" per-working-directory directory
checkout: do not fail if target is an empty directory
t2025: add a test to make sure grafts is working from a linked checkout
checkout: don't require a work tree when checking out into a new one
git_path(): keep "info/sparse-checkout" per work-tree
count-objects: report unused files in $GIT_DIR/worktrees/...
gc: support prune --worktrees
gc: factor out gc.pruneexpire parsing code
gc: style change -- no SP before closing parenthesis
checkout: clean up half-prepared directories in --to mode
checkout: reject if the branch is already checked out elsewhere
prune: strategies for linked checkouts
checkout: support checking out into a new working directory
...

Merge branch 'pt/credential-xdg'Junio C Hamano Mon, 11 May 2015 21:23:38 +0000 (14:23 -0700)

Merge branch 'pt/credential-xdg'

Tweak the sample "store" backend of the credential helper to honor
XDG configuration file locations when specified.

* pt/credential-xdg:
t0302: "unreadable" test needs POSIXPERM
t0302: test credential-store support for XDG_CONFIG_HOME
git-credential-store: support XDG_CONFIG_HOME
git-credential-store: support multiple credential files

reflog_expire(): integrate lock_ref_sha1_basic() errors... Michael Haggerty Mon, 11 May 2015 15:25:20 +0000 (17:25 +0200)

reflog_expire(): integrate lock_ref_sha1_basic() errors into ours

Now that lock_ref_sha1_basic() gives us back its error messages via a
strbuf, incorporate its error message into our error message rather
than emitting two separate error messages.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

ref_transaction_commit(): delete extra "the" from error... Michael Haggerty Mon, 11 May 2015 15:25:19 +0000 (17:25 +0200)

ref_transaction_commit(): delete extra "the" from error message

While we are in the area, let's remove a superfluous definite article
from the error message that is emitted when the reference cannot be
locked. This improves how it reads and makes it a bit shorter.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

ref_transaction_commit(): provide better error messagesMichael Haggerty Mon, 11 May 2015 15:25:18 +0000 (17:25 +0200)

ref_transaction_commit(): provide better error messages

Now that lock_ref_sha1_basic() gives us back its error messages via a
strbuf, incorporate its error message into our error message rather
than emitting one error messages to stderr immediately and returning a
second to our caller.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

rename_ref(): integrate lock_ref_sha1_basic() errors... Michael Haggerty Mon, 11 May 2015 15:25:17 +0000 (17:25 +0200)

rename_ref(): integrate lock_ref_sha1_basic() errors into ours

Now that lock_ref_sha1_basic() gives us back its error messages via a
strbuf, incorporate its error message into our error message rather
than emitting two separate error messages.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

lock_ref_sha1_basic(): improve diagnostics for ref... Michael Haggerty Mon, 11 May 2015 15:25:16 +0000 (17:25 +0200)

lock_ref_sha1_basic(): improve diagnostics for ref D/F conflicts

If there is a failure to lock a reference that is likely caused by a
D/F conflict (e.g., trying to lock "refs/foo/bar" when reference
"refs/foo" already exists), invoke verify_refname_available() to try
to generate a more helpful error message.

That function might not detect an error. For example, some
non-reference file might be blocking the deletion of an
otherwise-empty directory tree, or there might be a race with another
process that just deleted the offending reference. In such cases,
generate the strerror-based error message like before.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

lock_ref_sha1_basic(): report errors via a "struct... Michael Haggerty Mon, 11 May 2015 15:25:15 +0000 (17:25 +0200)

lock_ref_sha1_basic(): report errors via a "struct strbuf *err"

For now, change the callers to spew the error to stderr like before.
But soon we will change them to incorporate the reason for the failure
into their own error messages.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

verify_refname_available(): report errors via a "struct... Michael Haggerty Mon, 11 May 2015 15:25:14 +0000 (17:25 +0200)

verify_refname_available(): report errors via a "struct strbuf *err"

It shouldn't be spewing errors directly to stderr.

For now, change its callers to spew the errors to stderr.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

verify_refname_available(): rename functionMichael Haggerty Mon, 11 May 2015 15:25:13 +0000 (17:25 +0200)

verify_refname_available(): rename function

Rename is_refname_available() to verify_refname_available() and change
its return value from 1 for success to 0 for success, to be consistent
with our error-handling convention. In a moment it will also get a
"struct strbuf *err" parameter.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

refs: check for D/F conflicts among refs created in... Michael Haggerty Mon, 11 May 2015 15:25:12 +0000 (17:25 +0200)

refs: check for D/F conflicts among refs created in a transaction

If two references that D/F conflict (e.g., "refs/foo" and
"refs/foo/bar") are created in a single transaction, the old code
discovered the problem only after the "commit" phase of
ref_transaction_commit() had already begun. This could leave some
references updated and others not, which violates the promise of
atomicity.

Instead, check for such conflicts during the "locking" phase:

* Teach is_refname_available() to take an "extras" parameter that can
contain extra reference names with which the specified refname must
not conflict.

* Change lock_ref_sha1_basic() to take an "extras" parameter, which it
passes through to is_refname_available().

* Change ref_transaction_commit() to pass "affected_refnames" to
lock_ref_sha1_basic() as its "extras" argument.

This change fixes a test case in t1404.

This code is a bit stricter than it needs to be. We could conceivably
allow reference "refs/foo/bar" to be created in the same transaction
as "refs/foo" is deleted (or vice versa). But that would be
complicated to implement, because it is not possible to lock
"refs/foo/bar" while "refs/foo" exists as a loose reference, but on
the other hand we don't want to delete some references before adding
others (because that could leave a gap during which required objects
are unreachable). There is also a complication that reflog files'
paths can conflict.

Any less-strict implementation would probably require tricks like the
packing of all references before the start of the real transaction, or
the use of temporary intermediate reference names.

So for now let's accept too-strict checks. Some reference update
transactions will be rejected unnecessarily, but they will be rejected
in their entirety rather than leaving the repository in an
intermediate state, as would happen now.

Please note that there is still one kind of D/F conflict that is *not*
handled correctly. If two processes are running at the same time, and
one tries to create "refs/foo" at the same time that the other tries
to create "refs/foo/bar", then they can race with each other. Both
processes can obtain their respective locks ("refs/foo.lock" and
"refs/foo/bar.lock"), proceed to the "commit" phase of
ref_transaction_commit(), and then the slower process will discover
that it cannot rename its lockfile into place (after possibly having
committed changes to other references). There appears to be no way to
fix this race without changing the locking policy, which in turn would
require a change to *all* Git clients.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

ref_transaction_commit(): use a string_list for detecti... Michael Haggerty Mon, 11 May 2015 15:25:11 +0000 (17:25 +0200)

ref_transaction_commit(): use a string_list for detecting duplicates

Detect duplicates by storing the reference names in a string_list and
sorting that, instead of sorting the ref_updates directly.

* In a moment the string_list will be used for another purpose, too.

* This removes the need for the custom comparison function
ref_update_compare().

* This means that we can carry out the updates in the order that the
user specified them instead of reordering them. This might be handy
someday if, we want to permit multiple updates to a single reference
as long as they are compatible with each other.

Note: we can't use string_list_remove_duplicates() to check for
duplicates, because we need to know the name of the reference that
appeared multiple times, to be used in the error message.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

is_refname_available(): use dirname in first loopMichael Haggerty Mon, 11 May 2015 15:25:10 +0000 (17:25 +0200)

is_refname_available(): use dirname in first loop

In the first loop (over prefixes of refname), use dirname to keep
track of the current prefix. This is not an improvement in itself, but
in a moment we will start using dirname for a role where a
NUL-terminated string is needed.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

struct nonmatching_ref_data: store a refname instead... Michael Haggerty Mon, 11 May 2015 15:25:09 +0000 (17:25 +0200)

struct nonmatching_ref_data: store a refname instead of a ref_entry

Now that we don't need a ref_entry to pass to
report_refname_conflict(), it is sufficient to store the refname of
the conflicting reference.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

report_refname_conflict(): inline functionMichael Haggerty Mon, 11 May 2015 15:25:08 +0000 (17:25 +0200)

report_refname_conflict(): inline function

It wasn't pulling its weight. And we are about to need code similar to
this where no ref_entry is available and with more diverse error
messages. Rather than try to generalize the function, just inline it.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

entry_matches(): inline functionMichael Haggerty Mon, 11 May 2015 15:25:07 +0000 (17:25 +0200)

entry_matches(): inline function

It wasn't pulling its weight. And in a moment we will need similar
tests that take a refname rather than a ref_entry as parameter, which
would have made entry_matches() even less useful.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

is_refname_available(): convert local variable "dirname... Michael Haggerty Mon, 11 May 2015 15:25:06 +0000 (17:25 +0200)

is_refname_available(): convert local variable "dirname" to strbuf

This change wouldn't be worth it by itself, but in a moment we will
use the strbuf for more string juggling.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

is_refname_available(): avoid shadowing "dir" variableMichael Haggerty Mon, 11 May 2015 15:25:05 +0000 (17:25 +0200)

is_refname_available(): avoid shadowing "dir" variable

The function had a "dir" parameter that was shadowed by a local "dir"
variable within a code block. Use the former in place of the latter.
(This is consistent with "dir"'s use elsewhere in the function.)

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

is_refname_available(): revamp the commentsMichael Haggerty Mon, 11 May 2015 15:25:04 +0000 (17:25 +0200)

is_refname_available(): revamp the comments

Change the comments to a running example of running the function with
refname set to "refs/foo/bar". Add some more explanation of the logic.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

t1404: new tests of ref D/F conflicts within transactionsMichael Haggerty Mon, 11 May 2015 15:25:03 +0000 (17:25 +0200)

t1404: new tests of ref D/F conflicts within transactions

Add some tests of reference D/F conflicts (by which I mean the fact
that references like "refs/foo" and "refs/foo/bar" are not allowed to
coexist) in the context of reference transactions.

The test of creating two conflicting references in the same
transaction fails, leaving the transaction half-completed. This will
be fixed later in this patch series.

Please note that the error messages emitted in the case of conflicts
are not very user-friendly. In particular, when the conflicts involve
loose references, then the errors are reported as

error: there are still refs under 'refs/foo'
fatal: Cannot lock the ref 'refs/foo'.

or

error: unable to resolve reference refs/foo/bar: Not a directory
fatal: Cannot lock the ref 'refs/foo/bar'.

This is because lock_ref_sha1_basic() fails while trying to lock the
new reference, before it even gets to the is_refname_available()
check. This situation will also be improved later in this patch
series.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

refs.c: remove lock_fd from struct ref_lockStefan Beller Thu, 16 Apr 2015 23:17:37 +0000 (16:17 -0700)

refs.c: remove lock_fd from struct ref_lock

The 'lock_fd' is the same as 'lk->fd'. No need to store it twice so remove
it.

No functional changes intended.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-ref: test handling large transactions properlyStefan Beller Sun, 10 May 2015 02:45:30 +0000 (04:45 +0200)

update-ref: test handling large transactions properly

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

command-list.txt: fix whitespace inconsistencySébastien Guimmara Fri, 8 May 2015 19:29:35 +0000 (21:29 +0200)

command-list.txt: fix whitespace inconsistency

The overwhelming majority of lines were single space aligned,
except a few ones aligned by tabs. Fix inconsistency by using
single space everywhere.

Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: portability fix for string printingDanny Lin Fri, 8 May 2015 00:56:59 +0000 (08:56 +0800)

contrib/subtree: portability fix for string printing

'echo -n' is not portable, but this script used it as a way to give
a string followed by a carriage return for progress messages.
Introduce a new helper shell function "progress" and use printf as a
more portable way to do this. As a side effect, this makes it
unnecessary to have a raw CR in our source, which can be munged in
some shells. For example, MsysGit trims CR before executing a shell
script file in order to make it work right on Windows even if it
uses CRLF as linefeeds.

While at it, replace "echo" using printf in debug() and say() to
eliminate the temptation of reintroducing the same bug.

Signed-off-by: Danny Lin <danny0838@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http: add support for specifying an SSL cipher listLars Kellogg-Stedman Fri, 8 May 2015 13:22:15 +0000 (09:22 -0400)

http: add support for specifying an SSL cipher list

Teach git about a new option, "http.sslCipherList", which permits one to
specify a list of ciphers to use when negotiating SSL connections. The
setting can be overwridden by the GIT_SSL_CIPHER_LIST environment
variable.

Signed-off-by: Lars Kellogg-Stedman <lars@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bundle: verify arguments more strictlyPatrick Steinhardt Fri, 8 May 2015 08:02:00 +0000 (10:02 +0200)

bundle: verify arguments more strictly

The `verify` and `create` subcommands of the bundle builtin do
not properly verify the command line arguments that have been
passed in. While the `verify` subcommand accepts an arbitrary
amount of ignored arguments the `create` subcommand does not
complain about being passed too few arguments, resulting in a
bogus call to `git rev-list`. Fix these errors by verifying that
the correct amount of arguments has been passed in.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: there's no push --squashDanny Lin Thu, 7 May 2015 07:52:33 +0000 (15:52 +0800)

contrib/subtree: there's no push --squash

The documentation says that --squash is for 'add', 'merge',
'pull' and 'push', while --squash actually doesn't change
the behavior of 'push'. Correct the documentation.

Signed-off-by: Danny Lin <danny0838@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: skip dav http-push tests under NO_EXPAT=NoThanksJunio C Hamano Thu, 7 May 2015 16:06:14 +0000 (09:06 -0700)

tests: skip dav http-push tests under NO_EXPAT=NoThanks

When built with NO_EXPAT=NoThanks, we will not have a working http-push
over webdav.

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

t/lib-httpd.sh: skip tests if NO_CURL is definedJeff King Wed, 6 May 2015 17:42:29 +0000 (13:42 -0400)

t/lib-httpd.sh: skip tests if NO_CURL is defined

If we built git without curl, we can't actually test against
an http server. In fact, all of the test scripts which
include lib-httpd.sh already perform this check, with one
exception: t5540. For those scripts, this is a noop, and for
t5540, this is a bugfix (it used to fail when built with
NO_CURL, though it could go unnoticed if you had a stale
git-remote-https in your build directory).

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

completion: remove credential helpers from porcelain... SZEDER Gábor Tue, 5 May 2015 16:33:13 +0000 (18:33 +0200)

completion: remove credential helpers from porcelain commands

Don't offer the "main" 'git credential' command or any of the credential
helpers from contrib/credential/ when completing git commands.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1006: add tests for git cat-file --allow-unknown-typeKarthik Nayak Sun, 3 May 2015 14:30:02 +0000 (20:00 +0530)

t1006: add tests for git cat-file --allow-unknown-type

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: teach cat-file a '--allow-unknown-type' optionKarthik Nayak Sun, 3 May 2015 14:30:01 +0000 (20:00 +0530)

cat-file: teach cat-file a '--allow-unknown-type' option

'git cat-file' throws an error while trying to print the type or
size of a broken/corrupt object. This is because these objects are
usually of unknown types.

Teach git cat-file a '--allow-unknown-type' option where it prints
the type or size of a broken/corrupt object without throwing
an error.

Modify '-t' and '-s' options to call sha1_object_info_extended()
directly to support the '--allow-unknown-type' option.

Add documentation for 'cat-file --allow-unknown-type'.

Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
cat-file: add documentation for '--allow-unknown-type' option.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: make the options mutually exclusiveKarthik Nayak Sun, 3 May 2015 14:30:00 +0000 (20:00 +0530)

cat-file: make the options mutually exclusive

We only parse the options if 2 or 3 arguments are specified.
Update 'struct option options[]' to use OPT_CMDMODE rather than
OPT_SET_INT to allow only one mutually exclusive option and avoid the
need for checking number of arguments. This was written by Junio C Hamano,
tested by me.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: support reading from a loose object of unkno... Karthik Nayak Sun, 3 May 2015 14:29:59 +0000 (19:59 +0530)

sha1_file: support reading from a loose object of unknown type

Update sha1_loose_object_info() to optionally allow it to read
from a loose object file of unknown/bogus type; as the function
usually returns the type of the object it read in the form of enum
for known types, add an optional "typename" field to receive the
name of the type in textual form and a flag to indicate the reading
of a loose object file of unknown/bogus type.

Add parse_sha1_header_extended() which acts as a wrapper around
parse_sha1_header() allowing more information to be obtained.

Add unpack_sha1_header_to_strbuf() to unpack sha1 headers of
unknown/corrupt objects which have a unknown sha1 header size to
a strbuf structure. This was written by Junio C Hamano but tested
by me.

Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Hepled-by: Jeff King <peff@peff.net>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch: do not call a "remote-tracking branch" a "remot... Danny Lin Wed, 6 May 2015 19:01:55 +0000 (03:01 +0800)

branch: do not call a "remote-tracking branch" a "remote branch"

"git branch -r -d" mentions "delete remote branch", which should be
"remote-tracking branch".

Signed-off-by: Danny Lin <danny0838@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

path.c: remove home_config_paths()Paul Tan Wed, 6 May 2015 08:01:04 +0000 (16:01 +0800)

path.c: remove home_config_paths()

home_config_paths() combines distinct functionality already implemented
by expand_user_path() and xdg_config_home(), and it also hard-codes the
path ~/.gitconfig, which makes it unsuitable to use for other home
config file paths. Since its use will just add unnecessary complexity to
the code, remove it.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-config: replace use of home_config_paths()Paul Tan Wed, 6 May 2015 08:01:03 +0000 (16:01 +0800)

git-config: replace use of home_config_paths()

Since home_config_paths() combines distinct functionality already
implemented by expand_user_path() and xdg_config_home(), and hides the
home config file path ~/.gitconfig. Make the code more explicit by
replacing the use of home_config_paths() with expand_user_path() and
xdg_config_home().

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-commit: replace use of home_config_paths()Paul Tan Wed, 6 May 2015 08:01:02 +0000 (16:01 +0800)

git-commit: replace use of home_config_paths()

Since home_config_paths() combines two distinct functionality already
implemented by expand_user_path() and xdg_config_home(), and hides the
home config file path ~/.gitconfig. Make the code more explicit by
replacing the use of home_config_paths() with expand_user_path() and
xdg_config_home().

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

credential-store.c: replace home_config_paths() with... Paul Tan Wed, 6 May 2015 08:01:01 +0000 (16:01 +0800)

credential-store.c: replace home_config_paths() with xdg_config_home()

Since only the xdg credentials file path is required, and
home_config_paths() is unable to construct the path ~/.git-credentials,
simplify the code by replacing home_config_paths() with
xdg_config_home().

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

dir.c: replace home_config_paths() with xdg_config_home()Paul Tan Wed, 6 May 2015 08:01:00 +0000 (16:01 +0800)

dir.c: replace home_config_paths() with xdg_config_home()

Since only the xdg excludes file path is required, simplify the code by
replacing use of home_config_paths() with xdg_config_home().

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

attr.c: replace home_config_paths() with xdg_config_home()Paul Tan Wed, 6 May 2015 08:00:59 +0000 (16:00 +0800)

attr.c: replace home_config_paths() with xdg_config_home()

Since only the xdg attributes file path is required, simplify the code
by using xdg_config_home() instead of home_config_paths().

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

path.c: implement xdg_config_home()Paul Tan Tue, 21 Apr 2015 04:06:27 +0000 (12:06 +0800)

path.c: implement xdg_config_home()

The XDG base dir spec[1] specifies that configuration files be stored in
a subdirectory in $XDG_CONFIG_HOME. To construct such a configuration
file path, home_config_paths() can be used. However, home_config_paths()
combines distinct functionality:

1. Retrieve the home git config file path ~/.gitconfig

2. Construct the XDG config path of the file specified by `file`.

This function was introduced in commit 21cf3227 ("read (but not write)
from $XDG_CONFIG_HOME/git/config file"). While the intention of the
function was to allow the home directory configuration file path and the
xdg directory configuration file path to be retrieved with one function
call, the hard-coding of the path ~/.gitconfig prevents it from being
used for other configuration files. Furthermore, retrieving a file path
relative to the user's home directory can be done with
expand_user_path(). Hence, it can be seen that home_config_paths()
introduces unnecessary complexity, especially if a user just wants to
retrieve the xdg config file path.

As such, implement a simpler function xdg_config_home() for constructing
the XDG base dir spec configuration file path. This function, together
with expand_user_path(), can replace all uses of home_config_paths().

[1] http://standards.freedesktop.org/basedir-spec/basedir-spec-0.7.html

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

First batch for 2.5 cycleJunio C Hamano Wed, 6 May 2015 04:13:30 +0000 (21:13 -0700)

First batch for 2.5 cycle

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

Merge branch 'jk/prune-mtime'Junio C Hamano Wed, 6 May 2015 04:00:37 +0000 (21:00 -0700)

Merge branch 'jk/prune-mtime'

Access to objects in repositories that borrow from another one on a
slow NFS server unnecessarily got more expensive due to recent code
becoming more cautious in a naive way not to lose objects to pruning.

* jk/prune-mtime:
sha1_file: only freshen packs once per run
sha1_file: freshen pack objects before loose
reachable: only mark local objects as recent

Merge branch 'mm/usage-log-l-can-take-regex'Junio C Hamano Wed, 6 May 2015 04:00:36 +0000 (21:00 -0700)

Merge branch 'mm/usage-log-l-can-take-regex'

Documentation fix.

* mm/usage-log-l-can-take-regex:
log -L: improve error message on malformed argument
Documentation: change -L:<regex> to -L:<funcname>

Merge branch 'ep/fix-test-lib-functions-report'Junio C Hamano Wed, 6 May 2015 04:00:35 +0000 (21:00 -0700)

Merge branch 'ep/fix-test-lib-functions-report'

* ep/fix-test-lib-functions-report:
test-lib-functions.sh: fix the second argument to some helper functions

Merge branch 'cn/bom-in-gitignore'Junio C Hamano Wed, 6 May 2015 04:00:34 +0000 (21:00 -0700)

Merge branch 'cn/bom-in-gitignore'

Teach the codepaths that read .gitignore and .gitattributes files
that these files encoded in UTF-8 may have UTF-8 BOM marker at the
beginning; this makes it in line with what we do for configuration
files already.

* cn/bom-in-gitignore:
attr: skip UTF8 BOM at the beginning of the input file
config: use utf8_bom[] from utf.[ch] in git_parse_source()
utf8-bom: introduce skip_utf8_bom() helper
add_excludes_from_file: clarify the bom skipping logic
dir: allow a BOM at the beginning of exclude files

Merge branch 'jc/epochtime-wo-tz'Junio C Hamano Wed, 6 May 2015 04:00:33 +0000 (21:00 -0700)

Merge branch 'jc/epochtime-wo-tz'

"git commit --date=now" or anything that relies on approxidate lost
the daylight-saving-time offset.

* jc/epochtime-wo-tz:
parse_date_basic(): let the system handle DST conversion
parse_date_basic(): return early when given a bogus timestamp

Merge branch 'nd/t1509-chroot-test'Junio C Hamano Wed, 6 May 2015 04:00:31 +0000 (21:00 -0700)

Merge branch 'nd/t1509-chroot-test'

Correct test bitrot.

* nd/t1509-chroot-test:
t1509: update prepare script to be able to run t1509 in chroot again

Merge branch 'oh/fix-config-default-user-name-section'Junio C Hamano Wed, 6 May 2015 04:00:30 +0000 (21:00 -0700)

Merge branch 'oh/fix-config-default-user-name-section'

The default $HOME/.gitconfig file created upon "git config --global"
that edits it had incorrectly spelled user.name and user.email
entries in it.

* oh/fix-config-default-user-name-section:
config: fix settings in default_user_config template

Merge branch 'jk/type-from-string-gently'Junio C Hamano Wed, 6 May 2015 04:00:29 +0000 (21:00 -0700)

Merge branch 'jk/type-from-string-gently'

"git cat-file bl $blob" failed to barf even though there is no
object type that is "bl".

* jk/type-from-string-gently:
type_from_string_gently: make sure length matches