git
6 years agoMerge branch 'js/rebase-autostash-detach-fix'
Junio C Hamano [Sun, 18 Nov 2018 09:23:55 +0000 (18:23 +0900)] 
Merge branch 'js/rebase-autostash-detach-fix'

"git rebase --autostash" did not correctly re-attach the HEAD at times.

* js/rebase-autostash-detach-fix:
  built-in rebase --autostash: leave the current branch alone if possible
  built-in rebase: demonstrate regression with --autostash

6 years agoMerge branch 'ab/range-diff-no-patch'
Junio C Hamano [Sun, 18 Nov 2018 09:23:54 +0000 (18:23 +0900)] 
Merge branch 'ab/range-diff-no-patch'

The "--no-patch" option, which can be used to get a high-level
overview without the actual line-by-line patch difference shown, of
the "range-diff" command was earlier broken, which has been
corrected.

* ab/range-diff-no-patch:
  range-diff: make diff option behavior (e.g. --stat) consistent
  range-diff: fix regression in passing along diff options
  range-diff doc: add a section about output stability

6 years agoMerge branch 'jk/verify-sig-merge-into-void'
Junio C Hamano [Sun, 18 Nov 2018 09:23:54 +0000 (18:23 +0900)] 
Merge branch 'jk/verify-sig-merge-into-void'

"git merge" and "git pull" that merges into an unborn branch used
to completely ignore "--verify-signatures", which has been
corrected.

* jk/verify-sig-merge-into-void:
  pull: handle --verify-signatures for unborn branch
  merge: handle --verify-signatures for unborn branch
  merge: extract verify_merge_signature() helper

6 years agoMerge branch 'js/mingw-res-rebuild'
Junio C Hamano [Sun, 18 Nov 2018 09:23:53 +0000 (18:23 +0900)] 
Merge branch 'js/mingw-res-rebuild'

Windows build update.

* js/mingw-res-rebuild:
  Windows: force-recompile git.res for differing architectures

6 years agoMerge branch 'jk/unused-parameter-fixes'
Junio C Hamano [Sun, 18 Nov 2018 09:23:53 +0000 (18:23 +0900)] 
Merge branch 'jk/unused-parameter-fixes'

Various functions have been audited for "-Wunused-parameter" warnings
and bugs in them got fixed.

* jk/unused-parameter-fixes:
  midx: double-check large object write loop
  assert NOARG/NONEG behavior of parse-options callbacks
  parse-options: drop OPT_DATE()
  apply: return -1 from option callback instead of calling exit(1)
  cat-file: report an error on multiple --batch options
  tag: mark "--message" option with NONEG
  show-branch: mark --reflog option as NONEG
  format-patch: mark "--no-numbered" option with NONEG
  status: mark --find-renames option with NONEG
  cat-file: mark batch options with NONEG
  pack-objects: mark index-version option as NONEG
  ls-files: mark exclude options as NONEG
  am: handle --no-patch-format option
  apply: mark include/exclude options as NONEG

6 years agoMerge branch 'jk/curl-ldflags'
Junio C Hamano [Sun, 18 Nov 2018 09:23:53 +0000 (18:23 +0900)] 
Merge branch 'jk/curl-ldflags'

The way -lcurl library gets linked has been simplified by taking
advantage of the fact that we can just ask curl-config command how.

* jk/curl-ldflags:
  build: link with curl-defined linker flags

6 years agoMerge branch 'mg/gpg-fingerprint-test'
Junio C Hamano [Sun, 18 Nov 2018 09:23:53 +0000 (18:23 +0900)] 
Merge branch 'mg/gpg-fingerprint-test'

Add a few tests for a topic already in 'master'.

* mg/gpg-fingerprint-test:
  t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
  t/t7510-signed-commit.sh: Add %GP to custom format checks

6 years agoMerge branch 'nd/pthreads'
Junio C Hamano [Sun, 18 Nov 2018 09:23:52 +0000 (18:23 +0900)] 
Merge branch 'nd/pthreads'

The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".

* nd/pthreads:
  Clean up pthread_create() error handling
  read-cache.c: initialize copy_len to shut up gcc 8
  read-cache.c: reduce branching based on HAVE_THREADS
  read-cache.c: remove #ifdef NO_PTHREADS
  pack-objects: remove #ifdef NO_PTHREADS
  preload-index.c: remove #ifdef NO_PTHREADS
  grep: clean up num_threads handling
  grep: remove #ifdef NO_PTHREADS
  attr.c: remove #ifdef NO_PTHREADS
  name-hash.c: remove #ifdef NO_PTHREADS
  index-pack: remove #ifdef NO_PTHREADS
  send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
  run-command.h: include thread-utils.h instead of pthread.h
  thread-utils: macros to unconditionally compile pthreads API

6 years agoMerge branch 'ds/reachable-topo-order'
Junio C Hamano [Sun, 18 Nov 2018 09:23:52 +0000 (18:23 +0900)] 
Merge branch 'ds/reachable-topo-order'

The revision walker machinery learned to take advantage of the
commit generation numbers stored in the commit-graph file.

* ds/reachable-topo-order:
  t6012: make rev-list tests more interesting
  revision.c: generation-based topo-order algorithm
  commit/revisions: bookkeeping before refactoring
  revision.c: begin refactoring --topo-order logic
  test-reach: add rev-list tests
  test-reach: add run_three_modes method
  prio-queue: add 'peek' operation

6 years agorange-diff: make diff option behavior (e.g. --stat) consistent
Ævar Arnfjörð Bjarmason [Tue, 13 Nov 2018 18:55:58 +0000 (18:55 +0000)] 
range-diff: make diff option behavior (e.g. --stat) consistent

Make the behavior when diff options (e.g. "--stat") are passed
consistent with how "diff" behaves.

Before 73a834e9e2 ("range-diff: relieve callers of low-level
configuration burden", 2018-07-22) running range-diff with "--stat"
would produce stat output and the diff output, as opposed to how
"diff" behaves where once "--stat" is specified "--patch" also needs
to be provided to emit the patch output.

As noted in a previous change ("range-diff doc: add a section about
output stability", 2018-11-07) the "--stat" output with "range-diff"
is useless at the moment.

But we should behave consistently with "diff" in anticipation of such
output being useful in the future, because it would make for confusing
UI if "diff" and "range-diff" behaved differently when it came to how
they interpret diff options.

The new behavior is also consistent with the existing documentation
added in ba931edd28 ("range-diff: populate the man page",
2018-08-13). See "[...]also accepts the regular diff options[...]" in
git-range-diff(1).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoTenth batch for 2.20
Junio C Hamano [Tue, 13 Nov 2018 13:13:52 +0000 (22:13 +0900)] 
Tenth batch for 2.20

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'nd/complete-format-patch'
Junio C Hamano [Tue, 13 Nov 2018 13:37:28 +0000 (22:37 +0900)] 
Merge branch 'nd/complete-format-patch'

The support for format-patch (and send-email) by the command-line
completion script (in contrib/) has been simplified a bit.

* nd/complete-format-patch:
  completion: use __gitcomp_builtin for format-patch

6 years agoMerge branch 'nd/tree-walk-path-exclusion'
Junio C Hamano [Tue, 13 Nov 2018 13:37:28 +0000 (22:37 +0900)] 
Merge branch 'nd/tree-walk-path-exclusion'

Pathspec matching against a tree object were buggy when negative
pathspec elements were involved, which has been fixed.

* nd/tree-walk-path-exclusion:
  tree-walk.c: fix overoptimistic inclusion in :(exclude) matching

6 years agoMerge branch 'sg/travis-install-dependencies'
Junio C Hamano [Tue, 13 Nov 2018 13:37:27 +0000 (22:37 +0900)] 
Merge branch 'sg/travis-install-dependencies'

The procedure to install dependencies before testing at Travis CI
is getting revamped for both simplicity and flexibility, taking
advantage of the recent move to the vm-based environment.

* sg/travis-install-dependencies:
  travis-ci: install packages in 'ci/install-dependencies.sh'

6 years agoMerge branch 'bp/add-diff-files-optim'
Junio C Hamano [Tue, 13 Nov 2018 13:37:27 +0000 (22:37 +0900)] 
Merge branch 'bp/add-diff-files-optim'

"git add" needs to internally run "diff-files" equivalent, and the
codepath learned the same optimization as "diff-files" has to run
lstat(2) in parallel to find which paths have been updated in the
working tree.

* bp/add-diff-files-optim:
  add: speed up cmd_add() by utilizing read_cache_preload()

6 years agoMerge branch 'jk/xdiff-interface'
Junio C Hamano [Tue, 13 Nov 2018 13:37:27 +0000 (22:37 +0900)] 
Merge branch 'jk/xdiff-interface'

The interface into "xdiff" library used to discover the offset and
size of a generated patch hunk by first formatting it into the
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
out.  A new interface has been introduced to allow callers a more
direct access to them.

* jk/xdiff-interface:
  xdiff-interface: drop parse_hunk_header()
  range-diff: use a hunk callback
  diff: convert --check to use a hunk callback
  combine-diff: use an xdiff hunk callback
  diff: use hunk callback for word-diff
  diff: discard hunk headers for patch-ids earlier
  diff: avoid generating unused hunk header lines
  xdiff-interface: provide a separate consume callback for hunks
  xdiff: provide a separate emit callback for hunks

6 years agoMerge branch 'jk/misc-unused-fixes'
Junio C Hamano [Tue, 13 Nov 2018 13:37:26 +0000 (22:37 +0900)] 
Merge branch 'jk/misc-unused-fixes'

Assorted fixes for bugs found while auditing -Wunused-parameter
warnings.

* jk/misc-unused-fixes:
  approxidate: fix NULL dereference in date_time()
  pathspec: handle non-terminated strings with :(attr)
  approxidate: handle pending number for "specials"
  rev-list: handle flags for --indexed-objects

6 years agoMerge branch 'nd/per-worktree-ref-iteration'
Junio C Hamano [Tue, 13 Nov 2018 13:37:26 +0000 (22:37 +0900)] 
Merge branch 'nd/per-worktree-ref-iteration'

The code to traverse objects for reachability, used to decide what
objects are unreferenced and expendable, have been taught to also
consider per-worktree refs of other worktrees as starting points to
prevent data loss.

* nd/per-worktree-ref-iteration:
  git-worktree.txt: correct linkgit command name
  reflog expire: cover reflog from all worktrees
  fsck: check HEAD and reflog from other worktrees
  fsck: move fsck_head_link() to get_default_heads() to avoid some globals
  revision.c: better error reporting on ref from different worktrees
  revision.c: correct a parameter name
  refs: new ref types to make per-worktree refs visible to all worktrees
  Add a place for (not) sharing stuff between worktrees
  refs.c: indent with tabs, not spaces

6 years agoMerge branch 'bp/refresh-index-using-preload'
Junio C Hamano [Tue, 13 Nov 2018 13:37:25 +0000 (22:37 +0900)] 
Merge branch 'bp/refresh-index-using-preload'

The helper function to refresh the cached stat information in the
in-core index has learned to perform the lstat() part of the
operation in parallel on multi-core platforms.

* bp/refresh-index-using-preload:
  refresh_index: remove unnecessary calls to preload_index()
  speed up refresh_index() by utilizing preload_index()

6 years agoMerge branch 'ag/rebase-i-in-c'
Junio C Hamano [Tue, 13 Nov 2018 13:37:25 +0000 (22:37 +0900)] 
Merge branch 'ag/rebase-i-in-c'

Code clean-up for a topic already in 'master'.

* ag/rebase-i-in-c:
  sequencer.c: remove a stray semicolon

6 years agoMerge branch 'al/send-email-auto-cte-fixup'
Junio C Hamano [Tue, 13 Nov 2018 13:37:25 +0000 (22:37 +0900)] 
Merge branch 'al/send-email-auto-cte-fixup'

"git send-email --transfer-encoding=..." in recent versions of Git
sometimes produced an empty "Content-Transfer-Encoding:" header,
which has been corrected.

* al/send-email-auto-cte-fixup:
  send-email: avoid empty transfer encoding header

6 years agoMerge branch 'ds/add-missing-tags'
Junio C Hamano [Tue, 13 Nov 2018 13:37:24 +0000 (22:37 +0900)] 
Merge branch 'ds/add-missing-tags'

The history traversal used to implement the tag-following has been
optimized by introducing a new helper.

* ds/add-missing-tags:
  remote: make add_missing_tags() linear
  test-reach: test get_reachable_subset
  commit-reach: implement get_reachable_subset

6 years agoMerge branch 'sh/mingw-safer-compat-poll'
Junio C Hamano [Tue, 13 Nov 2018 13:37:24 +0000 (22:37 +0900)] 
Merge branch 'sh/mingw-safer-compat-poll'

Windows fix.

* sh/mingw-safer-compat-poll:
  poll: use GetTickCount64() to avoid wrap-around issues

6 years agoMerge branch 'js/rebase-p-tests'
Junio C Hamano [Tue, 13 Nov 2018 13:37:24 +0000 (22:37 +0900)] 
Merge branch 'js/rebase-p-tests'

In preparation to the day when we can deprecate and remove the
"rebase -p", make sure we can skip and later remove tests for
it.

* js/rebase-p-tests:
  tests: optionally skip `git rebase -p` tests
  t3418: decouple test cases from a previous `rebase -p` test case
  t3404: decouple some test cases from outcomes of previous test cases

6 years agoMerge branch 'pw/am-rebase-read-author-script'
Junio C Hamano [Tue, 13 Nov 2018 13:37:23 +0000 (22:37 +0900)] 
Merge branch 'pw/am-rebase-read-author-script'

Unify code to read the author-script used in "git am" and the
commands that use the sequencer machinery, e.g. "git rebase -i".

* pw/am-rebase-read-author-script:
  sequencer: use read_author_script()
  add read_author_script() to libgit
  am: rename read_author_script()
  am: improve author-script error reporting
  am: don't die in read_author_script()

6 years agoMerge branch 'jc/war-on-string-list'
Junio C Hamano [Tue, 13 Nov 2018 13:37:23 +0000 (22:37 +0900)] 
Merge branch 'jc/war-on-string-list'

Replace three string-list instances used as look-up tables in "git
fetch" with hashmaps.

* jc/war-on-string-list:
  fetch: replace string-list used as a look-up table with a hashmap

6 years agoMerge branch 'ag/rev-parse-all-exclude-fix'
Junio C Hamano [Tue, 13 Nov 2018 13:37:23 +0000 (22:37 +0900)] 
Merge branch 'ag/rev-parse-all-exclude-fix'

"git rev-parse --exclude=* --branches --branches"  (i.e. first
saying "add only things that do not match '*' out of all branches"
and then adding all branches, without any exclusion this time")
worked as expected, but "--exclude=* --all --all" did not work the
same way, which has been fixed.

* ag/rev-parse-all-exclude-fix:
  rev-parse: clear --exclude list after 'git rev-parse --all'

6 years agoMerge branch 'jt/tighten-fetch-proto-v2-response'
Junio C Hamano [Tue, 13 Nov 2018 13:37:22 +0000 (22:37 +0900)] 
Merge branch 'jt/tighten-fetch-proto-v2-response'

"git fetch" was a bit loose in parsing resposes from the other side
when talking over the protocol v2.

* jt/tighten-fetch-proto-v2-response:
  fetch-pack: be more precise in parsing v2 response

6 years agoMerge branch 'ao/submodule-wo-gitmodules-checked-out'
Junio C Hamano [Tue, 13 Nov 2018 13:37:22 +0000 (22:37 +0900)] 
Merge branch 'ao/submodule-wo-gitmodules-checked-out'

The submodule support has been updated to read from the blob at
HEAD:.gitmodules when the .gitmodules file is missing from the
working tree.

* ao/submodule-wo-gitmodules-checked-out:
  t/helper: add test-submodule-nested-repo-config
  submodule: support reading .gitmodules when it's not in the working tree
  submodule: add a helper to check if it is safe to write to .gitmodules
  t7506: clean up .gitmodules properly before setting up new scenario
  submodule: use the 'submodule--helper config' command
  submodule--helper: add a new 'config' subcommand
  t7411: be nicer to future tests and really clean things up
  t7411: merge tests 5 and 6
  submodule: factor out a config_set_in_gitmodules_file_gently function
  submodule: add a print_config_from_gitmodules() helper

6 years agoMerge branch 'nb/worktree-api-doc'
Junio C Hamano [Tue, 13 Nov 2018 13:37:21 +0000 (22:37 +0900)] 
Merge branch 'nb/worktree-api-doc'

Code readability fix.

* nb/worktree-api-doc:
  worktree: rename is_worktree_locked to worktree_lock_reason
  worktree: update documentation for lock_reason and lock_reason_valid

6 years agoMerge branch 'ma/sequencer-do-reset-saner-loop-termination'
Junio C Hamano [Tue, 13 Nov 2018 13:37:21 +0000 (22:37 +0900)] 
Merge branch 'ma/sequencer-do-reset-saner-loop-termination'

Code readability fix.

* ma/sequencer-do-reset-saner-loop-termination:
  sequencer: break out of loop explicitly

6 years agoMerge branch 'js/mingw-utf8-env'
Junio C Hamano [Tue, 13 Nov 2018 13:37:21 +0000 (22:37 +0900)] 
Merge branch 'js/mingw-utf8-env'

Windows fix.

* js/mingw-utf8-env:
  mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
  t7800: fix quoting

6 years agoMerge branch 'js/mingw-perl5lib'
Junio C Hamano [Tue, 13 Nov 2018 13:37:20 +0000 (22:37 +0900)] 
Merge branch 'js/mingw-perl5lib'

Windows fix.

* js/mingw-perl5lib:
  mingw: unset PERL5LIB by default
  config: move Windows-specific config settings into compat/mingw.c
  config: allow for platform-specific core.* config settings
  config: rename `dummy` parameter to `cb` in git_default_config()

6 years agoMerge branch 'js/mingw-isatty-and-dup2'
Junio C Hamano [Tue, 13 Nov 2018 13:37:20 +0000 (22:37 +0900)] 
Merge branch 'js/mingw-isatty-and-dup2'

Windows fix.

* js/mingw-isatty-and-dup2:
  mingw: fix isatty() after dup2()

6 years agoMerge branch 'ab/pack-tests-cleanup'
Junio C Hamano [Tue, 13 Nov 2018 13:37:20 +0000 (22:37 +0900)] 
Merge branch 'ab/pack-tests-cleanup'

A couple of tests used to leave the repository in a state that is
deliberately corrupt, which have been corrected.

* ab/pack-tests-cleanup:
  index-pack tests: don't leave test repo dirty at end
  pack-objects tests: don't leave test .git corrupt at end
  pack-objects test: modernize style

6 years agoMerge branch 'ds/test-multi-pack-index'
Junio C Hamano [Tue, 13 Nov 2018 13:37:19 +0000 (22:37 +0900)] 
Merge branch 'ds/test-multi-pack-index'

Tests for the recently introduced multi-pack index machinery.

* ds/test-multi-pack-index:
  packfile: close multi-pack-index in close_all_packs
  multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
  midx: close multi-pack-index on repack
  midx: fix broken free() in close_midx()

6 years agoMerge branch 'nd/wildmatch-double-asterisk'
Junio C Hamano [Tue, 13 Nov 2018 13:37:19 +0000 (22:37 +0900)] 
Merge branch 'nd/wildmatch-double-asterisk'

A pattern with '**' that does not have a slash on either side used
to be an invalid one, but the code now treats such double-asterisks
the same way as two normal asterisks that happen to be adjacent to
each other.

* nd/wildmatch-double-asterisk:
  wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode

6 years agoMerge branch 'nd/per-worktree-config'
Junio C Hamano [Tue, 13 Nov 2018 13:37:18 +0000 (22:37 +0900)] 
Merge branch 'nd/per-worktree-config'

A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.

* nd/per-worktree-config:
  worktree: add per-worktree config files
  t1300: extract and use test_cmp_config()

6 years agoMerge branch 'jk/stream-pack-non-delta-clarification'
Junio C Hamano [Tue, 13 Nov 2018 13:37:18 +0000 (22:37 +0900)] 
Merge branch 'jk/stream-pack-non-delta-clarification'

Additional comment on a tricky piece of code to help developers.

* jk/stream-pack-non-delta-clarification:
  read_istream_pack_non_delta(): document input handling

6 years agoMerge branch 'jk/proto-v2-ref-prefix-fix'
Junio C Hamano [Tue, 13 Nov 2018 13:37:17 +0000 (22:37 +0900)] 
Merge branch 'jk/proto-v2-ref-prefix-fix'

"git ls-remote $there foo" was broken by recent update for the
protocol v2 and stopped showing refs that match 'foo' that are not
refs/{heads,tags}/foo, which has been fixed.

* jk/proto-v2-ref-prefix-fix:
  ls-remote: pass heads/tags prefixes to transport
  ls-remote: do not send ref prefixes for patterns

6 years agoMerge branch 'jk/detect-truncated-zlib-input'
Junio C Hamano [Tue, 13 Nov 2018 13:37:17 +0000 (22:37 +0900)] 
Merge branch 'jk/detect-truncated-zlib-input'

A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.

* jk/detect-truncated-zlib-input:
  cat-file: handle streaming failures consistently
  check_stream_sha1(): handle input underflow
  t1450: check large blob in trailing-garbage test

6 years agoMerge branch 'nd/config-split'
Junio C Hamano [Tue, 13 Nov 2018 13:37:16 +0000 (22:37 +0900)] 
Merge branch 'nd/config-split'

Split the overly large Documentation/config.txt file into million
little pieces.  This potentially allows each individual piece
included into the manual page of the command it affects more easily.

* nd/config-split: (81 commits)
  config.txt: remove config/dummy.txt
  config.txt: move worktree.* to a separate file
  config.txt: move web.* to a separate file
  config.txt: move versionsort.* to a separate file
  config.txt: move user.* to a separate file
  config.txt: move url.* to a separate file
  config.txt: move uploadpack.* to a separate file
  config.txt: move uploadarchive.* to a separate file
  config.txt: move transfer.* to a separate file
  config.txt: move tag.* to a separate file
  config.txt: move submodule.* to a separate file
  config.txt: move stash.* to a separate file
  config.txt: move status.* to a separate file
  config.txt: move splitIndex.* to a separate file
  config.txt: move showBranch.* to a separate file
  config.txt: move sequencer.* to a separate file
  config.txt: move sendemail-config.txt to config/
  config.txt: move reset.* to a separate file
  config.txt: move rerere.* to a separate file
  config.txt: move repack.* to a separate file
  ...

6 years agorange-diff: fix regression in passing along diff options
Ævar Arnfjörð Bjarmason [Fri, 9 Nov 2018 10:18:02 +0000 (10:18 +0000)] 
range-diff: fix regression in passing along diff options

In 73a834e9e2 ("range-diff: relieve callers of low-level configuration
burden", 2018-07-22) we broke passing down options like --no-patch,
--stat etc.

Fix that regression, and add a test asserting the pre-73a834e9e2
behavior for some of these diff options.

As noted in a change leading up to this ("range-diff doc: add a
section about output stability", 2018-11-07) the output is not meant
to be stable. So this regression test will likely need to be tweaked
once we get a "proper" --stat option.

See
https://public-inbox.org/git/nycvar.QRO.7.76.6.1811071202480.39@tvgsbejvaqbjf.bet/
for a further explanation of the regression. The fix here is not the
same as in Johannes's on-list patch, for reasons that'll be explained
in a follow-up commit.

The quoting of "EOF" here mirrors that of an earlier test. Perhaps
that should be fixed, but let's leave that up to a later cleanup
change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorange-diff doc: add a section about output stability
Ævar Arnfjörð Bjarmason [Fri, 9 Nov 2018 10:18:01 +0000 (10:18 +0000)] 
range-diff doc: add a section about output stability

The range-diff command is already advertised as porcelain, but let's
make it really clear that the output is completely subject to change,
particularly when it comes to diff options such as --stat. Right now
that option doesn't work, but fixing that is the subject of a later
change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agobuilt-in rebase --autostash: leave the current branch alone if possible
Johannes Schindelin [Wed, 7 Nov 2018 14:00:50 +0000 (06:00 -0800)] 
built-in rebase --autostash: leave the current branch alone if possible

When we converted a `git reset --hard` call in the original Unix shell
script to built-in code, we asked to reset the worktree and the index
and explicitly *not* to detach the HEAD. By mistake, though, we still
did. Let's fix this.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agobuilt-in rebase: demonstrate regression with --autostash
Johannes Schindelin [Wed, 7 Nov 2018 14:00:48 +0000 (06:00 -0800)] 
built-in rebase: demonstrate regression with --autostash

An unnamed colleague of Ævar Arnfjörð Bjarmason reported a breakage
where a `pull --rebase` (which did not really need to do anything but
stash, see that nothing was changed, and apply the stash again) also
detached the HEAD.

This patch adds a minimal reproducer for this regression.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoWindows: force-recompile git.res for differing architectures
Johannes Schindelin [Tue, 6 Nov 2018 14:55:50 +0000 (06:55 -0800)] 
Windows: force-recompile git.res for differing architectures

When git.rc is compiled into git.res, the result is actually dependent
on the architecture. That is, you cannot simply link a 32-bit git.res
into a 64-bit git.exe.

Therefore, to allow 32-bit and 64-bit builds in the same directory, we
let git.res depend on GIT-PREFIX so that it gets recompiled when
compiling for a different architecture (this works because the exec path
changes based on the architecture: /mingw32/libexec/git-core for 32-bit
and /mingw64/libexec/git-core for 64-bit).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoapproxidate: fix NULL dereference in date_time()
Jeff King [Wed, 7 Nov 2018 01:12:53 +0000 (20:12 -0500)] 
approxidate: fix NULL dereference in date_time()

When we see a time like "noon", we pass "12" to our date_time() helper,
which sets the hour to 12pm. If the current time is before noon, then we
wrap around to yesterday using date_yesterday(). But unlike the normal
calls to date_yesterday() from approxidate_alpha(), we pass a NULL "num"
parameter. Since c27cc94fad (approxidate: handle pending number for
"specials", 2018-11-02), that causes a segfault.

One way to fix this is by checking for NULL. But arguably date_time() is
abusing our helper by passing NULL in the first place (and this is the
only case where one of these "special" parsers is used this way). So
instead, let's have it just do the 1-day subtraction itself. It's still
just a one-liner due to our update_tm() helper.

Note that the test added here is a little funny, as we say "10am noon",
which makes the "10am" seem pointless.  But this bug can only be
triggered when it the currently-parsed hour is before the special time.
The latest special time is "tea" at 1700, but t0006 uses a hard-coded
TEST_DATE_NOW of 1900. We could reset TEST_DATE_NOW, but that may lead
to confusion in other tests. Just saying "10am noon" makes this test
self-contained.

Reported-by: Carlo Arenas <carenas@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopull: handle --verify-signatures for unborn branch
Jeff King [Tue, 6 Nov 2018 07:52:13 +0000 (02:52 -0500)] 
pull: handle --verify-signatures for unborn branch

We usually just forward the --verify-signatures option along to
git-merge, and trust it to do the right thing. However, when we are on
an unborn branch (i.e., there is no HEAD yet), we handle this case
ourselves without even calling git-merge. And in this code path, we do
not respect the verification option at all.

It may be more maintainable in the long run to call git-merge for the
unborn case. That would fix this bug, as well as prevent similar ones in
the future. But unfortunately it's not easy to do. As t5520.3
demonstrates, there are some special cases that git-merge does not
handle, like "git pull .. master:master" (by the time git-merge is
invoked, we've overwritten the unborn HEAD).

So for now let's just teach git-pull to handle this feature.

Reported-by: Felix Eckhofer <felix@eckhofer.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomerge: handle --verify-signatures for unborn branch
Jeff King [Tue, 6 Nov 2018 07:51:15 +0000 (02:51 -0500)] 
merge: handle --verify-signatures for unborn branch

When git-merge sees that we are on an unborn branch (i.e., there is no
HEAD), it follows a totally separate code path than the usual merge
logic. This code path does not know about verify_signatures, and so we
fail to notice bad or missing signatures.

This has been broken since --verify-signatures was added in efed002249
(merge/pull: verify GPG signatures of commits being merged, 2013-03-31).
In an ideal world, we'd unify the flow for this case with the regular
merge logic, which would fix this bug and avoid introducing similar
ones. But because the unborn case is so different, it would be a burden
on the rest of the function to continually handle the missing HEAD. So
let's just port the verification check to this special case.

Reported-by: Felix Eckhofer <felix@eckhofer.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomerge: extract verify_merge_signature() helper
Jeff King [Tue, 6 Nov 2018 07:50:17 +0000 (02:50 -0500)] 
merge: extract verify_merge_signature() helper

The logic to implement "merge --verify-signatures" is inline in
cmd_merge(), but this site misses some cases. Let's extract the logic
into a function so we can call it from more places.

We'll move it to commit.[ch], since one of the callers (git-pull) is
outside our source file. This function isn't all that general (after
all, its main function is to exit the program) but it's not worth trying
to fix that. The heavy lifting is done by check_commit_signature(), and
our purpose here is just sharing the die() logic. We'll mark it with a
comment to make that clear.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoNinth batch for 2.20
Junio C Hamano [Tue, 6 Nov 2018 06:51:23 +0000 (15:51 +0900)] 
Ninth batch for 2.20

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'sg/test-verbose-log'
Junio C Hamano [Tue, 6 Nov 2018 06:50:23 +0000 (15:50 +0900)] 
Merge branch 'sg/test-verbose-log'

Our test scripts can now take the '-V' option as a synonym for the
'--verbose-log' option.

* sg/test-verbose-log:
  test-lib: introduce the '-V' short option for '--verbose-log'

6 years agoMerge branch 'rj/header-cleanup'
Junio C Hamano [Tue, 6 Nov 2018 06:50:23 +0000 (15:50 +0900)] 
Merge branch 'rj/header-cleanup'

Code cleanup.

* rj/header-cleanup:
  commit-reach.h: add missing declarations (hdr-check)
  ewok_rlw.h: add missing 'inline' to function definition
  fetch-object.h: add missing declaration (hdr-check)

6 years agoMerge branch 'ss/travis-ci-force-vm-mode'
Junio C Hamano [Tue, 6 Nov 2018 06:50:23 +0000 (15:50 +0900)] 
Merge branch 'ss/travis-ci-force-vm-mode'

The "container" mode of TravisCI is going away.  Our .travis.yml
file is getting prepared for the transition.

* ss/travis-ci-force-vm-mode:
  travis-ci: no longer use containers

6 years agoMerge branch 'sg/test-rebase-editor-fix'
Junio C Hamano [Tue, 6 Nov 2018 06:50:22 +0000 (15:50 +0900)] 
Merge branch 'sg/test-rebase-editor-fix'

* sg/test-rebase-editor-fix:
  t3404-rebase-interactive: test abbreviated commands

6 years agoMerge branch 'tb/char-may-be-unsigned'
Junio C Hamano [Tue, 6 Nov 2018 06:50:22 +0000 (15:50 +0900)] 
Merge branch 'tb/char-may-be-unsigned'

Build portability fix.

* tb/char-may-be-unsigned:
  path.c: char is not (always) signed

6 years agoMerge branch 'js/mingw-ns-filetime'
Junio C Hamano [Tue, 6 Nov 2018 06:50:21 +0000 (15:50 +0900)] 
Merge branch 'js/mingw-ns-filetime'

Windows port learned to use nano-second resolution file timestamps.

* js/mingw-ns-filetime:
  mingw: implement nanosecond-precision file times
  mingw: replace MSVCRT's fstat() with a Win32-based implementation
  mingw: factor out code to set stat() data

6 years agoMerge branch 'md/exclude-promisor-objects-fix'
Junio C Hamano [Tue, 6 Nov 2018 06:50:21 +0000 (15:50 +0900)] 
Merge branch 'md/exclude-promisor-objects-fix'

Operations on promisor objects make sense in the context of only a
small subset of the commands that internally use the revisions
machinery, but the "--exclude-promisor-objects" option were taken
and led to nonsense results by commands like "log", to which it
didn't make much sense.  This has been corrected.

* md/exclude-promisor-objects-fix:
  exclude-promisor-objects: declare when option is allowed
  Documentation/git-log.txt: do not show --exclude-promisor-objects

6 years agoMerge branch 'jw/send-email-no-auth'
Junio C Hamano [Tue, 6 Nov 2018 06:50:20 +0000 (15:50 +0900)] 
Merge branch 'jw/send-email-no-auth'

"git send-email" learned to disable SMTP authentication via the
"--smtp-auth=none" option, even when the smtp username is given
(which turns the authentication on by default).

* jw/send-email-no-auth:
  send-email: explicitly disable authentication

6 years agoMerge branch 'nd/submodule-unused-vars'
Junio C Hamano [Tue, 6 Nov 2018 06:50:20 +0000 (15:50 +0900)] 
Merge branch 'nd/submodule-unused-vars'

Code clean-up.

* nd/submodule-unused-vars:
  submodule.c: remove some of the_repository references

6 years agoMerge branch 'nd/unpack-trees-with-cache-tree'
Junio C Hamano [Tue, 6 Nov 2018 06:50:20 +0000 (15:50 +0900)] 
Merge branch 'nd/unpack-trees-with-cache-tree'

Trivial bugfix.

* nd/unpack-trees-with-cache-tree:
  read-cache: use of memory after it is freed

6 years agoMerge branch 'nd/completion-negation'
Junio C Hamano [Tue, 6 Nov 2018 06:50:19 +0000 (15:50 +0900)] 
Merge branch 'nd/completion-negation'

The command line completion machinery (in contrib/) has been
updated to allow the completion script to tweak the list of options
that are reported by the parse-options machinery correctly.

* nd/completion-negation:
  completion: fix __gitcomp_builtin no longer consider extra options

6 years agoMerge branch 'jt/upload-pack-v2-fix-shallow'
Junio C Hamano [Tue, 6 Nov 2018 06:50:19 +0000 (15:50 +0900)] 
Merge branch 'jt/upload-pack-v2-fix-shallow'

"git fetch" over protocol v2 into a shallow repository failed to
fetch full history behind a new tip of history that was diverged
before the cut-off point of the history that was previously fetched
shallowly.

* jt/upload-pack-v2-fix-shallow:
  upload-pack: clear flags before each v2 request
  upload-pack: make want_obj not global
  upload-pack: make have_obj not global

6 years agoMerge branch 'sb/submodule-url-to-absolute'
Junio C Hamano [Tue, 6 Nov 2018 06:50:19 +0000 (15:50 +0900)] 
Merge branch 'sb/submodule-url-to-absolute'

Some codepaths failed to form a proper URL when .gitmodules record
the URL to a submodule repository as relative to the repository of
superproject, which has been corrected.

* sb/submodule-url-to-absolute:
  submodule helper: convert relative URL to absolute URL if needed

6 years agoMerge branch 'js/shallow-and-fetch-prune'
Junio C Hamano [Tue, 6 Nov 2018 06:50:18 +0000 (15:50 +0900)] 
Merge branch 'js/shallow-and-fetch-prune'

"git repack" in a shallow clone did not correctly update the
shallow points in the repository, leading to a repository that
does not pass fsck.

* js/shallow-and-fetch-prune:
  repack -ad: prune the list of shallow commits
  shallow: offer to prune only non-existing entries
  repack: point out a bug handling stale shallow info

6 years agoMerge branch 'js/remote-archive-dwimfix'
Junio C Hamano [Tue, 6 Nov 2018 06:50:18 +0000 (15:50 +0900)] 
Merge branch 'js/remote-archive-dwimfix'

The logic to determine the archive type "git archive" uses did not
correctly kick in for "git archive --remote", which has been
corrected.

* js/remote-archive-dwimfix:
  archive: initialize archivers earlier

6 years agocompletion: use __gitcomp_builtin for format-patch
Duy Nguyen [Sat, 3 Nov 2018 06:03:18 +0000 (07:03 +0100)] 
completion: use __gitcomp_builtin for format-patch

This helps format-patch gain completion for a couple new options,
notably --range-diff.

Since send-email completion relies on $__git_format_patch_options
which is now reduced, we need to do something not to regress
send-email completion.

The workaround here is implement --git-completion-helper in
send-email.perl just as a bridge to "format-patch --git-completion-helper".
This is enough to use __gitcomp_builtin on send-email (to take
advantage of caching).

In the end, send-email.perl can probably reuse the same info it passes
to GetOptions() to generate full --git-completion-helper output so
that we don't need to keep track of its options in git-completion.bash
anymore. But that's something for another boring day.

Helped-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomidx: double-check large object write loop
Jeff King [Sun, 4 Nov 2018 02:27:46 +0000 (22:27 -0400)] 
midx: double-check large object write loop

The write_midx_large_offsets() function takes an array of object
entries, the number of entries in the array (nr_objects), and the number
of entries with large offsets (nr_large_offset). But we never actually
use nr_objects; instead we keep walking down the array and counting down
nr_large_offset until we've seen all of the large entries.

This is correct, but we can be a bit more defensive. If there were ever
a mismatch between nr_large_offset and the actual set of large-offset
objects, we'd walk off the end of the array.

Since we know the size of the array, we can use nr_objects to make sure
we don't walk too far.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoassert NOARG/NONEG behavior of parse-options callbacks
Jeff King [Mon, 5 Nov 2018 06:45:42 +0000 (01:45 -0500)] 
assert NOARG/NONEG behavior of parse-options callbacks

When we define a parse-options callback, the flags we put in the option
struct must match what the callback expects. For example, a callback
which does not handle the "unset" parameter should only be used with
PARSE_OPT_NONEG. But since the callback and the option struct are not
defined next to each other, it's easy to get this wrong (as earlier
patches in this series show).

Fortunately, the compiler can help us here: compiling with
-Wunused-parameters can show us which callbacks ignore their "unset"
parameters (and likewise, ones that ignore "arg" expect to be triggered
with PARSE_OPT_NOARG).

But after we've inspected a callback and determined that all of its
callers use the right flags, what do we do next? We'd like to silence
the compiler warning, but do so in a way that will catch any wrong calls
in the future.

We can do that by actually checking those variables and asserting that
they match our expectations. Because this is such a common pattern,
we'll introduce some helper macros. The resulting messages aren't
as descriptive as we could make them, but the file/line information from
BUG() is enough to identify the problem (and anyway, the point is that
these should never be seen).

Each of the annotated callbacks in this patch triggers
-Wunused-parameters, and was manually inspected to make sure all callers
use the correct options (so none of these BUGs should be triggerable).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoparse-options: drop OPT_DATE()
Jeff King [Mon, 5 Nov 2018 06:44:27 +0000 (01:44 -0500)] 
parse-options: drop OPT_DATE()

There are no users of OPT_DATE except for test-parse-options; its
only caller went away in 27ec394a97 (prune: introduce OPT_EXPIRY_DATE()
and use it, 2013-04-25).

It also has a bug: it does not specify PARSE_OPT_NONEG, but its callback
does not respect the "unset" flag, and will feed NULL to approxidate()
and segfault. Probably this should be marked with NONEG, or the callback
should set the timestamp to some sentinel value (e.g,. "0", or
"(time_t)-1").

But since there are no callers, deleting it means we don't even have to
think about what the right behavior should be.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoapply: return -1 from option callback instead of calling exit(1)
Jeff King [Mon, 5 Nov 2018 06:43:59 +0000 (01:43 -0500)] 
apply: return -1 from option callback instead of calling exit(1)

The option callback for "apply --whitespace" exits with status "1" on
error. It makes more sense for it to just return an error to
parse-options. That code will exit, too, but it will use status "129"
that is customary for option errors.

The exit() dates back to aaf6c447aa (builtin/apply: make
parse_whitespace_option() return -1 instead of die()ing, 2016-08-08).
That commit gives no reason why we'd prefer the current exit status (it
looks like it was just bumping the "die" up a level in the callstack,
but did not go as far as it could have).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocat-file: report an error on multiple --batch options
Jeff King [Mon, 5 Nov 2018 06:43:44 +0000 (01:43 -0500)] 
cat-file: report an error on multiple --batch options

The options callback for --batch and --batch-check detects when the two
mutually incompatible options are used. But it simply returns an error
code to parse-options, meaning the program will quit without any kind of
message to the user.

Instead, let's use error() to print something and return -1. Note that
this flips the error return from 1 to -1, but negative values are more
idiomatic here (and parse-options treats them the same).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agotag: mark "--message" option with NONEG
Jeff King [Mon, 5 Nov 2018 06:43:12 +0000 (01:43 -0500)] 
tag: mark "--message" option with NONEG

We do not allow "--no-message" to work now, as the option callback
returns "-1" when it sees a NULL arg. However, that will cause
parse-options to exit(129) without printing anything further, leaving
the user confused about what happened.

Instead, let's explicitly mark it as PARSE_OPT_NONEG, which will give a
useful error message (and print the usual -h output).

In theory this could be used to override an earlier "-m", but it's not
clear how it would interact with other message options (e.g., would it
also clear data read for "-F"?). Since it's already disabled and nobody
is asking for it, let's punt on that and just improve the error message.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoshow-branch: mark --reflog option as NONEG
Jeff King [Mon, 5 Nov 2018 06:42:40 +0000 (01:42 -0500)] 
show-branch: mark --reflog option as NONEG

Running "git show-branch --no-reflog" will behave as if "--reflog" was
given with no options, which makes no sense.

In theory this option might be used to cancel an earlier "--reflog"
option, but the semantics are not clear. Let's punt on it and just
disallow the broken option.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoformat-patch: mark "--no-numbered" option with NONEG
Jeff King [Mon, 5 Nov 2018 06:41:12 +0000 (01:41 -0500)] 
format-patch: mark "--no-numbered" option with NONEG

We have separate parse-options entries for "numbered" and "no-numbered",
which means that we accept "--no-no-numbered". It does not behave
sensibly, though (it ignores the "unset" flag and acts like
"--no-numbered").

We could fix that, but obviously this is silly and unintentional. Let's
just disallow it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agostatus: mark --find-renames option with NONEG
Jeff King [Mon, 5 Nov 2018 06:40:53 +0000 (01:40 -0500)] 
status: mark --find-renames option with NONEG

If you run "git status --no-find-renames", it will behave the same as
"--find-renames", because we ignore the "unset" parameter (we see a NULL
"arg", but since the score argument is optional, we just think that the
user did not provide a score).

We already have a separate "--no-renames" to disable renames, so there's
not much point in supporting "--no-find-renames". Let's just flag it as
an error.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocat-file: mark batch options with NONEG
Jeff King [Mon, 5 Nov 2018 06:40:10 +0000 (01:40 -0500)] 
cat-file: mark batch options with NONEG

Running "cat-file --no-batch" will behave as if "--batch" was given,
since the option callback does not handle the "unset" flag (likewise for
"--no-batch-check").

In theory this might be used to cancel an earlier --batch, but it's not
immediately obvious how that would interact with --batch-check. Let's
just disallow the negated form of both options.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-objects: mark index-version option as NONEG
Jeff King [Mon, 5 Nov 2018 06:39:38 +0000 (01:39 -0500)] 
pack-objects: mark index-version option as NONEG

Running "git pack-objects --no-index-version" will segfault, since the
callback is not prepared to handle the "unset" flag.

In theory this might be used to counteract an earlier "--index-version",
or override a pack.indexversion config setting. But the semantics aren't
immediately obvious, and it's unlikely anybody wants this. Let's just
disable the broken option for now.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agols-files: mark exclude options as NONEG
Jeff King [Mon, 5 Nov 2018 06:39:20 +0000 (01:39 -0500)] 
ls-files: mark exclude options as NONEG

Running "git ls-files --no-exclude" will currently segfault, as its
option callback does not handle the "unset" parameter.

In theory this could be used to clear the exclude list, but it is not
clear how that would interact with the other exclude options, nor is the
current code capable of clearing the list. Let's just disable the broken
option.

Note that --no-exclude-from will similarly segfault, but
--no-exclude-standard will not. It just silently does the wrong thing
(pretending as if --exclude-standard was specified).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoam: handle --no-patch-format option
Jeff King [Mon, 5 Nov 2018 06:38:39 +0000 (01:38 -0500)] 
am: handle --no-patch-format option

Running "git am --no-patch-format" will currently segfault, since it
tries to parse a NULL argument. Instead, let's have it cancel any
previous --patch-format option.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoapply: mark include/exclude options as NONEG
Jeff King [Mon, 5 Nov 2018 06:38:19 +0000 (01:38 -0500)] 
apply: mark include/exclude options as NONEG

The options callback for "git apply --no-include" is not ready to handle
the "unset" parameter, and as a result will segfault when it adds a NULL
argument to the include list (likewise for "--no-exclude").

In theory this might be used to clear the list, but since both
"--include" and "--exclude" add to the same list, it's not immediately
obvious what the semantics should be. Let's punt on that for now and
just disallow the broken options.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorefresh_index: remove unnecessary calls to preload_index()
Ben Peart [Mon, 5 Nov 2018 19:27:51 +0000 (14:27 -0500)] 
refresh_index: remove unnecessary calls to preload_index()

With refresh_index() learning to utilize preload_index() to speed up its
operation there is no longer any benefit to having the caller preload the
index first. Remove those unneeded calls by calling read_index() instead of
the preload variant.

There is no measurable performance impact of this patch - the 2nd call to
preload_index() bails out quickly but there is no reason to call it twice.

Signed-off-by: Ben Peart <benpeart@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoClean up pthread_create() error handling
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:50 +0000 (09:48 +0100)] 
Clean up pthread_create() error handling

Normally pthread_create() rarely fails. But with new pthreads wrapper,
pthread_create() will return ENOSYS on a system without thread support.

Threaded code _is_ protected by HAVE_THREADS and pthread_create()
should never run in the first place. But the situation could change in
the future and bugs may sneak in. Make sure that all pthread_create()
reports the error cause.

While at there, mark these strings for translation if they aren't.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoread-cache.c: initialize copy_len to shut up gcc 8
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:49 +0000 (09:48 +0100)] 
read-cache.c: initialize copy_len to shut up gcc 8

It was reported that when building with NO_PTHREADS=1,
-Wmaybe-uninitialized is triggered. Just initialize the variable from
the beginning to shut the compiler up (because this warning is enabled
in config.dev)

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoread-cache.c: reduce branching based on HAVE_THREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:48 +0000 (09:48 +0100)] 
read-cache.c: reduce branching based on HAVE_THREADS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoread-cache.c: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:47 +0000 (09:48 +0100)] 
read-cache.c: remove #ifdef NO_PTHREADS

This is a faithful conversion with no attempt to clean up whatsoever.
Code indentation is left broken. There will be another commit to clean
it up and un-indent if we just indent now. It's just more code noise.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-objects: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:46 +0000 (09:48 +0100)] 
pack-objects: remove #ifdef NO_PTHREADS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopreload-index.c: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:45 +0000 (09:48 +0100)] 
preload-index.c: remove #ifdef NO_PTHREADS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogrep: clean up num_threads handling
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:44 +0000 (09:48 +0100)] 
grep: clean up num_threads handling

When NO_PTHREADS is still used in this file, we have two separate code
paths for thread and no thread support. The latter will always have
num_threads remain zero while the former uses num_threads zero as
"default number of threads".

With recent changes blur the line between thread and no-thread
support, this num_threads handling becomes a bit strange so let's
redefine it like this:

- num_threads == 0 means default number of threads and should become
  positive after all configuration and option parsing is done if
  multithread is supported.

- num_threads <= 1 runs no threads. It does not matter if the platform
  supports threading or not.

- num_threads > 1 will run multiple threads and is invalid if
  HAVE_THREADS is false. pthread API is only used in this case.

PS. a new warning is also added when num_threads is forced back to one
because a thread-incompatible option is specified.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogrep: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:43 +0000 (09:48 +0100)] 
grep: remove #ifdef NO_PTHREADS

This is a faithful conversion without attempting to improve
anything. That comes later.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoattr.c: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:42 +0000 (09:48 +0100)] 
attr.c: remove #ifdef NO_PTHREADS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoname-hash.c: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:41 +0000 (09:48 +0100)] 
name-hash.c: remove #ifdef NO_PTHREADS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoindex-pack: remove #ifdef NO_PTHREADS
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:40 +0000 (09:48 +0100)] 
index-pack: remove #ifdef NO_PTHREADS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agosend-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:39 +0000 (09:48 +0100)] 
send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c

On systems that do not support multithread, start_async() is
implemented with fork(). This implementation details unfortunately
leak out at least in send-pack.c [1].

To keep the code base clean of NO_PTHREADS, move the this #ifdef back
to run-command.c. The new wrapper function async_with_fork() at least
helps suggest that this special "close()" is related to async in fork
mode.

[1] 09c9957cf7 (send-pack: avoid deadlock when pack-object dies early
    - 2011-04-25)

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorun-command.h: include thread-utils.h instead of pthread.h
Nguyễn Thái Ngọc Duy [Sat, 3 Nov 2018 08:48:38 +0000 (09:48 +0100)] 
run-command.h: include thread-utils.h instead of pthread.h

run-command.c may use threads for its async support. But instead of
including pthread.h directly, let's include thread-utils.h.

run-command.c probably never needs the dummy bits in thread-utils.h
when NO_PTHREADS is defined. But this makes sure we have consistent
HAVE_THREADS behavior everywhere. From now on outside compat/,
thread-utils.h is the only place that includes pthread.h

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoxdiff-interface: drop parse_hunk_header()
Jeff King [Fri, 2 Nov 2018 06:40:13 +0000 (02:40 -0400)] 
xdiff-interface: drop parse_hunk_header()

This function was used only for parsing the hunk headers generated by
xdiff. Now that we can use hunk callbacks to get that information
directly, it has outlived its usefulness.

Note to anyone who wants to resurrect it: the "len" parameter was
totally unused, meaning that the function could read past the end of the
"line" array. In practice this never happened, because we only used it
to parse xdiff's generated header lines. But it would be dangerous to
use it for other cases without fixing this defect.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorange-diff: use a hunk callback
Jeff King [Fri, 2 Nov 2018 06:39:40 +0000 (02:39 -0400)] 
range-diff: use a hunk callback

When we count the lines in a diff, we don't actually care about the
contents of each line. By using a hunk callback, we tell xdiff that it
does not need to even bother generating a hunk header line, saving a
small amount of work.

Arguably we could even ignore the hunk headers completely, since we're
just computing a cost function between patches. But doing it this way
maintains the exact same behavior before and after.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agodiff: convert --check to use a hunk callback
Jeff King [Fri, 2 Nov 2018 06:39:03 +0000 (02:39 -0400)] 
diff: convert --check to use a hunk callback

The "diff --check" code needs to know the line number on which each hunk
starts in order to generate its output. We get that now by parsing the
hunk header line generated by xdiff, but it's much simpler to just pass
it directly using a hunk callback.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocombine-diff: use an xdiff hunk callback
Jeff King [Fri, 2 Nov 2018 06:38:20 +0000 (02:38 -0400)] 
combine-diff: use an xdiff hunk callback

A combined diff has to line up the hunks for all of the individual
pairwise diffs, and thus needs to know their line numbers and sizes. We
get that now by parsing the hunk header line that xdiff generates.
However, now that xdiff supports a hunk callback, we can just use the
values directly.

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