git
9 years agoMerge branch 'xf/user-manual-ff'
Junio C Hamano [Fri, 30 Oct 2015 20:07:05 +0000 (13:07 -0700)] 
Merge branch 'xf/user-manual-ff'

* xf/user-manual-ff:
  user-manual: fix the description of fast-forward

9 years agoMerge branch 'rs/pop-commit'
Junio C Hamano [Fri, 30 Oct 2015 20:07:03 +0000 (13:07 -0700)] 
Merge branch 'rs/pop-commit'

Code simplification.

* rs/pop-commit:
  use pop_commit() for consuming the first entry of a struct commit_list

9 years agoMerge branch 'mk/blame-error-message'
Junio C Hamano [Fri, 30 Oct 2015 20:07:01 +0000 (13:07 -0700)] 
Merge branch 'mk/blame-error-message'

The error message from "git blame --contents --reverse" incorrectly
talked about "--contents --children".

* mk/blame-error-message:
  blame: fix option name in error message

9 years agoMerge branch 'js/misc-fixes'
Junio C Hamano [Fri, 30 Oct 2015 20:06:59 +0000 (13:06 -0700)] 
Merge branch 'js/misc-fixes'

Various compilation fixes and squelching of warnings.

* js/misc-fixes:
  Correct fscanf formatting string for I64u values
  Silence GCC's "cast of pointer to integer of a different size" warning
  Squelch warning about an integer overflow

9 years agoMerge branch 'js/imap-send-curl-compilation-fix'
Junio C Hamano [Fri, 30 Oct 2015 20:06:58 +0000 (13:06 -0700)] 
Merge branch 'js/imap-send-curl-compilation-fix'

"git imap-send" did not compile well with older version of cURL library.

* js/imap-send-curl-compilation-fix:
  imap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available

9 years agoMerge branch 'jk/delete-modechange-conflict'
Junio C Hamano [Fri, 30 Oct 2015 20:06:56 +0000 (13:06 -0700)] 
Merge branch 'jk/delete-modechange-conflict'

Merging a branch that removes a path and another that changes the
mode bits on the same path should have conflicted at the path, but
it didn't and silently favoured the removal.

* jk/delete-modechange-conflict:
  merge: detect delete/modechange conflict
  t6031: generalize for recursive and resolve strategies
  t6031: move triple-rename test to t3030

9 years agoMerge branch 'jc/add-u-A-default-to-top'
Junio C Hamano [Fri, 30 Oct 2015 20:06:55 +0000 (13:06 -0700)] 
Merge branch 'jc/add-u-A-default-to-top'

"git --literal-pathspecs add -u/-A" without any command line
argument misbehaved ever since Git 2.0.

* jc/add-u-A-default-to-top:
  add: simplify -u/-A without pathspec

9 years agoMerge branch 'ar/clone-dissociate'
Junio C Hamano [Fri, 30 Oct 2015 20:06:53 +0000 (13:06 -0700)] 
Merge branch 'ar/clone-dissociate'

"git clone --dissociate" used to require that "--reference" was
used at the same time, but you can create a new repository that
borrows objects from another without using "--reference", namely
with "clone --local" from a repository that borrows objects from
other repositories.

* ar/clone-dissociate:
  clone: allow "--dissociate" without reference

9 years agoMerge git://ozlabs.org/~paulus/gitk
Junio C Hamano [Fri, 30 Oct 2015 16:02:27 +0000 (09:02 -0700)] 
Merge git://ozlabs.org/~paulus/gitk

* git://ozlabs.org/~paulus/gitk:
  gitk: Update Russian translation
  gitk: Add accelerator to German locale
  gitk: Add accelerators to Japanese locale
  gitk: Update msgid's for menu items with accelerator
  gitk: l10n: Update Catalan translation
  gitk: Add missing accelerators
  Updated Vietnamese translation

9 years agoMerge https://github.com/vnwildman/gitk
Paul Mackerras [Fri, 30 Oct 2015 10:01:55 +0000 (21:01 +1100)] 
Merge https://github.com/vnwildman/gitk

This brings in an update to the Vietnamese translation.

Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agogitk: Update Russian translation
Dimitriy Ryazantcev [Tue, 13 Oct 2015 09:52:46 +0000 (12:52 +0300)] 
gitk: Update Russian translation

Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agogitk: Add accelerator to German locale
Takashi Iwai [Tue, 20 Oct 2015 12:33:04 +0000 (14:33 +0200)] 
gitk: Add accelerator to German locale

Assigned either to the first letter or some unique letter.  At least
there are no conflicts, as far as I see...

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agogitk: Add accelerators to Japanese locale
Takashi Iwai [Tue, 20 Oct 2015 12:33:03 +0000 (14:33 +0200)] 
gitk: Add accelerators to Japanese locale

Just follow the English accelerator keys.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agogitk: Update msgid's for menu items with accelerator
Takashi Iwai [Tue, 20 Oct 2015 12:33:02 +0000 (14:33 +0200)] 
gitk: Update msgid's for menu items with accelerator

The commit d99b4b0de27a ("gitk: Accelerators for the main menu")
modified the menu item strings with the accelerator, but the
translations didn't follow, thus the menus are shown without
translations.

This patch systematically update the msgid keys just to follow this
change.  The contents aren't changed, so the accelerator won't work in
these locales for now.  Each locale translator needs to add proper
acceleration keys appropriately.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agogitk: l10n: Update Catalan translation
Alex Henrie [Tue, 6 Oct 2015 04:26:12 +0000 (22:26 -0600)] 
gitk: l10n: Update Catalan translation

The gitk included in git 2.6.0 crashes if run from a Catalan locale.
I'm hoping that a translation update will fix this.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agogitk: Add missing accelerators
Beat Bolli [Wed, 30 Sep 2015 19:50:11 +0000 (21:50 +0200)] 
gitk: Add missing accelerators

In d99b4b0de27a ("gitk: Accelerators for the main menu", 2015-09-09),
accelerators were added to allow efficient keyboard navigation. One
instance of the strings "Edit view..." and "Delete view" were left
without the ampersand.

Add the missing ampersand characters to unbreak our international
users.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Paul Mackerras <paulus@samba.org>
9 years agoEighth batch for 2.7
Junio C Hamano [Thu, 29 Oct 2015 21:02:40 +0000 (14:02 -0700)] 
Eighth batch for 2.7

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMerge branch 'jc/am-mailinfo-direct'
Junio C Hamano [Thu, 29 Oct 2015 20:59:23 +0000 (13:59 -0700)] 
Merge branch 'jc/am-mailinfo-direct'

"git am" used to spawn "git mailinfo" via run_command() API once
per each patch, but learned to make a direct call to mailinfo()
instead.

* jc/am-mailinfo-direct:
  am: make direct call to mailinfo

9 years agoMerge branch 'jc/mailinfo-lib'
Junio C Hamano [Thu, 29 Oct 2015 20:59:21 +0000 (13:59 -0700)] 
Merge branch 'jc/mailinfo-lib'

The implementation of "git mailinfo" was refactored so that a
mailinfo() function can be directly called from inside a process.

* jc/mailinfo-lib: (34 commits)
  mailinfo: remove calls to exit() and die() deep in the callchain
  mailinfo: handle charset conversion errors in the caller
  mailinfo: libify
  mailinfo: keep the parsed log message in a strbuf
  mailinfo: handle_commit_msg() shouldn't be called after finding patchbreak
  mailinfo: move content/content_top to struct mailinfo
  mailinfo: move [ps]_hdr_data to struct mailinfo
  mailinfo: move cmitmsg and patchfile to struct mailinfo
  mailinfo: move charset to struct mailinfo
  mailinfo: move transfer_encoding to struct mailinfo
  mailinfo: move check for metainfo_charset to convert_to_utf8()
  mailinfo: move metainfo_charset to struct mailinfo
  mailinfo: move use_scissors and use_inbody_headers to struct mailinfo
  mailinfo: move add_message_id and message_id to struct mailinfo
  mailinfo: move patch_lines to struct mailinfo
  mailinfo: move filter/header stage to struct mailinfo
  mailinfo: move global "FILE *fin, *fout" to struct mailinfo
  mailinfo: move keep_subject & keep_non_patch_bracket to struct mailinfo
  mailinfo: introduce "struct mailinfo" to hold globals
  mailinfo: move global "line" into mailinfo() function
  ...

9 years agoMerge branch 'rp/link-curl-before-ssl'
Junio C Hamano [Thu, 29 Oct 2015 20:59:20 +0000 (13:59 -0700)] 
Merge branch 'rp/link-curl-before-ssl'

The linkage order of libraries was wrong in places around libcurl.

* rp/link-curl-before-ssl:
  configure.ac: detect ssl need with libcurl
  Makefile: make curl-config path configurable
  Makefile: link libcurl before zlib

9 years agoMerge branch 'dt/name-hash-dir-entry-fix'
Junio C Hamano [Thu, 29 Oct 2015 20:59:19 +0000 (13:59 -0700)] 
Merge branch 'dt/name-hash-dir-entry-fix'

The name-hash subsystem that is used to cope with case insensitive
filesystems keeps track of directories and their on-filesystem
cases for all the paths in the index by holding a pointer to a
randomly chosen cache entry that is inside the directory (for its
ce->ce_name component).  This pointer was not updated even when the
cache entry was removed from the index, leading to use after free.
This was fixed by recording the path for each directory instead of
borrowing cache entries and restructuring the API somewhat.

* dt/name-hash-dir-entry-fix:
  name-hash: don't reuse cache_entry in dir_entry

9 years agoMerge branch 'tk/sigchain-unnecessary-post-tempfile'
Junio C Hamano [Thu, 29 Oct 2015 20:59:17 +0000 (13:59 -0700)] 
Merge branch 'tk/sigchain-unnecessary-post-tempfile'

Remove no-longer used #include.

* tk/sigchain-unnecessary-post-tempfile:
  shallow: remove unused #include "sigchain.h"
  read-cache: remove unused #include "sigchain.h"
  diff: remove unused #include "sigchain.h"
  credential-cache--daemon: remove unused #include "sigchain.h"

9 years agoMerge branch 'jk/war-on-sprintf'
Junio C Hamano [Thu, 29 Oct 2015 20:59:17 +0000 (13:59 -0700)] 
Merge branch 'jk/war-on-sprintf'

* jk/war-on-sprintf:
  compat/mingw.c: remove printf format warning
  read_branches_file: plug a FILE* leak

9 years agoMerge branch 'jc/em-dash-in-doc'
Junio C Hamano [Thu, 29 Oct 2015 20:59:16 +0000 (13:59 -0700)] 
Merge branch 'jc/em-dash-in-doc'

AsciiDoc markup fixes.

* jc/em-dash-in-doc:
  Documentation: AsciiDoc spells em-dash as double-dashes, not triple

9 years agoMerge branch 'jc/everyday-markup'
Junio C Hamano [Thu, 29 Oct 2015 20:59:15 +0000 (13:59 -0700)] 
Merge branch 'jc/everyday-markup'

AsciiDoc markup fixes.

* jc/everyday-markup:
  Documentation/everyday: match undefline with the text

9 years agoMerge branch 'xf/user-manual-markup'
Junio C Hamano [Thu, 29 Oct 2015 20:59:14 +0000 (13:59 -0700)] 
Merge branch 'xf/user-manual-markup'

AsciiDoc markup fixes.

* xf/user-manual-markup:
  Documentation: match undefline with the text in old release notes
  Documentation: match underline with the text
  Documentation: fix header markup

9 years agoSeventh batch for 2.7
Junio C Hamano [Mon, 26 Oct 2015 23:02:08 +0000 (16:02 -0700)] 
Seventh batch for 2.7

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMerge branch 'dk/p4-import-ctypes'
Junio C Hamano [Mon, 26 Oct 2015 22:55:26 +0000 (15:55 -0700)] 
Merge branch 'dk/p4-import-ctypes'

"git-p4" tried to use from ctypes module without first importing
it.

* dk/p4-import-ctypes:
  git-p4: import the ctypes module

9 years agoMerge branch 'jk/repository-extension'
Junio C Hamano [Mon, 26 Oct 2015 22:55:24 +0000 (15:55 -0700)] 
Merge branch 'jk/repository-extension'

Prepare for Git on-disk repository representation to undergo
backward incompatible changes by introducing a new repository
format version "1", with an extension mechanism.

* jk/repository-extension:
  introduce "preciousObjects" repository extension
  introduce "extensions" form of core.repositoryformatversion

9 years agoMerge branch 'dt/t7063-fix-flaky-test'
Junio C Hamano [Mon, 26 Oct 2015 22:55:23 +0000 (15:55 -0700)] 
Merge branch 'dt/t7063-fix-flaky-test'

* dt/t7063-fix-flaky-test:
  t7063: fix flaky untracked-cache test

9 years agoMerge branch 'kn/for-each-tag'
Junio C Hamano [Mon, 26 Oct 2015 22:55:22 +0000 (15:55 -0700)] 
Merge branch 'kn/for-each-tag'

Recent update to "git tag --contains" caused a performance
regression.

* kn/for-each-tag:
  tag.c: use the correct algorithm for the '--contains' option

9 years agoMerge branch 'es/worktree-add'
Junio C Hamano [Mon, 26 Oct 2015 22:55:21 +0000 (15:55 -0700)] 
Merge branch 'es/worktree-add'

* es/worktree-add:
  worktree: usage: denote <branch> as optional with 'add'

9 years agoMerge branch 'tk/stripspace'
Junio C Hamano [Mon, 26 Oct 2015 22:55:20 +0000 (15:55 -0700)] 
Merge branch 'tk/stripspace'

The internal stripspace() function has been moved to where it
logically belongs to, i.e. strbuf API, and the command line parser
of "git stripspace" has been updated to use the parse_options API.

* tk/stripspace:
  stripspace: use parse-options for command-line parsing
  strbuf: make stripspace() part of strbuf

9 years agoMerge branch 'rt/placeholder-in-usage'
Junio C Hamano [Mon, 26 Oct 2015 22:55:18 +0000 (15:55 -0700)] 
Merge branch 'rt/placeholder-in-usage'

A couple of commands still showed "[options]" in their usage string
to note where options should come on their command line, but we
spell that "[<options>]" in most places these days.

* rt/placeholder-in-usage:
  am, credential-cache: add angle brackets to usage string

9 years agoMerge branch 'jc/usage-stdin'
Junio C Hamano [Mon, 26 Oct 2015 22:55:17 +0000 (15:55 -0700)] 
Merge branch 'jc/usage-stdin'

The synopsis text and the usage string of subcommands that read
list of things from the standard input are often shown as if they
only take input from a file on a filesystem, which was misleading.

* jc/usage-stdin:
  usage: do not insist that standard input must come from a file

9 years agoMerge branch 'mr/worktree-list'
Junio C Hamano [Mon, 26 Oct 2015 22:55:16 +0000 (15:55 -0700)] 
Merge branch 'mr/worktree-list'

Add the "list" subcommand to "git worktree".

* mr/worktree-list:
  worktree: add 'list' command
  worktree: add details to the worktree struct
  worktree: add a function to get worktree details
  worktree: refactor find_linked_symref function
  worktree: add top-level worktree.c

9 years agoMerge branch 'jc/am-3-fallback-regression-fix'
Junio C Hamano [Mon, 26 Oct 2015 22:55:15 +0000 (15:55 -0700)] 
Merge branch 'jc/am-3-fallback-regression-fix'

"git am -3" had a small regression where it is aborted in its error
handling codepath when underlying merge-recursive failed in certain
ways, as it assumed that the internal call to merge-recursive will
never die, which is not the case (yet).

* jc/am-3-fallback-regression-fix:
  am -3: do not let failed merge from completing the error codepath

9 years agomerge: detect delete/modechange conflict
Jeff King [Mon, 26 Oct 2015 21:39:39 +0000 (17:39 -0400)] 
merge: detect delete/modechange conflict

If one side deletes a file and the other changes its
content, we notice and report a conflict. However, if
instead of changing the content, we change only the mode,
the merge does not notice (and the mode change is silently
dropped).

The trivial index merge notices the problem and correctly
leaves the conflict in the index, but both merge-recursive
and merge-one-file will silently resolve this in favor of
the deletion.  In many cases that is a sane resolution, but
we should be punting to the user whenever there is any
question. So let's detect and treat this as a conflict (in
both strategies).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agot6031: generalize for recursive and resolve strategies
Jeff King [Mon, 26 Oct 2015 21:37:18 +0000 (17:37 -0400)] 
t6031: generalize for recursive and resolve strategies

This script tests the filemode handling of merge-recursive,
but we do not test the same thing for merge-resolve. Let's
generalize the script a little:

  1. Break out the setup steps for each test into a separate
     snippet.

  2. For each test, run it twice; once with "-s recursive"
     and once with "-s resolve". We can avoid repeating
     ourselves by adding a function.

  3. Since we have a nice abstracted function, we can make
     our tests more thorough by testing both directions
     (change on "ours" versus "theirs").

This improves our test coverage, and will make this the
place to add more tests related to merging mode changes.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agot6031: move triple-rename test to t3030
Jeff King [Mon, 26 Oct 2015 21:36:18 +0000 (17:36 -0400)] 
t6031: move triple-rename test to t3030

The t6031 test was introduced to check filemode handling of
merge-recursive. Much later, an unrelated test was tacked on
to look at renames and d/f conflicts. This test does not
depend on anything that happened before (it actually blows
away any existing content in the test repo). Let's move it
to t3030, where there are more related tests.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agouse pop_commit() for consuming the first entry of a struct commit_list
RenĂ© Scharfe [Sat, 24 Oct 2015 16:21:31 +0000 (18:21 +0200)] 
use pop_commit() for consuming the first entry of a struct commit_list

Instead of open-coding the function pop_commit() just call it.  This
makes the intent clearer and reduces code size.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoCorrect fscanf formatting string for I64u values
Waldek Maleska [Mon, 26 Oct 2015 13:15:33 +0000 (14:15 +0100)] 
Correct fscanf formatting string for I64u values

This fix is probably purely cosmetic because PRIuMAX is likely identical
to SCNuMAX. Nevertheless, when using a function of the scanf() family,
the correct interpolation to use is the latter, not the former.

Signed-off-by: Waldek Maleska <w.maleska@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoSilence GCC's "cast of pointer to integer of a different size" warning
Johannes Schindelin [Mon, 26 Oct 2015 13:15:25 +0000 (14:15 +0100)] 
Silence GCC's "cast of pointer to integer of a different size" warning

When calculating hashes from pointers, it actually makes sense to cut
off the most significant bits. In that case, said warning does not make
a whole lot of sense.

So let's just work around it by casting the pointer first to intptr_t
and then casting up/down to the final integral type.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoSquelch warning about an integer overflow
Johannes Schindelin [Mon, 26 Oct 2015 13:15:21 +0000 (14:15 +0100)] 
Squelch warning about an integer overflow

We cannot rely on long integers to have more than 32 bits.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoimap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available
Johannes Schindelin [Mon, 26 Oct 2015 13:14:58 +0000 (14:14 +0100)] 
imap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available

This fixes the compilation on an older Linux that was used to debug
test failures when upgrading Git for Windows to Git v2.3.0.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoblame: fix option name in error message
Max Kirillov [Mon, 26 Oct 2015 05:29:00 +0000 (07:29 +0200)] 
blame: fix option name in error message

The option name used in blame's UI is `--reverse`.

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agouser-manual: fix the description of fast-forward
Xue Fuqiao [Sun, 25 Oct 2015 00:28:43 +0000 (08:28 +0800)] 
user-manual: fix the description of fast-forward

The "Fast-forward merges" section of user-manual.txt incorrectly
says if the current branch is a descendant of the other, Git will
perform a fast-forward merge, but it should the other way around.

Signed-off-by: Xue Fuqiao <xfq.free@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoadd: simplify -u/-A without pathspec
Junio C Hamano [Sun, 25 Oct 2015 02:31:11 +0000 (19:31 -0700)] 
add: simplify -u/-A without pathspec

Since Git 2.0, "add -u" and "add -A" run from a subdirectory without
any pathspec mean "everything in the working tree" (before 2.0, they
were limited to the current directory).  The limiting to the current
directory was implemented by inserting "." to the command line when
the end user did not give us any pathspec.  At 2.0, we updated the
code to insert ":/" (instead of '.') to consider everything from the
top-level, by using a pathspec magic "top".

The call to parse_pathspec() using the command line arguments is,
however, made with PATHSPEC_PREFER_FULL option since 5a76aff1 (add:
convert to use parse_pathspec, 2013-07-14), which predates Git 2.0.
In retrospect, there was no need to turn "adding . to limit to the
directory" into "adding :/ to unlimit to everywhere" in Git 2.0;
instead we could just have done "if there is no pathspec on the
command line, just let it be".  The parse_pathspec() then would give
us a pathspec that matches everything and all is well.

Incidentally such a simplification also fixes a corner case bug that
stems from the fact that ":/" does not necessarily mean any magic.
A user would say "git --literal-pathspecs add -u :/" from the
command line when she has a directory ':' and wants to add
everything in it (and she knows that her :/ will be taken as
'everything under the sun' magic pathspec unless she disables the
magic with --literal-pathspecs).  The internal use of ':/' would
behave the same way as such an explicitly given ":/" when run with
"--literal-pathspecs", and will not add everything under the sun as
the code originally intended.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agocompat/mingw.c: remove printf format warning
Johannes Sixt [Fri, 23 Oct 2015 06:02:52 +0000 (08:02 +0200)] 
compat/mingw.c: remove printf format warning

5096d490 (convert trivial sprintf / strcpy calls to xsnprintf) converted
two sprintf calls. Now GCC warns that "format '%u' expects argument of
type 'unsigned int', but argument 4 has type 'long unsigned int'".
Instead of changing the format string, use a variable of type unsigned
in place of the typedef-ed type DWORD, which hides that it is actually an
unsigned long.

There is no correctness issue with the old code because unsigned long and
unsigned are always of the same size on Windows, even in 64-bit builds.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoread_branches_file: plug a FILE* leak
Johannes Sixt [Fri, 23 Oct 2015 06:02:51 +0000 (08:02 +0200)] 
read_branches_file: plug a FILE* leak

The earlier rewrite f28e3ab2 (read_branches_file: simplify string handling)
of read_branches_file() lost an fclose() call. Put it back.

As on Windows files that are open cannot be removed, the leak manifests in
a failure of 'git remote rename origin origin' when the remote's URL is
specified in .git/branches/origin, because by the time that the command
attempts to remove this file, it is still open.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoDocumentation: AsciiDoc spells em-dash as double-dashes, not triple
Junio C Hamano [Thu, 22 Oct 2015 20:02:33 +0000 (13:02 -0700)] 
Documentation: AsciiDoc spells em-dash as double-dashes, not triple

Again, we do not usually process release notes with AsciiDoc, but it
is better to be consistent.

This incidentally reveals breakages left by an ancient 5e00439f
(Documentation: build html for all files in technical and howto,
2012-10-23).  The index-format documentation was originally written
to be read as straight text without formatting and when the commit
forced everything in Documentation/ to go through AsciiDoc, it did
not do any adjustment--hence the double-dashes will be seen in the
resulting text that is rendered as preformatted fixed-width without
converted into em-dashes.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoclone: allow "--dissociate" without reference
Alex Riesen [Thu, 22 Oct 2015 16:41:17 +0000 (18:41 +0200)] 
clone: allow "--dissociate" without reference

The "--reference" option is not the only way to provide a repository
to borrow objects from.  A repository that borrows from another
repository can be cloned with "clone --local" and the resulting
repository will borrow from the same repository, which the user
may want to "--dissociate" from.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoshallow: remove unused #include "sigchain.h"
Tobias Klauser [Thu, 22 Oct 2015 12:43:30 +0000 (14:43 +0200)] 
shallow: remove unused #include "sigchain.h"

After switching to use the tempfile module in commit 6e122b44
(setup_temporary_shallow(): use tempfile module), no declarations from
sigchain.h are used in read-cache.c anymore. Thus, remove the #include.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoread-cache: remove unused #include "sigchain.h"
Tobias Klauser [Thu, 22 Oct 2015 12:43:29 +0000 (14:43 +0200)] 
read-cache: remove unused #include "sigchain.h"

After switching to use the tempfile module in commit f6ecc62d
(write_shared_index(): use tempfile module), no declarations from
sigchain.h are used in read-cache.c anymore. Thus, remove the #include.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agodiff: remove unused #include "sigchain.h"
Tobias Klauser [Thu, 22 Oct 2015 12:43:28 +0000 (14:43 +0200)] 
diff: remove unused #include "sigchain.h"

After switching to use the tempfile module in commit 284098f1
(diff: use tempfile module), no declarations from sigchain.h are used in
diff.c anymore. Thus, remove the #include.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agocredential-cache--daemon: remove unused #include "sigchain.h"
Tobias Klauser [Thu, 22 Oct 2015 12:43:27 +0000 (14:43 +0200)] 
credential-cache--daemon: remove unused #include "sigchain.h"

After switching to use the tempfile module in commit 9e903316
(credential-cache--daemon: use tempfile module), no declarations from
sigchain.h are used in credential-cache--daemon.c anymore. Thus, remove
the #include.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoDocumentation: match undefline with the text in old release notes
Junio C Hamano [Thu, 22 Oct 2015 17:11:41 +0000 (10:11 -0700)] 
Documentation: match undefline with the text in old release notes

These are not processed with AsciiDoc, but it is better to be
consistent.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoDocumentation: match underline with the text
Junio C Hamano [Thu, 22 Oct 2015 17:09:07 +0000 (10:09 -0700)] 
Documentation: match underline with the text

Even though AsciiDoc is more lenient when deciding if an underline
is for the contents on the previous line to find section headers, we
should match the length of them for other formatters to help them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoDocumentation/everyday: match undefline with the text
Junio C Hamano [Thu, 22 Oct 2015 17:14:44 +0000 (10:14 -0700)] 
Documentation/everyday: match undefline with the text

Even though AsciiDoc is more lenient when deciding if an underline
is for the contents on the previous line to find section headers, we
should match the length of them for other formatters to help them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoDocumentation: fix header markup
Xue Fuqiao [Thu, 22 Oct 2015 12:59:00 +0000 (20:59 +0800)] 
Documentation: fix header markup

Asciidoctor is stricter than AsciiDoc when deciding if underlining
is a section title or the start of preformatted text.  Make the
length of the underlining match the text to ensure that it renders
correctly in all implementations.

Signed-off-by: Xue Fuqiao <xfq.free@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoam: make direct call to mailinfo
Junio C Hamano [Thu, 15 Oct 2015 00:45:43 +0000 (17:45 -0700)] 
am: make direct call to mailinfo

And finally the endgame.  Instead of spawning "git mailinfo" via the
run_command() API the same number of times as there are incoming
patches, make direct internal call to the libified mailinfo() from
"git am" to reduce the spawning overhead, which would matter on some
platforms.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: remove calls to exit() and die() deep in the callchain
Junio C Hamano [Thu, 15 Oct 2015 00:45:29 +0000 (17:45 -0700)] 
mailinfo: remove calls to exit() and die() deep in the callchain

The top-level mailinfo() would instead punt when the code in the
deeper part of the callchain detects an unrecoverable error in the
input.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: handle charset conversion errors in the caller
Junio C Hamano [Thu, 15 Oct 2015 00:45:16 +0000 (17:45 -0700)] 
mailinfo: handle charset conversion errors in the caller

Instead of dying in convert_to_utf8(), just report an error and let
the callers handle it.  Between the two callers:

 - decode_header() silently punts when it cannot parse a broken
   RFC2047 encoded text (e.g. when it sees anything other than B or
   Q after it sees "=?<charset>") by jumping to release_return,
   returning the string it successfully parsed out so far, to the
   caller.  A piece of string that convert_to_utf8() cannot handle
   can be treated the same way.

 - handle_commit_msg() doesn't cope with a malformed line well, so
   die there for now.  We'll lift this even higher in later changes
   in this series.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: libify
Junio C Hamano [Thu, 15 Oct 2015 00:44:55 +0000 (17:44 -0700)] 
mailinfo: libify

Move the bulk of the code from builtin/mailinfo.c to mailinfo.c
so that new callers can start calling mailinfo() directly.

Note that a few calls to exit() and die() need to be cleaned up
for the API to be truly useful, which will come in later steps.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: keep the parsed log message in a strbuf
Junio C Hamano [Thu, 15 Oct 2015 00:43:27 +0000 (17:43 -0700)] 
mailinfo: keep the parsed log message in a strbuf

When mailinfo() is eventually libified, the calling "git am" still
will have to write out the log message in the "msg" file for hooks
and other users of the information, but it does not have to reopen
and reread what it wrote earlier if the function kept it in a strbuf.

This also removes the need for seeking and truncating the output
file when we see a scissors mark in the input, which in turn allows
us to lose two callsites of die_errno().

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: handle_commit_msg() shouldn't be called after finding patchbreak
Junio C Hamano [Wed, 14 Oct 2015 23:16:33 +0000 (16:16 -0700)] 
mailinfo: handle_commit_msg() shouldn't be called after finding patchbreak

There is a strange "if (!mi->cmitmsg) return 0" at the very beginning
of handle_commit_msg(), but the condition should never trigger, because:

 * The only place cmitmsg is set to NULL is after this function sees
   a patch break, closes the FILE * to write the commit log message
   and returns 1.  This function returns non-zero only from that
   codepath.

 * The caller of this function, upon seeing a non-zero return,
   increments filter_stage, starts treating the input as patch text
   and will never call handle_commit_msg() again.

Replace it with an assert(!mi->filter_stage) to ensure the above
observation will stay to be true.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move content/content_top to struct mailinfo
Junio C Hamano [Thu, 15 Oct 2015 00:43:54 +0000 (17:43 -0700)] 
mailinfo: move content/content_top to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move [ps]_hdr_data to struct mailinfo
Junio C Hamano [Thu, 15 Oct 2015 00:43:24 +0000 (17:43 -0700)] 
mailinfo: move [ps]_hdr_data to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move cmitmsg and patchfile to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 23:16:47 +0000 (16:16 -0700)] 
mailinfo: move cmitmsg and patchfile to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move charset to struct mailinfo
Junio C Hamano [Mon, 19 Oct 2015 05:30:08 +0000 (22:30 -0700)] 
mailinfo: move charset to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move transfer_encoding to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 23:16:05 +0000 (16:16 -0700)] 
mailinfo: move transfer_encoding to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move check for metainfo_charset to convert_to_utf8()
Junio C Hamano [Sun, 18 Oct 2015 22:58:35 +0000 (15:58 -0700)] 
mailinfo: move check for metainfo_charset to convert_to_utf8()

All callers of this function refrain from calling it when
mi->metainfo_charset is NULL; move the check to the callee,
as it already has a few conditions at its beginning to turn
it into a no-op.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move metainfo_charset to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 23:15:40 +0000 (16:15 -0700)] 
mailinfo: move metainfo_charset to struct mailinfo

This requires us to pass the struct down to decode_header() and
convert_to_utf8() callchain.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move use_scissors and use_inbody_headers to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 23:14:57 +0000 (16:14 -0700)] 
mailinfo: move use_scissors and use_inbody_headers to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move add_message_id and message_id to struct mailinfo
Junio C Hamano [Mon, 19 Oct 2015 05:27:56 +0000 (22:27 -0700)] 
mailinfo: move add_message_id and message_id to struct mailinfo

This requires us to pass the structure into check_header() codepath.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move patch_lines to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 23:13:51 +0000 (16:13 -0700)] 
mailinfo: move patch_lines to struct mailinfo

This one is trivial thanks to previous steps that started passing
the structure throughout the input codepaths.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move filter/header stage to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 23:13:34 +0000 (16:13 -0700)] 
mailinfo: move filter/header stage to struct mailinfo

Earlier we got rid of two function-scope static variables that kept
track of the states of helper functions by making them extra arguments
that are passed throughout the callchain.  Now we have a convenient
place to store and pass them around in the form of "struct mailinfo",
change them into two fields in the struct.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move global "FILE *fin, *fout" to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 22:40:04 +0000 (15:40 -0700)] 
mailinfo: move global "FILE *fin, *fout" to struct mailinfo

This requires us to pass "struct mailinfo" to more functions
throughout the codepath that read input lines.  Incidentally,
later steps are helped by this patch passing the struct to
more callchains.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move keep_subject & keep_non_patch_bracket to struct mailinfo
Junio C Hamano [Wed, 14 Oct 2015 22:39:37 +0000 (15:39 -0700)] 
mailinfo: move keep_subject & keep_non_patch_bracket to struct mailinfo

These two are the only easy ones that do not require passing the
structure around to deep corners of the callchain.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: introduce "struct mailinfo" to hold globals
Junio C Hamano [Mon, 19 Oct 2015 05:22:10 +0000 (22:22 -0700)] 
mailinfo: introduce "struct mailinfo" to hold globals

In this first step, move only 'email' and 'name' fields in there and
remove the corresponding globals.  In subsequent patches, more
globals will be moved to this and the structure will be passed
around as a new parameter to more functions.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move global "line" into mailinfo() function
Junio C Hamano [Sun, 18 Oct 2015 22:47:02 +0000 (15:47 -0700)] 
mailinfo: move global "line" into mailinfo() function

With the previous steps, it becomes clear that the mailinfo()
function is the only one that wants the "line" to be directly
touchable.  Move it to the function scope of this function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: do not let find_boundary() touch global "line" directly
Junio C Hamano [Sun, 18 Oct 2015 22:40:06 +0000 (15:40 -0700)] 
mailinfo: do not let find_boundary() touch global "line" directly

With the previous two commits, we established that the local
variable "line" in handle_body() and handle_boundary() functions
always refer to the global "line" that is used as the common and
shared "current line from the input".  They are the only callers of
the last function that refers to the global line directly, i.e.
find_boundary().  Pass "line" as a parameter to this leaf function
to complete the clean-up.  Now the only function that directly refers
to the global "line" is the caller of handle_body() at the very
beginning of this whole callchain.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: do not let handle_boundary() touch global "line" directly
Junio C Hamano [Sun, 18 Oct 2015 22:40:06 +0000 (15:40 -0700)] 
mailinfo: do not let handle_boundary() touch global "line" directly

This function has a single caller, and called with the global "line"
holding the multi-part boundary line the caller saw while processing
the e-mail body.  The function then goes into a loop to process each
line of the input, and fills the same global "line" variable from
the input as it needs to read more lines to process the multi-part
headers.

Let the caller explicitly pass a pointer to this global "line"
variable as an argument, and have the function itself use that
strbuf throughout, instead of referring to the global "line" itself.

There still is a helper function that this function calls that still
touches the global directly; it will be updated as the series progresses.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: do not let handle_body() touch global "line" directly
Junio C Hamano [Sun, 18 Oct 2015 22:36:16 +0000 (15:36 -0700)] 
mailinfo: do not let handle_body() touch global "line" directly

This function has a single caller, and called with the global "line"
holding the first line of the e-mail body after the caller finished
processing the e-mail headers.  The function then goes into a loop
to process each line of the input, starting from what was given by
its caller, and fills the same global "line" variable from the input
as it needs to process more lines.

Let the caller explicitly pass a pointer to this global "line"
variable as an argument, and have the function itself use that
strbuf throughout, instead of referring to the global "line" itself.

There are helper functions that this function calls that still touch
the global directly; they will be updated as the series progresses.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: get rid of function-local static states
Junio C Hamano [Tue, 13 Oct 2015 18:13:32 +0000 (11:13 -0700)] 
mailinfo: get rid of function-local static states

Two helper functions use "static int" in their scope to keep track
of the state while repeatedly getting called once for each input
line.  Move these state variables to their ultimate caller and pass
down pointers to them along the callchain, as a small step in
preparation for making this entire callchain more reentrant.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move definition of MAX_HDR_PARSED closer to its use
Junio C Hamano [Thu, 15 Oct 2015 00:44:46 +0000 (17:44 -0700)] 
mailinfo: move definition of MAX_HDR_PARSED closer to its use

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move cleanup_space() before its users
Junio C Hamano [Thu, 15 Oct 2015 00:44:26 +0000 (17:44 -0700)] 
mailinfo: move cleanup_space() before its users

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move check_header() after the helpers it uses
Junio C Hamano [Thu, 15 Oct 2015 00:44:21 +0000 (17:44 -0700)] 
mailinfo: move check_header() after the helpers it uses

This way, we can lose a forward decl for decode_header().

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move read_one_header_line() closer to its callers
Junio C Hamano [Thu, 15 Oct 2015 00:44:07 +0000 (17:44 -0700)] 
mailinfo: move read_one_header_line() closer to its callers

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: move handle_boundary() lower
Junio C Hamano [Tue, 13 Oct 2015 18:03:20 +0000 (11:03 -0700)] 
mailinfo: move handle_boundary() lower

This function wants to call find_boundary() and is called only from
one place without any recursing, so it becomes easier to read if it
appears after the called function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agomailinfo: plug strbuf leak during continuation line handling
Junio C Hamano [Tue, 20 Oct 2015 21:32:32 +0000 (14:32 -0700)] 
mailinfo: plug strbuf leak during continuation line handling

Whether this loop is left via EOF/break or upon finding a
non-continuation line, the storage used for the contination line
handling is left behind.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoname-hash: don't reuse cache_entry in dir_entry
David Turner [Wed, 21 Oct 2015 17:54:11 +0000 (13:54 -0400)] 
name-hash: don't reuse cache_entry in dir_entry

Stop reusing cache_entry in dir_entry; doing so causes a
use-after-free bug.

During merges, we free entries that we no longer need in the
destination index.  But those entries might have also been stored in
the dir_entry cache, and when a later call to add_to_index found them,
they would be used after being freed.

To prevent this, change dir_entry to store a copy of the name instead
of a pointer to a cache_entry.  This entails some refactoring of code
that expects the cache_entry.

Keith McGuigan <kmcguigan@twitter.com> diagnosed this bug and wrote
the initial patch, but this version does not use any of Keith's code.

Helped-by: Keith McGuigan <kmcguigan@twitter.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoconfigure.ac: detect ssl need with libcurl
Remi Pommarel [Thu, 24 Sep 2015 19:14:00 +0000 (21:14 +0200)] 
configure.ac: detect ssl need with libcurl

When libcurl has been statically compiled with openssl support they both
need to be linked in everytime libcurl is used.

During configuration this can be detected by looking for Curl_ssl_init
function symbol in libcurl, which will only be present if libcurl has been
compiled statically built with openssl.

configure.ac checks for Curl_ssl_init function in libcurl and if such function
exists; it sets NEEDS_SSL_WITH_CURL that is used by the Makefile to include
-lssl alongside with -lcurl.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMakefile: make curl-config path configurable
Remi Pommarel [Wed, 21 Oct 2015 17:10:46 +0000 (19:10 +0200)] 
Makefile: make curl-config path configurable

There are situations, e.g. during cross compilation, where curl-config
program is not present in the PATH.

Make the makefile use a configurable curl-config program passed through
CURL_CONFIG variable which can be set through config.mak.

Also make this variable tunable through use of autoconf/configure. Configure
will set CURL_CONFIG variable in config.mak.autogen to whatever value has been
passed to ac_cv_prog_CURL_CONFIG.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMakefile: link libcurl before zlib
Remi Pommarel [Wed, 21 Oct 2015 17:01:13 +0000 (19:01 +0200)] 
Makefile: link libcurl before zlib

For static linking especially library order while linking is important. For
example, libcurl wants symbols from zlib when building http-push, http-fetch
and remote-curl. So for these programs libcurl has to be linked before zlib.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoSync with maint
Junio C Hamano [Tue, 20 Oct 2015 22:29:57 +0000 (15:29 -0700)] 
Sync with maint

* maint:

9 years agoSixth batch for 2.7
Junio C Hamano [Tue, 20 Oct 2015 22:29:50 +0000 (15:29 -0700)] 
Sixth batch for 2.7

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMerge branch 'tb/t0027-crlf'
Junio C Hamano [Tue, 20 Oct 2015 22:26:18 +0000 (15:26 -0700)] 
Merge branch 'tb/t0027-crlf'

The test for various line-ending conversions has been enhanced.

* tb/t0027-crlf:
  t0027: improve test for not-normalized files

9 years agoMerge branch 'ls/p4-test-updates'
Junio C Hamano [Tue, 20 Oct 2015 22:26:09 +0000 (15:26 -0700)] 
Merge branch 'ls/p4-test-updates'

A few test scripts around "git p4" have been improved for
portability.

* ls/p4-test-updates:
  git-p4: skip t9819 test case on case insensitive file systems
  git-p4: avoid "stat" command in t9815 git-p4-submit-fail

9 years agoMerge branch 'jk/war-on-sprintf'
Junio C Hamano [Tue, 20 Oct 2015 22:24:00 +0000 (15:24 -0700)] 
Merge branch 'jk/war-on-sprintf'

Many allocations that is manually counted (correctly) that are
followed by strcpy/sprintf have been replaced with a less error
prone constructs such as xstrfmt.

Macintosh-specific breakage was noticed and corrected in this
reroll.

* jk/war-on-sprintf: (70 commits)
  name-rev: use strip_suffix to avoid magic numbers
  use strbuf_complete to conditionally append slash
  fsck: use for_each_loose_file_in_objdir
  Makefile: drop D_INO_IN_DIRENT build knob
  fsck: drop inode-sorting code
  convert strncpy to memcpy
  notes: document length of fanout path with a constant
  color: add color_set helper for copying raw colors
  prefer memcpy to strcpy
  help: clean up kfmclient munging
  receive-pack: simplify keep_arg computation
  avoid sprintf and strcpy with flex arrays
  use alloc_ref rather than hand-allocating "struct ref"
  color: add overflow checks for parsing colors
  drop strcpy in favor of raw sha1_to_hex
  use sha1_to_hex_r() instead of strcpy
  daemon: use cld->env_array when re-spawning
  stat_tracking_info: convert to argv_array
  http-push: use an argv_array for setup_revisions
  fetch-pack: use argv_array for index-pack / unpack-objects
  ...