git
8 years agoMerge branch 'jc/doc-diff-filter-exclude'
Junio C Hamano [Mon, 25 Jul 2016 21:13:41 +0000 (14:13 -0700)] 
Merge branch 'jc/doc-diff-filter-exclude'

Belated doc update for a feature added in v1.8.5.

* jc/doc-diff-filter-exclude:
  diff: document diff-filter exclusion

8 years agoMerge branch 'ls/travis-enable-httpd-tests'
Junio C Hamano [Mon, 25 Jul 2016 21:13:39 +0000 (14:13 -0700)] 
Merge branch 'ls/travis-enable-httpd-tests'

Allow http daemon tests in Travis CI tests.

* ls/travis-enable-httpd-tests:
  travis-ci: enable web server tests t55xx on Linux

8 years agoMerge branch 'jc/renormalize-merge-kill-safer-crlf'
Junio C Hamano [Mon, 25 Jul 2016 21:13:38 +0000 (14:13 -0700)] 
Merge branch 'jc/renormalize-merge-kill-safer-crlf'

"git merge" with renormalization did not work well with
merge-recursive, due to "safer crlf" conversion kicking in when it
shouldn't.

* jc/renormalize-merge-kill-safer-crlf:
  merge: avoid "safer crlf" during recording of merge results
  convert: unify the "auto" handling of CRLF

8 years agoMerge branch 'rs/worktree-use-strbuf-absolute-path'
Junio C Hamano [Mon, 25 Jul 2016 21:13:37 +0000 (14:13 -0700)] 
Merge branch 'rs/worktree-use-strbuf-absolute-path'

Code simplification.

* rs/worktree-use-strbuf-absolute-path:
  worktree: use strbuf_add_absolute_path() directly

8 years agoMerge branch 'rs/rm-strbuf-optim'
Junio C Hamano [Mon, 25 Jul 2016 21:13:36 +0000 (14:13 -0700)] 
Merge branch 'rs/rm-strbuf-optim'

The use of strbuf in "git rm" to build filename to remove was a bit
suboptimal, which has been fixed.

* rs/rm-strbuf-optim:
  rm: reuse strbuf for all remove_dir_recursively() calls

8 years agoMerge branch 'rw/make-needs-librt'
Junio C Hamano [Mon, 25 Jul 2016 21:13:35 +0000 (14:13 -0700)] 
Merge branch 'rw/make-needs-librt'

Makefile assumed that -lrt is always available on platforms that
want to use clock_gettime() and CLOCK_MONOTONIC, which is not a
case for recent Mac OS X.  The necessary symbols are often found in
libc on many modern systems and having -lrt on the command line, as
long as the library exists, had no effect, but when the platform
removes librt.a that is a different matter--having -lrt will break
the linkage.

This change could be seen as a regression for those who do need to
specify -lrt, as they now specifically ask for NEEDS_LIBRT when
building. Hopefully they are in the minority these days.

* rw/make-needs-librt:
  config.mak.uname: define NEEDS_LIBRT under Linux, for now
  Makefile: add NEEDS_LIBRT to optionally link with librt

8 years agoMerge branch 'js/ignore-space-at-eol'
Junio C Hamano [Mon, 25 Jul 2016 21:13:35 +0000 (14:13 -0700)] 
Merge branch 'js/ignore-space-at-eol'

An age old bug that caused "git diff --ignore-space-at-eol"
misbehave has been fixed.

* js/ignore-space-at-eol:
  diff: fix a double off-by-one with --ignore-space-at-eol
  diff: demonstrate a bug with --patience and --ignore-space-at-eol

8 years agoMerge branch 'mh/ref-iterators'
Junio C Hamano [Mon, 25 Jul 2016 21:13:33 +0000 (14:13 -0700)] 
Merge branch 'mh/ref-iterators'

The API to iterate over all the refs (i.e. for_each_ref(), etc.)
has been revamped.

* mh/ref-iterators:
  for_each_reflog(): reimplement using iterators
  dir_iterator: new API for iterating over a directory tree
  for_each_reflog(): don't abort for bad references
  do_for_each_ref(): reimplement using reference iteration
  refs: introduce an iterator interface
  ref_resolves_to_object(): new function
  entry_resolves_to_object(): rename function from ref_resolves_to_object()
  get_ref_cache(): only create an instance if there is a submodule
  remote rm: handle symbolic refs correctly
  delete_refs(): add a flags argument
  refs: use name "prefix" consistently
  do_for_each_ref(): move docstring to the header file
  refs: remove unnecessary "extern" keywords

8 years agoMerge branch 'mh/update-ref-errors'
Junio C Hamano [Mon, 25 Jul 2016 21:13:32 +0000 (14:13 -0700)] 
Merge branch 'mh/update-ref-errors'

Error handling in the codepaths that updates refs has been
improved.

* mh/update-ref-errors:
  lock_ref_for_update(): avoid a symref resolution
  lock_ref_for_update(): make error handling more uniform
  t1404: add more tests of update-ref error handling
  t1404: document function test_update_rejected
  t1404: remove "prefix" argument to test_update_rejected
  t1404: rename file to t1404-update-ref-errors.sh

8 years agoMerge branch 'mh/split-under-lock'
Junio C Hamano [Mon, 25 Jul 2016 21:13:32 +0000 (14:13 -0700)] 
Merge branch 'mh/split-under-lock'

Further preparatory work on the refs API before the pluggable
backend series can land.

* mh/split-under-lock: (33 commits)
  lock_ref_sha1_basic(): only handle REF_NODEREF mode
  commit_ref_update(): remove the flags parameter
  lock_ref_for_update(): don't resolve symrefs
  lock_ref_for_update(): don't re-read non-symbolic references
  refs: resolve symbolic refs first
  ref_transaction_update(): check refname_is_safe() at a minimum
  unlock_ref(): move definition higher in the file
  lock_ref_for_update(): new function
  add_update(): initialize the whole ref_update
  verify_refname_available(): adjust constness in declaration
  refs: don't dereference on rename
  refs: allow log-only updates
  delete_branches(): use resolve_refdup()
  ref_transaction_commit(): correctly report close_ref() failure
  ref_transaction_create(): disallow recursive pruning
  refs: make error messages more consistent
  lock_ref_sha1_basic(): remove unneeded local variable
  read_raw_ref(): move docstring to header file
  read_raw_ref(): improve docstring
  read_raw_ref(): rename symref argument to referent
  ...

8 years agoSixth batch of topics for 2.10
Junio C Hamano [Tue, 19 Jul 2016 20:26:16 +0000 (13:26 -0700)] 
Sixth batch of topics for 2.10

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'ls/p4-tmp-refs'
Junio C Hamano [Tue, 19 Jul 2016 20:22:24 +0000 (13:22 -0700)] 
Merge branch 'ls/p4-tmp-refs'

"git p4" used a location outside $GIT_DIR/refs/ to place its
temporary branches, which has been moved to refs/git-p4-tmp/.

* ls/p4-tmp-refs:
  git-p4: place temporary refs used for branch import under refs/git-p4-tmp

8 years agoMerge branch 'js/am-call-theirs-theirs-in-fallback-3way'
Junio C Hamano [Tue, 19 Jul 2016 20:22:23 +0000 (13:22 -0700)] 
Merge branch 'js/am-call-theirs-theirs-in-fallback-3way'

One part of "git am" had an oddball helper function that called
stuff from outside "his" as opposed to calling what we have "ours",
which was not gender-neutral and also inconsistent with the rest of
the system where outside stuff is usuall called "theirs" in
contrast to "ours".

* js/am-call-theirs-theirs-in-fallback-3way:
  am: counteract gender bias

8 years agoMerge branch 'jk/write-file'
Junio C Hamano [Tue, 19 Jul 2016 20:22:23 +0000 (13:22 -0700)] 
Merge branch 'jk/write-file'

General code clean-up around a helper function to write a
single-liner to a file.

* jk/write-file:
  branch: use write_file_buf instead of write_file
  use write_file_buf where applicable
  write_file: add format attribute
  write_file: add pointer+len variant
  write_file: use xopen
  write_file: drop "gently" form
  branch: use non-gentle write_file for branch description
  am: ignore return value of write_file()
  config: fix bogus fd check when setting up default config

8 years agoMerge branch 'jk/printf-format'
Junio C Hamano [Tue, 19 Jul 2016 20:22:22 +0000 (13:22 -0700)] 
Merge branch 'jk/printf-format'

Code clean-up to avoid using a variable string that compilers may
feel untrustable as printf-style format given to write_file()
helper function.

* jk/printf-format:
  commit.c: remove print_commit_list()
  avoid using sha1_to_hex output as printf format
  walker: let walker_say take arbitrary formats

8 years agoMerge branch 'rs/help-c-source-with-gitattributes'
Junio C Hamano [Tue, 19 Jul 2016 20:22:21 +0000 (13:22 -0700)] 
Merge branch 'rs/help-c-source-with-gitattributes'

The .c/.h sources are marked as such in our .gitattributes file so
that "git diff -W" and friends would work better.

* rs/help-c-source-with-gitattributes:
  .gitattributes: set file type for C files

8 years agoMerge branch 'nd/fetch-ref-summary'
Junio C Hamano [Tue, 19 Jul 2016 20:22:21 +0000 (13:22 -0700)] 
Merge branch 'nd/fetch-ref-summary'

Improve the look of the way "git fetch" reports what happened to
each ref that was fetched.

* nd/fetch-ref-summary:
  fetch: reduce duplicate in ref update status lines with placeholder
  fetch: align all "remote -> local" output
  fetch: change flag code for displaying tag update and deleted ref
  fetch: refactor ref update status formatting code
  git-fetch.txt: document fetch output

8 years agoMerge branch 'jk/test-match-signal'
Junio C Hamano [Tue, 19 Jul 2016 20:22:20 +0000 (13:22 -0700)] 
Merge branch 'jk/test-match-signal'

The test framework learned a new helper test_match_signal to
check an exit code from getting killed by an expected signal.

* jk/test-match-signal:
  t/lib-git-daemon: use test_match_signal
  test_must_fail: use test_match_signal
  t0005: use test_match_signal as appropriate
  tests: factor portable signal check out of t0005

8 years agoMerge branch 'jk/common-main'
Junio C Hamano [Tue, 19 Jul 2016 20:22:19 +0000 (13:22 -0700)] 
Merge branch 'jk/common-main'

There are certain house-keeping tasks that need to be performed at
the very beginning of any Git program, and programs that are not
built-in commands had to do them exactly the same way as "git"
potty does.  It was easy to make mistakes in one-off standalone
programs (like test helpers).  A common "main()" function that
calls cmd_main() of individual program has been introduced to
make it harder to make mistakes.

* jk/common-main:
  mingw: declare main()'s argv as const
  common-main: call git_setup_gettext()
  common-main: call restore_sigpipe_to_default()
  common-main: call sanitize_stdfds()
  common-main: call git_extract_argv0_path()
  add an extra level of indirection to main()

8 years agoMerge branch 'ak/lazy-prereq-mktemp'
Junio C Hamano [Tue, 19 Jul 2016 20:22:18 +0000 (13:22 -0700)] 
Merge branch 'ak/lazy-prereq-mktemp'

A test that unconditionally used "mktemp" learned that the command
is not necessarily available everywhere.

* ak/lazy-prereq-mktemp:
  t7610: test for mktemp before test execution

8 years agoMerge branch 'nd/icase'
Junio C Hamano [Tue, 19 Jul 2016 20:22:17 +0000 (13:22 -0700)] 
Merge branch 'nd/icase'

"git grep -i" has been taught to fold case in non-ascii locales
correctly.

* nd/icase:
  grep.c: reuse "icase" variable
  diffcore-pickaxe: support case insensitive match on non-ascii
  diffcore-pickaxe: Add regcomp_or_die()
  grep/pcre: support utf-8
  gettext: add is_utf8_locale()
  grep/pcre: prepare locale-dependent tables for icase matching
  grep: rewrite an if/else condition to avoid duplicate expression
  grep/icase: avoid kwsset when -F is specified
  grep/icase: avoid kwsset on literal non-ascii strings
  test-regex: expose full regcomp() to the command line
  test-regex: isolate the bug test code
  grep: break down an "if" stmt in preparation for next changes

8 years agoMerge branch 'bc/cocci'
Junio C Hamano [Tue, 19 Jul 2016 20:22:16 +0000 (13:22 -0700)] 
Merge branch 'bc/cocci'

Conversion from unsigned char sha1[20] to struct object_id
continues.

* bc/cocci:
  diff: convert prep_temp_blob() to struct object_id
  merge-recursive: convert merge_recursive_generic() to object_id
  merge-recursive: convert leaf functions to use struct object_id
  merge-recursive: convert struct merge_file_info to object_id
  merge-recursive: convert struct stage_data to use object_id
  diff: rename struct diff_filespec's sha1_valid member
  diff: convert struct diff_filespec to struct object_id
  coccinelle: apply object_id Coccinelle transformations
  coccinelle: convert hashcpy() with null_sha1 to hashclr()
  contrib/coccinelle: add basic Coccinelle transforms
  hex: add oid_to_hex_r()

8 years agoMerge branch 'js/log-to-diffopt-file'
Junio C Hamano [Tue, 19 Jul 2016 20:22:15 +0000 (13:22 -0700)] 
Merge branch 'js/log-to-diffopt-file'

The commands in the "log/diff" family have had an FILE* pointer in the
data structure they pass around for a long time, but some codepaths
used to always write to the standard output.  As a preparatory step
to make "git format-patch" available to the internal callers, these
codepaths have been updated to consistently write into that FILE*
instead.

* js/log-to-diffopt-file:
  mingw: fix the shortlog --output=<file> test
  diff: do not color output when --color=auto and --output=<file> is given
  t4211: ensure that log respects --output=<file>
  shortlog: respect the --output=<file> setting
  format-patch: use stdout directly
  format-patch: avoid freopen()
  format-patch: explicitly switch off color when writing to files
  shortlog: support outputting to streams other than stdout
  graph: respect the diffopt.file setting
  line-log: respect diffopt's configured output file stream
  log-tree: respect diffopt's configured output file stream
  log: prepare log/log-tree to reuse the diffopt.close_file attribute

8 years agoMerge branch 'sb/submodule-parallel-fetch'
Junio C Hamano [Tue, 19 Jul 2016 20:22:14 +0000 (13:22 -0700)] 
Merge branch 'sb/submodule-parallel-fetch'

Fix recently introduced codepaths that are involved in parallel
submodule operations, which gave up on reading too early, and
could have wasted CPU while attempting to write under a corner
case condition.

* sb/submodule-parallel-fetch:
  hoist out handle_nonblock function for xread and xwrite
  xwrite: poll on non-blocking FDs
  xread: retry after poll on EAGAIN/EWOULDBLOCK

8 years agoMerge branch 'lf/recv-sideband-cleanup'
Junio C Hamano [Tue, 19 Jul 2016 20:22:14 +0000 (13:22 -0700)] 
Merge branch 'lf/recv-sideband-cleanup'

Code simplification.

* lf/recv-sideband-cleanup:
  sideband.c: small optimization of strbuf usage
  sideband.c: refactor recv_sideband()

8 years agoMerge branch 'dk/blame-move-no-reason-for-1-line-context'
Junio C Hamano [Tue, 19 Jul 2016 20:22:12 +0000 (13:22 -0700)] 
Merge branch 'dk/blame-move-no-reason-for-1-line-context'

"git blame -M" missed a single line that was moved within the file.

* dk/blame-move-no-reason-for-1-line-context:
  blame: require 0 context lines while finding moved lines with -M

8 years agoMerge branch 'nd/connect-ssh-command-config'
Junio C Hamano [Tue, 19 Jul 2016 20:22:12 +0000 (13:22 -0700)] 
Merge branch 'nd/connect-ssh-command-config'

A new configuration variable core.sshCommand has been added to
specify what value for GIT_SSH_COMMAND to use per repository.

* nd/connect-ssh-command-config:
  connect: read $GIT_SSH_COMMAND from config file

8 years agoarchive-tar: huge offset and future timestamps would not work on 32-bit
Junio C Hamano [Thu, 14 Jul 2016 20:04:43 +0000 (13:04 -0700)] 
archive-tar: huge offset and future timestamps would not work on 32-bit

As we are not yet moving everything to size_t but still using ulong
internally when talking about the size of object, platforms with
32-bit long will not be able to produce tar archive with 4GB+ file,
and cannot grok 077777777777UL as a constant.  Disable the extended
header feature and do not test it on them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoSync with 2.9.2
Junio C Hamano [Fri, 15 Jul 2016 17:49:23 +0000 (10:49 -0700)] 
Sync with 2.9.2

* maint:
  Git 2.9.2
  t0006: skip "far in the future" test when unsigned long is not long enough

8 years agoGit 2.9.2 v2.9.2
Junio C Hamano [Fri, 15 Jul 2016 17:48:16 +0000 (10:48 -0700)] 
Git 2.9.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jk/tzoffset-fix' into maint
Junio C Hamano [Fri, 15 Jul 2016 16:43:42 +0000 (09:43 -0700)] 
Merge branch 'jk/tzoffset-fix' into maint

Skip tests that are unrunnable on platforms without 64-bit long
to avoid unnecessary test failures.

* jk/tzoffset-fix:
  t0006: skip "far in the future" test when unsigned long is not long enough

8 years agot0006: skip "far in the future" test when unsigned long is not long enough
Jeff King [Mon, 11 Jul 2016 23:54:18 +0000 (19:54 -0400)] 
t0006: skip "far in the future" test when unsigned long is not long enough

Git's source code refers to timestamps as unsigned longs.  On 32-bit
platforms, as well as on Windows, unsigned long is not large enough
to capture dates that are "absurdly far in the future".

While we can fix this issue properly by replacing unsigned long with
a larger type, we want to be a bit more conservative and just skip
those tests on the maint track.

Signed-off-by: Jeff King <peff@peff.net>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: document diff-filter exclusion
Junio C Hamano [Thu, 14 Jul 2016 19:17:47 +0000 (12:17 -0700)] 
diff: document diff-filter exclusion

In v1.8.5 days, 7f2ea5f0 (diff: allow lowercase letter to specify
what change class to exclude, 2013-07-17) taught the "--diff-filter"
mechanism to take lowercase letters as exclusion, but we forgot to
document it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jk/upload-pack-hook'
Junio C Hamano [Thu, 14 Jul 2016 17:38:57 +0000 (10:38 -0700)] 
Merge branch 'jk/upload-pack-hook'

A hot-fix to make a test working in mingw again.

* jk/upload-pack-hook:
  mingw: fix regression in t1308-config-set

8 years agomingw: fix regression in t1308-config-set
Johannes Schindelin [Thu, 14 Jul 2016 13:58:59 +0000 (15:58 +0200)] 
mingw: fix regression in t1308-config-set

When we tried to fix in 58461bd (t1308: do not get fooled by symbolic
links to the source tree, 2016-06-02) an obscure case where the user
cd's into Git's source code via a symbolic link, a regression was
introduced that affects all test runs on Windows.

The original patch introducing the test case in question was careful to
use `$(pwd)` instead of `$PWD`.

This was done to account for the fact that Git's test suite uses shell
scripting even on Windows, where the shell's Unix-y paths are
incompatible with the main Git executable's idea of paths: it only
accepts Windows paths.

It is an awkward but necessary thing, then, to use `$(pwd)` (which gives
us a Windows path) when interacting with the Git executable and `$PWD`
(which gives the shell's idea of the current working directory in Unix-y
form) for shell scripts, including the test suite itself.

Obviously this broke the use case of the Git maintainer when changing
the working directory into Git's source code directory via a symlink,
i.e. when `$(pwd)` does not agree with `$PWD`.

However, we must not fix that use case at the expense of regressing
another use case.

Let's special-case Windows here, even if it is ugly, for lack of a more
elegant solution.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoFifth batch of topics for 2.10
Junio C Hamano [Wed, 13 Jul 2016 18:26:49 +0000 (11:26 -0700)] 
Fifth batch of topics for 2.10

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jk/big-and-future-archive-tar'
Junio C Hamano [Wed, 13 Jul 2016 18:24:18 +0000 (11:24 -0700)] 
Merge branch 'jk/big-and-future-archive-tar'

"git archive" learned to handle files that are larger than 8GB and
commits far in the future than expressible by the traditional US-TAR
format.

* jk/big-and-future-archive-tar:
  archive-tar: drop return value
  archive-tar: write extended headers for far-future mtime
  archive-tar: write extended headers for file sizes >= 8GB
  t5000: test tar files that overflow ustar headers
  t9300: factor out portable "head -c" replacement

8 years agoMerge branch 'nd/ita-cleanup'
Junio C Hamano [Wed, 13 Jul 2016 18:24:17 +0000 (11:24 -0700)] 
Merge branch 'nd/ita-cleanup'

Git does not know what the contents in the index should be for a
path added with "git add -N" yet, so "git grep --cached" should not
show hits (or show lack of hits, with -L) in such a path, but that
logic does not apply to "git grep", i.e. searching in the working
tree files.  But we did so by mistake, which has been corrected.

* nd/ita-cleanup:
  grep: fix grepping for "intent to add" files
  t7810-grep.sh: fix a whitespace inconsistency
  t7810-grep.sh: fix duplicated test name

8 years agoMerge branch 'ps/rebase-i-auto-unstash-upon-abort'
Junio C Hamano [Wed, 13 Jul 2016 18:24:16 +0000 (11:24 -0700)] 
Merge branch 'ps/rebase-i-auto-unstash-upon-abort'

"git rebase -i --autostash" did not restore the auto-stashed change
when the operation was aborted.

* ps/rebase-i-auto-unstash-upon-abort:
  rebase -i: restore autostash on abort

8 years agoMerge branch 'js/t3404-grammo-fix'
Junio C Hamano [Wed, 13 Jul 2016 18:24:16 +0000 (11:24 -0700)] 
Merge branch 'js/t3404-grammo-fix'

Grammofix.

* js/t3404-grammo-fix:
  t3404: fix a grammo (commands are ran -> commands are run)

8 years agoMerge branch 'js/sign-empty-commit-fix'
Junio C Hamano [Wed, 13 Jul 2016 18:24:14 +0000 (11:24 -0700)] 
Merge branch 'js/sign-empty-commit-fix'

"git commit --amend --allow-empty-message -S" for a commit without
any message body could have misidentified where the header of the
commit object ends.

* js/sign-empty-commit-fix:
  commit -S: avoid invalid pointer with empty message

8 years agoMerge branch 'mm/doc-tt'
Junio C Hamano [Wed, 13 Jul 2016 18:24:14 +0000 (11:24 -0700)] 
Merge branch 'mm/doc-tt'

More mark-up updates to typeset strings that are expected to
literally typed by the end user in fixed-width font.

* mm/doc-tt:
  doc: typeset HEAD and variants as literal
  CodingGuidelines: formatting HEAD in documentation
  doc: typeset long options with argument as literal
  doc: typeset '--' as literal
  doc: typeset long command-line options as literal
  doc: typeset short command-line options as literal
  Documentation/git-mv.txt: fix whitespace indentation

8 years agoMerge branch 'dg/subtree-rebase-test'
Junio C Hamano [Wed, 13 Jul 2016 18:24:13 +0000 (11:24 -0700)] 
Merge branch 'dg/subtree-rebase-test'

Add a test to specify the desired behaviour that currently is not
available in "git rebase -Xsubtree=...".

* dg/subtree-rebase-test:
  contrib/subtree: Add a test for subtree rebase that loses commits

8 years agoMerge branch 'nd/doc-new-command'
Junio C Hamano [Wed, 13 Jul 2016 18:24:12 +0000 (11:24 -0700)] 
Merge branch 'nd/doc-new-command'

Typofix in a doc.

* nd/doc-new-command:
  new-command.txt: correct the command description file

8 years agoMerge branch 'ew/gc-auto-pack-limit-fix'
Junio C Hamano [Wed, 13 Jul 2016 18:24:12 +0000 (11:24 -0700)] 
Merge branch 'ew/gc-auto-pack-limit-fix'

"gc.autoPackLimit" when set to 1 should not trigger a repacking
when there is only one pack, but the code counted poorly and did
so.

* ew/gc-auto-pack-limit-fix:
  gc: fix off-by-one error with gc.autoPackLimit

8 years agoMerge branch 'ah/unpack-trees-advice-messages'
Junio C Hamano [Wed, 13 Jul 2016 18:24:11 +0000 (11:24 -0700)] 
Merge branch 'ah/unpack-trees-advice-messages'

Grammofix.

* ah/unpack-trees-advice-messages:
  unpack-trees: fix English grammar in do-this-before-that messages

8 years agoMerge branch 'va/i18n-even-more'
Junio C Hamano [Wed, 13 Jul 2016 18:24:10 +0000 (11:24 -0700)] 
Merge branch 'va/i18n-even-more'

More markings of messages for i18n, with updates to various tests
to pass GETTEXT_POISON tests.

One patch from the original submission dropped due to conflicts
with jk/upload-pack-hook, which is still in flux.

* va/i18n-even-more: (38 commits)
  t5541: become resilient to GETTEXT_POISON
  i18n: branch: mark comment when editing branch description for translation
  i18n: unmark die messages for translation
  i18n: submodule: escape shell variables inside eval_gettext
  i18n: submodule: join strings marked for translation
  i18n: init-db: join message pieces
  i18n: remote: allow translations to reorder message
  i18n: remote: mark URL fallback text for translation
  i18n: standardise messages
  i18n: sequencer: add period to error message
  i18n: merge: change command option help to lowercase
  i18n: merge: mark messages for translation
  i18n: notes: mark options for translation
  i18n: notes: mark strings for translation
  i18n: transport-helper.c: change N_() call to _()
  i18n: bisect: mark strings for translation
  t5523: use test_i18ngrep for negation
  t4153: fix negated test_i18ngrep call
  t9003: become resilient to GETTEXT_POISON
  tests: unpack-trees: update to use test_i18n* functions
  ...

8 years agoworktree: use strbuf_add_absolute_path() directly
RenĂ© Scharfe [Sat, 9 Jul 2016 15:43:59 +0000 (17:43 +0200)] 
worktree: use strbuf_add_absolute_path() directly

absolute_path() is a wrapper for strbuf_add_absolute_path().  Call the
latter directly for adding absolute paths to a strbuf.  That's shorter
and avoids an extra string copy.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agorm: reuse strbuf for all remove_dir_recursively() calls
RenĂ© Scharfe [Sat, 9 Jul 2016 14:47:04 +0000 (16:47 +0200)] 
rm: reuse strbuf for all remove_dir_recursively() calls

Don't throw the memory allocated for remove_dir_recursively() away after
a single call, use it for the other entries as well instead.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agomerge: avoid "safer crlf" during recording of merge results
Junio C Hamano [Fri, 8 Jul 2016 17:59:15 +0000 (10:59 -0700)] 
merge: avoid "safer crlf" during recording of merge results

When merge_recursive() decides what the correct blob object merge
result for a path should be, it uses update_file_flags() helper
function to write it out to a working tree file and then calls
add_cacheinfo().  The add_cacheinfo() function in turn calls
make_cache_entry() to create a new cache entry to replace the
higher-stage entries for the path that represents the conflict.

The make_cache_entry() function calls refresh_cache_entry() to fill
in the cached stat information.  To mark a cache entry as
up-to-date, the data is re-read from the file in the working tree,
and goes through convert_to_git() conversion to be compared with the
blob object name the new cache entry records.

It is important to note that this happens while the higher-stage
entries, which are going to be replaced with the new entry, are
still in the index.  Unfortunately, the convert_to_git() conversion
has a misguided "safer crlf" mechanism baked in, and looks at the
existing cache entry for the path to decide how to convert the
contents in the working tree file.  If our side (i.e. stage#2)
records a text blob with CRLF in it, even when the system is
configured to record LF in blobs and convert them to CRLF upon
checkout (and back to LF upon checkin), the "safer crlf" mechanism
stops us doing so.

This especially poses a problem during a renormalizing merge, where
the merge result for the path is computed by first "normalizing" the
blobs involved in the merge by using convert_to_working_tree()
followed by convert_to_git() with "safer crlf" disabled.  The merge
result that is computed correctly and fed to add_cacheinfo() via
update_file_flags() does _not_ match what refresh_cache_entry() sees
by converting the working tree file via convert_to_git().

We can work this around by not refreshing the new cache entry in
make_cache_entry() called by add_cacheinfo().  After add_cacheinfo()
adds the new entry, we can call refresh_cache_entry() on that,
knowing that addition of this new cache entry would have removed the
stale cache entries that had CRLF in stage #2 that were carried over
before the renormalizing merge started and will not interfere with
the correct recording of the result.

The test update was taken from a series by Torsten Bögershausen
that attempted to fix this with a different approach.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Torsten Bögershausen <tboegi@web.de>
8 years agotravis-ci: enable web server tests t55xx on Linux
Lars Schneider [Thu, 19 May 2016 08:45:11 +0000 (10:45 +0200)] 
travis-ci: enable web server tests t55xx on Linux

Install the "apache" package to run the Git web server tests on
Travis-CI Linux build machines. The tests are already executed on OS X
build machines since the apache web server is installed by default.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agomingw: fix the shortlog --output=<file> test
Johannes Schindelin [Mon, 11 Jul 2016 13:11:37 +0000 (15:11 +0200)] 
mingw: fix the shortlog --output=<file> test

Adjust t4201 to pass on Windows; a couple of test cases need to be
skipped on Windows which leads to a different shortlog than on Linux.

Let's just fix that by limiting the shortlog's commit range to traverse
only one commit: that guarantees that it does not matter how many test
cases were skipped.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: fix a double off-by-one with --ignore-space-at-eol
Johannes Schindelin [Sat, 9 Jul 2016 07:23:55 +0000 (09:23 +0200)] 
diff: fix a double off-by-one with --ignore-space-at-eol

When comparing two lines, ignoring any whitespace at the end, we first
try to match as many bytes as possible and break out of the loop only
upon mismatch, to let the remainder be handled by the code shared with
the other whitespace-ignoring code paths.

When comparing the bytes, however, we incremented the counters always,
even if the bytes did not match. And because we fall through to  the
space-at-eol handling at that point, it is as if that mismatch never
happened.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: demonstrate a bug with --patience and --ignore-space-at-eol
Johannes Schindelin [Sat, 9 Jul 2016 07:23:50 +0000 (09:23 +0200)] 
diff: demonstrate a bug with --patience and --ignore-space-at-eol

When a single character is added to a line, the combination of these
two options results in an empty diff.

This bug was noticed and reported by Naja Melan.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoconfig.mak.uname: define NEEDS_LIBRT under Linux, for now
Eric Wong [Sun, 10 Jul 2016 22:16:44 +0000 (22:16 +0000)] 
config.mak.uname: define NEEDS_LIBRT under Linux, for now

My Debian wheezy LTS system is still on glibc 2.13; and LTS
distros may use older glibc, still, so lets not unnecessarily
break things out-of-the-box.

We seem to assume Linux is using glibc in our Makefiles anyways,
so I don't think this will introduce new breakage for users of
alternative libc implementations.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoSync with v2.9.1
Junio C Hamano [Mon, 11 Jul 2016 17:46:39 +0000 (10:46 -0700)] 
Sync with v2.9.1

* maint:
  Git 2.9.1

8 years agoGit 2.9.1 v2.9.1
Junio C Hamano [Mon, 11 Jul 2016 17:45:50 +0000 (10:45 -0700)] 
Git 2.9.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jc/t2300-setup' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:19 +0000 (10:44 -0700)] 
Merge branch 'jc/t2300-setup' into maint

Portability fix for Windows.

* jc/t2300-setup:
  t2300: "git --exec-path" is not usable in $PATH on Windows as-is

8 years agoMerge branch 'cb/t7810-test-label-fix' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:18 +0000 (10:44 -0700)] 
Merge branch 'cb/t7810-test-label-fix' into maint

Test clean-up.

* cb/t7810-test-label-fix:
  t7810: fix duplicated test title

8 years agoMerge branch 'sb/t5614-modernize' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:17 +0000 (10:44 -0700)] 
Merge branch 'sb/t5614-modernize' into maint

Test clean-up.

* sb/t5614-modernize:
  t5614: don't use subshells

8 years agoMerge branch 'jn/preformatted-doc-url' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:16 +0000 (10:44 -0700)] 
Merge branch 'jn/preformatted-doc-url' into maint

The top level documentation "git help git" still pointed at the
documentation set hosted at now-defunct google-code repository.
Update it to point to https://git.github.io/htmldocs/git.html
instead.

* jn/preformatted-doc-url:
  doc: git-htmldocs.googlecode.com is no more

8 years agoMerge branch 'ao/p4-has-branch-prefix-fix' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:16 +0000 (10:44 -0700)] 
Merge branch 'ao/p4-has-branch-prefix-fix' into maint

A bug, which caused "git p4" while running under verbose mode to
report paths that are omitted due to branch prefix incorrectly, has
been fixed; the command said "Ignoring file outside of prefix" for
paths that are _inside_.

* ao/p4-has-branch-prefix-fix:
  git-p4: correct hasBranchPrefix verbose output

8 years agoMerge branch 'js/perf-on-apple' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:15 +0000 (10:44 -0700)] 
Merge branch 'js/perf-on-apple' into maint

t/perf needs /usr/bin/time with GNU extension; the invocation of it
is updated to "gtime" on Darwin.

* js/perf-on-apple:
  perf: accommodate for MacOSX

8 years agoMerge branch 'ak/t7800-wo-readlink' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:15 +0000 (10:44 -0700)] 
Merge branch 'ak/t7800-wo-readlink' into maint

One among four invocations of readlink(1) in our test suite has
been rewritten so that the test can run on systems without the
command (others are in valgrind test framework and t9802).

* ak/t7800-wo-readlink:
  t7800: readlink may not be available

8 years agoMerge branch 'jk/tzoffset-fix' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:14 +0000 (10:44 -0700)] 
Merge branch 'jk/tzoffset-fix' into maint

The internal code used to show local timezone offset is not
prepared to handle timestamps beyond year 2100, and gave a
bogus offset value to the caller.  Use a more benign looking
+0000 instead and let "git log" going in such a case, instead
of aborting.

* jk/tzoffset-fix:
  local_tzoffset: detect errors from tm_to_time_t
  t0006: test various date formats
  t0006: rename test-date's "show" to "relative"

8 years agoMerge branch 'js/mingw-parameter-less-c-functions' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:13 +0000 (10:44 -0700)] 
Merge branch 'js/mingw-parameter-less-c-functions' into maint

Some platform-specific code had non-ANSI strict declarations of C
functions that do not take any parameters, which has been
corrected.

* js/mingw-parameter-less-c-functions:
  mingw: let the build succeed with DEVELOPER=1

8 years agoMerge branch 'lc/shell-default-value-noexpand' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:13 +0000 (10:44 -0700)] 
Merge branch 'lc/shell-default-value-noexpand' into maint

Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}'
to set the default value, without enclosing it in double quotes.

* lc/shell-default-value-noexpand:
  sh-setup: enclose setting of ${VAR=default} in double-quotes

8 years agoMerge branch 'sb/clone-shallow-passthru' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:12 +0000 (10:44 -0700)] 
Merge branch 'sb/clone-shallow-passthru' into maint

Fix an unintended regression in v2.9 that breaks "clone --depth"
that recurses down to submodules by forcing the submodules to also
be cloned shallowly, which many server instances that host upstream
of the submodules are not prepared for.

* sb/clone-shallow-passthru:
  clone: do not let --depth imply --shallow-submodules

8 years agoMerge branch 'mg/signature-doc' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:11 +0000 (10:44 -0700)] 
Merge branch 'mg/signature-doc' into maint

Formats of the various data (and how to validate them) where we use
GPG signature have been documented.

* mg/signature-doc:
  Documentation/technical: signed merge tag format
  Documentation/technical: signed commit format
  Documentation/technical: signed tag format
  Documentation/technical: describe signature formats

8 years agoMerge branch 'jk/bisect-show-tree' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:11 +0000 (10:44 -0700)] 
Merge branch 'jk/bisect-show-tree' into maint

"git bisect" makes an internal call to "git diff-tree" when
bisection finds the culprit, but this call did not initialize the
data structure to pass to the diff-tree API correctly.

* jk/bisect-show-tree:
  bisect: always call setup_revisions after init_revisions

8 years agoMerge branch 'km/fetch-do-not-free-remote-name' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:10 +0000 (10:44 -0700)] 
Merge branch 'km/fetch-do-not-free-remote-name' into maint

The ownership rule for the piece of memory that hold references to
be fetched in "git fetch" was screwy, which has been cleaned up.

* km/fetch-do-not-free-remote-name:
  builtin/fetch.c: don't free remote->name after fetch

8 years agoMerge branch 'nd/graph-width-padded' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:09 +0000 (10:44 -0700)] 
Merge branch 'nd/graph-width-padded' into maint

"log --graph --format=" learned that "%>|(N)" specifies the width
relative to the terminal's left edge, not relative to the area to
draw text that is to the right of the ancestry-graph section.  It
also now accepts negative N that means the column limit is relative
to the right border.

* nd/graph-width-padded:
  pretty.c: support <direction>|(<negative number>) forms
  pretty: pass graph width to pretty formatting for use in '%>|(N)'

8 years agoMerge branch 'jk/add-i-diff-compact-heuristics' into maint
Junio C Hamano [Mon, 11 Jul 2016 17:44:09 +0000 (10:44 -0700)] 
Merge branch 'jk/add-i-diff-compact-heuristics' into maint

"git add -i/-p" learned to honor diff.compactionHeuristic
experimental knob, so that the user can work on the same hunk split
as "git diff" output.

* jk/add-i-diff-compact-heuristics:
  add--interactive: respect diff.compactionHeuristic

8 years agoFourth batch of topics for 2.10
Junio C Hamano [Mon, 11 Jul 2016 17:36:29 +0000 (10:36 -0700)] 
Fourth batch of topics for 2.10

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'master' of git://bogomips.org/git-svn
Junio C Hamano [Mon, 11 Jul 2016 17:31:52 +0000 (10:31 -0700)] 
Merge branch 'master' of git://bogomips.org/git-svn

* 'master' of git://bogomips.org/git-svn:
  git-svn: warn instead of dying when commit data is missing
  git-svn: clone: Fail on missing url argument

8 years agoMerge branch 'js/color-on-windows-comment'
Junio C Hamano [Mon, 11 Jul 2016 17:31:09 +0000 (10:31 -0700)] 
Merge branch 'js/color-on-windows-comment'

For a long time, we carried an in-code comment that said our
colored output would work only when we use fprintf/fputs on
Windows, which no longer is the case for the past few years.

* js/color-on-windows-comment:
  color.h: remove obsolete comment about limitations on Windows

8 years agoMerge branch 'mj/log-show-signature-conf'
Junio C Hamano [Mon, 11 Jul 2016 17:31:08 +0000 (10:31 -0700)] 
Merge branch 'mj/log-show-signature-conf'

"git log" learns log.showSignature configuration variable, and a
command line option "--no-show-signature" to countermand it.

* mj/log-show-signature-conf:
  log: add log.showSignature configuration variable
  log: add "--no-show-signature" command line option
  t4202: refactor test

8 years agoMerge branch 'js/find-commit-subject-ignore-leading-blanks'
Junio C Hamano [Mon, 11 Jul 2016 17:31:07 +0000 (10:31 -0700)] 
Merge branch 'js/find-commit-subject-ignore-leading-blanks'

A helper function that takes the contents of a commit object and
finds its subject line did not ignore leading blank lines, as is
commonly done by other codepaths.  Make it ignore leading blank
lines to match.

* js/find-commit-subject-ignore-leading-blanks:
  reset --hard: skip blank lines when reporting the commit subject
  sequencer: use skip_blank_lines() to find the commit subject
  commit -C: skip blank lines at the beginning of the message
  commit.c: make find_commit_subject() more robust
  pretty: make the skip_blank_lines() function public

8 years agoMerge branch 'jn/preformatted-doc-url'
Junio C Hamano [Mon, 11 Jul 2016 17:31:06 +0000 (10:31 -0700)] 
Merge branch 'jn/preformatted-doc-url'

The top level documentation "git help git" still pointed at the
documentation set hosted at now-defunct google-code repository.
Update it to point to https://git.github.io/htmldocs/git.html
instead.

* jn/preformatted-doc-url:
  doc: git-htmldocs.googlecode.com is no more

8 years agoMerge branch 'jk/perf-any-version'
Junio C Hamano [Mon, 11 Jul 2016 17:31:06 +0000 (10:31 -0700)] 
Merge branch 'jk/perf-any-version'

Allow t/perf framework to use the features from the most recent
version of Git even when testing an older installed version.

* jk/perf-any-version:
  p4211: explicitly disable renames in no-rename test
  t/perf: fix regression in testing older versions of git

8 years agoMerge branch 'jk/ansi-color'
Junio C Hamano [Mon, 11 Jul 2016 17:31:05 +0000 (10:31 -0700)] 
Merge branch 'jk/ansi-color'

The output coloring scheme learned two new attributes, italic and
strike, in addition to existing bold, reverse, etc.

* jk/ansi-color:
  color: support strike-through attribute
  color: support "italic" attribute
  color: allow "no-" for negating attributes
  color: refactor parse_attr
  add skip_prefix_mem helper
  doc: refactor description of color format
  color: fix max-size comment

8 years agoMerge branch 'sb/submodule-clone-retry'
Junio C Hamano [Mon, 11 Jul 2016 17:31:04 +0000 (10:31 -0700)] 
Merge branch 'sb/submodule-clone-retry'

"git submodule update" that drives many "git clone" could
eventually hit flaky servers/network conditions on one of the
submodules; the command learned to retry the attempt.

* sb/submodule-clone-retry:
  submodule update: continue when a clone fails
  submodule--helper: initial clone learns retry logic

8 years agoMerge branch 'jc/send-email-skip-backup'
Junio C Hamano [Mon, 11 Jul 2016 17:31:04 +0000 (10:31 -0700)] 
Merge branch 'jc/send-email-skip-backup'

A careless invocation of "git send-email directory/" after editing
0001-change.patch with an editor often ends up sending both
0001-change.patch and its backup file, 0001-change.patch~, causing
embarrassment and a minor confusion.  Detect such an input and
offer to skip the backup files when sending the patches out.

* jc/send-email-skip-backup:
  send-email: detect and offer to skip backup files

8 years agohoist out handle_nonblock function for xread and xwrite
Eric Wong [Sun, 10 Jul 2016 08:20:46 +0000 (08:20 +0000)] 
hoist out handle_nonblock function for xread and xwrite

At least for me, this improves the readability of xread and
xwrite; hopefully allowing missing "continue" statements to
be spotted more easily.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agogit-svn: warn instead of dying when commit data is missing
Eric Wong [Sat, 2 Jul 2016 10:33:18 +0000 (10:33 +0000)] 
git-svn: warn instead of dying when commit data is missing

It is possible to have refs globbed by git-svn which stores data
purely in git; gently skip those instead of dying and assuming
user error.

ref: http://mid.gmane.org/CALi1mtdtNF_GtzyPTbfb7N51wwxsFY7zm8hsgwxr3tHcZZboyg@mail.gmail.com

Suggested-by: Jacob Godserv <jacobgodserv@gmail.com>
Cc: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agogit-p4: place temporary refs used for branch import under refs/git-p4-tmp
Lars Schneider [Wed, 29 Jun 2016 07:35:27 +0000 (09:35 +0200)] 
git-p4: place temporary refs used for branch import under refs/git-p4-tmp

Git-P4 used to place temporary refs under "git-p4-tmp". Since 3da1f37
Git checks that all refs are placed under "refs". Instruct Git-P4 to
place temporary refs under "refs/git-p4-tmp". There are no backwards
compatibility considerations as these refs are transient.

Use "git show-ref --verify" to check the (non-)existience of the refs
instead of file checks assuming the file-based ref backend.

All refs under "refs" are shared across all worktrees. This is not
desired for temporary Git-P4 refs and will be adressed in a later patch.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Reviewed-by: Vitor Antunes <vitor.hda@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoam: counteract gender bias
Johannes Schindelin [Fri, 8 Jul 2016 07:17:34 +0000 (09:17 +0200)] 
am: counteract gender bias

Since 47f0b6d5 (Fall back to three-way merge when applying a patch.,
2005-10-06), i.e. for almost 11 years already, we used a male form
to describe "the other tree".

While it was unintended, this gave the erroneous impression as if
the Git developers thought of users as male, and were unaware of the
important role in software development played by female actors such
as Ada Lovelace, Grace Hopper and Margaret Hamilton. In fact, the
first professional software developers were all female.

Let's change those unfortunate references to the gender neutral
"their tree".  Doing so also makes the fallback_merge_recursive(),
which is an oddball, more in line with the other parts of the system
where we contrast what we have vs what we obtain from others by
saying "ours" vs "theirs".  This inconsistency was also unintended.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agocommit.c: remove print_commit_list()
Junio C Hamano [Fri, 8 Jul 2016 17:09:28 +0000 (10:09 -0700)] 
commit.c: remove print_commit_list()

The helper function tries to offer a way to conveniently show the
last one differently from others, presumably to allow you to say
something like

A, B, and C.

while iterating over a list that has these three elements.

However, there is only one caller, and it passes the same format
string "%s\n" for both the last one and the other ones.  Retire the
helper function and update the caller with a simplified version.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoavoid using sha1_to_hex output as printf format
Jeff King [Fri, 8 Jul 2016 10:35:15 +0000 (06:35 -0400)] 
avoid using sha1_to_hex output as printf format

We know that it should not contain any percent-signs, but
it's a good habit not to feed non-literals to printf
formatters.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agowalker: let walker_say take arbitrary formats
Jeff King [Fri, 8 Jul 2016 09:25:23 +0000 (05:25 -0400)] 
walker: let walker_say take arbitrary formats

We take a printf-style format and a single "char *"
parameter, and the format must therefore have at most one
"%s" in it. Besides being error-prone (and tickling
-Wformat-nonliteral), this is unnecessarily restrictive. We
can just provide the usual varargs interface.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agobranch: use write_file_buf instead of write_file
Jeff King [Fri, 8 Jul 2016 09:16:53 +0000 (05:16 -0400)] 
branch: use write_file_buf instead of write_file

If we already have a strbuf, then using write_file_buf is a
little nicer to read (no wondering whether "%s" will eat
your NULs), and it's more efficient (no extra formatting
step).

We don't care about the newline magic of write_file(), as we
have our own multi-line content.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agouse write_file_buf where applicable
Jeff King [Fri, 8 Jul 2016 09:12:55 +0000 (05:12 -0400)] 
use write_file_buf where applicable

There are several places where we open a file, write some
content from a strbuf, and close it. These can be simplified
with write_file_buf(). As a bonus, many of these did not
catch write problems at close() time.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agowrite_file: add format attribute
Jeff King [Fri, 8 Jul 2016 09:12:42 +0000 (05:12 -0400)] 
write_file: add format attribute

This gives us compile-time checking of our format strings,
which is a good thing.

I had also hoped it would help with confusing write_file()
and write_file_buf(), since the former's "..." can make it
match the signature of the latter. But given that the buffer
for write_file_buf() is generally not a string literal, the
compiler won't complain unless -Wformat-nonliteral is on,
and that creates a ton of false positives elsewhere in the
code base.

While we're there, let's also give the function a docstring,
which it never had.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agowrite_file: add pointer+len variant
Jeff King [Fri, 8 Jul 2016 09:12:22 +0000 (05:12 -0400)] 
write_file: add pointer+len variant

There are many callsites which could use write_file, but for
which it is a little awkward because they have a strbuf or
other pointer/len combo. Specifically:

 1. write_file() takes a format string, so we have to use
    "%s" or "%.*s", which are ugly.

 2. Using any form of "%s" does not handle embedded NULs in
    the output. That probably doesn't matter for our
    call-sites, but it's nicer not to have to worry.

 3. It's less efficient; we format into another strbuf
    just to do the write. That's probably not measurably
    slow for our uses, but it's simply inelegant.

We can fix this by providing a helper to write out the
formatted buffer, and just calling it from write_file().

Note that we don't do the usual "complete with a newline"
that write_file does. If the caller has their own buffer,
there's a reasonable chance they're doing something more
complicated than a single line, and they can call
strbuf_complete_line() themselves.

We could go even further and add strbuf_write_file(), but it
doesn't save much:

  -  write_file_buf(path, sb.buf, sb.len);
  +  strbuf_write_file(&sb, path);

It would also be somewhat asymmetric with strbuf_read_file,
which actually returns errors rather than dying (and the
error handling is most of the benefit of write_file() in the
first place).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agowrite_file: use xopen
Jeff King [Fri, 8 Jul 2016 09:10:08 +0000 (05:10 -0400)] 
write_file: use xopen

This simplifies the code a tiny bit, and provides consistent
error messages with other users of xopen().

While we're here, let's also switch to using O_WRONLY. We
know we're only going to open/write/close the file, so
there's no point in asking for O_RDWR.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agowrite_file: drop "gently" form
Jeff King [Fri, 8 Jul 2016 09:09:34 +0000 (05:09 -0400)] 
write_file: drop "gently" form

There are no callers left of write_file_gently(). Let's drop
it, as it doesn't seem likely for new callers to be added
(since its inception, the only callers who wanted the gentle
form generally just died immediately themselves, and have
since been converted).

While we're there, let's also drop the "int" return from
write_file, as it is never meaningful (in the non-gentle
form, we always either die or return 0).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agobranch: use non-gentle write_file for branch description
Jeff King [Fri, 8 Jul 2016 09:08:54 +0000 (05:08 -0400)] 
branch: use non-gentle write_file for branch description

We use write_file_gently() to do this job currently.
However, if we see an error, we simply complain via
error_errno() and then end up exiting with an error code.

By switching to the non-gentle form, the function will die
for us, with a better error. It is more specific about which
syscall caused the error, and that mentions the
actual filename we're trying to write.

Our exit code for the error case does switch from "1" to
"128", but that's OK; it wasn't a meaningful documented code
(and in fact it was odd that it was a different exit code
than most other error conditions).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoam: ignore return value of write_file()
RenĂ© Scharfe [Fri, 8 Jul 2016 09:08:05 +0000 (05:08 -0400)] 
am: ignore return value of write_file()

write_file() either returns 0 or dies, so there is no point in checking
its return value.  The callers of the wrappers write_state_text(),
write_state_count() and write_state_bool() consequently already ignore
their return values.  Stop pretending we care and make them void.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoconfig: fix bogus fd check when setting up default config
Jeff King [Fri, 8 Jul 2016 09:06:50 +0000 (05:06 -0400)] 
config: fix bogus fd check when setting up default config

Since 9830534 (config --global --edit: create a template
file if needed, 2014-07-25), an edit of the global config
file will try to open() it with O_EXCL, and wants to handle
three cases:

  1. We succeeded; the user has no config file, and we
     should fill in the default template.

  2. We got EEXIST; they have a file already, proceed as usual.

  3. We got another error; we should complain.

However, the check for case 1 does "if (fd)", which will
generally _always_ be true (except for the oddball case that
somehow our stdin got closed and opening really did give us
a new descriptor 0).

So in the EEXIST case, we tried to write the default config
anyway! Fortunately, this turns out to be a noop, since we
just end up writing to and closing "-1", which does nothing.

But in case 3, we would fail to notice any other errors, and
just silently continue (given that we don't actually notice
write errors for the template either, it's probably not that
big a deal; we're about to spawn the editor, so it would
notice any problems. But the code is clearly _trying_ to hit
cover this case and failing).

We can fix it easily by using "fd >= 0" for case 1.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMakefile: add NEEDS_LIBRT to optionally link with librt
Ronald Wampler [Thu, 7 Jul 2016 20:45:54 +0000 (16:45 -0400)] 
Makefile: add NEEDS_LIBRT to optionally link with librt

We unconditionally link with librt, when HAVE_CLOCK_GETTIME is defined.
But clock_gettime() has been available in most libc implementations for
some time now (e.g., for glibc since version 2.17) and no longer
requires linking with librt. Furthermore, commit a6c3c63 (configure.ac:
check for clock_gettime() and CLOCK_MONOTONIC) will automatically
determined which library (libc or librt) is required for linking when
checking for clock_gettime().

The assumption to unconditionally link with librt was OK, since either
almost every Unix-like system provides a version of librt for backwards
compatibility or other systems, namely Windows or OS X, never provided
clock_gettime(). However, in the latest release of OS X (macOS Sierra),
this function has been added to OS X libc version. As a result, when
running the configuration script, HAVE_CLOCK_GETTIME is set and since
librt is not present, it causes a linker error.

This patches requires those not building via the configuration scripts
to define NEEDS_LIBRT in addition to HAVE_CLOCK_GETTIME, if needed.

Signed-off-by: Ronald Wampler <rdwampler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>