gitweb.git
Merge branch 'sy/git-gui-i18n-ja'Junio C Hamano Thu, 15 Sep 2016 21:11:14 +0000 (14:11 -0700)

Merge branch 'sy/git-gui-i18n-ja'

Update Japanese translation for "git-gui".

* sy/git-gui-i18n-ja:
git-gui: update Japanese information
git-gui: update Japanese translation
git-gui: add Japanese language code
git-gui: apply po template to Japanese translation
git-gui: consistently use the same word for "blame" in Japanese
git-gui: consistently use the same word for "remote" in Japanese

Merge branch 'jk/pack-tag-of-tag'Junio C Hamano Thu, 15 Sep 2016 21:11:14 +0000 (14:11 -0700)

Merge branch 'jk/pack-tag-of-tag'

"git pack-objects --include-tag" was taught that when we know that
we are sending an object C, we want a tag B that directly points at
C but also a tag A that points at the tag B. We used to miss the
intermediate tag B in some cases.

* jk/pack-tag-of-tag:
pack-objects: walk tag chains for --include-tag
t5305: simplify packname handling
t5305: use "git -C"
t5305: drop "dry-run" of unpack-objects
t5305: move cleanup into test block

Sync with maintJunio C Hamano Mon, 12 Sep 2016 22:35:14 +0000 (15:35 -0700)

Sync with maint

* maint:
l10n: zh_CN: review for git v2.10.0 l10n
l10n: zh_CN: fixed some typos for git 2.10.0
l10n: pt_PT: update Portuguese repository info
l10n: pt_PT: update Portuguese translation

First batch for 2.11Junio C Hamano Mon, 12 Sep 2016 22:35:05 +0000 (15:35 -0700)

First batch for 2.11

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

Merge branch 'sb/transport-report-missing-submodule... Junio C Hamano Mon, 12 Sep 2016 22:34:38 +0000 (15:34 -0700)

Merge branch 'sb/transport-report-missing-submodule-on-stderr'

Message cleanup.

* sb/transport-report-missing-submodule-on-stderr:
transport: report missing submodule pushes consistently on stderr

Merge branch 'ep/use-git-trace-curl-in-tests'Junio C Hamano Mon, 12 Sep 2016 22:34:38 +0000 (15:34 -0700)

Merge branch 'ep/use-git-trace-curl-in-tests'

Update a few tests that used to use GIT_CURL_VERBOSE to use the
newer GIT_TRACE_CURL.

* ep/use-git-trace-curl-in-tests:
t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
test-lib.sh: preserve GIT_TRACE_CURL from the environment
t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var

Merge branch 'sb/xdiff-remove-unused-static-decl'Junio C Hamano Mon, 12 Sep 2016 22:34:38 +0000 (15:34 -0700)

Merge branch 'sb/xdiff-remove-unused-static-decl'

Code cleanup.

* sb/xdiff-remove-unused-static-decl:
xdiff: remove unneeded declarations

Merge branch 'js/t6026-clean-up'Junio C Hamano Mon, 12 Sep 2016 22:34:37 +0000 (15:34 -0700)

Merge branch 'js/t6026-clean-up'

A test spawned a short-lived background process, which sometimes
prevented the test directory from getting removed at the end of the
script on some platforms.

* js/t6026-clean-up:
t6026-merge-attr: clean up background process at end of test case

Merge branch 'js/t9903-chaining'Junio C Hamano Mon, 12 Sep 2016 22:34:37 +0000 (15:34 -0700)

Merge branch 'js/t9903-chaining'

* js/t9903-chaining:
t9903: fix broken && chain

Merge branch 'rs/hex2chr'Junio C Hamano Mon, 12 Sep 2016 22:34:36 +0000 (15:34 -0700)

Merge branch 'rs/hex2chr'

* rs/hex2chr:
introduce hex2chr() for converting two hexadecimal digits to a character

Merge branch 'rs/compat-strdup'Junio C Hamano Mon, 12 Sep 2016 22:34:36 +0000 (15:34 -0700)

Merge branch 'rs/compat-strdup'

* rs/compat-strdup:
compat: move strdup(3) replacement to its own file

Merge branch 'jc/forbid-symbolic-ref-d-HEAD'Junio C Hamano Mon, 12 Sep 2016 22:34:35 +0000 (15:34 -0700)

Merge branch 'jc/forbid-symbolic-ref-d-HEAD'

"git symbolic-ref -d HEAD" happily removes the symbolic ref, but
the resulting repository becomes an invalid one. Teach the command
to forbid removal of HEAD.

* jc/forbid-symbolic-ref-d-HEAD:
symbolic-ref -d: do not allow removal of HEAD

Merge branch 'jc/submodule-anchor-git-dir'Junio C Hamano Mon, 12 Sep 2016 22:34:34 +0000 (15:34 -0700)

Merge branch 'jc/submodule-anchor-git-dir'

Having a submodule whose ".git" repository is somehow corrupt
caused a few commands that recurse into submodules loop forever.

* jc/submodule-anchor-git-dir:
submodule: avoid auto-discovery in prepare_submodule_repo_env()

Merge branch 'jk/squelch-false-warning-from-gcc-o3'Junio C Hamano Mon, 12 Sep 2016 22:34:33 +0000 (15:34 -0700)

Merge branch 'jk/squelch-false-warning-from-gcc-o3'

* jk/squelch-false-warning-from-gcc-o3:
color_parse_mem: initialize "struct color" temporary
error_errno: use constant return similar to error()

Merge branch 'jk/test-lib-drop-pid-from-results'Junio C Hamano Mon, 12 Sep 2016 22:34:33 +0000 (15:34 -0700)

Merge branch 'jk/test-lib-drop-pid-from-results'

The test framework left the number of tests and success/failure
count in the t/test-results directory, keyed by the name of the
test script plus the process ID. The latter however turned out not
to serve any useful purpose. The process ID part of the filename
has been removed.

* jk/test-lib-drop-pid-from-results:
test-lib: drop PID from test-results/*.count

Merge branch 'jc/am-read-author-file'Junio C Hamano Mon, 12 Sep 2016 22:34:32 +0000 (15:34 -0700)

Merge branch 'jc/am-read-author-file'

Extract a small helper out of the function that reads the authors
script file "git am" internally uses.

* jc/am-read-author-file:
am: refactor read_author_script()

Merge branch 'jk/diff-submodule-diff-inline'Junio C Hamano Mon, 12 Sep 2016 22:34:31 +0000 (15:34 -0700)

Merge branch 'jk/diff-submodule-diff-inline'

The "git diff --submodule={short,log}" mechanism has been enhanced
to allow "--submodule=diff" to show the patch between the submodule
commits bound to the superproject.

* jk/diff-submodule-diff-inline:
diff: teach diff to display submodule difference with an inline diff
submodule: refactor show_submodule_summary with helper function
submodule: convert show_submodule_summary to use struct object_id *
allow do_submodule_path to work even if submodule isn't checked out
diff: prepare for additional submodule formats
graph: add support for --line-prefix on all graph-aware output
diff.c: remove output_prefix_length field
cache: add empty_tree_oid object and helper function

Merge tag 'l10n-2.10.0-rnd2.3' of git://github.com... Junio C Hamano Mon, 12 Sep 2016 22:23:42 +0000 (15:23 -0700)

Merge tag 'l10n-2.10.0-rnd2.3' of git://github.com/git-l10n/git-po into maint

l10n-2.10.0-rnd2.3

* tag 'l10n-2.10.0-rnd2.3' of git://github.com/git-l10n/git-po:
l10n: zh_CN: review for git v2.10.0 l10n
l10n: zh_CN: fixed some typos for git 2.10.0
l10n: pt_PT: update Portuguese repository info
l10n: pt_PT: update Portuguese translation

l10n: zh_CN: review for git v2.10.0 l10nRay Chen Wed, 7 Sep 2016 10:03:04 +0000 (18:03 +0800)

l10n: zh_CN: review for git v2.10.0 l10n

Signed-off-by: Ray Chen <oldsharp@gmail.com>

l10n: zh_CN: fixed some typos for git 2.10.0Jiang Xin Mon, 5 Sep 2016 15:26:21 +0000 (23:26 +0800)

l10n: zh_CN: fixed some typos for git 2.10.0

Reviewed-by: Ray <tvvocold@163.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Sync with maintJunio C Hamano Fri, 9 Sep 2016 05:00:53 +0000 (22:00 -0700)

Sync with maint

* maint:
Prepare for 2.9.4

Start the 2.11 cycleJunio C Hamano Fri, 9 Sep 2016 05:00:35 +0000 (22:00 -0700)

Start the 2.11 cycle

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

Merge branch 'bh/diff-highlight-graph'Junio C Hamano Fri, 9 Sep 2016 04:49:52 +0000 (21:49 -0700)

Merge branch 'bh/diff-highlight-graph'

"diff-highlight" script (in contrib/) learned to work better with
"git log -p --graph" output.

* bh/diff-highlight-graph:
diff-highlight: avoid highlighting combined diffs
diff-highlight: add multi-byte tests
diff-highlight: ignore test cruft
diff-highlight: add support for --graph output
diff-highlight: add failing test for handling --graph output
diff-highlight: add some tests

Merge branch 'hv/doc-commit-reference-style'Junio C Hamano Fri, 9 Sep 2016 04:49:51 +0000 (21:49 -0700)

Merge branch 'hv/doc-commit-reference-style'

A small doc update.

* hv/doc-commit-reference-style:
SubmittingPatches: use gitk's "Copy commit summary" format

Merge branch 'sb/submodule-clone-rr'Junio C Hamano Fri, 9 Sep 2016 04:49:50 +0000 (21:49 -0700)

Merge branch 'sb/submodule-clone-rr'

"git clone --resurse-submodules --reference $path $URL" is a way to
reduce network transfer cost by borrowing objects in an existing
$path repository when cloning the superproject from $URL; it
learned to also peek into $path for presense of corresponding
repositories of submodules and borrow objects from there when able.

* sb/submodule-clone-rr:
clone: recursive and reference option triggers submodule alternates
clone: implement optional references
clone: clarify option_reference as required
clone: factor out checking for an alternate path
submodule--helper update-clone: allow multiple references
submodule--helper module-clone: allow multiple references
t7408: merge short tests, factor out testing method
t7408: modernize style

Merge branch 'jh/status-v2-porcelain'Junio C Hamano Fri, 9 Sep 2016 04:49:50 +0000 (21:49 -0700)

Merge branch 'jh/status-v2-porcelain'

Enhance "git status --porcelain" output by collecting more data on
the state of the index and the working tree files, which may
further be used to teach git-prompt (in contrib/) to make fewer
calls to git.

* jh/status-v2-porcelain:
status: unit tests for --porcelain=v2
test-lib-functions.sh: add lf_to_nul helper
git-status.txt: describe --porcelain=v2 format
status: print branch info with --porcelain=v2 --branch
status: print per-file porcelain v2 status data
status: collect per-file data for --porcelain=v2
status: support --porcelain[=<version>]
status: cleanup API to wt_status_print
status: rename long-format print routines

Merge branch 'po/range-doc'Junio C Hamano Fri, 9 Sep 2016 04:49:49 +0000 (21:49 -0700)

Merge branch 'po/range-doc'

Clarify various ways to specify the "revision ranges" in the
documentation.

* po/range-doc:
doc: revisions: sort examples and fix alignment of the unchanged
doc: revisions: show revision expansion in examples
doc: revisions - clarify reachability examples
doc: revisions - define `reachable`
doc: gitrevisions - clarify 'latter case' is revision walk
doc: gitrevisions - use 'reachable' in page description
doc: revisions: single vs multi-parent notation comparison
doc: revisions: extra clarification of <rev>^! notation effects
doc: revisions: give headings for the two and three dot notations
doc: show the actual left, right, and boundary marks
doc: revisions - name the left and right sides
doc: use 'symmetric difference' consistently

Merge branch 'rt/help-unknown'Junio C Hamano Fri, 9 Sep 2016 04:49:48 +0000 (21:49 -0700)

Merge branch 'rt/help-unknown'

"git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
which was not intuitive, given that "git nosuchcommand" said "git:
'nosuchcommand' is not a git command".

* rt/help-unknown:
help: make option --help open man pages only for Git commands
help: introduce option --exclude-guides

Merge branch 'cc/receive-pack-limit'Junio C Hamano Fri, 9 Sep 2016 04:49:47 +0000 (21:49 -0700)

Merge branch 'cc/receive-pack-limit'

An incoming "git push" that attempts to push too many bytes can now
be rejected by setting a new configuration variable at the receiving
end.

* cc/receive-pack-limit:
receive-pack: allow a maximum input size to be specified
unpack-objects: add --max-input-size=<size> option
index-pack: add --max-input-size=<size> option

Merge branch 'jk/format-patch-number-singleton-patch... Junio C Hamano Fri, 9 Sep 2016 04:49:47 +0000 (21:49 -0700)

Merge branch 'jk/format-patch-number-singleton-patch-with-cover'

"git format-patch --cover-letter HEAD^" to format a single patch
with a separate cover letter now numbers the output as [PATCH 0/1]
and [PATCH 1/1] by default.

* jk/format-patch-number-singleton-patch-with-cover:
format-patch: show 0/1 and 1/1 for singleton patch with cover letter

Merge branch 'jk/delta-base-cache'Junio C Hamano Fri, 9 Sep 2016 04:49:46 +0000 (21:49 -0700)

Merge branch 'jk/delta-base-cache'

The delta-base-cache mechanism has been a key to the performance in
a repository with a tightly packed packfile, but it did not scale
well even with a larger value of core.deltaBaseCacheLimit.

* jk/delta-base-cache:
t/perf: add basic perf tests for delta base cache
delta_base_cache: use hashmap.h
delta_base_cache: drop special treatment of blobs
delta_base_cache: use list.h for LRU
release_delta_base_cache: reuse existing detach function
clear_delta_base_cache_entry: use a more descriptive name
cache_or_unpack_entry: drop keep_cache parameter

Start maintenance track for 2.10.x seriesJunio C Hamano Fri, 9 Sep 2016 04:39:38 +0000 (21:39 -0700)

Start maintenance track for 2.10.x series

Prepare for 2.9.4Junio C Hamano Fri, 9 Sep 2016 04:37:59 +0000 (21:37 -0700)

Prepare for 2.9.4

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

Merge branch 'hv/doc-commit-reference-style' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:03 +0000 (21:36 -0700)

Merge branch 'hv/doc-commit-reference-style' into maint

A small doc update.

* hv/doc-commit-reference-style:
SubmittingPatches: use gitk's "Copy commit summary" format
SubmittingPatches: document how to reference previous commits

Merge branch 'sg/reflog-past-root' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:02 +0000 (21:36 -0700)

Merge branch 'sg/reflog-past-root' into maint

A small test clean-up for a topic introduced in v2.9.1 and later.

* sg/reflog-past-root:
t1410: remove superfluous 'git reflog' from the 'walk past root' test

Merge branch 'rs/mailinfo-lib' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:01 +0000 (21:36 -0700)

Merge branch 'rs/mailinfo-lib' into maint

Small code clean-up.

* rs/mailinfo-lib:
mailinfo: recycle strbuf in check_header()

Merge branch 'jk/tighten-alloc' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:00 +0000 (21:36 -0700)

Merge branch 'jk/tighten-alloc' into maint

Small code and comment clean-up.

* jk/tighten-alloc:
receive-pack: use FLEX_ALLOC_MEM in queue_command()
correct FLEXPTR_* example in comment

Merge branch 'rs/use-strbuf-add-unique-abbrev' into... Junio C Hamano Fri, 9 Sep 2016 04:35:59 +0000 (21:35 -0700)

Merge branch 'rs/use-strbuf-add-unique-abbrev' into maint

A small code clean-up.

* rs/use-strbuf-add-unique-abbrev:
use strbuf_add_unique_abbrev() for adding short hashes

Merge branch 'rs/merge-recursive-string-list-init'... Junio C Hamano Fri, 9 Sep 2016 04:35:59 +0000 (21:35 -0700)

Merge branch 'rs/merge-recursive-string-list-init' into maint

A small code clean-up.

* rs/merge-recursive-string-list-init:
merge-recursive: use STRING_LIST_INIT_NODUP

Merge branch 'rs/merge-add-strategies-simplification... Junio C Hamano Fri, 9 Sep 2016 04:35:58 +0000 (21:35 -0700)

Merge branch 'rs/merge-add-strategies-simplification' into maint

A small code clean-up.

* rs/merge-add-strategies-simplification:
merge: use string_list_split() in add_strategies()

Merge branch 'ls/packet-line-protocol-doc-fix' into... Junio C Hamano Fri, 9 Sep 2016 04:35:57 +0000 (21:35 -0700)

Merge branch 'ls/packet-line-protocol-doc-fix' into maint

Correct an age-old calco (is that a typo-like word for calc)
in the documentation.

* ls/packet-line-protocol-doc-fix:
pack-protocol: fix maximum pkt-line size

Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile... Junio C Hamano Fri, 9 Sep 2016 04:35:56 +0000 (21:35 -0700)

Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile' into maint

The tempfile (hence its user lockfile) API lets the caller to open
a file descriptor to a temporary file, write into it and then
finalize it by first closing the filehandle and then either
removing or renaming the temporary file. When the process spawns a
subprocess after obtaining the file descriptor, and if the
subprocess has not exited when the attempt to remove or rename is
made, the last step fails on Windows, because the subprocess has
the file descriptor still open. Open tempfile with O_CLOEXEC flag
to avoid this (on Windows, this is mapped to O_NOINHERIT).

* bw/mingw-avoid-inheriting-fd-to-lockfile:
mingw: ensure temporary file handles are not inherited by child processes
t6026-merge-attr: child processes must not inherit index.lock handles

Merge branch 'dg/document-git-c-in-git-config-doc'... Junio C Hamano Fri, 9 Sep 2016 04:35:56 +0000 (21:35 -0700)

Merge branch 'dg/document-git-c-in-git-config-doc' into maint

The "git -c var[=val] cmd" facility to append a configuration
variable definition at the end of the search order was described in
git(1) manual page, but not in git-config(1), which was more likely
place for people to look for when they ask "can I make a one-shot
override, and if so how?"

* dg/document-git-c-in-git-config-doc:
doc: mention `git -c` in git-config(1)

Merge branch 'js/no-html-bypass-on-windows' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:55 +0000 (21:35 -0700)

Merge branch 'js/no-html-bypass-on-windows' into maint

On Windows, help.browser configuration variable used to be ignored,
which has been corrected.

* js/no-html-bypass-on-windows:
Revert "display HTML in default browser using Windows' shell API"

Merge branch 'jk/difftool-command-not-found' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'jk/difftool-command-not-found' into maint

"git difftool" by default ignores the error exit from the backend
commands it spawns, because often they signal that they found
differences by exiting with a non-zero status code just like "diff"
does; the exit status codes 126 and above however are special in
that they are used to signal that the command is not executable,
does not exist, or killed by a signal. "git difftool" has been
taught to notice these exit status codes.

* jk/difftool-command-not-found:
difftool: always honor fatal error exit codes

Merge branch 'sb/checkout-explit-detach-no-advice'... Junio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'sb/checkout-explit-detach-no-advice' into maint

"git checkout --detach <branch>" used to give the same advice
message as that is issued when "git checkout <tag>" (or anything
that is not a branch name) is given, but asking with "--detach" is
an explicit enough sign that the user knows what is going on. The
advice message has been squelched in this case.

* sb/checkout-explit-detach-no-advice:
checkout: do not mention detach advice for explicit --detach option

Merge branch 'rs/pull-signed-tag' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'rs/pull-signed-tag' into maint

When "git merge-recursive" works on history with many criss-cross
merges in "verbose" mode, the names the command assigns to the
virtual merge bases could have overwritten each other by unintended
reuse of the same piece of memory.

* rs/pull-signed-tag:
commit: use FLEX_ARRAY in struct merge_remote_desc
merge-recursive: fix verbose output for multiple base trees
commit: factor out set_merge_remote_desc()
commit: use xstrdup() in get_merge_parent()

Merge branch 'js/test-lint-pathname' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'js/test-lint-pathname' into maint

The "t/" hierarchy is prone to get an unusual pathname; "make test"
has been taught to make sure they do not contain paths that cannot
be checked out on Windows (and the mechanism can be reusable to
catch pathnames that are not portable to other platforms as need
arises).

* js/test-lint-pathname:
t/Makefile: ensure that paths are valid on platforms we care

Merge branch 'js/mv-dir-to-new-directory' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'js/mv-dir-to-new-directory' into maint

"git mv dir non-existing-dir/" did not work in some environments
the same way as existing mainstream platforms. The code now moves
"dir" to "non-existing-dir", without relying on rename("A", "B/")
that strips the trailing slash of '/'.

* js/mv-dir-to-new-directory:
git mv: do not keep slash in `git mv dir non-existing-dir/`

Merge branch 'js/import-tars-hardlinks' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'js/import-tars-hardlinks' into maint

"import-tars" fast-import script (in contrib/) used to ignore a
hardlink target and replaced it with an empty file, which has been
corrected to record the same blob as the other file the hardlink is
shared with.

* js/import-tars-hardlinks:
import-tars: support hard links

Merge branch 'ms/document-pack-window-memory-is-per... Junio C Hamano Fri, 9 Sep 2016 04:35:53 +0000 (21:35 -0700)

Merge branch 'ms/document-pack-window-memory-is-per-thread' into maint

* ms/document-pack-window-memory-is-per-thread:
document git-repack interaction of pack.threads and pack.windowMemory

Merge branch 'jk/push-force-with-lease-creation' into... Junio C Hamano Fri, 9 Sep 2016 04:35:53 +0000 (21:35 -0700)

Merge branch 'jk/push-force-with-lease-creation' into maint

"git push --force-with-lease" already had enough logic to allow
ensuring that such a push results in creation of a ref (i.e. the
receiving end did not have another push from sideways that would be
discarded by our force-pushing), but didn't expose this possibility
to the users. It does so now.

* jk/push-force-with-lease-creation:
t5533: make it pass on case-sensitive filesystems
push: allow pushing new branches with --force-with-lease
push: add shorthand for --force-with-lease branch creation
Documentation/git-push: fix placeholder formatting

Merge branch 'jk/reflog-date' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:52 +0000 (21:35 -0700)

Merge branch 'jk/reflog-date' into maint

The reflog output format is documented better, and a new format
--date=unix to report the seconds-since-epoch (without timezone)
has been added.

* jk/reflog-date:
date: clarify --date=raw description
date: add "unix" format
date: document and test "raw-local" mode
doc/pretty-formats: explain shortening of %gd
doc/pretty-formats: describe index/time formats for %gd
doc/rev-list-options: explain "-g" output formats
doc/rev-list-options: clarify "commit@{Nth}" for "-g" option

Merge branch 'jc/renormalize-merge-kill-safer-crlf... Junio C Hamano Fri, 9 Sep 2016 04:35:51 +0000 (21:35 -0700)

Merge branch 'jc/renormalize-merge-kill-safer-crlf' into maint

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

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

Merge branch 'jk/common-main' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:50 +0000 (21:35 -0700)

Merge branch 'jk/common-main' into maint

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

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

transport: report missing submodule pushes consistently... Stefan Beller Tue, 23 Aug 2016 21:40:08 +0000 (14:40 -0700)

transport: report missing submodule pushes consistently on stderr

The surrounding advice is printed to stderr, but the list of submodules
is not. Make the report consistent by reporting everything to stderr.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack-objects: walk tag chains for --include-tagJeff King Mon, 5 Sep 2016 21:52:26 +0000 (17:52 -0400)

pack-objects: walk tag chains for --include-tag

When pack-objects is given --include-tag, it peels each tag
ref down to a non-tag object, and if that non-tag object is
going to be packed, we include the tag, too. But what
happens if we have a chain of tags (e.g., tag "A" points to
tag "B", which points to commit "C")?

We'll peel down to "C" and realize that we want to include
tag "A", but we do not ever consider tag "B", leading to a
broken pack (assuming "B" was not otherwise selected).
Instead, we have to walk the whole chain, adding any tags we
find to the pack.

Interestingly, it doesn't seem possible to trigger this
problem with "git fetch", but you can with "git clone
--single-branch". The reason is that we generate the correct
pack when the client explicitly asks for "A" (because we do
a real reachability analysis there), and "fetch" is more
willing to do so. There are basically two cases:

1. If "C" is already a ref tip, then the client can deduce
that it needs "A" itself (via find_non_local_tags), and
will ask for it explicitly rather than relying on the
include-tag capability. Everything works.

2. If "C" is not already a ref tip, then we hope for
include-tag to send us the correct tag. But it doesn't;
it generates a broken pack. However, the next step is
to do a follow-up run of find_non_local_tags(),
followed by fetch_refs() to backfill any tags we
learned about.

In the normal case, fetch_refs() calls quickfetch(),
which does a connectivity check and sees we have no
new objects to fetch. We just write the refs.

But for the broken-pack case, the connectivity check
fails, and quickfetch will follow-up with the remote,
asking explicitly for each of the ref tips. This picks
up the missing object in a new pack.

For a regular "git clone", we are similarly OK, because we
explicitly request all of the tag refs, and get a correct
pack. But with "--single-branch", we kick in tag
auto-following via "include-tag", but do _not_ do a
follow-up backfill. We just take whatever the server sent us
via include-tag and write out tag refs for any tag objects
we were sent. So prior to c6807a4 (clone: open a shortcut
for connectivity check, 2013-05-26), we actually claimed the
clone was a success, but the result was silently
corrupted! Since c6807a4, index-pack's connectivity
check catches this case, and we correctly complain.

The included test directly checks that pack-objects does not
generate a broken pack, but also confirms that "clone
--single-branch" does not hit the bug.

Note that tag chains introduce another interesting question:
if we are packing the tag "B" but not the commit "C", should
"A" be included?

Both before and after this patch, we do not include "A",
because the initial peel_ref() check only knows about the
bottom-most level, "C". To realize that "B" is involved at
all, we would have to switch to an incremental peel, in
which we examine each tagged object, asking if it is being
packed (and including the outer tag if so).

But that runs contrary to the optimizations in peel_ref(),
which avoid accessing the objects at all, in favor of using
the value we pull from packed-refs. It's OK to walk the
whole chain once we know we're going to include the tag (we
have to access it anyway, so the effort is proportional to
the pack we're generating). But for the initial selection,
we have to look at every ref. If we're only packing a few
objects, we'd still have to parse every single referenced
tag object just to confirm that it isn't part of a tag
chain.

This could be addressed if packed-refs stored the complete
tag chain for each peeled ref (in most cases, this would be
the same cost as now, as each "chain" is only a single
link). But given the size of that project, it's out of scope
for this fix (and probably nobody cares enough anyway, as
it's such an obscure situation). This commit limits itself
to just avoiding the creation of a broken pack.

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

t5305: simplify packname handlingJeff King Mon, 5 Sep 2016 21:52:22 +0000 (17:52 -0400)

t5305: simplify packname handling

We generate a series of packfiles test-1-$pack,
test-2-$pack, with different properties and then examine
them. However we always store the packname generated by
pack-objects in the variable packname_1. This probably was
meant to be packname_2 in the second test, but it turns out
that it doesn't matter: once we are done with the first
pack, we can just keep using the same $packname variable.

So let's drop the confusing "_1" parameter. At the same
time, let's give test-1 and test-2 more descriptive names,
which can help keep them straight (note that we _could_
likewise overwrite the packfiles in each test, but by using
separate filenames, we are sure that test 2 does not
accidentally use the packfile from test 1).

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

t5305: use "git -C"Jeff King Mon, 5 Sep 2016 21:52:17 +0000 (17:52 -0400)

t5305: use "git -C"

This test unpacks objects into a separate repository, and
accesses it by setting GIT_DIR in a subshell. We can do the
same thing these days by using "git init <repo>" and "git
-C". In most cases this is shorter, though when there are
multiple commands, we may end up repeating the "-C".

However, this repetition can actually be a good thing. This
patch also fixes a bug introduced by 512477b (tests: use
"env" to run commands with temporary env-var settings,
2014-03-18). That commit essentially converted:

(GIT_DIR=...; export GIT_DIR
cmd1 &&
cmd2)

into:

(GIT_DIR=... cmd1 &&
cmd2)

which obviously loses the GIT_DIR setting for cmd2 (we never
noticed the bug because it simply runs "cmd2" in the parent
repo, which means we were simply failing to test anything
interesting). By using "git -C" rather than a subshell, it
becomes quite obvious where each command is supposed to be
running.

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

t5305: drop "dry-run" of unpack-objectsJeff King Mon, 5 Sep 2016 21:52:14 +0000 (17:52 -0400)

t5305: drop "dry-run" of unpack-objects

For each test we do a dry-run of unpack-objects, followed by
a real run, followed by confirming that it contained the
objects we expected. The dry-run is telling us nothing, as
any errors it encounters would be found in the real run.

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

t5305: move cleanup into test blockJeff King Mon, 5 Sep 2016 21:52:10 +0000 (17:52 -0400)

t5305: move cleanup into test block

We usually try to avoid doing any significant actions
outside of test blocks. Although "rm -rf" is unlikely to
either fail or to generate output, moving these to the
point of use makes it more clear that they are part of the
overall setup of "clone.git".

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

t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL envir... Elia Pinto Mon, 5 Sep 2016 10:24:44 +0000 (10:24 +0000)

t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var

Use the new GIT_TRACE_CURL environment variable instead
of the deprecated GIT_CURL_VERBOSE.

Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL enviro... Elia Pinto Mon, 5 Sep 2016 19:19:40 +0000 (19:19 +0000)

t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var

Use the new GIT_TRACE_CURL environment variable instead
of the deprecated GIT_CURL_VERBOSE.

Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib.sh: preserve GIT_TRACE_CURL from the environmentElia Pinto Mon, 5 Sep 2016 10:24:42 +0000 (10:24 +0000)

test-lib.sh: preserve GIT_TRACE_CURL from the environment

Turning on this variable can be useful when debugging http
tests. It can break a few tests in t5541 if not set
to an absolute path but it is not a variable
that the user is likely to have enabled accidentally.

Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5541-http-push-smart.sh: use the GIT_TRACE_CURL enviro... Elia Pinto Mon, 5 Sep 2016 10:24:41 +0000 (10:24 +0000)

t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var

Use the new GIT_TRACE_CURL environment variable instead
of the deprecated GIT_CURL_VERBOSE.

Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6026-merge-attr: clean up background process at end... Johannes Sixt Wed, 7 Sep 2016 06:10:41 +0000 (08:10 +0200)

t6026-merge-attr: clean up background process at end of test case

The process spawned in the hook uses the test's trash directory as CWD.
As long as it is alive, the directory cannot be removed on Windows.
Although the test succeeds, the 'test_done' that follows produces an
error message and leaves the trash directory around. Kill the process
before the test case advances.

Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9903: fix broken && chainJohannes Sixt Mon, 5 Sep 2016 19:00:47 +0000 (21:00 +0200)

t9903: fix broken && chain

We might wonder why our && chain check does not catch this case:
The && chain check uses a strange exit code with the expectation that
the second or later part of a broken && chain would not exit with this
particular code.

This expectation does not work in this case because __git_ps1, being
the first command in the second part of the broken && chain, records
the current exit code, does its work, and finally returns to the caller
with the recorded exit code. This fools our && chain check.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

introduce hex2chr() for converting two hexadecimal... René Scharfe Sat, 3 Sep 2016 15:59:20 +0000 (17:59 +0200)

introduce hex2chr() for converting two hexadecimal digits to a character

Add and use a helper function that decodes the char value of two
hexadecimal digits. It returns a negative number on error, avoids
running over the end of the given string and doesn't shift negative
values.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

compat: move strdup(3) replacement to its own fileRené Scharfe Sat, 3 Sep 2016 15:59:15 +0000 (17:59 +0200)

compat: move strdup(3) replacement to its own file

Move our implementation of strdup(3) out of compat/nedmalloc/ and
allow it to be used independently from USE_NED_ALLOCATOR. The
original nedmalloc doesn't come with strdup() and doesn't need it.
Only _users_ of nedmalloc need it, which was added when we imported
it to our compat/ hierarchy.

This reduces the difference of our copy of nedmalloc from the
original, making it easier to update, and allows for easier testing
and reusing of our version of strdup().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'sy/i18n' of git-guiJunio C Hamano Wed, 7 Sep 2016 17:23:51 +0000 (10:23 -0700)

Merge branch 'sy/i18n' of git-gui

* 'sy/i18n' of git-gui:
git-gui: update Japanese information
git-gui: update Japanese translation
git-gui: add Japanese language code
git-gui: apply po template to Japanese translation
git-gui: consistently use the same word for "blame" in Japanese
git-gui: consistently use the same word for "remote" in Japanese

git-gui: update Japanese informationSatoshi Yasushima Tue, 6 Sep 2016 16:02:21 +0000 (01:02 +0900)

git-gui: update Japanese information

Signed-off-by: Satoshi Yasushima <s.yasushima@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: update Japanese translationSatoshi Yasushima Tue, 6 Sep 2016 16:02:20 +0000 (01:02 +0900)

git-gui: update Japanese translation

Signed-off-by: Satoshi Yasushima <s.yasushima@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: add Japanese language codeSatoshi Yasushima Tue, 6 Sep 2016 16:02:19 +0000 (01:02 +0900)

git-gui: add Japanese language code

Signed-off-by: Satoshi Yasushima <s.yasushima@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: apply po template to Japanese translationSatoshi Yasushima Tue, 6 Sep 2016 16:02:18 +0000 (01:02 +0900)

git-gui: apply po template to Japanese translation

Signed-off-by: Satoshi Yasushima <s.yasushima@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: consistently use the same word for "blame... Satoshi Yasushima Tue, 6 Sep 2016 16:02:17 +0000 (01:02 +0900)

git-gui: consistently use the same word for "blame" in Japanese

Signed-off-by: Satoshi Yasushima <s.yasushima@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: consistently use the same word for "remote... Satoshi Yasushima Tue, 6 Sep 2016 16:02:16 +0000 (01:02 +0900)

git-gui: consistently use the same word for "remote" in Japanese

Signed-off-by: Satoshi Yasushima <s.yasushima@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

xdiff: remove unneeded declarationsStefan Beller Sat, 3 Sep 2016 03:16:48 +0000 (20:16 -0700)

xdiff: remove unneeded declarations

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: pt_PT: update Portuguese repository infoVasco Almeida Sat, 3 Sep 2016 12:10:32 +0000 (12:10 +0000)

l10n: pt_PT: update Portuguese repository info

Change Portuguese l10n leadership to Vasco Almeida.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>

l10n: pt_PT: update Portuguese translationVasco Almeida Sat, 3 Sep 2016 12:02:22 +0000 (12:02 +0000)

l10n: pt_PT: update Portuguese translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>

Git 2.10 v2.10.0Junio C Hamano Fri, 2 Sep 2016 16:05:47 +0000 (09:05 -0700)

Git 2.10

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

symbolic-ref -d: do not allow removal of HEADJunio C Hamano Thu, 1 Sep 2016 22:38:02 +0000 (15:38 -0700)

symbolic-ref -d: do not allow removal of HEAD

If you delete the symbolic-ref HEAD from a repository, Git no longer
considers the repository valid, and even "git symbolic-ref HEAD
refs/heads/master" would not be able to recover from that state
(although "git init" can, but that is a sure sign that you are
talking about a "broken" repository).

In the spirit similar to afe5d3d5 ("symbolic ref: refuse non-ref
targets in HEAD", 2009-01-29), forbid removal of HEAD to avoid
corrupting a repository.

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

Merge tag 'l10n-2.10.0-rnd2.2' of git://github.com... Junio C Hamano Fri, 2 Sep 2016 15:48:14 +0000 (08:48 -0700)

Merge tag 'l10n-2.10.0-rnd2.2' of git://github.com/git-l10n/git-po

l10n-2.10.0-rnd2.2

* tag 'l10n-2.10.0-rnd2.2' of git://github.com/git-l10n/git-po:
l10n: Updated Vietnamese translation for v2.10.0-rc2 (2757t)

Merge branch 'master' of https://github.com/vnwildman/gitJiang Xin Fri, 2 Sep 2016 13:29:48 +0000 (21:29 +0800)

Merge branch 'master' of https://github.com/vnwildman/git

* 'master' of https://github.com/vnwildman/git:
l10n: Updated Vietnamese translation for v2.10.0-rc2 (2757t)

submodule: avoid auto-discovery in prepare_submodule_re... Junio C Hamano Thu, 1 Sep 2016 20:51:48 +0000 (13:51 -0700)

submodule: avoid auto-discovery in prepare_submodule_repo_env()

The function is used to set up the environment variable used in a
subprocess we spawn in a submodule directory. The callers set up a
child_process structure, find the working tree path of one submodule
and set .dir field to it, and then use start_command() API to spawn
the subprocess like "status", "fetch", etc.

When this happens, we expect that the ".git" (either a directory or
a gitfile that points at the real location) in the current working
directory of the subprocess MUST be the repository for the submodule.

If this ".git" thing is a corrupt repository, however, because
prepare_submodule_repo_env() unsets GIT_DIR and GIT_WORK_TREE, the
subprocess will see ".git", thinks it is not a repository, and
attempt to find one by going up, likely to end up in finding the
repository of the superproject. In some codepaths, this will cause
a command run with the "--recurse-submodules" option to recurse
forever.

By exporting GIT_DIR=.git, disable the auto-discovery logic in the
subprocess, which would instead stop it and report an error.

The test illustrates existing problems in a few callsites of this
function. Without this fix, "git fetch --recurse-submodules", "git
status" and "git diff" keep recursing forever.

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

diff: teach diff to display submodule difference with... Jacob Keller Wed, 31 Aug 2016 23:27:25 +0000 (16:27 -0700)

diff: teach diff to display submodule difference with an inline diff

Teach git-diff and friends a new format for displaying the difference
of a submodule. The new format is an inline diff of the contents of the
submodule between the commit range of the update. This allows the user
to see the actual code change caused by a submodule update.

Add tests for the new format and option.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule: refactor show_submodule_summary with helper... Jacob Keller Wed, 31 Aug 2016 23:27:24 +0000 (16:27 -0700)

submodule: refactor show_submodule_summary with helper function

A future patch is going to add a new submodule diff format which
displays an inline diff of the submodule changes. To make this easier,
and to ensure that both submodule diff formats use the same initial
header, factor out show_submodule_header() function which will print the
current submodule header line, and then leave the show_submodule_summary
function to lookup and print the submodule log format.

This does create one format change in that "(revision walker failed)"
will now be displayed on its own line rather than as part of the message
because we no longer perform this step directly in the header display
flow. However, this is a rare case as most causes of the failure will be
due to a missing commit which we already check for and avoid previously.
flow. However, this is a rare case and shouldn't impact much.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule: convert show_submodule_summary to use struct... Jacob Keller Wed, 31 Aug 2016 23:27:23 +0000 (16:27 -0700)

submodule: convert show_submodule_summary to use struct object_id *

Since we're going to be changing this function in a future patch, lets
go ahead and convert this to use object_id now.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

allow do_submodule_path to work even if submodule isn... Jacob Keller Wed, 31 Aug 2016 23:27:22 +0000 (16:27 -0700)

allow do_submodule_path to work even if submodule isn't checked out

Currently, do_submodule_path will attempt locating the .git directory by
using read_gitfile on <path>/.git. If this fails it just assumes the
<path>/.git is actually a git directory.

This is good because it allows for handling submodules which were cloned
in a regular manner first before being added to the superproject.

Unfortunately this fails if the <path> is not actually checked out any
longer, such as by removing the directory.

Fix this by checking if the directory we found is actually a gitdir. In
the case it is not, attempt to lookup the submodule configuration and
find the name of where it is stored in the .git/modules/ directory of
the superproject.

If we can't locate the submodule configuration, this might occur because
for example a submodule gitlink was added but the corresponding
.gitmodules file was not properly updated. A die() here would not be
pleasant to the users of submodule diff formats, so instead, modify
do_submodule_path() to return an error code:

- git_pathdup_submodule() returns NULL when we fail to find a path.
- strbuf_git_path_submodule() propagates the error code to the caller.

Modify the callers of these functions to check the error code and fail
properly. This ensures we don't attempt to use a bad path that doesn't
match the corresponding submodule.

Because this change fixes add_submodule_odb() to work even if the
submodule is not checked out, update the wording of the submodule log
diff format to correctly display that the submodule is "not initialized"
instead of "not checked out"

Add tests to ensure this change works as expected.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: prepare for additional submodule formatsJacob Keller Wed, 31 Aug 2016 23:27:21 +0000 (16:27 -0700)

diff: prepare for additional submodule formats

A future patch will add a new format for displaying the difference of
a submodule. Make it easier by changing how we store the current
selected format. Replace the DIFF_OPT flag with an enumeration, as each
format will be mutually exclusive.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

graph: add support for --line-prefix on all graph-aware... Jacob Keller Wed, 31 Aug 2016 23:27:20 +0000 (16:27 -0700)

graph: add support for --line-prefix on all graph-aware output

Add an extension to git-diff and git-log (and any other graph-aware
displayable output) such that "--line-prefix=<string>" will print the
additional line-prefix on every line of output.

To make this work, we have to fix a few bugs in the graph API that force
graph_show_commit_msg to be used only when you have a valid graph.
Additionally, we extend the default_diff_output_prefix handler to work
even when no graph is enabled.

This is somewhat of a hack on top of the graph API, but I think it
should be acceptable here.

This will be used by a future extension of submodule display which
displays the submodule diff as the actual diff between the pre and post
commit in the submodule project.

Add some tests for both git-log and git-diff to ensure that the prefix
is honored correctly.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff.c: remove output_prefix_length fieldJunio C Hamano Wed, 31 Aug 2016 23:27:19 +0000 (16:27 -0700)

diff.c: remove output_prefix_length field

"diff/log --stat" has a logic that determines the display columns
available for the diffstat part of the output and apportions it for
pathnames and diffstat graph automatically.

5e71a84a (Add output_prefix_length to diff_options, 2012-04-16)
added the output_prefix_length field to diff_options structure to
allow this logic to subtract the display columns used for the
history graph part from the total "terminal width"; this matters
when the "git log --graph -p" option is in use.

The field must be set to the number of display columns needed to
show the output from the output_prefix() callback, which is error
prone. As there is only one user of the field, and the user has the
actual value of the prefix string, let's get rid of the field and
have the user count the display width itself.

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

cache: add empty_tree_oid object and helper functionJacob Keller Wed, 31 Aug 2016 23:27:18 +0000 (16:27 -0700)

cache: add empty_tree_oid object and helper function

Similar to is_null_oid(), and is_empty_blob_sha1() add an
empty_tree_oid along with helper function is_empty_tree_oid(). For
completeness, also add an "is_empty_tree_sha1()",
"is_empty_blob_sha1()", "is_empty_tree_oid()" and "is_empty_blob_oid()"
helpers.

To ensure we only get one singleton, implement EMPTY_BLOB_SHA1_BIN as
simply getting the hash of empty_blob_oid structure.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

color_parse_mem: initialize "struct color" temporaryJeff King Wed, 31 Aug 2016 03:43:07 +0000 (23:43 -0400)

color_parse_mem: initialize "struct color" temporary

Compiling color.c with gcc 6.2.0 using -O3 produces some
-Wmaybe-uninitialized false positives:

color.c: In function ‘color_parse_mem’:
color.c:189:10: warning: ‘bg.blue’ may be used uninitialized in this function [-Wmaybe-uninitialized]
out += xsnprintf(out, len, "%c8;2;%d;%d;%d", type,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c->red, c->green, c->blue);
~~~~~~~~~~~~~~~~~~~~~~~~~~
color.c:208:15: note: ‘bg.blue’ was declared here
struct color bg = { COLOR_UNSPECIFIED };
^~
[ditto for bg.green, bg.red, fg.blue, etc]

This is doubly confusing, because the declaration shows it
being initialized! Even though we do not explicitly
initialize the color components, an incomplete initializer
sets the unmentioned members to zero.

What the warning doesn't show is that we later do this:

struct color c;
if (!parse_color(&c, ...)) {
if (fg.type == COLOR_UNSPECIFIED)
fg = c;
...
}

gcc is clever enough to realize that a struct assignment
from an uninitialized variable taints the destination. But
unfortunately it's _not_ clever enough to realize that we
only look at those members when type is set to COLOR_RGB, in
which case they are always initialized.

With -O2, gcc does not look into parse_color() and must
assume that "c" emerges fully initialized. With -O3, it
inlines parse_color(), and learns just enough to get
confused.

We can silence the false positive by initializing the
temporary "c". This also future-proofs us against
violating the type assumptions (the result would probably
still be buggy, but in a deterministic way).

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

error_errno: use constant return similar to error()Jeff King Wed, 31 Aug 2016 03:41:22 +0000 (23:41 -0400)

error_errno: use constant return similar to error()

Commit e208f9c (make error()'s constant return value more
visible, 2012-12-15) introduced some macro trickery to make
the constant return from error() more visible to callers,
which in turn can help gcc produce better warnings (and
possibly even better code).

Later, fd1d672 (usage.c: add warning_errno() and
error_errno(), 2016-05-08) introduced another variant, and
subsequent commits converted some uses of error() to
error_errno(), losing the magic from e208f9c for those
sites.

As a result, compiling vcs-svn/svndiff.c with "gcc -O3"
produces -Wmaybe-uninitialized false positives (at least
with gcc 6.2.0). Let's give error_errno() the same
treatment, which silences these warnings.

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

A few more fixes before the final 2.10Junio C Hamano Wed, 31 Aug 2016 17:21:05 +0000 (10:21 -0700)

A few more fixes before the final 2.10

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

Merge tag 'l10n-2.10.0-rnd2' of git://github.com/git... Junio C Hamano Wed, 31 Aug 2016 17:04:14 +0000 (10:04 -0700)

Merge tag 'l10n-2.10.0-rnd2' of git://github.com/git-l10n/git-po

l10n-2.10.0-rnd2

* tag 'l10n-2.10.0-rnd2' of git://github.com/git-l10n/git-po:
l10n: zh_CN: for git v2.10.0 l10n round 2
l10n: ca.po: update translation
l10n: fr.po v2.10.0-rc2
l10n: sv.po: Update Swedish translation (2757t0f0u)
l10n: git.pot: v2.10.0 round 2 (12 new, 44 removed)
l10n: Updated Vietnamese translation for v2.10.0 (2789t)
l10n: pt_PT: update Portuguese translation
l10n: pt_PT: merge git.pot
l10n: ko.po: Update Korean translation
l10n: git.pot: v2.10.0 round 1 (248 new, 56 removed)

Merge branch 'ls/packet-line-protocol-doc-fix'Junio C Hamano Wed, 31 Aug 2016 17:03:51 +0000 (10:03 -0700)

Merge branch 'ls/packet-line-protocol-doc-fix'

Correct an age-old calco (is that a typo-like word for calc)
in the documentation.

* ls/packet-line-protocol-doc-fix:
pack-protocol: fix maximum pkt-line size

Merge branch 'mh/blame-worktree'Junio C Hamano Wed, 31 Aug 2016 17:03:50 +0000 (10:03 -0700)

Merge branch 'mh/blame-worktree'

* mh/blame-worktree:
blame: fix segfault on untracked files

Merge branch 'kw/patch-ids-optim'Junio C Hamano Wed, 31 Aug 2016 17:03:49 +0000 (10:03 -0700)

Merge branch 'kw/patch-ids-optim'

* kw/patch-ids-optim:
p3400: make test script executable

diff-highlight: avoid highlighting combined diffsJeff King Wed, 31 Aug 2016 05:05:38 +0000 (01:05 -0400)

diff-highlight: avoid highlighting combined diffs

The algorithm in diff-highlight only understands how to look
at two sides of a diff; it cannot correctly handle combined
diffs with multiple preimages. Often highlighting does not
trigger at all for these diffs because the line counts do
not match up. E.g., if we see:

- ours
-theirs
++resolved

we would not bother highlighting; it naively looks like a
single line went away, and then a separate hunk added
another single line.

But of course there are exceptions. E.g., if the other side
deleted the line, we might see:

- ours
++resolved

which looks like we dropped " ours" and added "+resolved".
This is only a small highlighting glitch (we highlight the
space and the "+" along with the content), but it's also the
tip of the iceberg. Even if we learned to find the true
content here (by noticing we are in a 3-way combined diff
and marking _two_ characters from the front of the line as
uninteresting), there are other more complicated cases where
we really do need to handle a 3-way hunk.

Let's just punt for now; we can recognize combined diffs by
the presence of extra "@" symbols in the hunk header, and
treat them as non-diff content.

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