gitweb.git
builtin/merge-base: free commit listsMartin Ågren Tue, 7 Nov 2017 20:39:44 +0000 (21:39 +0100)

builtin/merge-base: free commit lists

In several functions, we iterate through a commit list by assigning
`result = result->next`. As a consequence, we lose the original pointer
and eventually leak the list.

Rewrite the loops so that we keep the original pointers, then call
`free_commit_list()`. Various alternatives were considered:

1) Use `UNLEAK(result)` before the loop. Simple change, but not very
pretty. These would definitely be new lows among our usages of UNLEAK.
2) Use `pop_commit()` when looping. Slightly less simple change, but it
feels slightly preferable to first display the list, then free it.
3) As in this patch, but with `UNLEAK()` instead of freeing. We'd still
go through all the trouble of refactoring the loop, and because it's not
super-obvious that we're about to exit, let's just free the lists -- it
probably doesn't affect the runtime much.

In `handle_independent()` we can drop `result` while we're here and
reuse the `revs`-variable instead. That matches several other users of
`reduce_heads()`. The memory-leak that this hides will be addressed in
the next commit.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status: actually ignore submodules when requestedBrandon Williams Mon, 6 Nov 2017 22:08:19 +0000 (14:08 -0800)

wt-status: actually ignore submodules when requested

Since ff6f1f564 (submodule-config: lazy-load a repository's .gitmodules
file, 2017-08-03) rebase interactive fails if there are any submodules
with unstaged changes which have been configured with a value for
'submodule.<name>.ignore' in the repository's config.

This is due to how configured values of 'submodule.<name>.ignore' are
handled in addition to a change in how the submodule config is loaded.
When the diff machinery hits a submodule (gitlink as well as a
corresponding entry in the submodule subsystem) it will read the value
of 'submodule.<name>.ignore' stored in the repository's config and if
the config is present it will clear the 'IGNORE_SUBMODULES' (which is
the flag explicitly requested by rebase interactive),
'IGNORE_UNTRACKED_IN_SUBMODULES', and 'IGNORE_DIRTY_SUBMODULES' diff
flags and then set one of them based on the configured value.

Historically this wasn't a problem because the submodule subsystem
wasn't initialized because the .gitmodules file wasn't explicitly loaded
by the rebase interactive command. So when the diff machinery hit a
submodule it would skip over reading any configured values of
'submodule.<name>.ignore'.

In order to preserve the behavior of submodules being ignored by rebase
interactive, also set the 'OVERRIDE_SUBMODULE_CONFIG' diff flag when
submodules are requested to be ignored when checking for unstaged
changes.

Reported-by: Orgad Shaneh <orgads@gmail.com>
Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wrapper.c: consistently quote filenames in error messagesSimon Ruderich Wed, 1 Nov 2017 14:44:44 +0000 (15:44 +0100)

wrapper.c: consistently quote filenames in error messages

All other error messages in the file use quotes around the file name.

This change removes two translations as "could not write to '%s'" and
"could not close '%s'" are already translated and these two are the only
occurrences without quotes.

Signed-off-by: Simon Ruderich <simon@ruderich.org>
[jc: adjusted tests I noticed were broken by the change]
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fix typos in 2.15.0 release notesJean Carlo Machado Sat, 4 Nov 2017 12:16:16 +0000 (10:16 -0200)

fix typos in 2.15.0 release notes

Signed-off-by: Jean Carlo Machado <contato@jeancarlomachado.com.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bisect: fix memory leak when returning best elementMartin Ågren Sun, 5 Nov 2017 20:24:31 +0000 (21:24 +0100)

bisect: fix memory leak when returning best element

When `find_bisection()` returns a single list entry, it leaks the other
entries. Move the to-be-returned item to the front and free the
remainder.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bisect: fix off-by-one error in `best_bisection_sorted()`Martin Ågren Sun, 5 Nov 2017 20:24:30 +0000 (21:24 +0100)

bisect: fix off-by-one error in `best_bisection_sorted()`

After we have sorted the `cnt`-many commits that we have selected, we
place them into the commit list. We then set `p->next` to NULL, but as
we do so, `p` is already pointing one beyond item number `cnt`. Indeed,
we check whether `p` is NULL before dereferencing it.

This only matters if there are TREESAME-commits. Since they should be
skipped, they are not included in `cnt` and we will hit the situation
where we set `p->next` to NULL. As a result, the list will be one longer
than it should be. The last commit in the list will be one which occurs
earlier, or which shouldn't be included.

Do not update `p` the very last round in the loop. This ensures that
after the loop, `p->next` points to the remainder of the list, and we
can set it to NULL. While we're here, free that remainder to fix a
memory leak.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bisect: fix memory leak in `find_bisection()`Martin Ågren Sun, 5 Nov 2017 20:24:29 +0000 (21:24 +0100)

bisect: fix memory leak in `find_bisection()`

`find_bisection()` rebuilds the commit list it is given by reversing it
and skipping uninteresting commits. The uninteresting list entries are
leaked. Free them to fix the leak.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bisect: change calling-convention of `find_bisection()`Martin Ågren Sun, 5 Nov 2017 20:24:28 +0000 (21:24 +0100)

bisect: change calling-convention of `find_bisection()`

This function takes a commit list and returns a commit list. The
returned list is built by modifying the original list. Thus the caller
should not use the original list again (and after the next commit fixes
a memory leak, it must not).

Change the function signature so that it takes a **list and has void
return type. That should make it harder to misuse this function.

While we're here, document this function.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: document blame configurationStefan Beller Fri, 3 Nov 2017 19:21:58 +0000 (12:21 -0700)

config: document blame configuration

The options are currently only referenced by the git-blame man page,
also explain them in git-config, which is the canonical page to
contain all config options.

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

credential-libsecret: unlock locked secretsDennis Kaarsemaker Fri, 3 Nov 2017 20:44:49 +0000 (21:44 +0100)

credential-libsecret: unlock locked secrets

Credentials exposed by the secret service DBUS interface may be locked.
Setting the SECRET_SEARCH_UNLOCK flag will make the secret service
unlock these secrets, possibly prompting the user for credentials to do
so. Without this flag, the secret is simply not loaded.

Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

setup: avoid double slashes when looking for HEADJeff King Fri, 3 Nov 2017 12:58:02 +0000 (13:58 +0100)

setup: avoid double slashes when looking for HEAD

Andrew Baumann reported that when called outside of any Git worktree,
`git rev-parse --is-inside-work-tree` eventually tries to access
`//HEAD`, i.e. any `HEAD` file in the root directory, but with a double
slash.

This double slash is not only unintentional, but is allowed by the POSIX
standard to have a special meaning. And most notably on Windows, it
does, where it refers to a UNC path of the form `//server/share/`.

As a consequence, afore-mentioned `rev-parse` call not only looks for
the wrong thing, but it also causes serious delays, as Windows will try
to access a server called `HEAD`. Let's simply avoid the unintended
double slash.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mailmap: use Kaartic Sivaraam's new addressKaartic Sivaraam Fri, 3 Nov 2017 05:43:41 +0000 (11:13 +0530)

mailmap: use Kaartic Sivaraam's new address

Map the old address to the new, hopefully more permanent one.

Signed-off-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: handle missing response codes gracefullyRené Scharfe Thu, 2 Nov 2017 17:27:05 +0000 (18:27 +0100)

imap-send: handle missing response codes gracefully

Response codes are optional. Exit parse_response_code() early if it's
passed a NULL string, indicating that we reached the end of the reply.
This avoids dereferencing said NULL pointer.

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

imap-send: handle NULL return of next_arg()René Scharfe Wed, 1 Nov 2017 17:03:20 +0000 (18:03 +0100)

imap-send: handle NULL return of next_arg()

next_arg() returns NULL if it runs out of arguments. Most call sites
already handle that gracefully. Check in the remaining cases as well.
Replace the NULL pointer with an empty string at the bottom of
get_cmd_result() -- it's nicely reported as an unexpected response a
few lines down. Error out explicitly at the remaining sites.

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

diff: --indent-heuristic is no longer experimentalCarlos Martín Nieto Sun, 29 Oct 2017 15:12:28 +0000 (16:12 +0100)

diff: --indent-heuristic is no longer experimental

This heuristic has been the default since 2.14 so we should not confuse our
users by saying that it's experimental and off by default.

Signed-off-by: Carlos Martín Nieto <cmn@dwim.me>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer.c: check return value of close() in rewrite_f... Simon Ruderich Wed, 1 Nov 2017 14:45:42 +0000 (15:45 +0100)

sequencer.c: check return value of close() in rewrite_file()

Not checking close(2) can hide errors as not all errors are reported
during the write(2).

Signed-off-by: Simon Ruderich <simon@ruderich.org>
Reviewed-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: document the standard handle redirectionJohannes Schindelin Wed, 1 Nov 2017 17:10:33 +0000 (18:10 +0100)

mingw: document the standard handle redirection

This feature has been in Git for Windows since v2.11.0(2), as an
experimental option. Now it is considered mature, and it is high time to
document it properly.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: optionally redirect stderr/stdout via the same... Johannes Schindelin Wed, 1 Nov 2017 17:10:30 +0000 (18:10 +0100)

mingw: optionally redirect stderr/stdout via the same handle

The "2>&1" notation in Powershell and in Unix shells implies that stderr
is redirected to the same handle into which stdout is already written.

Let's use this special value to allow the same trick with
GIT_REDIRECT_STDERR and GIT_REDIRECT_STDOUT: if the former's value is
`2>&1`, then stderr will simply be written to the same handle as stdout.

The functionality was suggested by Jeff Hostetler.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: add experimental feature to redirect standard... Johannes Schindelin Wed, 1 Nov 2017 17:10:25 +0000 (18:10 +0100)

mingw: add experimental feature to redirect standard handles

Particularly when calling Git from applications, such as Visual Studio's
Team Explorer, it is important that stdin/stdout/stderr are closed
properly. However, when spawning processes on Windows, those handles
must be marked as inheritable if we want to use them, but that flag is a
global flag and may very well be used by other spawned processes which
then do not know to close those handles.

Let's introduce a set of environment variables (GIT_REDIRECT_STDIN and
friends) that specify paths to files, or even better, named pipes (which
are similar to Unix sockets) and that are used by the spawned Git
process. This helps work around above-mentioned issue: those named
pipes will be opened in a non-inheritable way upon startup, and no
handles are passed around (and therefore no inherited handles need to be
closed by any spawned child).

This feature shipped with Git for Windows (marked as experimental) since
v2.11.0(2), so it has seen some serious testing in the meantime.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: don't build Git for the static analysis jobSZEDER Gábor Wed, 1 Nov 2017 11:56:44 +0000 (12:56 +0100)

travis-ci: don't build Git for the static analysis job

The static analysis job on Travis CI builds Git ever since it was
introduced in d8245bb3f (travis-ci: add static analysis build job to
run coccicheck, 2017-04-11). However, Coccinelle, the only static
analysis tool in use, only needs Git's source code to work and it
doesn't care about built Git binaries at all.

Spare some of Travis CI's resources and don't build Git for the static
analysis job unnecessarily.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: fix running P4 and Git LFS tests in Linux... SZEDER Gábor Wed, 1 Nov 2017 11:55:35 +0000 (12:55 +0100)

travis-ci: fix running P4 and Git LFS tests in Linux build jobs

Linux build jobs on Travis CI skip the P4 and Git LFS tests since
commit 657343a60 (travis-ci: move Travis CI code into dedicated
scripts, 2017-09-10), claiming there are no P4 or Git LFS installed.

The reason is that P4 and Git LFS binaries are not installed to a
directory in the default $PATH, but their directories are prepended to
$PATH. This worked just fine before said commit, because $PATH was
set in a scriptlet embedded in our '.travis.yml', thus its new value
was visible during the rest of the build job. However, after these
embedded scriptlets were moved into dedicated scripts executed in
separate shell processes, any variable set in one of those scripts is
only visible in that single script but not in any of the others. In
this case, 'ci/install-dependencies.sh' downloads P4 and Git LFS and
modifies $PATH, but to no effect, because 'ci/run-tests.sh' only sees
Travis CI's default $PATH.

Move adjusting $PATH to 'ci/lib-travisci.sh', which is sourced in all
other 'ci/' scripts, so all those scripts will see the updated $PATH
value.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep: take the read-lock when adding a submoduleMartin Ågren Wed, 1 Nov 2017 20:45:06 +0000 (21:45 +0100)

grep: take the read-lock when adding a submodule

With --recurse-submodules, we add each submodule that we encounter to
the list of alternate object databases. With threading, our changes to
the list are not protected against races. Indeed, ThreadSanitizer
reports a race when we call `add_to_alternates_memory()` around the same
time that another thread is reading in the list through
`read_sha1_file()`.

Take the grep read-lock while adding the submodule. The lock is used to
serialize uses of non-thread-safe parts of Git's API, including
`read_sha1_file()`.

Helped-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Acked-by: Brandon Williams <bmwill@google.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer: pass absolute GIT_DIR to exec commandsJacob Keller Tue, 31 Oct 2017 23:07:33 +0000 (16:07 -0700)

sequencer: pass absolute GIT_DIR to exec commands

When we replaced the old shell script based interactive rebase in
commmit 18633e1a22a6 ("rebase -i: use the rebase--helper builtin",
2017-02-09) we introduced a regression of functionality in that the
GIT_DIR would be sent to the environment of the exec command as-is.

This generally meant that it would be passed as "GIT_DIR=.git", which
causes problems for any exec command that wants to run git commands in
a subdirectory.

This isn't a very large regression, since it is not that likely that the
exec command will run a git command, and even less likely that it will
need to do so in a subdir. This regression was discovered by a build
system which uses git-describe to find the current version of the build
system, and happened to do so from the src/ sub directory of the
project.

Fix this by passing in the absolute path of the git directory into the
child environment.

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

wincred: handle empty username/password correctlyJakub Bereżański Mon, 30 Oct 2017 17:20:44 +0000 (18:20 +0100)

wincred: handle empty username/password correctly

Empty (length 0) usernames and/or passwords, when saved in the Windows
Credential Manager, come back as null when reading the credential.

One use case for such empty credentials is with NTLM authentication, where
empty username and password instruct libcurl to authenticate using the
credentials of the currently logged-on user (single sign-on).

When locating the relevant credentials, make empty username match null.
When outputting the credentials, handle nulls correctly.

Signed-off-by: Jakub Bereżański <kuba@berezanscy.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0302: check helper can handle empty credentialsJakub Bereżański Mon, 30 Oct 2017 17:20:12 +0000 (18:20 +0100)

t0302: check helper can handle empty credentials

Make sure the helper does not crash when blank username and password is
provided. If the helper can save such credentials, it should be able to
read them back.

Signed-off-by: Jakub Bereżański <kuba@berezanscy.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: include the full version information in the... Johannes Schindelin Mon, 30 Oct 2017 17:19:42 +0000 (18:19 +0100)

mingw: include the full version information in the resources

This fixes https://github.com/git-for-windows/git/issues/723

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer: use O_TRUNC to truncate filesRené Scharfe Tue, 31 Oct 2017 09:58:16 +0000 (10:58 +0100)

sequencer: use O_TRUNC to truncate files

Cut off any previous content of the file to be rewritten by passing the
flag O_TRUNC to open(2) instead of calling ftruncate(2) at the end.
That's easier and shorter.

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

sequencer: factor out rewrite_file()René Scharfe Tue, 31 Oct 2017 09:54:21 +0000 (10:54 +0100)

sequencer: factor out rewrite_file()

Reduce code duplication by extracting a function for rewriting an
existing file.

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

t5580: add Cygwin supportAdam Dinwoodie Tue, 31 Oct 2017 13:19:03 +0000 (13:19 +0000)

t5580: add Cygwin support

t5580 tests that specifying Windows UNC paths works with Git. Cygwin
supports UNC paths, albeit only using forward slashes, not backslashes,
so run the compatible tests on Cygwin as well as MinGW.

The only complication is Cygwin's `pwd`, which returns a *nix-style
path, and that's not suitable for calculating the UNC path to the
current directory. Instead use Cygwin's `cygpath` utility to get the
Windows-style path.

Signed-off-by: Adam Dinwoodie <adam@dinwoodie.org>
Reviewed-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.15 v2.15.0Junio C Hamano Mon, 30 Oct 2017 05:00:44 +0000 (14:00 +0900)

Git 2.15

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

Documentation: enable compat-mode for Asciidoctorbrian m. carlson Sun, 29 Oct 2017 21:13:07 +0000 (21:13 +0000)

Documentation: enable compat-mode for Asciidoctor

Asciidoctor 1.5.0 and later have a compatibility mode that makes it more
compatible with some Asciidoc syntax, notably the single and double
quote handling. While this doesn't affect any of our current
documentation, it would be beneficial to enable this mode to reduce the
differences between AsciiDoc and Asciidoctor if we make use of those
features in the future.

Since this mode is specified as an attribute, if a version of
Asciidoctor doesn't understand it, it will simply be ignored.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

files-backend: don't rewrite the `packed-refs` file... Michael Haggerty Sat, 28 Oct 2017 09:16:02 +0000 (11:16 +0200)

files-backend: don't rewrite the `packed-refs` file unnecessarily

Even when we are deleting references, we needn't overwrite the
`packed-refs` file if the references that we are deleting only exist
as loose references. Implement this optimization as follows:

* Add a function `is_packed_transaction_needed()`, which checks
whether a given packed-refs transaction actually needs to be carried
out (i.e., it returns false if the transaction obviously wouldn't
have any effect). This function must be called while holding the
`packed-refs` lock to avoid races.

* Change `files_transaction_prepare()` to check whether the
packed-refs transaction is actually needed. If not, squelch it, but
continue holding the `packed-refs` lock until the end of the
transaction to avoid races.

This fixes a mild regression caused by dc39e09942 (files_ref_store:
use a transaction to update packed refs, 2017-09-08). Before that
commit, unnecessary rewrites of `packed-refs` were suppressed by
`repack_without_refs()`. But the transaction-based writing introduced
by that commit didn't perform that optimization.

Note that the pre-dc39e09942 code still had to *read* the whole
`packed-refs` file to determine that the rewrite could be skipped, so
the performance for the cases that the write could be elided was
`O(N)` in the number of packed references both before and after
dc39e09942. But after that commit the constant factor increased.

This commit reimplements the optimization of eliding unnecessary
`packed-refs` rewrites. That, plus the fact that since
cfa2e29c34 (packed_ref_store: get rid of the `ref_cache` entirely,
2017-03-17) we don't necessarily have to read the whole `packed-refs`
file at all, means that deletes of one or a few loose references can
now be done with `O(n lg N)` effort, where `n` is the number of loose
references being deleted and `N` is the total number of packed
references.

This commit fixes two tests in t1409.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge tag 'l10n-2.15.0-rnd2.1' of git://github.com... Junio C Hamano Mon, 30 Oct 2017 00:32:54 +0000 (09:32 +0900)

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

l10n for Git 2.15.0 round 2 with Catalan updates

* tag 'l10n-2.15.0-rnd2.1' of git://github.com/git-l10n/git-po:
l10n: Update Catalan translation

l10n: Update Catalan translationJordi Mas Wed, 25 Oct 2017 17:50:59 +0000 (19:50 +0200)

l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>

diff: fix lstat() error handling in diff_populate_files... Andrey Okoshkin Fri, 27 Oct 2017 09:33:25 +0000 (12:33 +0300)

diff: fix lstat() error handling in diff_populate_filespec()

Add lstat() error handling not only for ENOENT case.
Otherwise uninitialised 'struct stat st' variable is used later in case of
lstat() non-ENOENT failure which leads to processing of rubbish values of
file mode ('S_ISLNK(st.st_mode)' check) or size ('xsize_t(st.st_size)').

Signed-off-by: Andrey Okoshkin <a.okoshkin@samsung.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Hopefully final batch before 2.15Junio C Hamano Sat, 28 Oct 2017 01:20:30 +0000 (10:20 +0900)

Hopefully final batch before 2.15

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

Merge branch 'sg/rev-list-doc-reorder-fix'Junio C Hamano Sat, 28 Oct 2017 01:18:42 +0000 (10:18 +0900)

Merge branch 'sg/rev-list-doc-reorder-fix'

Doc flow fix.

* sg/rev-list-doc-reorder-fix:
rev-list-options.txt: use correct directional reference

Merge branch 'sb/rev-parse-show-superproject-root'Junio C Hamano Sat, 28 Oct 2017 01:18:40 +0000 (10:18 +0900)

Merge branch 'sb/rev-parse-show-superproject-root'

Doc markup fix.

* sb/rev-parse-show-superproject-root:
docs: fix formatting of rev-parse's --show-superproject-working-tree

Merge branch 'ao/path-use-xmalloc'Junio C Hamano Sat, 28 Oct 2017 01:18:39 +0000 (10:18 +0900)

Merge branch 'ao/path-use-xmalloc'

A possible oom error is now caught as a fatal error, instead of
continuing and dereferencing NULL.

* ao/path-use-xmalloc:
path.c: use xmalloc() in add_to_trie()

Merge branch 'np/config-path-doc'Junio C Hamano Sat, 28 Oct 2017 01:18:39 +0000 (10:18 +0900)

Merge branch 'np/config-path-doc'

Doc update.

* np/config-path-doc:
config doc: clarify "git config --path" example

docs: fix formatting of rev-parse's --show-superproject... Sebastian Schuberth Thu, 26 Oct 2017 11:53:37 +0000 (11:53 +0000)

docs: fix formatting of rev-parse's --show-superproject-working-tree

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-list-options.txt: use correct directional referenceSZEDER Gábor Thu, 26 Oct 2017 15:26:37 +0000 (17:26 +0200)

rev-list-options.txt: use correct directional reference

The descriptions of the options '--parents', '--children' and
'--graph' say "see 'History Simplification' below", although the
referred section is in fact above the description of these options.

Send readers in the right direction by saying "above" instead of
"below".

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1409: check that `packed-refs` is not rewritten unnece... Michael Haggerty Wed, 25 Oct 2017 09:53:20 +0000 (11:53 +0200)

t1409: check that `packed-refs` is not rewritten unnecessarily

There is no need to rewrite the `packed-refs` file except for the case
that we are deleting a reference that has a packed version. Verify
that `packed-refs` is not rewritten when it shouldn't be.

In fact, two of these tests fail:

* A new (empty) `packed-refs` file is created when deleting any loose
reference and no `packed-refs` file previously existed.

* The `packed-refs` file is rewritten unnecessarily when deleting a
loose reference that has no packed counterpart.

Both problems will be fixed in the next commit.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'mh/ref-locking-fix'Junio C Hamano Thu, 26 Oct 2017 03:29:23 +0000 (12:29 +0900)

Merge branch 'mh/ref-locking-fix'

Transactions to update multiple references that involves a deletion
was quite broken in an error codepath and did not abort everything
correctly.

* mh/ref-locking-fix:
files_transaction_prepare(): fix handling of ref lock failure
t1404: add a bunch of tests of D/F conflicts

status: do not get confused by submodules in excluded... Johannes Schindelin Wed, 25 Oct 2017 20:40:40 +0000 (22:40 +0200)

status: do not get confused by submodules in excluded directories

We meticulously pass the `exclude` flag to the `treat_directory()`
function so that we can indicate that files in it are excluded rather
than untracked when recursing.

But we did not yet treat submodules the same way.

Because of that, `git status --ignored --untracked` with a submodule
`submodule` in a gitignored `tracked/` would show the submodule in the
"Untracked files" section, e.g.

On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)

tracked/submodule/

Ignored files:
(use "git add -f <file>..." to include in what will be committed)

tracked/submodule/initial.t

Instead, we would want it to show the submodule in the "Ignored files"
section:

On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)

tracked/submodule/

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff.c: get rid of duplicate implementationStefan Beller Wed, 25 Oct 2017 18:49:12 +0000 (11:49 -0700)

diff.c: get rid of duplicate implementation

The implementations in diff.c to detect moved lines needs to compare
strings and hash strings, which is implemented in that file, as well
as in the xdiff library.

Remove the rather recent implementation in diff.c and rely on the well
exercised code in the xdiff lib.

With this change the hash used for bucketing the strings for the moved
line detection changes from FNV32 (that is provided via the hashmaps
memhash) to DJB2 (which is used internally in xdiff). Benchmarks found
on the web[1] do not indicate that these hashes are different in
performance for readable strings.

[1] https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed

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

xdiff-interface: export comparing and hashing stringsStefan Beller Wed, 25 Oct 2017 18:49:11 +0000 (11:49 -0700)

xdiff-interface: export comparing and hashing strings

This will turn out to be useful in a later patch.

xdl_recmatch is exported in xdiff/xutils.h, to be used by various
xdiff/*.c files, but not outside of xdiff/. This one makes it available
to the outside, too.

While at it, add documentation.

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

path.c: use xmalloc() in add_to_trie()Andrey Okoshkin Tue, 24 Oct 2017 15:15:05 +0000 (18:15 +0300)

path.c: use xmalloc() in add_to_trie()

Add usage of xmalloc() instead of malloc() in add_to_trie() as xmalloc wraps
and checks memory allocation result.

Signed-off-by: Andrey Okoshkin <a.okoshkin@samsung.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add remaining flags to checkoutThomas Braun Tue, 24 Oct 2017 13:19:31 +0000 (15:19 +0200)

completion: add remaining flags to checkout

In the commits 1fc458d9 (builtin/checkout: add --recurse-submodules
switch, 2017-03-14), 08d595dc (checkout: add --ignore-skip-worktree-bits
in sparse checkout mode, 2013-04-13) and 32669671 (checkout: introduce
--detach synonym for "git checkout foo^{commit}", 2011-02-08) checkout
gained new flags but the completion was not updated, although these flags
are useful completions. Add them.

The flags --force and --ignore-other-worktrees are not added as they are
potentially dangerous.

The flags --progress and --no-progress are only useful for scripting and are
therefore also not included.

Signed-off-by: Thomas Braun <thomas.braun@virtuell-zuhause.de>
Reviewed-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

files_transaction_prepare(): fix handling of ref lock... Michael Haggerty Tue, 24 Oct 2017 15:16:25 +0000 (17:16 +0200)

files_transaction_prepare(): fix handling of ref lock failure

Since dc39e09942 (files_ref_store: use a transaction to update packed
refs, 2017-09-08), failure to lock a reference has been handled
incorrectly by `files_transaction_prepare()`. If
`lock_ref_for_update()` fails in the lock-acquisition loop of that
function, it sets `ret` then breaks out of that loop. Prior to
dc39e09942, that was OK, because the only thing following the loop was
the cleanup code. But dc39e09942 added another blurb of code between
the loop and the cleanup. That blurb sometimes resets `ret` to zero,
making the cleanup code think that the locking was successful.

Specifically, whenever

* One or more reference deletions have been processed successfully in
the lock-acquisition loop. (Processing the first such reference
causes a packed-ref transaction to be initialized.)

* Then `lock_ref_for_update()` fails for a subsequent reference. Such
a failure can happen for a number of reasons, such as the old SHA-1
not being correct, lock contention, etc. This causes a `break` out
of the lock-acquisition loop.

* The `packed-refs` lock is acquired successfully and
`ref_transaction_prepare()` succeeds for the packed-ref transaction.
This has the effect of resetting `ret` back to 0, and making the
cleanup code think that lock acquisition was successful.

In that case, any reference updates that were processed prior to
breaking out of the loop would be carried out (loose and packed), but
the reference that couldn't be locked and any subsequent references
would silently be ignored.

This can easily cause data loss if, for example, the user was trying
to push a new name for an existing branch while deleting the old name.
After the push, the branch could be left unreachable, and could even
subsequently be garbage-collected.

This problem was noticed in the context of deleting one reference and
creating another in a single transaction, when the two references D/F
conflict with each other, like

git update-ref --stdin <<EOF
delete refs/foo
create refs/foo/bar HEAD
EOF

This triggers the above bug because the deletion is processed
successfully for `refs/foo`, then the D/F conflict causes
`lock_ref_for_update()` to fail when `refs/foo/bar` is processed. In
this case the transaction *should* fail, but instead it causes
`refs/foo` to be deleted without creating `refs/foo`. This could
easily result in data loss.

The fix is simple: instead of just breaking out of the loop, jump
directly to the cleanup code. This fixes some tests in t1404 that were
added in the previous commit.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1404: add a bunch of tests of D/F conflictsMichael Haggerty Tue, 24 Oct 2017 15:16:24 +0000 (17:16 +0200)

t1404: add a bunch of tests of D/F conflicts

It is currently not allowed, in a single transaction, to add one
reference and delete another reference if the two reference names D/F
conflict with each other (e.g., like `refs/foo/bar` and `refs/foo`).
The reason is that the code would need to take locks

$GIT_DIR/refs/foo.lock
$GIT_DIR/refs/foo/bar.lock

But the latter lock couldn't coexist with the loose reference file

$GIT_DIR/refs/foo

, because `$GIT_DIR/refs/foo` cannot be both a directory and a file at
the same time (hence the name "D/F conflict).

Add a bunch of tests that we cleanly reject such transactions.

In fact, many of the new tests currently fail. They will be fixed in
the next commit along with an explanation.

Reported-by: Jeff King <peff@peff.net>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge tag 'l10n-2.15.0-rnd2' of git://github.com/git... Junio C Hamano Tue, 24 Oct 2017 02:44:52 +0000 (11:44 +0900)

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

l10n for Git 2.15.0 round 2

* tag 'l10n-2.15.0-rnd2' of git://github.com/git-l10n/git-po: (22 commits)
l10n: zh_CN: review for git v2.15.0 l10n round 2
l10n: zh_CN: for git v2.15.0 l10n round 2
l10n: de.po: fix typos
l10n: de.po: translate 70 new messages
l10n: ru.po: update Russian translation
l10n: vi.po(3245t): Updated Vietnamese translation for v2.15.0 round 2
l10n: sv.po: Update Swedish translation (3245t0f0u)
l10n: fr.po: v2.15.0 round 2
l10n: fr.po change translation of "First, rewinding"
l10n: fr.po fix some mistakes
l10n: Update Catalan translation
l10n: ko.po: Update Korean translation
l10n: es.po: v2.15.0 round 2
l10n: git.pot: v2.15.0 round 2 (2 new, 2 removed)
l10n: ru.po: update Russian translation
l10n: bg.po: Updated Bulgarian translation (3245t)
l10n: sv.po: Update Swedish translation (3245t0f0u)
l10n: vi.po(3245t): Updated Vietnamese translation for v2.15.0
l10n: es.po: Update translation v2.15.0 round 1
l10n: git.pot: v2.15.0 round 1 (68 new, 36 removed)
...

Merge branch 'jx/zh_CN-proposed' of github.com:jiangxin/gitJiang Xin Tue, 24 Oct 2017 02:11:48 +0000 (10:11 +0800)

Merge branch 'jx/zh_CN-proposed' of github.com:jiangxin/git

* 'jx/zh_CN-proposed' of github.com:jiangxin/git:
l10n: zh_CN: review for git v2.15.0 l10n round 2
l10n: zh_CN: for git v2.15.0 l10n round 2

l10n: zh_CN: review for git v2.15.0 l10n round 2Ray Chen Mon, 23 Oct 2017 16:17:59 +0000 (00:17 +0800)

l10n: zh_CN: review for git v2.15.0 l10n round 2

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

l10n: zh_CN: for git v2.15.0 l10n round 2Jiang Xin Sun, 8 Oct 2017 07:29:11 +0000 (15:29 +0800)

l10n: zh_CN: for git v2.15.0 l10n round 2

Translate 69 messages (3245t0f0u) for git v2.15.0-rc2.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Reviewed-by: 依云 <lilydjwg@gmail.com>

Merge branch 'master' of https://github.com/ralfth... Jiang Xin Tue, 24 Oct 2017 01:56:09 +0000 (09:56 +0800)

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

* 'master' of https://github.com/ralfth/git-po-de:
l10n: de.po: fix typos
l10n: de.po: translate 70 new messages

column: do not include pager.cJunio C Hamano Tue, 24 Oct 2017 01:11:18 +0000 (10:11 +0900)

column: do not include pager.c

Everything this file needs from the pager API (e.g. term_columns(),
pager_in_use()) is already declared in the header file it includes.

Noticed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: de.po: fix typosAndre Hinrichs Thu, 19 Oct 2017 06:25:25 +0000 (08:25 +0200)

l10n: de.po: fix typos

Signed-off-by: Andre Hinrichs <andre.hinrichs@gmx.de>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: de.po: translate 70 new messagesRalf Thielow Wed, 11 Oct 2017 10:48:48 +0000 (12:48 +0200)

l10n: de.po: translate 70 new messages

Translate 70 new messages came from git.pot update in 25eab542b
(l10n: git.pot: v2.15.0 round 1 (68 new, 36 removed)) and 9c07fab78
(l10n: git.pot: v2.15.0 round 2 (2 new, 2 removed)).

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

Sync with 2.14.3Junio C Hamano Mon, 23 Oct 2017 05:54:30 +0000 (14:54 +0900)

Sync with 2.14.3

Git 2.14.3 v2.14.3Junio C Hamano Mon, 23 Oct 2017 05:44:17 +0000 (14:44 +0900)

Git 2.14.3

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

Merge branch 'jk/info-alternates-fix' into maintJunio C Hamano Mon, 23 Oct 2017 05:40:00 +0000 (14:40 +0900)

Merge branch 'jk/info-alternates-fix' into maint

A regression fix for 2.11 that made the code to read the list of
alternate object stores overrun the end of the string.

* jk/info-alternates-fix:
read_info_alternates: warn on non-trivial errors
read_info_alternates: read contents into strbuf

Merge branch 'jc/fetch-refspec-doc-update' into maintJunio C Hamano Mon, 23 Oct 2017 05:39:08 +0000 (14:39 +0900)

Merge branch 'jc/fetch-refspec-doc-update' into maint

"git fetch <there> <src>:<dst>" allows an object name on the <src>
side when the other side accepts such a request since Git v2.5, but
the documentation was left stale.

* jc/fetch-refspec-doc-update:
fetch doc: src side of refspec could be full SHA-1

Merge branch 'jk/write-in-full-fix' into maintJunio C Hamano Mon, 23 Oct 2017 05:37:21 +0000 (14:37 +0900)

Merge branch 'jk/write-in-full-fix' into maint

Many codepaths did not diagnose write failures correctly when disks
go full, due to their misuse of write_in_full() helper function,
which have been corrected.

* jk/write-in-full-fix:
read_pack_header: handle signed/unsigned comparison in read result
config: flip return value of store_write_*()
notes-merge: use ssize_t for write_in_full() return value
pkt-line: check write_in_full() errors against "< 0"
convert less-trivial versions of "write_in_full() != len"
avoid "write_in_full(fd, buf, len) != len" pattern
get-tar-commit-id: check write_in_full() return against 0
config: avoid "write_in_full(fd, buf, len) < len" pattern

Merge branch 'rj/no-sign-compare' into maintJunio C Hamano Mon, 23 Oct 2017 05:20:18 +0000 (14:20 +0900)

Merge branch 'rj/no-sign-compare' into maint

Many codepaths have been updated to squelch -Wsign-compare
warnings.

* rj/no-sign-compare:
ALLOC_GROW: avoid -Wsign-compare warnings
cache.h: hex2chr() - avoid -Wsign-compare warnings
commit-slab.h: avoid -Wsign-compare warnings
git-compat-util.h: xsize_t() - avoid -Wsign-compare warnings

Merge branch 'ma/ts-cleanups' into maintJunio C Hamano Mon, 23 Oct 2017 05:19:02 +0000 (14:19 +0900)

Merge branch 'ma/ts-cleanups' into maint

Assorted bugfixes and clean-ups.

* ma/ts-cleanups:
ThreadSanitizer: add suppressions
strbuf_setlen: don't write to strbuf_slopbuf
pack-objects: take lock before accessing `remaining`
convert: always initialize attr_action in convert_attrs

Merge branch 'ls/travis-scriptify' into maintJunio C Hamano Mon, 23 Oct 2017 05:17:53 +0000 (14:17 +0900)

Merge branch 'ls/travis-scriptify' into maint

The scripts to drive TravisCI has been reorganized and then an
optimization to avoid spending cycles on a branch whose tip is
tagged has been implemented.

* ls/travis-scriptify:
travis-ci: fix "skip_branch_tip_with_tag()" string comparison
travis: dedent a few scripts that are indented overly deeply
travis-ci: skip a branch build if equal tag is present
travis-ci: move Travis CI code into dedicated scripts

Merge branch 'er/fast-import-dump-refs-on-checkpoint... Junio C Hamano Mon, 23 Oct 2017 05:17:27 +0000 (14:17 +0900)

Merge branch 'er/fast-import-dump-refs-on-checkpoint' into maint

The checkpoint command "git fast-import" did not flush updates to
refs and marks unless at least one object was created since the
last checkpoint, which has been corrected, as these things can
happen without any new object getting created.

* er/fast-import-dump-refs-on-checkpoint:
fast-import: checkpoint: dump branches/tags/marks even if object_count==0

Merge branch 'jt/fast-export-copy-modify-fix' into... Junio C Hamano Mon, 23 Oct 2017 05:14:51 +0000 (14:14 +0900)

Merge branch 'jt/fast-export-copy-modify-fix' into maint

"git fast-export" with -M/-C option issued "copy" instruction on a
path that is simultaneously modified, which was incorrect.

* jt/fast-export-copy-modify-fix:
fast-export: do not copy from modified file

Merge branch 'nd/worktree-kill-parse-ref' into maintJunio C Hamano Mon, 23 Oct 2017 05:14:16 +0000 (14:14 +0900)

Merge branch 'nd/worktree-kill-parse-ref' into maint

"git branch -M a b" while on a branch that is completely unrelated
to either branch a or branch b misbehaved when multiple worktree
was in use. This has been fixed.

* nd/worktree-kill-parse-ref:
branch: fix branch renaming not updating HEADs correctly

l10n: ru.po: update Russian translationDimitriy Ryazantcev Sun, 22 Oct 2017 17:35:13 +0000 (20:35 +0300)

l10n: ru.po: update Russian translation

Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>

Merge branch 'master' of https://github.com/vnwildman/gitJiang Xin Sun, 22 Oct 2017 11:01:07 +0000 (19:01 +0800)

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

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

worktree: handle broken symrefs in find_shared_symref()Jeff King Thu, 19 Oct 2017 17:49:36 +0000 (13:49 -0400)

worktree: handle broken symrefs in find_shared_symref()

The refs_resolve_ref_unsafe() function may return NULL even
with a REF_ISSYMREF flag if a symref points to a broken ref.
As a result, it's possible for find_shared_symref() to
segfault when it passes NULL to strcmp().

This is hard to trigger for most code paths. We typically
pass HEAD to the function as the symref to resolve, and
programs like "git branch" will bail much earlier if HEAD
isn't valid.

I did manage to trigger it through one very obscure
sequence:

# You have multiple notes refs which conflict.
git notes add -m base
git notes --ref refs/notes/foo add -m foo

# There's left-over cruft in NOTES_MERGE_REF that
# makes it a broken symref (in this case we point
# to a syntactically invalid ref).
echo "ref: refs/heads/master.lock" >.git/NOTES_MERGE_REF

# You try to merge the notes. We read the broken value in
# order to complain that another notes-merge is
# in-progress, but we segfault in find_shared_symref().
git notes merge refs/notes/foo

This is obviously silly and almost certainly impossible to
trigger accidentally, but it does show that the bug is
triggerable from at least one code path. In addition, it
would trigger if we saw a transient filesystem error when
resolving the pointed-to ref.

We can fix this by treating NULL the same as a non-matching
symref. Arguably we'd prefer to know if a symref points to
"refs/heads/foo", but "refs/heads/foo" is broken. But
refs_resolve_ref_unsafe() isn't capable of giving us that
information, so this is the best we can do.

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

log: handle broken HEAD in decoration checkJeff King Thu, 19 Oct 2017 17:49:01 +0000 (13:49 -0400)

log: handle broken HEAD in decoration check

The resolve_ref_unsafe() function may return NULL even with
a REF_ISSYMREF flag if a symref points to a broken ref. As a
result, it's possible for the decoration code's "is this
branch the current HEAD" check to segfault when it passes
the NULL to starts_with().

This is unlikely in practice, since we can only reach this
code if we already resolved HEAD to a matching sha1 earlier.
But it's possible if HEAD racily becomes broken, or if
there's a transient filesystem error.

We can fix this by returning early in the broken case, since
NULL could not possibly match any of our branch names.

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

remote: handle broken symrefsJeff King Thu, 19 Oct 2017 17:47:30 +0000 (13:47 -0400)

remote: handle broken symrefs

It's possible for resolve_ref_unsafe() to return NULL with a
REF_ISSYMREF flag if a symref points to a broken ref. In
this case, the read_remote_branches() function will segfault
passing the name to xstrdup().

This is hard to trigger in practice, since this function is
used as a callback to for_each_ref(), which will skip broken
refs in the first place (so it would have to be broken
racily, or for us to see a transient filesystem error).

If we see such a racy broken outcome let's treat it as "not
a symref". This is exactly the same thing that would happen
in the non-racy case (our function would not be called at
all, as for_each_ref would skip the broken symref).

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

test-ref-store: avoid passing NULL to printfJeff King Thu, 19 Oct 2017 17:46:21 +0000 (13:46 -0400)

test-ref-store: avoid passing NULL to printf

It's possible for resolve_ref_unsafe() to return NULL (e.g.,
if we are reading and the ref does not exist), in which case
we'll pass NULL to printf. On glibc systems this produces
"(null)", but on others it may segfault.

The tests don't expect any such case, but if we ever did
trigger this, we would prefer to cleanly fail the test with
unexpected input rather than segfault. Let's manually
replace NULL with "(null)". The exact value doesn't matter,
as it won't match any possible ref the caller could expect
(and anyway, the exit code of the program will tell whether
"ref" is valid or not).

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

commit: check result of resolve_ref_unsafeAndrey Okoshkin Fri, 20 Oct 2017 11:03:28 +0000 (14:03 +0300)

commit: check result of resolve_ref_unsafe

Add check of the resolved HEAD reference while printing of a commit summary.
resolve_ref_unsafe() may return NULL pointer if underlying calls of lstat() or
open() fail in files_read_raw_ref().
Such situation can be caused by race: file becomes inaccessible to this moment.

Signed-off-by: Andrey Okoshkin <a.okoshkin@samsung.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: handle NULs in get_string_hash()Jeff King Thu, 19 Oct 2017 20:31:20 +0000 (16:31 -0400)

diff: handle NULs in get_string_hash()

For computing moved lines, we feed the characters of each
line into a hash. When we've been asked to ignore
whitespace, then we pick each character using next_byte(),
which returns -1 on end-of-string, which it determines using
the start/end pointers we feed it.

However our check of its return value treats "0" the same as
"-1", meaning we'd quit if the string has an embedded NUL.
This is unlikely to ever come up in practice since our line
boundaries generally come from calling strlen() in the first
place.

But it was a bit surprising to me as a reader of the
next_byte() code. And it's possible that we may one day feed
this function with more exotic input, which otherwise works
with arbitrary ptr/len pairs.

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

diff: fix whitespace-skipping with --color-movedJeff King Thu, 19 Oct 2017 20:29:26 +0000 (16:29 -0400)

diff: fix whitespace-skipping with --color-moved

The code for handling whitespace with --color-moved
represents partial strings as a pair of pointers. There are
two possible conventions for the end pointer:

1. It points to the byte right after the end of the
string.

2. It points to the final byte of the string.

But we seem to use both conventions in the code:

a. we assign the initial pointers from the NUL-terminated
string using (1)

b. we eat trailing whitespace by checking the second
pointer for isspace(), which needs (2)

c. the next_byte() function checks for end-of-string with
"if (cp > endp)", which is (2)

d. in next_byte() we skip past internal whitespace with
"while (cp < end)", which is (1)

This creates fewer bugs than you might think, because there
are some subtle interactions. Because of (a) and (c), we
always return the NUL-terminator from next_byte(). But all
of the callers of next_byte() happen to handle that
gracefully.

Because of the mismatch between (d) and (c), next_byte()
could accidentally return a whitespace character right at
endp. But because of the interaction of (a) and (b), we fail
to actually chomp trailing whitespace, meaning our endp
_always_ points to a NUL, canceling out the problem.

But that does leave (b) as a real bug: when ignoring
whitespace only at the end-of-line, we don't correctly trim
it, and fail to match up lines.

We can fix the whole thing by moving consistently to one
convention. Since convention (1) is idiomatic in our code
base, we'll pick that one.

The existing "-w" and "-b" tests continue to pass, and a new
"--ignore-space-at-eol" shows off the breakage we're fixing.

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

t4015: test the output of "diff --color-moved -b"Jeff King Thu, 19 Oct 2017 20:26:31 +0000 (16:26 -0400)

t4015: test the output of "diff --color-moved -b"

Commit fa5ba2c1dd (diff: fix infinite loop with
--color-moved --ignore-space-change, 2017-10-12) added a
test to make sure that "--color-moved -b" doesn't run
forever, but the test in question doesn't actually have any
moved lines in it.

Let's scrap that test and add a variant of the existing
"--color-moved -w" test, but this time we'll check that we
find the move with whitespace changes, but not arbitrary
whitespace additions.

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

t4015: check "negative" case for "-w --color-moved"Jeff King Thu, 19 Oct 2017 20:25:57 +0000 (16:25 -0400)

t4015: check "negative" case for "-w --color-moved"

We test that lines with whitespace changes are not found by
"--color-moved" by default, but are found if "-w" is added.
Let's add one more twist: a line that has non-whitespace
changes should not be marked as a pure move.

This is perhaps an obvious case for us to get right (and we
do), but as we add more whitespace tests, they will form a
pattern of "make sure this case is a move and this other
case is not".

Note that we have to add a line to our moved block, since
having a too-small block doesn't trigger the "moved"
heuristics. And we also add a line of context to ensure
that there's more context lines than moved lines (so the
diff shows us moving the lines up, rather than moving the
context down).

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

t4015: refactor --color-moved whitespace testJeff King Thu, 19 Oct 2017 20:24:03 +0000 (16:24 -0400)

t4015: refactor --color-moved whitespace test

In preparation for testing several different whitespace
options, let's split out the setup and cleanup steps of the
whitespace test.

While we're here, let's also switch to using "<<-" to indent
our here-documents properly, and use q_to_tab to more
explicitly mark where we expect whitespace to appear.

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

Git 2.15-rc2 v2.15.0-rc2Junio C Hamano Thu, 19 Oct 2017 05:49:17 +0000 (14:49 +0900)

Git 2.15-rc2

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

Merge branch 'jc/branch-force-doc-readability-fix'Junio C Hamano Thu, 19 Oct 2017 05:45:45 +0000 (14:45 +0900)

Merge branch 'jc/branch-force-doc-readability-fix'

Doc update.

* jc/branch-force-doc-readability-fix:
branch doc: sprinkle a few commas for readability

Merge branch 'dg/filter-branch-filter-order-doc'Junio C Hamano Thu, 19 Oct 2017 05:45:45 +0000 (14:45 +0900)

Merge branch 'dg/filter-branch-filter-order-doc'

Update the documentation for "git filter-branch" so that the filter
options are listed in the same order as they are applied, as
described in an earlier part of the doc.

* dg/filter-branch-filter-order-doc:
doc: list filter-branch subdirectory-filter first

Merge branch 'jc/fetch-refspec-doc-update'Junio C Hamano Thu, 19 Oct 2017 05:45:44 +0000 (14:45 +0900)

Merge branch 'jc/fetch-refspec-doc-update'

"git fetch <there> <src>:<dst>" allows an object name on the <src>
side when the other side accepts such a request since Git v2.5, but
the documentation was left stale.

* jc/fetch-refspec-doc-update:
fetch doc: src side of refspec could be full SHA-1

Merge branch 'wk/merge-options-gpg-sign-doc'Junio C Hamano Thu, 19 Oct 2017 05:45:43 +0000 (14:45 +0900)

Merge branch 'wk/merge-options-gpg-sign-doc'

Doc updates.

* wk/merge-options-gpg-sign-doc:
Documentation/merge-options.txt: describe -S/--gpg-sign for 'pull'

config doc: clarify "git config --path" exampleNathan Payre Wed, 18 Oct 2017 20:27:16 +0000 (22:27 +0200)

config doc: clarify "git config --path" example

Change the word "bla" to "section.variable"; "bla" is a placeholder
for a variable name but it wasn't clear for everyone.

While we're here, also reformat this sample command line to use
monospace instead of italics, to better match the rest of the file.

Use a space instead of a dash in "git config", as is common in the
rest of Git's documentation.

Reported-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: MOY Matthieu <matthieu.moy@univ-lyon1.fr>
Signed-off-by: Daniel Bensoussan <daniel.bensoussan--bohm@etu.univ-lyon1.fr>
Signed-off-by: Timothee Albertin <timothee.albertin@etu.univ-lyon1.fr>
Signed-off-by: Nathan Payre <nathan.payre@etu.univ-lyon1.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'l10n_fr_v2.15.0r2' of git://github.com... Jiang Xin Thu, 19 Oct 2017 00:17:23 +0000 (08:17 +0800)

Merge branch 'l10n_fr_v2.15.0r2' of git://github.com/jnavila/git

* 'l10n_fr_v2.15.0r2' of git://github.com/jnavila/git:
l10n: fr.po: v2.15.0 round 2
l10n: fr.po change translation of "First, rewinding"
l10n: fr.po fix some mistakes

Merge branch 'master' of git://github.com/nafmo/git... Jiang Xin Thu, 19 Oct 2017 00:16:30 +0000 (08:16 +0800)

Merge branch 'master' of git://github.com/nafmo/git-l10n-sv

* 'master' of git://github.com/nafmo/git-l10n-sv:
l10n: sv.po: Update Swedish translation (3245t0f0u)

Merge branch 'master' of https://github.com/Softcatala... Jiang Xin Thu, 19 Oct 2017 00:14:55 +0000 (08:14 +0800)

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

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

Merge branch 'translation' of https://github.com/ChrisA... Jiang Xin Thu, 19 Oct 2017 00:13:29 +0000 (08:13 +0800)

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

* 'translation' of https://github.com/ChrisADR/git-po:
l10n: es.po: v2.15.0 round 2

l10n: vi.po(3245t): Updated Vietnamese translation... Tran Ngoc Quan Thu, 19 Oct 2017 00:08:04 +0000 (07:08 +0700)

l10n: vi.po(3245t): Updated Vietnamese translation for v2.15.0 round 2

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

l10n: sv.po: Update Swedish translation (3245t0f0u)Peter Krefting Wed, 18 Oct 2017 18:35:32 +0000 (19:35 +0100)

l10n: sv.po: Update Swedish translation (3245t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>

l10n: fr.po: v2.15.0 round 2Jean-Noel Avila Sun, 8 Oct 2017 12:37:52 +0000 (14:37 +0200)

l10n: fr.po: v2.15.0 round 2

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>

l10n: fr.po change translation of "First, rewinding"Nicolas Cornu Tue, 19 Sep 2017 07:37:34 +0000 (09:37 +0200)

l10n: fr.po change translation of "First, rewinding"

Signed-off-by: Nicolas Cornu <nicolac76@yahoo.fr>

l10n: fr.po fix some mistakesJean-Noel Avila Thu, 14 Sep 2017 12:05:41 +0000 (14:05 +0200)

l10n: fr.po fix some mistakes

Reported-by: Christophe Jaillet <christophe.jaillet@wanadoo.fr>
Signed-off-by: Jean-Noel Avila <jean-noel.avila@scantech.fr>

Sync with maintJunio C Hamano Wed, 18 Oct 2017 05:26:53 +0000 (14:26 +0900)

Sync with maint

* maint:
Prepare for 2.14.3

Prepare for 2.14.3Junio C Hamano Wed, 18 Oct 2017 05:24:09 +0000 (14:24 +0900)

Prepare for 2.14.3

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

Merge branch 'jk/ref-filter-colors-fix' into maintJunio C Hamano Wed, 18 Oct 2017 05:20:43 +0000 (14:20 +0900)

Merge branch 'jk/ref-filter-colors-fix' into maint

This is the "theoretically more correct" approach of simply
stepping back to the state before plumbing commands started paying
attention to "color.ui" configuration variable.

* jk/ref-filter-colors-fix:
tag: respect color.ui config
Revert "color: check color.ui in git_default_config()"
Revert "t6006: drop "always" color config tests"
Revert "color: make "always" the same as "auto" in config"
color: make "always" the same as "auto" in config
provide --color option for all ref-filter users
t3205: use --color instead of color.branch=always
t3203: drop "always" color test
t6006: drop "always" color config tests
t7502: use diff.noprefix for --verbose test
t7508: use test_terminal for color output
t3701: use test-terminal to collect color output
t4015: prefer --color to -c color.diff=always
test-terminal: set TERM=vt100