gitweb.git
Merge branch 'jc/gettext-test-fix'Junio C Hamano Thu, 25 Apr 2019 07:41:23 +0000 (16:41 +0900)

Merge branch 'jc/gettext-test-fix'

The GETTEXT_POISON test option has been quite broken ever since it
was made runtime-tunable, which has been fixed.

* jc/gettext-test-fix:
gettext tests: export the restored GIT_TEST_GETTEXT_POISON

Merge branch 'jk/fetch-reachability-error-fix'Junio C Hamano Thu, 25 Apr 2019 07:41:23 +0000 (16:41 +0900)

Merge branch 'jk/fetch-reachability-error-fix'

Code clean-up and a fix for "git fetch" by an explicit object name
(as opposed to fetching refs by name).

* jk/fetch-reachability-error-fix:
fetch: do not consider peeled tags as advertised tips
remote.c: make singular free_ref() public
fetch: use free_refs()
pkt-line: prepare buffer before handling ERR packets
upload-pack: send ERR packet for non-tip objects
t5530: check protocol response for "not our ref"
t5516: drop ok=sigpipe from unreachable-want tests

Merge branch 'jk/xmalloc'Junio C Hamano Thu, 25 Apr 2019 07:41:23 +0000 (16:41 +0900)

Merge branch 'jk/xmalloc'

The code is updated to check the result of memory allocation before
it is used in more places, by using xmalloc and/or xcalloc calls.

* jk/xmalloc:
progress: use xmalloc/xcalloc
xdiff: use xmalloc/xrealloc
xdiff: use git-compat-util
test-prio-queue: use xmalloc

Merge branch 'km/t3000-retitle'Junio C Hamano Thu, 25 Apr 2019 07:41:22 +0000 (16:41 +0900)

Merge branch 'km/t3000-retitle'

A test update.

* km/t3000-retitle:
t3000 (ls-files -o): widen description to reflect current tests

Merge branch 'js/untracked-cache-allocfix'Junio C Hamano Thu, 25 Apr 2019 07:41:22 +0000 (16:41 +0900)

Merge branch 'js/untracked-cache-allocfix'

An underallocation in the code to read the untracked cache
extension has been corrected.

* js/untracked-cache-allocfix:
untracked cache: fix off-by-one

Merge branch 'js/t3301-unbreak-notes-test'Junio C Hamano Thu, 25 Apr 2019 07:41:21 +0000 (16:41 +0900)

Merge branch 'js/t3301-unbreak-notes-test'

Test fix.

* js/t3301-unbreak-notes-test:
t3301: fix false negative

Merge branch 'tz/doc-apostrophe-no-longer-needed'Junio C Hamano Thu, 25 Apr 2019 07:41:21 +0000 (16:41 +0900)

Merge branch 'tz/doc-apostrophe-no-longer-needed'

Doc formatting fix.

* tz/doc-apostrophe-no-longer-needed:
Documentation/git-show-branch: avoid literal {apostrophe}

Merge branch 'sg/blame-in-bare-start-at-head'Junio C Hamano Thu, 25 Apr 2019 07:41:21 +0000 (16:41 +0900)

Merge branch 'sg/blame-in-bare-start-at-head'

"git blame -- path" in a non-bare repository starts blaming from
the working tree, and the same command in a bare repository errors
out because there is no working tree by definition. The command
has been taught to instead start blaming from the commit at HEAD,
which is more useful.

* sg/blame-in-bare-start-at-head:
blame: default to HEAD in a bare repo when no start commit is given

Merge branch 'tg/ls-files-debug-format-fix'Junio C Hamano Thu, 25 Apr 2019 07:41:20 +0000 (16:41 +0900)

Merge branch 'tg/ls-files-debug-format-fix'

Debugging code fix.

* tg/ls-files-debug-format-fix:
ls-files: use correct format string

Merge branch 'po/describe-not-necessarily-7'Junio C Hamano Thu, 25 Apr 2019 07:41:20 +0000 (16:41 +0900)

Merge branch 'po/describe-not-necessarily-7'

Docfix.

* po/describe-not-necessarily-7:
describe doc: remove '7-char' abbreviation reference

Merge branch 'po/rerere-doc-fmt'Junio C Hamano Thu, 25 Apr 2019 07:41:19 +0000 (16:41 +0900)

Merge branch 'po/rerere-doc-fmt'

Docfix.

* po/rerere-doc-fmt:
rerere doc: quote `rerere.enabled`

Merge branch 'sg/overlong-progress-fix'Junio C Hamano Thu, 25 Apr 2019 07:41:19 +0000 (16:41 +0900)

Merge branch 'sg/overlong-progress-fix'

Updating the display with progress message has been cleaned up to
deal better with overlong messages.

* sg/overlong-progress-fix:
progress: break too long progress bar lines
progress: clear previous progress update dynamically
progress: assemble percentage and counters in a strbuf before printing
progress: make display_progress() return void

Merge branch 'jt/batch-fetch-blobs-in-diff'Junio C Hamano Thu, 25 Apr 2019 07:41:19 +0000 (16:41 +0900)

Merge branch 'jt/batch-fetch-blobs-in-diff'

While running "git diff" in a lazy clone, we can upfront know which
missing blobs we will need, instead of waiting for the on-demand
machinery to discover them one by one. Aim to achieve better
performance by batching the request for these promised blobs.

* jt/batch-fetch-blobs-in-diff:
diff: batch fetching of missing blobs
sha1-file: support OBJECT_INFO_FOR_PREFETCH

Merge branch 'ab/gc-docs'Junio C Hamano Thu, 25 Apr 2019 07:41:18 +0000 (16:41 +0900)

Merge branch 'ab/gc-docs'

Update docs around "gc".

* ab/gc-docs:
gc docs: remove incorrect reference to gc.auto=0
gc docs: clarify that "gc" doesn't throw away referenced objects
gc docs: note "gc --aggressive" in "fast-import"
gc docs: downplay the usefulness of --aggressive
gc docs: note how --aggressive impacts --window & --depth
gc docs: fix formatting for "gc.writeCommitGraph"
gc docs: re-flow the "gc.*" section in "config"
gc docs: include the "gc.*" section from "config" in "gc"
gc docs: clean grammar for "gc.bigPackThreshold"
gc docs: stop noting "repack" flags
gc docs: modernize the advice for manually running "gc"

Merge branch 'dl/submodule-set-branch'Junio C Hamano Thu, 25 Apr 2019 07:41:18 +0000 (16:41 +0900)

Merge branch 'dl/submodule-set-branch'

"git submodule" learns "set-branch" subcommand that allows the
submodule.*.branch settings to be modified.

* dl/submodule-set-branch:
submodule: teach set-branch subcommand
submodule--helper: teach config subcommand --unset
git-submodule.txt: "--branch <branch>" option defaults to 'master'

Merge branch 'jk/revision-rewritten-parents-in-prio... Junio C Hamano Thu, 25 Apr 2019 07:41:18 +0000 (16:41 +0900)

Merge branch 'jk/revision-rewritten-parents-in-prio-queue'

Performance fix for "rev-list --parents -- pathspec".

* jk/revision-rewritten-parents-in-prio-queue:
revision: use a prio_queue to hold rewritten parents

Merge branch 'dk/blame-keep-origin-blob'Junio C Hamano Thu, 25 Apr 2019 07:41:17 +0000 (16:41 +0900)

Merge branch 'dk/blame-keep-origin-blob'

Performance fix around "git blame", especially in a linear history
(which is the norm we should optimize for).

* dk/blame-keep-origin-blob:
blame.c: don't drop origin blobs as eagerly

Merge branch 'bc/hash-transition-16'Junio C Hamano Thu, 25 Apr 2019 07:41:17 +0000 (16:41 +0900)

Merge branch 'bc/hash-transition-16'

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

* bc/hash-transition-16: (35 commits)
gitweb: make hash size independent
Git.pm: make hash size independent
read-cache: read data in a hash-independent way
dir: make untracked cache extension hash size independent
builtin/difftool: use parse_oid_hex
refspec: make hash size independent
archive: convert struct archiver_args to object_id
builtin/get-tar-commit-id: make hash size independent
get-tar-commit-id: parse comment record
hash: add a function to lookup hash algorithm by length
remote-curl: make hash size independent
http: replace sha1_to_hex
http: compute hash of downloaded objects using the_hash_algo
http: replace hard-coded constant with the_hash_algo
http-walker: replace sha1_to_hex
http-push: remove remaining uses of sha1_to_hex
http-backend: allow 64-character hex names
http-push: convert to use the_hash_algo
builtin/pull: make hash-size independent
builtin/am: make hash size independent
...

Merge branch 'en/fast-import-parsing-fix'Junio C Hamano Thu, 25 Apr 2019 07:41:16 +0000 (16:41 +0900)

Merge branch 'en/fast-import-parsing-fix'

"git fast-import" update.

* en/fast-import-parsing-fix:
fast-import: fix erroneous handling of get-mark with empty orphan commits
fast-import: only allow cat-blob requests where it makes sense
fast-import: check most prominent commands first
git-fast-import.txt: fix wording about where ls command can appear
t9300: demonstrate bug with get-mark and empty orphan commits

Merge branch 'jt/fetch-no-update-shallow-in-proto-v2'Junio C Hamano Thu, 25 Apr 2019 07:41:16 +0000 (16:41 +0900)

Merge branch 'jt/fetch-no-update-shallow-in-proto-v2'

Fix for protocol v2 support in "git fetch-pack" of shallow clones.

* jt/fetch-no-update-shallow-in-proto-v2:
fetch-pack: respect --no-update-shallow in v2
fetch-pack: call prepare_shallow_info only if v0

Merge branch 'jt/fetch-pack-wanted-refs-optim'Junio C Hamano Thu, 25 Apr 2019 07:41:16 +0000 (16:41 +0900)

Merge branch 'jt/fetch-pack-wanted-refs-optim'

Performance fix around "git fetch" that grabs many refs.

* jt/fetch-pack-wanted-refs-optim:
fetch-pack: binary search when storing wanted-refs

Merge branch 'ab/test-lib-pass-trace2-env'Junio C Hamano Thu, 25 Apr 2019 07:41:15 +0000 (16:41 +0900)

Merge branch 'ab/test-lib-pass-trace2-env'

Allow tracing of Git executable while running the testsuite.

* ab/test-lib-pass-trace2-env:
test-lib: whitelist GIT_TR2_* in the environment

Merge branch 'sg/index-pack-progress'Junio C Hamano Thu, 25 Apr 2019 07:41:15 +0000 (16:41 +0900)

Merge branch 'sg/index-pack-progress'

A progress indicator has been added to the "index-pack" step, which
often makes users wait for completion during "git clone".

* sg/index-pack-progress:
index-pack: show progress while checking objects

Merge branch 'ab/commit-graph-fixes'Junio C Hamano Thu, 25 Apr 2019 07:41:15 +0000 (16:41 +0900)

Merge branch 'ab/commit-graph-fixes'

Code cleanup with more careful error checking before using data
read from the commit-graph file.

* ab/commit-graph-fixes:
commit-graph: improve & i18n error messages
commit-graph write: don't die if the existing graph is corrupt
commit-graph verify: detect inability to read the graph
commit-graph: don't pass filename to load_commit_graph_one_fd_st()
commit-graph: don't early exit(1) on e.g. "git status"
commit-graph: fix segfault on e.g. "git status"
commit-graph tests: test a graph that's too small
commit-graph tests: split up corrupt_graph_and_verify()

Merge branch 'ab/gc-reflog'Junio C Hamano Thu, 25 Apr 2019 07:41:14 +0000 (16:41 +0900)

Merge branch 'ab/gc-reflog'

Fix various glitches in "git gc" around reflog handling.

* ab/gc-reflog:
gc: handle & check gc.reflogExpire config
reflog tests: assert lack of early exit with expiry="never"
reflog tests: test for the "points nowhere" warning
reflog tests: make use of "test_config" idiom
gc: refactor a "call me once" pattern
gc: convert to using the_hash_algo
gc: remove redundant check for gc_auto_threshold

Merge branch 'nd/checkout-m'Junio C Hamano Thu, 25 Apr 2019 07:41:14 +0000 (16:41 +0900)

Merge branch 'nd/checkout-m'

"git checkout -m <other>" was about carrying the differences
between HEAD and the working-tree files forward while checking out
another branch, and ignored the differences between HEAD and the
index. The command has been taught to abort when the index and the
HEAD are different.

* nd/checkout-m:
checkout: prevent losing staged changes with --merge
read-tree: add --quiet
unpack-trees: rename "gently" flag to "quiet"
unpack-trees: keep gently check inside add_rejected_path

Merge branch 'js/difftool-no-index'Junio C Hamano Thu, 25 Apr 2019 07:41:14 +0000 (16:41 +0900)

Merge branch 'js/difftool-no-index'

"git difftool" can now run outside a repository.

* js/difftool-no-index:
difftool: allow running outside Git worktrees with --no-index
parse-options: make OPT_ARGUMENT() more useful
difftool: remove obsolete (and misleading) comment

Merge branch 'pw/cherry-pick-continue'Junio C Hamano Thu, 25 Apr 2019 07:41:13 +0000 (16:41 +0900)

Merge branch 'pw/cherry-pick-continue'

"git cherry-pick --options A..B", after giving control back to the
user to ask help resolving a conflicted step, did not honor the
options it originally received, which has been corrected.

* pw/cherry-pick-continue:
cherry-pick --continue: remember options
cherry-pick: demonstrate option amnesia
sequencer: break some long lines

Merge branch 'nd/commit-a-with-paths-msg-update'Junio C Hamano Thu, 25 Apr 2019 07:41:13 +0000 (16:41 +0900)

Merge branch 'nd/commit-a-with-paths-msg-update'

The message given when "git commit -a <paths>" errors out has been
updated.

* nd/commit-a-with-paths-msg-update:
commit: improve error message in "-a <paths>" case

Merge branch 'jk/server-info-rabbit-hole'Junio C Hamano Thu, 25 Apr 2019 07:41:13 +0000 (16:41 +0900)

Merge branch 'jk/server-info-rabbit-hole'

Code clean-up around a much-less-important-than-it-used-to-be
update_server_info() funtion.

* jk/server-info-rabbit-hole:
update_info_refs(): drop unused force parameter
server-info: drop objdirlen pointer arithmetic
server-info: drop nr_alloc struct member
server-info: use strbuf to read old info/packs file
server-info: simplify cleanup in parse_pack_def()
server-info: fix blind pointer arithmetic
http: simplify parsing of remote objects/info/packs
packfile: fix pack basename computation
midx: check both pack and index names for containment
t5319: drop useless --buffer from cat-file
t5319: fix bogus cat-file argument
pack-revindex: open index if necessary
packfile.h: drop extern from function declarations

Merge branch 'nd/diff-parseopt-4'Junio C Hamano Thu, 25 Apr 2019 07:41:12 +0000 (16:41 +0900)

Merge branch 'nd/diff-parseopt-4'

Fourth batch to teach the diff machinery to use the parse-options
API.

* nd/diff-parseopt-4:
am: avoid diff_opt_parse()
diff --no-index: use parse_options() instead of diff_opt_parse()
range-diff: use parse_options() instead of diff_opt_parse()
diff.c: allow --no-color-moved-ws
diff-parseopt: convert --color-moved-ws
diff-parseopt: convert --[no-]color-moved
diff-parseopt: convert --inter-hunk-context
diff-parseopt: convert --no-prefix
diff-parseopt: convert --line-prefix
diff-parseopt: convert --[src|dst]-prefix
diff-parseopt: convert --[no-]abbrev
diff-parseopt: convert --diff-filter
diff-parseopt: convert --find-object
diff-parseopt: convert -O
diff-parseopt: convert --pickaxe-all|--pickaxe-regex
diff-parseopt: convert -S|-G
diff-parseopt: convert -l
diff-parseopt: convert -z
diff-parseopt: convert --ita-[in]visible-in-index
diff-parseopt: convert --ws-error-highlight

Merge branch 'jk/unused-params-even-more'Junio C Hamano Thu, 25 Apr 2019 07:41:12 +0000 (16:41 +0900)

Merge branch 'jk/unused-params-even-more'

Code cleanup.

* jk/unused-params-even-more:
parse_opt_ref_sorting: always use with NONEG flag
pretty: drop unused strbuf from parse_padding_placeholder()
pretty: drop unused "type" parameter in needs_rfc2047_encoding()
parse-options: drop unused ctx parameter from show_gitcomp()
fetch_pack(): drop unused parameters
report_path_error(): drop unused prefix parameter
unpack-trees: drop unused error_type parameters
unpack-trees: drop name_entry from traverse_by_cache_tree()
test-date: drop unused "now" parameter from parse_dates()
update-index: drop unused prefix_length parameter from do_reupdate()
log: drop unused "len" from show_tagger()
log: drop unused rev_info from early output
revision: drop some unused "revs" parameters

Merge branch 'sg/test-atexit'Junio C Hamano Thu, 25 Apr 2019 07:41:12 +0000 (16:41 +0900)

Merge branch 'sg/test-atexit'

Test framework update to more robustly clean up leftover files and
processes after tests are done.

* sg/test-atexit:
t9811-git-p4-label-import: fix pipeline negation
git p4 test: disable '-x' tracing in the p4d watchdog loop
git p4 test: simplify timeout handling
git p4 test: clean up the p4d cleanup functions
git p4 test: use 'test_atexit' to kill p4d and the watchdog process
t0301-credential-cache: use 'test_atexit' to stop the credentials helper
tests: use 'test_atexit' to stop httpd
git-daemon: use 'test_atexit` to stop 'git-daemon'
test-lib: introduce 'test_atexit'
t/lib-git-daemon: make sure to kill the 'git-daemon' process
test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'

Merge branch 'ag/sequencer-reduce-rewriting-todo'Junio C Hamano Thu, 25 Apr 2019 07:41:11 +0000 (16:41 +0900)

Merge branch 'ag/sequencer-reduce-rewriting-todo'

The scripted version of "git rebase -i" wrote and rewrote the todo
list many times during a single step of its operation, and the
recent C-rewrite made a faithful conversion of the logic to C. The
implementation has been updated to carry necessary information
around in-core to avoid rewriting the same file over and over
unnecessarily.

* ag/sequencer-reduce-rewriting-todo:
rebase--interactive: move transform_todo_file()
sequencer: use edit_todo_list() in complete_action()
rebase-interactive: rewrite edit_todo_list() to handle the initial edit
rebase-interactive: append_todo_help() changes
rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
sequencer: refactor skip_unnecessary_picks() to work on a todo_list
rebase--interactive: move rearrange_squash_in_todo_file()
rebase--interactive: move sequencer_add_exec_commands()
sequencer: change complete_action() to use the refactored functions
sequencer: make sequencer_make_script() write its script to a strbuf
sequencer: refactor rearrange_squash() to work on a todo_list
sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
sequencer: refactor check_todo_list() to work on a todo_list
sequencer: introduce todo_list_write_to_file()
sequencer: refactor transform_todos() to work on a todo_list
sequencer: remove the 'arg' field from todo_item
sequencer: make the todo_list structure public
sequencer: changes in parse_insn_buffer()

Merge branch 'bp/post-index-change-hook'Junio C Hamano Thu, 25 Apr 2019 07:41:10 +0000 (16:41 +0900)

Merge branch 'bp/post-index-change-hook'

A new hook "post-index-change" is called when the on-disk index
file changes, which can help e.g. a virtualized working tree
implementation.

* bp/post-index-change-hook:
read-cache: add post-index-change hook

The sixth batchJunio C Hamano Mon, 22 Apr 2019 02:14:24 +0000 (11:14 +0900)

The sixth batch

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

Merge branch 'da/smerge'Junio C Hamano Mon, 22 Apr 2019 02:14:48 +0000 (11:14 +0900)

Merge branch 'da/smerge'

"git mergetool" learned to offer Sublime Merge (smerge) as one of
its backends.

* da/smerge:
contrib/completion: add smerge to the mergetool completion candidates
mergetools: add support for smerge (Sublime Merge)

Merge branch 'dl/flex-str-cocci'Junio C Hamano Mon, 22 Apr 2019 02:14:47 +0000 (11:14 +0900)

Merge branch 'dl/flex-str-cocci'

Code clean-up.

* dl/flex-str-cocci:
cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR

Merge branch 'js/spell-out-options-in-tests'Junio C Hamano Mon, 22 Apr 2019 02:14:47 +0000 (11:14 +0900)

Merge branch 'js/spell-out-options-in-tests'

The tests have been updated not to rely on the abbreviated option
names the parse-options API offers, to protect us from an
abbreviated form of an option that used to be unique within the
command getting non-unique when a new option that share the same
prefix is added.

* js/spell-out-options-in-tests:
tests: disallow the use of abbreviated options (by default)
tests (pack-objects): use the full, unabbreviated `--revs` option
tests (status): spell out the `--find-renames` option in full
tests (push): do not abbreviate the `--follow-tags` option
t5531: avoid using an abbreviated option
t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
tests (rebase): spell out the `--force-rebase` option
tests (rebase): spell out the `--keep-empty` option

Merge branch 'nd/read-tree-reset-doc'Junio C Hamano Mon, 22 Apr 2019 02:14:47 +0000 (11:14 +0900)

Merge branch 'nd/read-tree-reset-doc'

The documentation for "git read-tree --reset -u" has been updated.

* nd/read-tree-reset-doc:
read-tree.txt: clarify --reset and worktree changes

Merge branch 'nd/interpret-trailers-docfix'Junio C Hamano Mon, 22 Apr 2019 02:14:47 +0000 (11:14 +0900)

Merge branch 'nd/interpret-trailers-docfix'

Doc update.

* nd/interpret-trailers-docfix:
interpret-trailers.txt: start the desc line with a capital letter

Merge branch 'sg/asciidoctor-in-ci'Junio C Hamano Mon, 22 Apr 2019 02:14:46 +0000 (11:14 +0900)

Merge branch 'sg/asciidoctor-in-ci'

Update our support to format documentation in the CI environment,
either with AsciiDoc ro Asciidoctor.

* sg/asciidoctor-in-ci:
ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
ci: stick with Asciidoctor v1.5.8 for now
ci: install Asciidoctor in 'ci/install-dependencies.sh'
Documentation/technical/protocol-v2.txt: fix formatting
Documentation/technical/api-config.txt: fix formatting
Documentation/git-diff-tree.txt: fix formatting

Merge branch 'tz/asciidoctor-fixes'Junio C Hamano Mon, 22 Apr 2019 02:14:46 +0000 (11:14 +0900)

Merge branch 'tz/asciidoctor-fixes'

Doc updates.

* tz/asciidoctor-fixes:
Documentation/git-status: fix titles in porcelain v2 section
Documentation/rev-list-options: wrap --date=<format> block with "--"

Merge branch 'js/check-docs-exe'Junio C Hamano Mon, 22 Apr 2019 02:14:46 +0000 (11:14 +0900)

Merge branch 'js/check-docs-exe'

Dev support update.

* js/check-docs-exe:
check-docs: fix for setups where executables have an extension
check-docs: do not expect guide pages to correspond to commands
check-docs: really look at the documented commands again
docs: do not document the `git remote-testgit` command
docs: move gitremote-helpers into section 7

Merge branch 'nd/include-if-wildmatch'Junio C Hamano Mon, 22 Apr 2019 02:14:45 +0000 (11:14 +0900)

Merge branch 'nd/include-if-wildmatch'

A buglet in configuration parser has been fixed.

* nd/include-if-wildmatch:
config: correct '**' matching in includeIf patterns

Merge branch 'cb/doco-mono'Junio C Hamano Mon, 22 Apr 2019 02:14:45 +0000 (11:14 +0900)

Merge branch 'cb/doco-mono'

Clean-up markup in the documentation suite.

* cb/doco-mono:
doc: format pathnames and URLs as monospace.
doc/CodingGuidelines: URLs and paths as monospace

Merge branch 'tg/stash-in-c-show-default-to-p-fix'Junio C Hamano Mon, 22 Apr 2019 02:14:45 +0000 (11:14 +0900)

Merge branch 'tg/stash-in-c-show-default-to-p-fix'

A regression fix.

* tg/stash-in-c-show-default-to-p-fix:
stash: setup default diff output format if necessary

Merge branch 'js/stash-in-c-pathspec-fix'Junio C Hamano Mon, 22 Apr 2019 02:14:44 +0000 (11:14 +0900)

Merge branch 'js/stash-in-c-pathspec-fix'

Further fixes to "git stash" reimplemented in C.

* js/stash-in-c-pathspec-fix:
stash: pass pathspec as pointer
built-in stash: handle :(glob) pathspecs again
legacy stash: fix "rudimentary backport of -q"

Merge branch 'tb/stash-in-c-unused-param-fix'Junio C Hamano Mon, 22 Apr 2019 02:14:44 +0000 (11:14 +0900)

Merge branch 'tb/stash-in-c-unused-param-fix'

Code clean-up.

* tb/stash-in-c-unused-param-fix:
stash: drop unused parameter

Merge branch 'ps/stash-in-c'Junio C Hamano Mon, 22 Apr 2019 02:14:43 +0000 (11:14 +0900)

Merge branch 'ps/stash-in-c'

"git stash" rewritten in C.

* ps/stash-in-c: (28 commits)
tests: add a special setup where stash.useBuiltin is off
stash: optionally use the scripted version again
stash: add back the original, scripted `git stash`
stash: convert `stash--helper.c` into `stash.c`
stash: replace all `write-tree` child processes with API calls
stash: optimize `get_untracked_files()` and `check_changes()`
stash: convert save to builtin
stash: make push -q quiet
stash: convert push to builtin
stash: convert create to builtin
stash: convert store to builtin
stash: convert show to builtin
stash: convert list to builtin
stash: convert pop to builtin
stash: convert branch to builtin
stash: convert drop and clear to builtin
stash: convert apply to builtin
stash: mention options in `show` synopsis
stash: add tests for `git stash show` config
stash: rename test cases to be more descriptive
...

The fifth batchJunio C Hamano Tue, 16 Apr 2019 10:33:35 +0000 (19:33 +0900)

The fifth batch

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

Merge branch 'sg/t5318-cleanup'Junio C Hamano Tue, 16 Apr 2019 10:28:12 +0000 (19:28 +0900)

Merge branch 'sg/t5318-cleanup'

Code cleanup.

* sg/t5318-cleanup:
t5318-commit-graph: remove unused variable

Merge branch 'jt/t5551-protocol-v2-does-not-have-half... Junio C Hamano Tue, 16 Apr 2019 10:28:12 +0000 (19:28 +0900)

Merge branch 'jt/t5551-protocol-v2-does-not-have-half-auth'

Test update.

* jt/t5551-protocol-v2-does-not-have-half-auth:
t5551: mark half-auth no-op fetch test as v0-only

Merge branch 'jk/http-walker-status-fix'Junio C Hamano Tue, 16 Apr 2019 10:28:11 +0000 (19:28 +0900)

Merge branch 'jk/http-walker-status-fix'

dumb-http walker has been updated to share more error recovery
strategy with the normal codepath.

* jk/http-walker-status-fix:
http: use normalize_curl_result() instead of manual conversion
http: normalize curl results for dumb loose and alternates fetches
http: factor out curl result code normalization

Merge branch 'jh/midx-verify-too-many-packs'Junio C Hamano Tue, 16 Apr 2019 10:28:11 +0000 (19:28 +0900)

Merge branch 'jh/midx-verify-too-many-packs'

"git multi-pack-index verify" did not scale well with the number of
packfiles, which is being improved.

* jh/midx-verify-too-many-packs:
midx: during verify group objects by packfile to speed verification
midx: add progress indicators in multi-pack-index verify
trace2:data: add trace2 data to midx
progress: add sparse mode to force 100% complete message

Merge branch 'bb/unicode-12'Junio C Hamano Tue, 16 Apr 2019 10:28:11 +0000 (19:28 +0900)

Merge branch 'bb/unicode-12'

Unicode update.

* bb/unicode-12:
unicode: update the width tables to Unicode 12

Merge branch 'jk/refs-double-abort'Junio C Hamano Tue, 16 Apr 2019 10:28:11 +0000 (19:28 +0900)

Merge branch 'jk/refs-double-abort'

A corner case bug in the refs API has been corrected.

* jk/refs-double-abort:
refs/files-backend: don't look at an aborted transaction
refs/files-backend: handle packed transaction prepare failure

Merge branch 'nd/checkout-m-doc-update'Junio C Hamano Tue, 16 Apr 2019 10:28:10 +0000 (19:28 +0900)

Merge branch 'nd/checkout-m-doc-update'

Doc about the above.

* nd/checkout-m-doc-update:
checkout.txt: note about losing staged changes with --merge

Merge branch 'tb/trace2-va-list-fix'Junio C Hamano Tue, 16 Apr 2019 10:28:10 +0000 (19:28 +0900)

Merge branch 'tb/trace2-va-list-fix'

Fix some code that passed a NULL when a va_list was expected.

* tb/trace2-va-list-fix:
trace2: NULL is not allowed for va_list

Merge branch 'tz/completion'Junio C Hamano Tue, 16 Apr 2019 10:28:09 +0000 (19:28 +0900)

Merge branch 'tz/completion'

The completion helper code now pays attention to repository-local
configuration (when available), which allows --list-cmds to honour
a repository specific setting of completion.commands, for example.

* tz/completion:
completion: use __git when calling --list-cmds
completion: fix multiple command removals
t9902: test multiple removals via completion.commands
git: read local config in --list-cmds

Merge branch 'ma/doc-diff-doc-vs-doctor-comparison'Junio C Hamano Tue, 16 Apr 2019 10:28:09 +0000 (19:28 +0900)

Merge branch 'ma/doc-diff-doc-vs-doctor-comparison'

Dev support update to make it easier to compare two formatted
results from our documentation.

* ma/doc-diff-doc-vs-doctor-comparison:
doc-diff: add `--cut-header-footer`
doc-diff: support diffing from/to AsciiDoc(tor)
doc-diff: let `render_tree()` take an explicit directory name
Doc: auto-detect changed build flags

Merge branch 'tz/t4038-bash-redirect-target-workaround'Junio C Hamano Tue, 16 Apr 2019 10:28:09 +0000 (19:28 +0900)

Merge branch 'tz/t4038-bash-redirect-target-workaround'

Work-around extra warning from bash in our tests.

* tz/t4038-bash-redirect-target-workaround:
t4038-diff-combined: quote paths with whitespace

Merge branch 'ab/drop-scripted-rebase'Junio C Hamano Tue, 16 Apr 2019 10:28:09 +0000 (19:28 +0900)

Merge branch 'ab/drop-scripted-rebase'

Retire scripted "git rebase" implementation.

* ab/drop-scripted-rebase:
rebase: remove the rebase.useBuiltin setting

Merge branch 'jk/perf-lib-tee'Junio C Hamano Tue, 16 Apr 2019 10:28:08 +0000 (19:28 +0900)

Merge branch 'jk/perf-lib-tee'

Code cleanup in the test framework.

* jk/perf-lib-tee:
perf-lib.sh: rely on test-lib.sh for --tee handling

Merge branch 'ab/doc-misc-typofixes'Junio C Hamano Tue, 16 Apr 2019 10:28:08 +0000 (19:28 +0900)

Merge branch 'ab/doc-misc-typofixes'

Typofixes.

* ab/doc-misc-typofixes:
doc: fix typos in man pages

Merge branch 'mh/pack-protocol-doc-fix'Junio C Hamano Tue, 16 Apr 2019 10:28:08 +0000 (19:28 +0900)

Merge branch 'mh/pack-protocol-doc-fix'

Docfix.

* mh/pack-protocol-doc-fix:
fix pack protocol example client/server communication

Merge branch 'tg/glossary-overlay'Junio C Hamano Tue, 16 Apr 2019 10:28:07 +0000 (19:28 +0900)

Merge branch 'tg/glossary-overlay'

Doc update.

* tg/glossary-overlay:
glossary: add definition for overlay

Merge branch 'nd/checkout-f-while-conflicted-fix'Junio C Hamano Tue, 16 Apr 2019 10:28:07 +0000 (19:28 +0900)

Merge branch 'nd/checkout-f-while-conflicted-fix'

"git checkout -f <branch>" while the index has an unmerged path
incorrectly left some paths in an unmerged state, which has been
corrected.

* nd/checkout-f-while-conflicted-fix:
unpack-trees: fix oneway_merge accidentally carry over stage index

Merge branch 'pw/rerere-autoupdate'Junio C Hamano Tue, 16 Apr 2019 10:28:07 +0000 (19:28 +0900)

Merge branch 'pw/rerere-autoupdate'

Doc updates.

* pw/rerere-autoupdate:
merge: tweak --rerere-autoupdate documentation
am/cherry-pick/rebase/revert: document --rerere-autoupdate

Merge branch 'jc/format-patch-error-check'Junio C Hamano Tue, 16 Apr 2019 10:28:06 +0000 (19:28 +0900)

Merge branch 'jc/format-patch-error-check'

"git format-patch" used overwrite an existing patch/cover-letter
file. A new "--no-clobber" option stops it.

* jc/format-patch-error-check:
format-patch: notice failure to open cover letter for writing
builtin/log: downcase the beginning of error messages

Merge branch 'js/get-short-oid-drop-cache'Junio C Hamano Tue, 16 Apr 2019 10:28:06 +0000 (19:28 +0900)

Merge branch 'js/get-short-oid-drop-cache'

A corner-case object name ambiguity while the sequencer machinery
is working (e.g. "rebase -i -x") has been (half) fixed.

* js/get-short-oid-drop-cache:
get_oid(): when an object was not found, try harder
sequencer: move stale comment into correct location
sequencer: improve error message when an OID could not be parsed
rebase -i: demonstrate obscure loose object cache bug

Merge branch 'dl/subtree-limit-to-one-rev'Junio C Hamano Tue, 16 Apr 2019 10:28:06 +0000 (19:28 +0900)

Merge branch 'dl/subtree-limit-to-one-rev'

"git subtree" (in contrib/) update.

* dl/subtree-limit-to-one-rev:
contrib/subtree: ensure only one rev is provided

Merge branch 'js/init-db-update-for-mingw'Junio C Hamano Tue, 16 Apr 2019 10:28:05 +0000 (19:28 +0900)

Merge branch 'js/init-db-update-for-mingw'

"git init" forgot to read platform-specific repository
configuration, which made Windows port to ignore settings of
core.hidedotfiles, for example.

* js/init-db-update-for-mingw:
mingw: respect core.hidedotfiles = false in git-init again

Merge branch 'js/remote-curl-i18n'Junio C Hamano Tue, 16 Apr 2019 10:28:05 +0000 (19:28 +0900)

Merge branch 'js/remote-curl-i18n'

Error messages given from the http transport have been updated so
that they can be localized.

* js/remote-curl-i18n:
remote-curl: mark all error messages for translation

Merge branch 'js/anonymize-remote-curl-diag'Junio C Hamano Tue, 16 Apr 2019 10:28:04 +0000 (19:28 +0900)

Merge branch 'js/anonymize-remote-curl-diag'

remote-http transport did not anonymize URLs reported in its error
messages at places.

* js/anonymize-remote-curl-diag:
curl: anonymize URLs in error messages and warnings

Merge branch 'ma/asciidoctor-fixes-more'Junio C Hamano Tue, 16 Apr 2019 10:28:04 +0000 (19:28 +0900)

Merge branch 'ma/asciidoctor-fixes-more'

Documentation mark-up fixes.

* ma/asciidoctor-fixes-more:
Documentation: turn middle-of-line tabs into spaces
git-svn.txt: drop escaping '\' that ends up being rendered
git.txt: remove empty line before list continuation
config/fsck.txt: avoid starting line with dash
config/diff.txt: drop spurious backtick

Merge branch 'ma/asciidoctor-fixes'Junio C Hamano Tue, 16 Apr 2019 10:28:03 +0000 (19:28 +0900)

Merge branch 'ma/asciidoctor-fixes'

Build fix around use of asciidoctor instead of asciidoc

* ma/asciidoctor-fixes:
asciidoctor-extensions: fix spurious space after linkgit
Documentation/Makefile: add missing dependency on asciidoctor-extensions
Documentation/Makefile: add missing xsl dependencies for manpages

Merge branch 'jt/test-protocol-version'Junio C Hamano Tue, 16 Apr 2019 10:28:03 +0000 (19:28 +0900)

Merge branch 'jt/test-protocol-version'

Help developers by making it easier to run most of the tests under
different versions of over-the-wire protocols.

* jt/test-protocol-version:
t5552: compensate for v2 filtering ref adv.
tests: fix protocol version for overspecifications
t5700: only run with protocol version 1
t5512: compensate for v0 only sending HEAD symrefs
t5503: fix overspecification of trace expectation
tests: always test fetch of unreachable with v0
t5601: check ssh command only with protocol v0
tests: define GIT_TEST_PROTOCOL_VERSION

Merge branch 'nd/diff-parseopt-3'Junio C Hamano Tue, 16 Apr 2019 10:28:03 +0000 (19:28 +0900)

Merge branch 'nd/diff-parseopt-3'

Third batch to teach the diff machinery to use the parse-options
API.

* nd/diff-parseopt-3:
diff-parseopt: convert --submodule
diff-parseopt: convert --ignore-submodules
diff-parseopt: convert --textconv
diff-parseopt: convert --ext-diff
diff-parseopt: convert --quiet
diff-parseopt: convert --exit-code
diff-parseopt: convert --color-words
diff-parseopt: convert --word-diff-regex
diff-parseopt: convert --word-diff
diff-parseopt: convert --[no-]color
diff-parseopt: convert --[no-]follow
diff-parseopt: convert -R
diff-parseopt: convert -a|--text
diff-parseopt: convert --full-index
diff-parseopt: convert --binary
diff-parseopt: convert --anchored
diff-parseopt: convert --diff-algorithm
diff-parseopt: convert --histogram
diff-parseopt: convert --patience
diff-parseopt: convert --[no-]indent-heuristic

update_info_refs(): drop unused force parameterJeff King Fri, 5 Apr 2019 18:14:07 +0000 (14:14 -0400)

update_info_refs(): drop unused force parameter

Once upon a time the force flag meant something when writing info/refs,
but it hasn't done anything since 60d0526aaa (Unoptimize info/refs
creation., 2005-09-14).

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

server-info: drop objdirlen pointer arithmeticJeff King Fri, 5 Apr 2019 18:14:04 +0000 (14:14 -0400)

server-info: drop objdirlen pointer arithmetic

When writing objects/info/packs, we use the basename of each pack
(i.e., just the "pack-1234abcd.pack" part). We compute that manually by
adding "objdirlen + 6" to the name.

This _should_ work consistently, as we do not include non-local packs,
meaning everything should be in $objdir/pack/. Before f13d7db4af
(server-info.c: use pack_local like everybody else., 2005-12-05), this
was definitely true, since we computed "local" based on comparing the
objdir string. Since then, we're relying on the code on packfile.c to
match our expectations of p->pack_name and p->local.

I think our expectations do still hold today, but we can be a bit more
defensive by just using pack_basename() to get the base. That
future-proofs us, and should hopefully be more obviously safe to
somebody reading the code.

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

server-info: drop nr_alloc struct memberJeff King Fri, 5 Apr 2019 18:14:00 +0000 (14:14 -0400)

server-info: drop nr_alloc struct member

We keep an array of struct pointers, with each one representing a single
packfile. But for some reason there is a nr_alloc parameter inside each
struct, which has never been used.

This is probably cruft left over from development, where we might have
wanted a nr_alloc to dynamically grow the list. But as it turns out, we
do not dynamically grow the list at all, but rather count up the total
number of packs and use that as a maximum size. So while we're thinking
of this, let's add an assert() that documents (and checks!) that our
allocation and fill loops stay in sync.

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

server-info: use strbuf to read old info/packs fileJeff King Fri, 5 Apr 2019 18:13:56 +0000 (14:13 -0400)

server-info: use strbuf to read old info/packs file

This old code uses fgets with a fixed-size buffer. Let's use a strbuf
instead, so we don't have to wonder if "1000" is big enough, or what
happens if we see a long line.

This also lets us drop our custom code to trim the newline.

Probably nobody actually cares about the 1000-char limit (after all, the
lines generally only say "P pack-[0-9a-f]{40}.pack"), so this is mostly
just about cleanup/readability.

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

server-info: simplify cleanup in parse_pack_def()Jeff King Fri, 5 Apr 2019 18:13:14 +0000 (14:13 -0400)

server-info: simplify cleanup in parse_pack_def()

We have two exits from the function: either we jump to the out_stale
label or not. But in both exits we repeat our cleanup, and the only
difference is our return value. Let's just use a variable for the return
value to avoid repeating ourselves.

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

server-info: fix blind pointer arithmeticJeff King Fri, 5 Apr 2019 18:13:10 +0000 (14:13 -0400)

server-info: fix blind pointer arithmetic

When we're writing out a new objects/info/packs file, we read back the
old one to try to keep the ordering the same. When we see a line
starting with "P", we expect "P pack-1234..." and blindly jump to "line
+ 2" to parse the pack name. If we saw a line with _just_ "P" and
nothing else, we'd jump past the end of the buffer and start reading
arbitrary memory.

This shouldn't be a big attack vector, as the files are local to the
repository and written by us, but it's clearly worth fixing (we do read
remote copies of the file for dumb-http fetches, but using a totally
different parser!).

Let's instead use skip_prefix() here, which avoids pointer arithmetic
altogether. Note that this converts our switch statement to an if/else
chain, making it slightly more verbose. But it will also make it easier
to do a few follow-on cleanups.

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

http: simplify parsing of remote objects/info/packsJeff King Fri, 5 Apr 2019 18:12:55 +0000 (14:12 -0400)

http: simplify parsing of remote objects/info/packs

We can use skip_prefix() and parse_oid_hex() to continuously increment
our pointer, rather than dealing with magic numbers. This also fixes a
few small shortcomings:

- if we see a line with the right prefix, suffix, and length, i.e.
matching /P pack-.{40}.pack\n/, we'll interpret the middle part as
hex without checking if it could be parsed. This could lead to us
looking at uninitialized garbage in the hash array. In practice this
means we'll just make a garbage request to the server which will
fail, though it's interesting that a malicious server could convince
us to leak 40 bytes of uninitialized stack to them.

- the current code is picky about seeing a newline at the end of file,
but we can easily be more liberal

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

packfile: fix pack basename computationJeff King Fri, 5 Apr 2019 18:06:22 +0000 (14:06 -0400)

packfile: fix pack basename computation

When we have a multi-pack-index that covers many packfiles, we try to
avoid opening the .idx for those packfiles. To do that we feed the pack
name to midx_contains_pack(). But that function wants to see only the
basename, which we compute using strrchr() to find the final slash. But
that leaves an extra "/" at the start of our string.

We can fix this by incrementing the pointer. That also raises the
question of what to do when the name does not have a '/' at all. This
should generally not happen (we always find files in "pack/"), but it
doesn't hurt to be defensive here.

Let's wrap all of that up in a helper function and make it publicly
available, since a later patch will need to use it, too.

The tests don't notice because there's nothing about opening those .idx
files that would cause us to give incorrect output. It's just a little
slower. The new test checks this case by corrupting the covered .idx,
and then making sure we don't complain about it.

We also have to tweak t5570, which intentionally corrupts a .idx file
and expects us to notice it. When run with GIT_TEST_MULTI_PACK_INDEX,
this will fail since we now will (correctly) not bother opening the .idx
at all. We can fix that by unconditionally dropping any midx that's
there, which ensures we'll have to read the .idx.

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

midx: check both pack and index names for containmentJeff King Fri, 5 Apr 2019 18:06:04 +0000 (14:06 -0400)

midx: check both pack and index names for containment

A midx file (and the struct we parse from it) contains a list of all of
the covered packfiles, mentioned by their ".idx" names (e.g.,
"pack-1234.idx", etc). And thus calls to midx_contains_pack() expect
callers to provide the idx name.

This works for most of the calls, but the one in open_packed_git_1()
tries to feed a packed_git->pack_name, which is the ".pack" name,
meaning we'll never find a match (even if the pack is covered by the
midx).

We can fix this by converting the ".pack" to ".idx" in the caller.
However, that requires allocating a new string. Instead, let's make
midx_contains_pack() a bit friendlier, and allow it take _either_ the
.pack or .idx variant.

All cleverness in the matching code is credited to René. Bugs are mine.

There's no test here, because while this does fix _a_ bug, it's masked
by another bug in that same caller. That will be covered (with a test)
in the next patch.

Helped-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5319: drop useless --buffer from cat-fileJeff King Fri, 5 Apr 2019 18:05:03 +0000 (14:05 -0400)

t5319: drop useless --buffer from cat-file

The cat-file --buffer option is the default already when using
--batch-all-objects. It doesn't hurt to specify it, but it's nice for
the test scripts to model good usage.

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

t5319: fix bogus cat-file argumentJeff King Fri, 5 Apr 2019 18:04:56 +0000 (14:04 -0400)

t5319: fix bogus cat-file argument

There's no such argument as "--unsorted"; it's spelled "--unordered".
But our test failed to notice that cat-file didn't run at all because:

1. It lost the exit code of git on the left-hand side of a pipe.

2. It was comparing two runs of the broken invocation with and without
a particular config variable (and indeed, both cases produced no
output!).

Let's fix the option, but also tweak the helper function to check the
exit code.

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

pack-revindex: open index if necessaryJeff King Fri, 5 Apr 2019 18:04:24 +0000 (14:04 -0400)

pack-revindex: open index if necessary

We can't create a pack revindex if we haven't actually looked at the
index. Normally we would never get as far as creating a revindex without
having already been looking in the pack, so this code never bothered to
double-check that pack->index_data had been loaded.

But with the new multi-pack-index feature, many code paths might not
load the individual pack .idx at all (they'd find objects via the midx
and then open the .pack, but not its index).

This can't yet be triggered in practice, because a bug in the midx code
means we accidentally open up the individual .idx files anyway. But in
preparation for fixing that, let's have the revindex code check that
everything it needs has been loaded.

In most cases this will just be a quick noop. But note that this does
introduce a possibility of error (if we have to open the index and it's
corrupt), so load_pack_revindex() now returns a result code, and callers
need to handle the error.

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

packfile.h: drop extern from function declarationsJeff King Fri, 5 Apr 2019 18:03:41 +0000 (14:03 -0400)

packfile.h: drop extern from function declarations

As CodingGuidelines recommends, we do not need an "extern" when
declaring a public function. Let's drop these. Note that we leave the
extern on report_garbage(), as that is actually a function pointer, not
a function itself.

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

fetch: do not consider peeled tags as advertised tipsJeff King Sat, 13 Apr 2019 05:57:37 +0000 (01:57 -0400)

fetch: do not consider peeled tags as advertised tips

Our filter_refs() function accidentally considers the target of a peeled
tag to be advertised by the server, even though upload-pack on the
server side does not consider it so. This can result in the client
making a bogus fetch to the server, which will end with the server
complaining "not our ref". Whereas the correct behavior is for the
client to notice that the server will not allow the request and error
out immediately.

So as bugs go, this is not very serious (the outcome is the same either
way -- the fetch fails). But it's worth making the logic here correct
and consistent with other related cases (e.g., fetching an oid that the
server did not mention at all).

The crux of the issue comes from fdb69d33c4 (fetch-pack: always allow
fetching of literal SHA1s, 2017-05-15). After that, the strategy of
filter_refs() is basically:

- for each advertised ref, try to match it with a "sought" ref
provided by the user. Skip any malformed refs (which includes
peeled values like "refs/tags/foo^{}"), and place any unmatched
items onto the unmatched list.

- if there are unmatched sought refs, then put all of the advertised
tips into an oidset, including the unmatched ones.

- for each sought ref, see if it's in the oidset, in which case it's
legal for us to ask the server for it

The problem is in the second step. Our list of unmatched refs includes
the peeled refs, even though upload-pack does not allow them to be
directly fetched. So the simplest fix would be to exclude them during
that step.

However, we can observe that the unmatched list isn't used for anything
else, and is freed at the end. We can just free those malformed refs
immediately. That saves us having to check each ref a second time to see
if it's malformed.

Note that this code only kicks in when "strict" is in effect. I.e., if
we are using the v0 protocol and uploadpack.allowReachableSHA1InWant is
not in effect. With v2, all oids are allowed, and we do not bother
creating or consulting the oidset at all. To future-proof our test
against the upcoming GIT_TEST_PROTOCOL_VERSION flag, we'll manually mark
it as a v0-only test.

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

remote.c: make singular free_ref() publicJeff King Sat, 13 Apr 2019 05:54:31 +0000 (01:54 -0400)

remote.c: make singular free_ref() public

We provide a free_refs() function to free a list, but there's no easy
way for a caller to free a single ref. Let's make our singular
free_ref() function public. Since its name is so similar to the
list-freeing free_refs(), and because both of those functions have the
same signature, it might be easy to accidentally use the wrong one.
Let's call the singular version the more verbose "free_one_ref()" to
distinguish it.

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

fetch: use free_refs()Jeff King Sat, 13 Apr 2019 05:54:09 +0000 (01:54 -0400)

fetch: use free_refs()

There's no need for us to write this loop manually when a helper
function can already do it.

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

pkt-line: prepare buffer before handling ERR packetsJeff King Sat, 13 Apr 2019 05:54:02 +0000 (01:54 -0400)

pkt-line: prepare buffer before handling ERR packets

Since 2d103c31c2 (pack-protocol.txt: accept error packets in any
context, 2018-12-29), the pktline code will detect an ERR packet and die
automatically, saving the caller from dealing with it. But we do so too
early in the function, before we have terminated the buffer with a NUL.

As a result, passing the ERR message to die() may result in us printing
random cruft from a previous packet. This doesn't trigger memory tools
like ASan because we reuse the same buffer over and over (so the
contents are valid and initialized; they're just stale).

We can see demonstrate this by tightening the regex we use to match the
error message in t5516; without this patch, git-fetch will accidentally
print the capabilities from the (much longer) initial packet we
received.

By moving the ERR code later in the function we get a few other
benefits, too:

- we'll now chomp any newline sent by the other side (which is what we
want, since die() will add its own newline)

- we'll now mention the ERR packet with GIT_TRACE_PACKET

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

upload-pack: send ERR packet for non-tip objectsJeff King Sat, 13 Apr 2019 05:53:34 +0000 (01:53 -0400)

upload-pack: send ERR packet for non-tip objects

Commit bdb31eada7 (upload-pack: report "not our ref" to client,
2017-02-23) catches the case where a client asks for an object we don't
have, and issues a message that the client can show to the user (in
addition to dying and writing to stderr).

There's a similar case (with the same message) when the client asks for
an object which we _do_ have, but which isn't a ref tip (or isn't
reachable, when uploadpack.allowReachableSHA1InWant is true). Let's give
that one the same treatment, for the same reason (namely that it's more
informative to the client than just hanging up, since they won't see our
stderr over some protocols).

There are two tests here. We cover it most directly in t5530 by invoking
upload-pack, which matches the existing "not our ref" test.

But a more end-to-end check is that "git fetch" actually shows the
message to the client. We're already checking in t5516 that this case
fails, so we can just check stderr there, too. Note that even after we
started ignoring SIGPIPE in 8bf4becf0c, this could in theory still be
racy as described in that commit (because we die() on write failures
before pumping the connection for any ERR packets).

In practice this should be OK for this case. The server will not
actually check reachability until it has received our whole group of
"want" lines. And since we have no objects in the repository, we won't
send any "have" lines, meaning we're always waiting to read the server
response.

Note also that this case cannot happen in the v2 protocol, since it
allows any available object to be requested. However, we don't have to
take any steps to protect against the upcoming GIT_TEST_PROTOCOL_VERSION
in our tests:

- the tests in t5516 would already need to be skipped under v2, and
that is covered by ab0c5f5096 (tests: always test fetch of
unreachable with v0, 2019-02-25)

- the tests in t5530 invoke upload-pack directly, which will continue
to default to v0. Eventually we may have a test setting which uses
v2 even for bare upload-pack calls, but we can't override it here
until we know what the setting looks like.

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

t5530: check protocol response for "not our ref"Jeff King Sat, 13 Apr 2019 05:53:09 +0000 (01:53 -0400)

t5530: check protocol response for "not our ref"

Back in 9f9aa76130 (upload-pack: Improve error message when bad ref
requested, 2010-07-31), we added a test to make sure that we die with a
sensible message when the client asks for an object we don't have.

Much later, in bdb31eada7 (upload-pack: report "not our ref" to client,
2017-02-23), we started reporting that information via an "ERR" line in
the protocol. Let's check that part, as well.

While we're touching this test, let's drop the "-q" on the grep calls.
Our usual test style just relies on --verbose to control output.

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

t5516: drop ok=sigpipe from unreachable-want testsJeff King Sat, 13 Apr 2019 05:52:18 +0000 (01:52 -0400)

t5516: drop ok=sigpipe from unreachable-want tests

We annotated our test_must_fail calls in 8bf4becf0c (add "ok=sigpipe" to
test_must_fail and use it to fix flaky tests, 2015-11-27) because the
abrupt hangup of the server meant that we'd sometimes fail on read() and
sometimes get SIGPIPE on write().

But since 143588949c (fetch: ignore SIGPIPE during network operation,
2019-03-03), we make sure that we end up with a real die(), and our
tests no longer need to work around the race.

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

gettext tests: export the restored GIT_TEST_GETTEXT_POISONJunio C Hamano Mon, 15 Apr 2019 04:48:31 +0000 (13:48 +0900)

gettext tests: export the restored GIT_TEST_GETTEXT_POISON

6cdccfce ("i18n: make GETTEXT_POISON a runtime option", 2018-11-08)
made the gettext-poison test a runtime option (which was a good
move) and adjusted the test framework so that Git commands we run as
part of the framework, as opposed to the ones that are part of the
test proper, are not affected by the setting. The original value
for the GIT_TEST_GETTEXT_POISON environment variable is saved away
in another variable and gets unset, and then later the saved value
is restored to the environment variable.

But the code forgot to export the variable again, which is necessary
to restore the "export" bit that was lost when the variable was unset.

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