gitweb.git
env--helper: mark a file-local symbol as staticRamsay Jones Thu, 11 Jul 2019 17:06:13 +0000 (18:06 +0100)

env--helper: mark a file-local symbol as static

Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: make GIT_TEST_FAIL_PREREQS a booleanÆvar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:12 +0000 (12:18 +0200)

tests: make GIT_TEST_FAIL_PREREQS a boolean

Change the GIT_TEST_FAIL_PREREQS variable from being "non-empty?" to
being a more standard boolean variable. I recently added the variable
in dfe1a17df9 ("tests: add a special setup where prerequisites fail",
2019-05-13), having to add another "non-empty?" special-case is what
prompted me to write the "git env--helper" utility being used here.

Converting this one is a bit tricky since we use it so early and
frequently in the guts of the test code itself, so let's set a
GIT_TEST_FAIL_PREREQS_INTERNAL which can be tested with the old "test
-n" for the purposes of the shell code, and change the user-exposed
and documented GIT_TEST_FAIL_PREREQS variable to a boolean.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: replace test_tristate with "git env--helper"Ævar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:11 +0000 (12:18 +0200)

tests: replace test_tristate with "git env--helper"

The test_tristate helper introduced in 83d842dc8c ("tests: turn on
network daemon tests by default", 2014-02-10) can now be better
implemented with "git env--helper" to give the variables in question
the standard boolean behavior.

The reason for the "tristate" was to have all of false/true/auto,
where "auto" meant either "false" or "true" depending on what the
fallback was. With the --default option to "git env--helper" we can
simply have e.g. GIT_TEST_HTTPD where we know if it's true because the
user asked explicitly ("true"), or true implicitly ("auto").

This breaks backwards compatibility for explicitly setting "auto" for
these variables, but I don't think anyone cares. That was always
intended to be internal.

This means the test_normalize_bool() code in test-lib-functions.sh
goes away in addition to test_tristate(). We still need the
test_skip_or_die() helper, but now it takes the variable name instead
of the value, and uses "git env--bool" to distinguish a default "true"
from an explicit "true" (in those "explicit true" cases we want to
fail the test in question).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests README: re-flow a previously changed paragraphÆvar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:10 +0000 (12:18 +0200)

tests README: re-flow a previously changed paragraph

A previous change to the "GIT_TEST_GETTEXT_POISON" variable left this
paragraph needing to be re-flowed. Let's do that in this separate
change to make it easy to see that there's no change here when viewed
with "--word-diff".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: make GIT_TEST_GETTEXT_POISON a booleanÆvar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:09 +0000 (12:18 +0200)

tests: make GIT_TEST_GETTEXT_POISON a boolean

Change the GIT_TEST_GETTEXT_POISON variable from being "non-empty?" to
being a more standard boolean variable.

Since it needed to be checked in both C code and shellscript (via test
-n) it was one of the remaining shellscript-like variables. Now that
we have "env--helper" we can change that.

There's a couple of tricky edge cases that arise because we're using
git_env_bool() early, and the config-reading "env--helper".

If GIT_TEST_GETTEXT_POISON is set to an invalid value die_bad_number()
will die, but to do so it would usually call gettext(). Let's detect
the special case of GIT_TEST_GETTEXT_POISON and always emit that
message in the C locale, lest we infinitely loop.

As seen in the updated tests in t0017-env-helper.sh there's also a
caveat related to "env--helper" needing to read the config for trace2
purposes.

Since the C_LOCALE_OUTPUT prerequisite is lazy and relies on
"env--helper" we could get invalid results if we failed to read the
config (e.g. because we'd loop on includes) when combined with
e.g. "test_i18ngrep" wanting to check with "env--helper" if
GIT_TEST_GETTEXT_POISON was true or not.

I'm crossing my fingers and hoping that a test similar to the one I
removed in the earlier "config tests: simplify include cycle test"
change in this series won't happen again, and testing for this
explicitly in "env--helper"'s own tests.

This change breaks existing uses of
e.g. GIT_TEST_GETTEXT_POISON=YesPlease, which we've documented in
po/README and other places. As noted in [1] we might want to consider
also accepting "YesPlease" in "env--helper" as a special-case.

But as the lack of uproar over 6cdccfce1e ("i18n: make GETTEXT_POISON
a runtime option", 2018-11-08) demonstrates the audience for this
option is a really narrow set of git developers, who shouldn't have
much trouble modifying their test scripts, so I think it's better to
deal with that minor headache now and make all the relevant GIT_TEST_*
variables boolean in the same way than carry the "YesPlease"
special-case forward.

1. https://public-inbox.org/git/xmqqtvckm3h8.fsf@gitster-ct.c.googlers.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6040 test: stop using global "script" variableÆvar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:08 +0000 (12:18 +0200)

t6040 test: stop using global "script" variable

Change test code added in c0234b2ef6 ("stat_tracking_info(): clear
object flags used during counting", 2008-07-03) to stop using the
"script" variable also used for lazy prerequisites in
test-lib-functions.sh.

Since this test uses test_i18ncmp and expects to use its own "script"
variable twice it implicitly depends on the C_LOCALE_OUTPUT
prerequisite not being a lazy prerequisite. A follow-up change will
make it a lazy prerequisite, so we must remove this landmine before
inadvertently stepping on it as we make that change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config.c: refactor die_bad_number() to not call gettext... Ævar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:07 +0000 (12:18 +0200)

config.c: refactor die_bad_number() to not call gettext() early

Prepare die_bad_number() for a change to specially handle
GIT_TEST_GETTEXT_POISON calling git_env_bool() by making
die_bad_number() not call gettext() early, which would in turn call
git_env_bool().

There's no meaningful change here yet, just a re-arrangement of the
current code to make that subsequent change easier to read.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

env--helper: new undocumented builtin wrapping git_env_*()Ævar Arnfjörð Bjarmason Fri, 21 Jun 2019 10:18:06 +0000 (12:18 +0200)

env--helper: new undocumented builtin wrapping git_env_*()

We have many GIT_TEST_* variables that accept a <boolean> because
they're implemented in C, and then some that take <non-empty?> because
they're implemented at least partially in shellscript.

Add a helper that wraps git_env_bool() and git_env_ulong() as the
first step in fixing this. This isn't being added as a test-tool mode
because some of these are used outside the test suite.

Part of what this tool does can be done via a trick with "git config"
added in 83d842dc8c ("tests: turn on network daemon tests by default",
2014-02-10) for test_tristate(), i.e.:

git -c magic.variable="$1" config --bool magic.variable 2>/dev/null

But as subsequent changes will show being able to pass along the
default value makes all the difference, and we'll be able to replace
test_tristate() itself with that.

The --type=bool option will be used by subsequent patches, but not
--type=ulong. I figured it was easy enough to add it & test for it so
I left it in so we'd have wrappers for both git_env_*() functions, and
to have a template to make it obvious how we'd add --type=int etc. if
it's needed in the future.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config tests: simplify include cycle testÆvar Arnfjörð Bjarmason Thu, 20 Jun 2019 21:09:08 +0000 (23:09 +0200)

config tests: simplify include cycle test

Simplify an overly verbose test added in 9b25a0b52e ("config: add
include directive", 2012-02-06). The "expect" file was never used, and
by using .gitconfig it's not as intuitive to reproduce this manually
with "-d" as some other tests, since HOME needs to be set in the
environment.

Also remove the use of test_i18ngrep added in a769bfc74f ("config.c:
mark more strings for translation", 2018-07-21) in favor of overriding
the GIT_TEST_GETTEXT_POISON value.

Using the i18n test wrappers hasn't been needed since my
6cdccfce1e ("i18n: make GETTEXT_POISON a runtime option", 2018-11-08).
As a follow-up change to the yet-to-be-added t0017-env-helper.sh will
show, doing it this way can hide a regression when combined with
trace2's early config reading. That early config reading was added in
bce9db6de9 ("trace2: use system/global config for default trace2
settings", 2019-04-15).

So let's remove the testing for that potential regression here, I'll
instead add it explicitly to t0017-env-helper.sh in a follow-up
change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

The second batchJunio C Hamano Mon, 17 Jun 2019 17:16:10 +0000 (10:16 -0700)

The second batch

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

Merge branch 'xl/record-partial-clone-origin'Junio C Hamano Mon, 17 Jun 2019 17:15:20 +0000 (10:15 -0700)

Merge branch 'xl/record-partial-clone-origin'

When creating a partial clone, the object filtering criteria is
recorded for the origin of the clone, but this incorrectly used a
hardcoded name "origin" to name that remote; it has been corrected
to honor the "--origin <name>" option.

* xl/record-partial-clone-origin:
clone: respect user supplied origin name when setting up partial clone

Merge branch 'pb/request-pull-verify-remote-ref'Junio C Hamano Mon, 17 Jun 2019 17:15:20 +0000 (10:15 -0700)

Merge branch 'pb/request-pull-verify-remote-ref'

"git request-pull" learned to warn when the ref we ask them to pull
from in the local repository and in the published repository are
different.

* pb/request-pull-verify-remote-ref:
request-pull: warn if the remote object is not the same as the local one
request-pull: quote regex metacharacters in local ref

Merge branch 'mm/p4-unshelve-windows-fix'Junio C Hamano Mon, 17 Jun 2019 17:15:19 +0000 (10:15 -0700)

Merge branch 'mm/p4-unshelve-windows-fix'

The command line to invoke a "git cat-file" command from inside
"git p4" was not properly quoted to protect a caret and running a
broken command on Windows, which has been corrected.

* mm/p4-unshelve-windows-fix:
p4 unshelve: fix "Not a valid object name HEAD0" on Windows

Merge branch 'po/git-help-on-git-itself'Junio C Hamano Mon, 17 Jun 2019 17:15:19 +0000 (10:15 -0700)

Merge branch 'po/git-help-on-git-itself'

"git help git" was hard to discover (well, at least for some
people).

* po/git-help-on-git-itself:
Doc: git.txt: remove backticks from link and add git-scm.com/docs
git.c: show usage for accessing the git(1) help page

Merge branch 'es/first-contrib-tutorial'Junio C Hamano Mon, 17 Jun 2019 17:15:18 +0000 (10:15 -0700)

Merge branch 'es/first-contrib-tutorial'

A new tutorial targetting specifically aspiring git-core
developers.

* es/first-contrib-tutorial:
doc: add some nit fixes to MyFirstContribution
documentation: add anchors to MyFirstContribution
documentation: add tutorial for first contribution

Merge branch 'bb/unicode-12.1-reiwa'Junio C Hamano Mon, 17 Jun 2019 17:15:18 +0000 (10:15 -0700)

Merge branch 'bb/unicode-12.1-reiwa'

Update to Unicode 12.1 width table.

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

Merge branch 'sw/git-p4-unshelve-branched-files'Junio C Hamano Mon, 17 Jun 2019 17:15:18 +0000 (10:15 -0700)

Merge branch 'sw/git-p4-unshelve-branched-files'

"git p4" update.

* sw/git-p4-unshelve-branched-files:
git-p4: allow unshelving of branched files

Merge branch 'js/fsmonitor-unflake'Junio C Hamano Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)

Merge branch 'js/fsmonitor-unflake'

The data collected by fsmonitor was not properly written back to
the on-disk index file, breaking t7519 tests occasionally, which
has been corrected.

* js/fsmonitor-unflake:
mark_fsmonitor_valid(): mark the index as changed if needed
fill_stat_cache_info(): prepare for an fsmonitor fix

Merge branch 'ds/topo-traversal-using-commit-graph'Junio C Hamano Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)

Merge branch 'ds/topo-traversal-using-commit-graph'

Prepare use of reachability index in topological walker that works
on a range (A..B).

* ds/topo-traversal-using-commit-graph:
revision: keep topo-walk free of unintersting commits
revision: use generation for A..B --topo-order queries

Merge branch 'bl/userdiff-octave'Junio C Hamano Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)

Merge branch 'bl/userdiff-octave'

The pattern "git diff/grep" use to extract funcname and words
boundary for Matlab has been extend to cover Octave, which is more
or less equivalent.

* bl/userdiff-octave:
userdiff: fix grammar and style issues
userdiff: add Octave

Merge branch 'ba/clone-remote-submodules'Junio C Hamano Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)

Merge branch 'ba/clone-remote-submodules'

"git clone --recurse-submodules" learned to set up the submodules
to ignore commit object names recorded in the superproject gitlink
and instead use the commits that happen to be at the tip of the
remote-tracking branches from the get-go, by passing the new
"--remote-submodules" option.

* ba/clone-remote-submodules:
clone: add `--remote-submodules` flag

Merge branch 'vv/merge-squash-with-explicit-commit'Junio C Hamano Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)

Merge branch 'vv/merge-squash-with-explicit-commit'

"git merge --squash" is designed to update the working tree and the
index without creating the commit, and this cannot be countermanded
by adding the "--commit" option; the command now refuses to work
when both options are given.

* vv/merge-squash-with-explicit-commit:
merge: refuse --commit with --squash

Merge branch 'js/bundle-verify-require-object-store'Junio C Hamano Mon, 17 Jun 2019 17:15:16 +0000 (10:15 -0700)

Merge branch 'js/bundle-verify-require-object-store'

"git bundle verify" needs to see if prerequisite objects exist in
the receiving repository, but the command did not check if we are
in a repository upfront, which has been corrected.

* js/bundle-verify-require-object-store:
bundle verify: error out if called without an object database

Merge branch 'js/bisect-helper-check-get-oid-return... Junio C Hamano Mon, 17 Jun 2019 17:15:16 +0000 (10:15 -0700)

Merge branch 'js/bisect-helper-check-get-oid-return-value'

Code cleanup.

* js/bisect-helper-check-get-oid-return-value:
bisect--helper: verify HEAD could be parsed before continuing

Merge branch 'jk/am-i-resolved-fix'Junio C Hamano Mon, 17 Jun 2019 17:15:15 +0000 (10:15 -0700)

Merge branch 'jk/am-i-resolved-fix'

"git am -i --resolved" segfaulted after trying to see a commit as
if it were a tree, which has been corrected.

* jk/am-i-resolved-fix:
am: fix --interactive HEAD tree resolution
am: drop tty requirement for --interactive
am: read interactive input from stdin
am: simplify prompt response handling

Merge branch 'jk/HEAD-symref-in-xfer-namespaces'Junio C Hamano Mon, 17 Jun 2019 17:15:15 +0000 (10:15 -0700)

Merge branch 'jk/HEAD-symref-in-xfer-namespaces'

The server side support for "git fetch" used to show incorrect
value for the HEAD symbolic ref when the namespace feature is in
use, which has been corrected.

* jk/HEAD-symref-in-xfer-namespaces:
upload-pack: strip namespace from symref data

Merge branch 'ew/server-info-remove-crufts'Junio C Hamano Mon, 17 Jun 2019 17:15:15 +0000 (10:15 -0700)

Merge branch 'ew/server-info-remove-crufts'

"git update-server-info" used to leave stale packfiles in its
output, which has been corrected.

* ew/server-info-remove-crufts:
server-info: do not list unlinked packs

Merge branch 'es/grep-require-name-when-needed'Junio C Hamano Mon, 17 Jun 2019 17:15:14 +0000 (10:15 -0700)

Merge branch 'es/grep-require-name-when-needed'

More parameter validation.

* es/grep-require-name-when-needed:
grep: fail if call could output and name is null

Merge branch 'es/git-debugger-doc'Junio C Hamano Mon, 17 Jun 2019 17:15:14 +0000 (10:15 -0700)

Merge branch 'es/git-debugger-doc'

Doc update.

* es/git-debugger-doc:
doc: hint about GIT_DEBUGGER in CodingGuidelines

Merge branch 'ds/object-info-for-prefetch-fix'Junio C Hamano Mon, 17 Jun 2019 17:15:14 +0000 (10:15 -0700)

Merge branch 'ds/object-info-for-prefetch-fix'

Code cleanup and futureproof.

* ds/object-info-for-prefetch-fix:
sha1-file: split OBJECT_INFO_FOR_PREFETCH

The first batch after 2.22Junio C Hamano Thu, 13 Jun 2019 20:23:03 +0000 (13:23 -0700)

The first batch after 2.22

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

Merge branch 'pw/rebase-edit-message-for-replayed-merge'Junio C Hamano Thu, 13 Jun 2019 20:19:43 +0000 (13:19 -0700)

Merge branch 'pw/rebase-edit-message-for-replayed-merge'

A "merge -c" instruction during "git rebase --rebase-merges" should
give the user a chance to edit the log message, even when there is
otherwise no need to create a new merge and replace the existing
one (i.e. fast-forward instead), but did not. Which has been
corrected.

* pw/rebase-edit-message-for-replayed-merge:
rebase -r: always reword merge -c

Merge branch 'ab/deprecate-R-for-dynpath'Junio C Hamano Thu, 13 Jun 2019 20:19:43 +0000 (13:19 -0700)

Merge branch 'ab/deprecate-R-for-dynpath'

The way of specifying the path to find dynamic libraries at runtime
has been simplified. The old default to pass -R/path/to/dir has been
replaced with the new default to pass -Wl,-rpath,/path/to/dir,
which is the more recent GCC uses. Those who need to build with an
old GCC can still use "CC_LD_DYNPATH=-R"

* ab/deprecate-R-for-dynpath:
Makefile: remove the NO_R_TO_GCC_LINKER flag

Merge branch 'mh/import-transport-fd-fix'Junio C Hamano Thu, 13 Jun 2019 20:19:43 +0000 (13:19 -0700)

Merge branch 'mh/import-transport-fd-fix'

The ownership rule for the file descriptor to fast-import remote
backend was mixed up, leading to unrelated file descriptor getting
closed, which has been fixed.

* mh/import-transport-fd-fix:
Use xmmap_gently instead of xmmap in use_pack
dup() the input fd for fast-import used for remote helpers

Merge branch 'ew/update-server-info'Junio C Hamano Thu, 13 Jun 2019 20:19:42 +0000 (13:19 -0700)

Merge branch 'ew/update-server-info'

"git update-server-info" learned not to rewrite the file with the
same contents.

* ew/update-server-info:
update-server-info: avoid needless overwrites

Merge branch 'jk/help-unknown-ref-fix'Junio C Hamano Thu, 13 Jun 2019 20:19:42 +0000 (13:19 -0700)

Merge branch 'jk/help-unknown-ref-fix'

Improve the code to show args with potential typo that cannot be
interpreted as a commit-ish.

* jk/help-unknown-ref-fix:
help_unknown_ref(): check for refname ambiguity
help_unknown_ref(): duplicate collected refnames

Merge branch 'dl/format-patch-notes-config'Junio C Hamano Thu, 13 Jun 2019 20:19:42 +0000 (13:19 -0700)

Merge branch 'dl/format-patch-notes-config'

"git format-patch" learns a configuration to set the default for
its --notes=<ref> option.

* dl/format-patch-notes-config:
format-patch: teach format.notes config option
git-format-patch.txt: document --no-notes option

Merge branch 'nd/merge-quit'Junio C Hamano Thu, 13 Jun 2019 20:19:41 +0000 (13:19 -0700)

Merge branch 'nd/merge-quit'

"git merge" learned "--quit" option that cleans up the in-progress
merge while leaving the working tree and the index still in a mess.

* nd/merge-quit:
merge: add --quit
merge: remove drop_save() in favor of remove_merge_branch_state()

Merge branch 'ab/fail-prereqs-in-test'Junio C Hamano Thu, 13 Jun 2019 20:19:41 +0000 (13:19 -0700)

Merge branch 'ab/fail-prereqs-in-test'

Developer support to emulate unsatisfied prerequisites in tests to
ensure that the remainer of the tests still succeeds when tests
with prerequisites are skipped.

* ab/fail-prereqs-in-test:
tests: add a special setup where prerequisites fail

Merge branch 'nd/corrupt-worktrees'Junio C Hamano Thu, 13 Jun 2019 20:19:41 +0000 (13:19 -0700)

Merge branch 'nd/corrupt-worktrees'

"git worktree add" used to fail when another worktree connected to
the same repository was corrupt, which has been corrected.

* nd/corrupt-worktrees:
worktree add: be tolerant of corrupt worktrees

Merge branch 'js/rebase-cleanup'Junio C Hamano Thu, 13 Jun 2019 20:19:40 +0000 (13:19 -0700)

Merge branch 'js/rebase-cleanup'

Update supporting parts of "git rebase" to remove code that should
no longer be used.

* js/rebase-cleanup:
rebase: fold git-rebase--common into the -p backend
sequencer: the `am` and `rebase--interactive` scripts are gone
.gitignore: there is no longer a built-in `git-rebase--interactive`
t3400: stop referring to the scripted rebase
Drop unused git-rebase--am.sh

Merge branch 'nd/worktree-name-sanitization'Junio C Hamano Thu, 13 Jun 2019 20:19:40 +0000 (13:19 -0700)

Merge branch 'nd/worktree-name-sanitization'

In recent versions of Git, per-worktree refs are exposed in
refs/worktrees/<wtname>/ hierarchy, which means that worktree names
must be a valid refname component. The code now sanitizes the names
given to worktrees, to make sure these refs are well-formed.

* nd/worktree-name-sanitization:
worktree add: sanitize worktree names

Merge branch 'en/fast-export-encoding'Junio C Hamano Thu, 13 Jun 2019 20:19:39 +0000 (13:19 -0700)

Merge branch 'en/fast-export-encoding'

The "git fast-export/import" pair has been taught to handle commits
with log messages in encoding other than UTF-8 better.

* en/fast-export-encoding:
fast-export: do automatic reencoding of commit messages only if requested
fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
fast-export: avoid stripping encoding header if we cannot reencode
fast-import: support 'encoding' commit header
t9350: fix encoding test to actually test reencoding

Merge branch 'jk/unused-params-final-batch'Junio C Hamano Thu, 13 Jun 2019 20:19:34 +0000 (13:19 -0700)

Merge branch 'jk/unused-params-final-batch'

* jk/unused-params-final-batch:
verify-commit: simplify parameters to run_gpg_verify()
show-branch: drop unused parameter from show_independent()
rev-list: drop unused void pointer from finish_commit()
remove_all_fetch_refspecs(): drop unused "remote" parameter
receive-pack: drop unused "commands" from prepare_shallow_update()
pack-objects: drop unused rev_info parameters
name-rev: drop unused parameters from is_better_name()
mktree: drop unused length parameter
wt-status: drop unused status parameter
read-cache: drop unused parameter from threaded load
clone: drop dest parameter from copy_alternates()
submodule: drop unused prefix parameter from some functions
builtin: consistently pass cmd_* prefix to parse_options
cmd_{read,write}_tree: rename "unused" variable that is used

Merge branch 'sb/format-patch-base-patch-id-fix'Junio C Hamano Thu, 13 Jun 2019 20:18:46 +0000 (13:18 -0700)

Merge branch 'sb/format-patch-base-patch-id-fix'

The "--base" option of "format-patch" computed the patch-ids for
prerequisite patches in an unstable way, which has been updated to
compute in a way that is compatible with "git patch-id --stable".

* sb/format-patch-base-patch-id-fix:
format-patch: make --base patch-id output stable
format-patch: inform user that patch-id generation is unstable

Merge branch 'nd/init-relative-template-fix'Junio C Hamano Thu, 13 Jun 2019 20:18:46 +0000 (13:18 -0700)

Merge branch 'nd/init-relative-template-fix'

A relative pathname given to "git init --template=<path> <repo>"
ought to be relative to the directory "git init" gets invoked in,
but it instead was made relative to the repository, which has been
corrected.

* nd/init-relative-template-fix:
init: make --template path relative to $CWD

Merge branch 'ab/send-email-transferencoding-fix'Junio C Hamano Thu, 13 Jun 2019 20:18:46 +0000 (13:18 -0700)

Merge branch 'ab/send-email-transferencoding-fix'

Since "git send-email" learned to take 'auto' as the value for the
transfer-encoding, it by mistake stopped honoring the values given
to the configuration variables sendemail.transferencoding and/or
sendemail.<ident>.transferencoding. This has been corrected to
(finally) redoing the order of setting the default, reading the
configuration and command line options.

* ab/send-email-transferencoding-fix:
send-email: fix regression in sendemail.identity parsing
send-email: document --no-[to|cc|bcc]
send-email: fix broken transferEncoding tests
send-email: remove cargo-culted multi-patch pattern in tests
send-email: do defaults -> config -> getopt in that order
send-email: rename the @bcclist variable for consistency
send-email: move the read_config() function above getopts

Git 2.22 v2.22.0Junio C Hamano Fri, 7 Jun 2019 16:39:21 +0000 (09:39 -0700)

Git 2.22

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

Merge tag 'l10n-2.22.0-rnd3' of git://github.com/git... Junio C Hamano Fri, 7 Jun 2019 16:36:32 +0000 (09:36 -0700)

Merge tag 'l10n-2.22.0-rnd3' of git://github.com/git-l10n/git-po

l10n-2.22.0-rnd3

* tag 'l10n-2.22.0-rnd3' of git://github.com/git-l10n/git-po: (25 commits)
l10n: fr.po: Review French translation
l10n: de.po: Update German translation
l10n: de.po: improve description of 'git reset --quiet'
l10n: TEAMS: Change German translation team leader
l10n: bg.po: Updated Bulgarian translation (4581t)
l10n: zh_CN: Revision for git v2.22.0 l10n
l10n: zh_CN: for git v2.22.0 l10n round 1~3
l10n: es: 2.22.0 round 3
l10n: it.po: Updated Italian translation
l10n: fr v2.22.0 rnd 3
l10n: vi.po(4581t): Updated Vietnamese translation for v2.22.0 round 3
l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)
l10n: es: 2.22.0 round 2
l10n: bg.po: Updated Bulgarian translation (4580t)
l10n: vi.po(4580t): Updated Vietnamese translation for v2.22.0 round 2
l10n: fr.po v2.22.0 round 2
l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)
l10n: bg.po: Updated Bulgarian translation (4577t)
l10n: es: 2.22.0 round 1
l10n: vi.po(4577t): Updated Vietnamese translation for v2.22.0 round 1
...

Merge branch 'fr_review' of git://github.com/jnavila/gitJiang Xin Fri, 7 Jun 2019 08:51:09 +0000 (16:51 +0800)

Merge branch 'fr_review' of git://github.com/jnavila/git

* 'fr_review' of git://github.com/jnavila/git:
l10n: fr.po: Review French translation

Merge branch 'master' of git://github.com/alshopov... Jiang Xin Fri, 7 Jun 2019 08:50:23 +0000 (16:50 +0800)

Merge branch 'master' of git://github.com/alshopov/git-po

* 'master' of git://github.com/alshopov/git-po:
l10n: bg.po: Updated Bulgarian translation (4581t)

l10n: fr.po: Review French translationCédric Malard Wed, 5 Jun 2019 21:33:52 +0000 (23:33 +0200)

l10n: fr.po: Review French translation

Signed-off-by: Cédric Malard <c.malard-git@valdun.net>
Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>

Merge branch 'en/merge-directory-renames-fix'Junio C Hamano Thu, 6 Jun 2019 21:03:36 +0000 (14:03 -0700)

Merge branch 'en/merge-directory-renames-fix'

Recent code restructuring of merge-recursive engine introduced a
regression dealing with rename/add conflict.

* en/merge-directory-renames-fix:
merge-recursive: restore accidentally dropped setting of path

l10n: de.po: Update German translationMatthias Rüster Sat, 1 Jun 2019 12:32:49 +0000 (14:32 +0200)

l10n: de.po: Update German translation

Reviewed-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Matthias Rüster <matthias.ruester@gmail.com>

l10n: de.po: improve description of 'git reset --quiet'Ralf Thielow Thu, 28 Feb 2019 18:25:51 +0000 (19:25 +0100)

l10n: de.po: improve description of 'git reset --quiet'

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: TEAMS: Change German translation team leaderMatthias Rüster Sat, 1 Jun 2019 12:32:44 +0000 (14:32 +0200)

l10n: TEAMS: Change German translation team leader

Acked-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Matthias Rüster <matthias.ruester@gmail.com>

merge-recursive: restore accidentally dropped setting... Elijah Newren Tue, 4 Jun 2019 20:27:50 +0000 (13:27 -0700)

merge-recursive: restore accidentally dropped setting of path

In commit 8daec1df03de ("merge-recursive: switch from (oid,mode) pairs
to a diff_filespec", 2019-04-05), we actually switched from
(oid,mode,path) triplets to a diff_filespec -- but most callsites in the
patch only needed to worry about oid and mode so the commit message
focused on that. The oversight in the commit message apparently spilled
over to the code as well; one of the dozen or so callsites accidentally
dropped the setting of the path in the conversion. Restore the path
setting in that location.

Also, this pointed out that our testsuite was lacking a good rename/add
test, at least one that involved the need for merge content with the
rename. Add such a test, and since rename/add vs. add/rename could
possibly be important, redo the merge the opposite direction to make
sure we don't have issues with the direction of the merge. These
testcases failed before restoring the setting of path, but with the
paths appropriately set the testcases both pass.

Reported-by: Ben Humphreys <behumphreys@atlassian.com>
Based-on-patch-by: SZEDER Gábor <szeder.dev@gmail.com>
Tested-by: Ben Humphreys <behumphreys@atlassian.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: bg.po: Updated Bulgarian translation (4581t)Alexander Shopov Wed, 5 Jun 2019 06:51:15 +0000 (08:51 +0200)

l10n: bg.po: Updated Bulgarian translation (4581t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

l10n: zh_CN: Revision for git v2.22.0 l10nFangyi Zhou Sun, 2 Jun 2019 21:41:45 +0000 (22:41 +0100)

l10n: zh_CN: Revision for git v2.22.0 l10n

Revise 51 translations, improving consistency for some phrased.
Update email address for Fangyi Zhou

Signed-off-by: Fangyi Zhou <me@fangyi.io>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

l10n: zh_CN: for git v2.22.0 l10n round 1~3Jiang Xin Tue, 16 Apr 2019 00:56:12 +0000 (08:56 +0800)

l10n: zh_CN: for git v2.22.0 l10n round 1~3

Translate 274 new messages (4581t0f0u) for git 2.22.0.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Merge branch '2.22' of https://github.com/ChrisADR... Jiang Xin Wed, 5 Jun 2019 00:35:35 +0000 (08:35 +0800)

Merge branch '2.22' of https://github.com/ChrisADR/git-po

* '2.22' of https://github.com/ChrisADR/git-po:
l10n: es: 2.22.0 round 3

Merge branch 'it-l10n-wip' of github.com:AlessandroMent... Jiang Xin Wed, 5 Jun 2019 00:17:28 +0000 (08:17 +0800)

Merge branch 'it-l10n-wip' of github.com:AlessandroMenti/git-po

* 'it-l10n-wip' of github.com:AlessandroMenti/git-po:
l10n: it.po: Updated Italian translation

l10n: es: 2.22.0 round 3Christopher Diaz Riveros Tue, 4 Jun 2019 23:52:28 +0000 (18:52 -0500)

l10n: es: 2.22.0 round 3

Signed-off-by: Christopher Diaz Riveros <chrisadr@gentoo.org>

l10n: it.po: Updated Italian translationAlessandro Menti Sun, 19 May 2019 06:51:55 +0000 (08:51 +0200)

l10n: it.po: Updated Italian translation

Signed-off-by: Alessandro Menti <alessandro.menti@alessandromenti.it>

l10n: fr v2.22.0 rnd 3Jean-Noël Avila Tue, 4 Jun 2019 17:53:32 +0000 (19:53 +0200)

l10n: fr v2.22.0 rnd 3

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>

l10n: vi.po(4581t): Updated Vietnamese translation... Tran Ngoc Quan Tue, 4 Jun 2019 01:10:46 +0000 (08:10 +0700)

l10n: vi.po(4581t): Updated Vietnamese translation for v2.22.0 round 3

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>

l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)Jiang Xin Tue, 4 Jun 2019 00:27:36 +0000 (08:27 +0800)

l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)

Generate po/git.pot from v2.22.0-rc3 for git v2.22.0 l10n round 3.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Merge branch 'master' of git://git./git/gitJiang Xin Tue, 4 Jun 2019 00:24:28 +0000 (08:24 +0800)

Merge branch 'master' of git://git./git/git

* 'master' of git://git.kernel.org/pub/scm/git/git:
Git 2.22-rc3
i18n: fix typos found during l10n for git 2.22.0
RelNotes: minor typo fixes in 2.22.0 draft
list-objects-filter: disable 'sparse:path' filters

Git 2.22-rc3 v2.22.0-rc3Junio C Hamano Mon, 3 Jun 2019 18:25:12 +0000 (11:25 -0700)

Git 2.22-rc3

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

Merge branch 'cc/list-objects-filter-wo-sparse-path'Junio C Hamano Mon, 3 Jun 2019 18:18:54 +0000 (11:18 -0700)

Merge branch 'cc/list-objects-filter-wo-sparse-path'

Disable "--filter=sparse:path=<path>" that would allow reading from
paths on the filesystem.

* cc/list-objects-filter-wo-sparse-path:
list-objects-filter: disable 'sparse:path' filters

i18n: fix typos found during l10n for git 2.22.0Jiang Xin Sun, 2 Jun 2019 15:11:22 +0000 (23:11 +0800)

i18n: fix typos found during l10n for git 2.22.0

Fix two typos introduced by the following commits:

+ 31fba9d3b4 (diff-parseopt: convert --[src|dst]-prefix, 2019-03-24)
+ ed8b4132c8 (remote-curl: mark all error messages for translation,
2019-03-05)

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: minor typo fixes in 2.22.0 draftTodd Zullinger Sat, 1 Jun 2019 15:51:06 +0000 (11:51 -0400)

RelNotes: minor typo fixes in 2.22.0 draft

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

l10n: es: 2.22.0 round 2Christopher Diaz Riveros Mon, 3 Jun 2019 14:34:50 +0000 (09:34 -0500)

l10n: es: 2.22.0 round 2

Signed-off-by: Christopher Diaz Riveros <chrisadr@gentoo.org>

Merge branch 'master' of https://github.com/vnwildman/gitJiang Xin Sun, 2 Jun 2019 14:35:11 +0000 (22:35 +0800)

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

* 'master' of https://github.com/vnwildman/git:
l10n: vi.po(4580t): Updated Vietnamese translation for v2.22.0 round 2

Merge branch 'master' of git://github.com/alshopov... Jiang Xin Sun, 2 Jun 2019 14:09:35 +0000 (22:09 +0800)

Merge branch 'master' of git://github.com/alshopov/git-po

* 'master' of git://github.com/alshopov/git-po:
l10n: bg.po: Updated Bulgarian translation (4580t)

l10n: bg.po: Updated Bulgarian translation (4580t)Alexander Shopov Sun, 2 Jun 2019 07:26:52 +0000 (09:26 +0200)

l10n: bg.po: Updated Bulgarian translation (4580t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

l10n: vi.po(4580t): Updated Vietnamese translation... Tran Ngoc Quan Sat, 1 Jun 2019 01:36:37 +0000 (08:36 +0700)

l10n: vi.po(4580t): Updated Vietnamese translation for v2.22.0 round 2

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>

l10n: fr.po v2.22.0 round 2Jean-Noël Avila Fri, 31 May 2019 08:46:21 +0000 (10:46 +0200)

l10n: fr.po v2.22.0 round 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>

l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)Jiang Xin Fri, 31 May 2019 06:36:22 +0000 (14:36 +0800)

l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)

Generate po/git.pot from v2.22.0-rc2 for git v2.22.0 l10n round 2.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Merge branch 'master' of git://git./git/gitJiang Xin Fri, 31 May 2019 06:34:26 +0000 (14:34 +0800)

Merge branch 'master' of git://git./git/git

* 'master' of git://git.kernel.org/pub/scm/git/git: (66 commits)
Git 2.22-rc2
...

Merge branch 'master' of https://github.com/Softcatala... Jiang Xin Fri, 31 May 2019 06:32:35 +0000 (14:32 +0800)

Merge branch 'master' of https://github.com/Softcatala/git-po

* 'master' of https://github.com/Softcatala/git-po:
l10n: Update Catalan translation

Git 2.22-rc2 v2.22.0-rc2Junio C Hamano Thu, 30 May 2019 17:56:29 +0000 (10:56 -0700)

Git 2.22-rc2

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

Merge branch 'js/rebase-config-bitfix'Junio C Hamano Thu, 30 May 2019 17:50:47 +0000 (10:50 -0700)

Merge branch 'js/rebase-config-bitfix'

* js/rebase-config-bitfix:
rebase: replace incorrect logical negation by correct bitwise one

Merge branch 'es/doc-gitsubmodules-markup'Junio C Hamano Thu, 30 May 2019 17:50:46 +0000 (10:50 -0700)

Merge branch 'es/doc-gitsubmodules-markup'

Doc markup fix.

* es/doc-gitsubmodules-markup:
gitsubmodules: align html and nroff lists

Merge branch 'ja/diff-opt-typofix'Junio C Hamano Thu, 30 May 2019 17:50:46 +0000 (10:50 -0700)

Merge branch 'ja/diff-opt-typofix'

Typofix.

* ja/diff-opt-typofix:
diff: fix mistake in translatable strings

Merge branch 'jt/clone-server-option'Junio C Hamano Thu, 30 May 2019 17:50:46 +0000 (10:50 -0700)

Merge branch 'jt/clone-server-option'

A brown-paper-bag bugfix to a change already in 'master'.

* jt/clone-server-option:
fetch-pack: send server options after command

Merge branch 'sg/progress-off-by-one-fix'Junio C Hamano Thu, 30 May 2019 17:50:45 +0000 (10:50 -0700)

Merge branch 'sg/progress-off-by-one-fix'

A brown-paper-bag bugfix to a change already in 'master'.

* sg/progress-off-by-one-fix:
progress: avoid empty line when breaking the progress line

Merge branch 'js/rebase-deprecate-preserve-merges'Junio C Hamano Thu, 30 May 2019 17:50:45 +0000 (10:50 -0700)

Merge branch 'js/rebase-deprecate-preserve-merges'

A bit more leftover clean-up to deprepcate "rebase -p".

* js/rebase-deprecate-preserve-merges:
rebase docs: recommend `-r` over `-p`
docs: say that `--rebase=preserve` is deprecated
tests: mark a couple more test cases as requiring `rebase -p`

Merge branch 'sg/trace2-rename'Junio C Hamano Thu, 30 May 2019 17:50:45 +0000 (10:50 -0700)

Merge branch 'sg/trace2-rename'

Rename environment variables that are used to control the "trace2"
mechanism to a more readable name.

* sg/trace2-rename:
trace2: document the supported values of GIT_TRACE2* env variables
trace2: rename environment variables to GIT_TRACE2*

Merge branch 'jh/trace2'Junio C Hamano Thu, 30 May 2019 17:50:44 +0000 (10:50 -0700)

Merge branch 'jh/trace2'

* jh/trace2:
trace2: fix tracing when NO_PTHREADS is defined

Merge branch 'nd/diff-parseopt'Junio C Hamano Thu, 30 May 2019 17:50:44 +0000 (10:50 -0700)

Merge branch 'nd/diff-parseopt'

A brown-paper-bag bugfix to a change already in 'master'.

* nd/diff-parseopt:
parse-options: check empty value in OPT_INTEGER and OPT_ABBREV
diff-parseopt: restore -U (no argument) behavior
diff-parseopt: correct variable types that are used by parseopt

clone: respect user supplied origin name when setting... Xin Li Wed, 29 May 2019 21:26:43 +0000 (14:26 -0700)

clone: respect user supplied origin name when setting up partial clone

Signed-off-by: Xin Li <delphij@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

unicode: update the width tables to Unicode 12.1Beat Bolli Wed, 29 May 2019 20:50:45 +0000 (22:50 +0200)

unicode: update the width tables to Unicode 12.1

Now that Unicode 12.1 has been announced[0], update the character
width tables to the new version.

[0] http://blog.unicode.org/2019/05/unicode-12-1-en.html

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: add some nit fixes to MyFirstContributionEmily Shaffer Wed, 29 May 2019 20:18:09 +0000 (13:18 -0700)

doc: add some nit fixes to MyFirstContribution

A trial run-through of the tutorial revealed a few typos and missing
commands in the tutorial itself. This commit fixes typos, clarifies
which lines to keep or modify in some places, and adds a section on
putting the git-psuh binary into the gitignore.

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

list-objects-filter: disable 'sparse:path' filtersChristian Couder Wed, 29 May 2019 12:44:32 +0000 (14:44 +0200)

list-objects-filter: disable 'sparse:path' filters

If someone wants to use as a filter a sparse file that is in the
repository, something like "--filter=sparse:oid=<ref>:<path>"
already works.

So 'sparse:path' is only interesting if the sparse file is not in
the repository. In this case though the current implementation has
a big security issue, as it makes it possible to ask the server to
read any file, like for example /etc/password, and to explore the
filesystem, as well as individual lines of files.

If someone is interested in using a sparse file that is not in the
repository as a filter, then at the minimum a config option, such
as "uploadpack.sparsePathFilter", should be implemented first to
restrict the directory from which the files specified by
'sparse:path' can be read.

For now though, let's just disable 'sparse:path' filters.

Helped-by: Matthew DeVore <matvore@google.com>
Helped-by: Jeff Hostetler <git@jeffhostetler.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options: check empty value in OPT_INTEGER and... Nguyễn Thái Ngọc Duy Wed, 29 May 2019 09:11:16 +0000 (16:11 +0700)

parse-options: check empty value in OPT_INTEGER and OPT_ABBREV

When parsing the argument for OPT_INTEGER and OPT_ABBREV, we check if we
can parse the entire argument to a number with "if (*s)". There is one
missing check: if "arg" is empty to begin with, we fail to notice.

This could happen with long option by writing like

git diff --inter-hunk-context= blah blah

Before 16ed6c97cc (diff-parseopt: convert --inter-hunk-context,
2019-03-24), --inter-hunk-context is handled by a custom parser
opt_arg() and does detect this correctly.

This restores the bahvior for --inter-hunk-context and make sure all
other integer options are handled the same (sane) way. For OPT_ABBREV
this is new behavior. But it makes it consistent with the rest.

PS. OPT_MAGNITUDE has similar code but git_parse_ulong() does detect
empty "arg". So it's good to go.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-parseopt: restore -U (no argument) behaviorNguyễn Thái Ngọc Duy Wed, 29 May 2019 09:11:15 +0000 (16:11 +0700)

diff-parseopt: restore -U (no argument) behavior

Before d473e2e0e8 (diff.c: convert -U|--unified, 2019-01-27), -U and
--unified are implemented with a custom parser opt_arg() in diff.c. I
didn't check this code carefully and not realize that it's the
equivalent of PARSE_OPT_NONEG | PARSE_OPT_OPTARG.

In other words, if -U is specified without any argument, the option
should be accepted, and the default value should be used. Without
PARSE_OPT_OPTARG, parse_options() will reject this case and cause a
regression.

Reported-by: Bryan Turner <bturner@atlassian.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-parseopt: correct variable types that are used... Nguyễn Thái Ngọc Duy Wed, 29 May 2019 09:11:14 +0000 (16:11 +0700)

diff-parseopt: correct variable types that are used by parseopt

Most number-related OPT_ macros store the value in an 'int'
variable. Many of the variables in 'struct diff_options' have a
different type, but during the conversion to using parse_options() I
failed to notice and correct.

The problem was reported on s360x which is a big-endian
architechture. The variable to store '-w' option in this case is
xdl_opts, 'long' type, 8 bytes. But since parse_options() assumes
'int' (4 bytes), it will store bits in the wrong part of xdl_opts. The
problem was found on little-endian platforms because parse_options()
will accidentally store at the right part of xdl_opts.

There aren't much to say about the type change (except that 'int' for
xdl_opts should still be big enough, since Windows' long is the same
size as 'int' and nobody has complained so far). Some safety checks may
be implemented in the future to prevent class of bugs.

Reported-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

send-email: fix regression in sendemail.identity parsingÆvar Arnfjörð Bjarmason Fri, 17 May 2019 19:55:44 +0000 (21:55 +0200)

send-email: fix regression in sendemail.identity parsing

Fix a regression in my recent 3494dfd3ee ("send-email: do defaults ->
config -> getopt in that order", 2019-05-09). I missed that the
$identity variable needs to be extracted from the command-line before
we do the config reading, as it determines which config variable we
should read first. See [1] for the report.

The sendemail.identity feature was added back in
34cc60ce2b ("send-email: Add support for SSL and SMTP-AUTH",
2007-09-03), there were no tests to assert that it worked properly.

So let's fix both the regression, and add some tests to assert that
this is being parsed properly. While I'm at it I'm adding a
--no-identity option to go with --[to|cc|bcc] variable, since the
semantics are similar. It's like to/cc/bcc except that unlike those we
don't support multiple identities, but we could now easily add it
support for it if anyone cares.

In just fixing the --identity command-line parsing bug I discovered
that a narrow fix to that wouldn't do. In read_config() we had a state
machine that would only set config values if they weren't set already,
and thus by proxy we wouldn't e.g. set "to" based on sendemail.to if
we'd seen sendemail.gmail.to before, with --identity=gmail.

I'd modified some of the relevant code in 3494dfd3ee, but just
reverting to that wouldn't do, since it would bring back the
regression fixed in that commit.

Refactor read_config() do what we actually mean here. We don't want to
set a given sendemail.VAR if a sendemail.$identity.VAR previously set
it. The old code was conflating this desire with the hardcoded
defaults for these variables, and as discussed in 3494dfd3ee that was
never going to work. Instead pass along the state of whether an
identity config set something before, as distinguished from the state
of the default just being false, or the default being a non-bool or
true (e.g. --transferencoding).

I'm still not happy with the test coverage here, e.g. there's nothing
testing sendemail.smtpEncryption, but I only have so much time to fix
this code.

1. https://public-inbox.org/git/5cddeb61.1c69fb81.47ed4.e648@mx.google.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

userdiff: fix grammar and style issuesBoxuan Li Wed, 29 May 2019 16:15:39 +0000 (00:15 +0800)

userdiff: fix grammar and style issues

Signed-off-by: Boxuan Li <liboxuan@connect.hku.hk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>