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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Thomas Gummerer [Sun, 22 Oct 2017 17:04:09 +0000 (18:04 +0100)]
stash: remove now superfluos help for "stash push"
With the 'git stash save' interface, it was easily possible for users to
try to add a message which would start with "-", which 'git stash save'
would interpret as a command line argument, and fail. For this case we
added some extra help on how to create a stash with a message starting
with "-".
For 'stash push', messages are passed with the -m flag, avoiding this
potential pitfall. Now only pathspecs starting with "-" would have to
be distinguished from command line parameters by using
"-- --<pathspec>". This is fairly common in the git command line
interface, and we don't try to guess what the users wanted in the other
cases.
Because this way of passing pathspecs is quite common in other git
commands, and we don't provide any extra help there, do the same in the
error message for 'git stash push'.
Signed-off-by: Thomas Gummerer <redacted>
Signed-off-by: Junio C Hamano <redacted>
Thomas Gummerer [Sun, 22 Oct 2017 17:04:08 +0000 (18:04 +0100)]
stash: mark "git stash save" deprecated in the man page
'git stash push' fixes a historical wart in the interface of 'git stash
save'. As 'git stash push' has all functionality of 'git stash save',
with a nicer, more consistent user interface deprecate 'git stash
save'. To do this, remove it from the synopsis of the man page, and
move it to a separate section, stating that it is deprecated.
Helped-by: Robert P. J. Day <redacted>
Helped-by: Jeff King <redacted>
Signed-off-by: Thomas Gummerer <redacted>
Signed-off-by: Junio C Hamano <redacted>
Thomas Gummerer [Sun, 22 Oct 2017 17:04:07 +0000 (18:04 +0100)]
stash: replace "git stash save" with "git stash push" in the documentation
"git stash push" is the newer interface for creating a stash. While we
are still keeping "git stash save" around for the time being, it's better
to point new users of "git stash" to the more modern (and more feature
rich) interface, instead of teaching them the older version that we
might want to phase out in the future.
Signed-off-by: Thomas Gummerer <redacted>
Signed-off-by: Junio C Hamano <redacted>
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
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Thomas 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 <redacted>
Reviewed-by: Johannes Sixt <redacted>
Signed-off-by: Junio C Hamano <redacted>
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Michael 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 <redacted>
Signed-off-by: Michael Haggerty <redacted>
Signed-off-by: Junio C Hamano <redacted>
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)
...
Jiang 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
Ray 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 <redacted>
Jiang 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 <redacted>
Reviewed-by: 依云 <redacted>
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
Junio 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Guillaume Castagnino [Thu, 19 Oct 2017 07:32:46 +0000 (09:32 +0200)]
gitweb: use filetest to allow ACLs
In commit
46a1385 (gitweb: skip unreadable subdirectories, 2017-07-18)
we forgot to handle non-unix ACLs as well. Fix this.
Signed-off-by: Guillaume Castagnino <redacted>
Reviewed-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Marius Paliga [Mon, 23 Oct 2017 11:44:49 +0000 (13:44 +0200)]
builtin/push.c: add push.pushOption config
Push options need to be given explicitly, via the command line as "git
push --push-option <option>". Add the config option push.pushOption,
which is a multi-valued option, containing push options that are sent
by default.
When push options are set in the lower-priority configulation file
(e.g. /etc/gitconfig, or $HOME/.gitconfig), they can be unset later in
the more specific repository config by the empty string.
Add tests and update documentation as well.
Signed-off-by: Marius Paliga <redacted>
Signed-off-by: Junio C Hamano <redacted>
Andre Hinrichs [Thu, 19 Oct 2017 06:25:25 +0000 (08:25 +0200)]
l10n: de.po: fix typos
Signed-off-by: Andre Hinrichs <redacted>
Signed-off-by: Ralf Thielow <redacted>
Ralf 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 <redacted>
Junio C Hamano [Mon, 23 Oct 2017 05:54:30 +0000 (14:54 +0900)]
Sync with 2.14.3
Junio C Hamano [Mon, 23 Oct 2017 05:44:17 +0000 (14:44 +0900)]
Git 2.14.3
Signed-off-by: Junio C Hamano <redacted>
Junio 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
Junio 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
Junio 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
Junio 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
Junio 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
Junio 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
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
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
Junio 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
Dimitriy Ryazantcev [Sun, 22 Oct 2017 17:35:13 +0000 (20:35 +0300)]
l10n: ru.po: update Russian translation
Signed-off-by: Dimitriy Ryazantcev <redacted>
Jiang 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
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Andrey 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff 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 <redacted>
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Thu, 19 Oct 2017 05:49:17 +0000 (14:49 +0900)]
Git 2.15-rc2
Signed-off-by: Junio C Hamano <redacted>
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
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
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
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'
Nathan 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 <redacted>
Signed-off-by: MOY Matthieu <redacted>
Signed-off-by: Daniel Bensoussan <redacted>
Signed-off-by: Timothee Albertin <redacted>
Signed-off-by: Nathan Payre <redacted>
Signed-off-by: Junio C Hamano <redacted>
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
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)
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
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
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 <redacted>
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 <redacted>
Jean-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 <redacted>
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 <redacted>
Jean-Noel Avila [Thu, 14 Sep 2017 12:05:41 +0000 (14:05 +0200)]
l10n: fr.po fix some mistakes
Reported-by: Christophe Jaillet <redacted>
Signed-off-by: Jean-Noel Avila <redacted>
Junio C Hamano [Wed, 18 Oct 2017 05:26:53 +0000 (14:26 +0900)]
Sync with maint
* maint:
Prepare for 2.14.3
Junio C Hamano [Wed, 18 Oct 2017 05:24:09 +0000 (14:24 +0900)]
Prepare for 2.14.3
Signed-off-by: Junio C Hamano <redacted>
Junio 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
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'jc/doc-checkout' into maint
Doc update.
* jc/doc-checkout:
checkout doc: clarify command line args for "checkout paths" mode
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'tb/complete-describe' into maint
Docfix.
* tb/complete-describe:
completion: add --broken and --dirty to describe
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'rs/rs-mailmap' into maint
* rs/rs-mailmap:
.mailmap: normalize name for René Scharfe
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'rs/fsck-null-return-from-lookup' into maint
Improve behaviour of "git fsck" upon finding a missing object.
* rs/fsck-null-return-from-lookup:
fsck: handle NULL return of lookup_blob() and lookup_tree()
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'jk/sha1-loose-object-info-fix' into maint
Leakfix and futureproofing.
* jk/sha1-loose-object-info-fix:
sha1_loose_object_info: handle errors from unpack_sha1_rest
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'sb/branch-avoid-repeated-strbuf-release' into maint
* sb/branch-avoid-repeated-strbuf-release:
branch: reset instead of release a strbuf
Junio C Hamano [Wed, 18 Oct 2017 05:19:14 +0000 (14:19 +0900)]
Merge branch 'rs/qsort-s' into maint
* rs/qsort-s:
test-stringlist: avoid buffer underrun when sorting nothing
Junio C Hamano [Wed, 18 Oct 2017 05:19:13 +0000 (14:19 +0900)]
Merge branch 'jn/strbuf-doc-re-reuse' into maint
* jn/strbuf-doc-re-reuse:
strbuf doc: reuse after strbuf_release is fine
Junio C Hamano [Wed, 18 Oct 2017 05:19:13 +0000 (14:19 +0900)]
Merge branch 'rs/run-command-use-alloc-array' into maint
Code clean-up.
* rs/run-command-use-alloc-array:
run-command: use ALLOC_ARRAY
Junio C Hamano [Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)]
Merge branch 'rs/tag-null-pointer-arith-fix' into maint
Code clean-up.
* rs/tag-null-pointer-arith-fix:
tag: avoid NULL pointer arithmetic
Junio C Hamano [Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)]
Merge branch 'rs/cocci-de-paren-call-params' into maint
Code clean-up.
* rs/cocci-de-paren-call-params:
coccinelle: remove parentheses that become unnecessary
Junio C Hamano [Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)]
Merge branch 'ad/doc-markup-fix' into maint
Docfix.
* ad/doc-markup-fix:
doc: correct command formatting
Junio C Hamano [Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)]
Merge branch 'mr/doc-negative-pathspec' into maint
Doc updates.
* mr/doc-negative-pathspec:
docs: improve discoverability of exclude pathspec
Junio C Hamano [Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)]
Merge branch 'jk/validate-headref-fix' into maint
Code clean-up.
* jk/validate-headref-fix:
validate_headref: use get_oid_hex for detached HEADs
validate_headref: use skip_prefix for symref parsing
validate_headref: NUL-terminate HEAD buffer
Junio C Hamano [Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)]
Merge branch 'ks/doc-use-camelcase-for-config-name' into maint
Doc update.
* ks/doc-use-camelcase-for-config-name:
doc: camelCase the config variables to improve readability
Junio C Hamano [Wed, 18 Oct 2017 05:19:11 +0000 (14:19 +0900)]
Merge branch 'jk/doc-read-tree-table-asciidoctor-fix' into maint
A docfix.
* jk/doc-read-tree-table-asciidoctor-fix:
doc: put literal block delimiter around table
Junio C Hamano [Wed, 18 Oct 2017 05:19:11 +0000 (14:19 +0900)]
Merge branch 'hn/typofix' into maint
* hn/typofix:
submodule.h: typofix
Junio C Hamano [Wed, 18 Oct 2017 05:19:10 +0000 (14:19 +0900)]
Merge branch 'ks/test-readme-phrasofix' into maint
Doc updates.
* ks/test-readme-phrasofix:
t/README: fix typo and grammatically improve a sentence
Junio C Hamano [Wed, 18 Oct 2017 05:19:10 +0000 (14:19 +0900)]
Merge branch 'ez/doc-duplicated-words-fix' into maint
Typofix.
* ez/doc-duplicated-words-fix:
doc: fix minor typos (extra/duplicated words)
Junio C Hamano [Wed, 18 Oct 2017 05:19:10 +0000 (14:19 +0900)]
Merge branch 'kd/doc-for-each-ref' into maint
Doc update.
* kd/doc-for-each-ref:
doc/for-each-ref: explicitly specify option names
doc/for-each-ref: consistently use '=' to between argument names and values
Junio C Hamano [Wed, 18 Oct 2017 05:19:10 +0000 (14:19 +0900)]
Merge branch 'cc/subprocess-handshake-missing-capabilities' into maint
Finishing touches to a topic already in 'master'.
* cc/subprocess-handshake-missing-capabilities:
subprocess: loudly die when subprocess asks for an unsupported capability
Junio C Hamano [Wed, 18 Oct 2017 05:19:10 +0000 (14:19 +0900)]
Merge branch 'jk/system-path-cleanup' into maint
Code clean-up.
* jk/system-path-cleanup:
git_extract_argv0_path: do nothing without RUNTIME_PREFIX
system_path: move RUNTIME_PREFIX to a sub-function
Junio C Hamano [Wed, 18 Oct 2017 05:19:09 +0000 (14:19 +0900)]
Merge branch 'bb/doc-eol-dirty' into maint
Doc update.
* bb/doc-eol-dirty:
Documentation: mention that `eol` can change the dirty status of paths
Junio C Hamano [Wed, 18 Oct 2017 05:19:09 +0000 (14:19 +0900)]
Merge branch 'mg/timestamp-t-fix' into maint
A mismerge fix.
* mg/timestamp-t-fix:
name-rev: change ULONG_MAX to TIME_MAX
Junio C Hamano [Wed, 18 Oct 2017 05:19:08 +0000 (14:19 +0900)]
Merge branch 'ma/pkt-line-leakfix' into maint
A leakfix.
* ma/pkt-line-leakfix:
pkt-line: re-'static'-ify buffer in packet_write_fmt_1()
Junio C Hamano [Wed, 18 Oct 2017 05:19:07 +0000 (14:19 +0900)]
Merge branch 'jk/config-lockfile-leak-fix' into maint
A leakfix.
* jk/config-lockfile-leak-fix:
config: use a static lock_file struct
Junio C Hamano [Wed, 18 Oct 2017 05:19:07 +0000 (14:19 +0900)]
Merge branch 'dw/diff-highlight-makefile-fix' into maint
Build clean-up.
* dw/diff-highlight-makefile-fix:
diff-highlight: add clean target to Makefile
Junio C Hamano [Wed, 18 Oct 2017 05:19:06 +0000 (14:19 +0900)]
Merge branch 'jk/drop-sha1-entry-pos' into maint
Code clean-up.
* jk/drop-sha1-entry-pos:
sha1-lookup: remove sha1_entry_pos() from header file
sha1_file: drop experimental GIT_USE_LOOKUP search
Junio C Hamano [Wed, 18 Oct 2017 05:19:06 +0000 (14:19 +0900)]
Merge branch 'tb/ref-filter-empty-modifier' into maint
In the "--format=..." option of the "git for-each-ref" command (and
its friends, i.e. the listing mode of "git branch/tag"), "%(atom:)"
(e.g. "%(refname:)", "%(body:)" used to error out. Instead, treat
them as if the colon and an empty string that follows it were not
there.
* tb/ref-filter-empty-modifier:
ref-filter.c: pass empty-string as NULL to atom parsers
Junio C Hamano [Wed, 18 Oct 2017 05:19:05 +0000 (14:19 +0900)]
Merge branch 'rb/compat-poll-fix' into maint
Backports a moral equivalent of 2015 fix to the poll emulation from
the upstream gnulib to fix occasional breakages on HPE NonStop.
* rb/compat-poll-fix:
poll.c: always set revents, even if to zero
Junio C Hamano [Wed, 18 Oct 2017 05:19:04 +0000 (14:19 +0900)]
Merge branch 'tg/memfixes' into maint
Fixes for a handful memory access issues identified by valgrind.
* tg/memfixes:
sub-process: use child_process.args instead of child_process.argv
http-push: fix construction of hex value from path
path.c: fix uninitialized memory access
Junio C Hamano [Wed, 18 Oct 2017 05:19:04 +0000 (14:19 +0900)]
Merge branch 'ar/request-pull-phrasofix' into maint
Spell the name of our system as "Git" in the output from
request-pull script.
* ar/request-pull-phrasofix:
request-pull: capitalise "Git" to make it a proper noun
Junio C Hamano [Wed, 18 Oct 2017 05:19:03 +0000 (14:19 +0900)]
Merge branch 'jc/merge-x-theirs-docfix' into maint
The documentation for '-X<option>' for merges was misleadingly
written to suggest that "-s theirs" exists, which is not the case.
* jc/merge-x-theirs-docfix:
merge-strategies: avoid implying that "-s theirs" exists
Junio C Hamano [Wed, 18 Oct 2017 05:19:03 +0000 (14:19 +0900)]
Merge branch 'rs/mailinfo-qp-decode-fix' into maint
"git mailinfo" was loose in decoding quoted printable and produced
garbage when the two letters after the equal sign are not
hexadecimal. This has been fixed.
* rs/mailinfo-qp-decode-fix:
mailinfo: don't decode invalid =XY quoted-printable sequences
Junio C Hamano [Wed, 18 Oct 2017 05:19:02 +0000 (14:19 +0900)]
Merge branch 'ik/userdiff-html-h-element-fix' into maint
The built-in pattern to detect the "function header" for HTML did
not match <H1>..<H6> elements without any attributes, which has
been fixed.
* ik/userdiff-html-h-element-fix:
userdiff: fix HTML hunk header regexp
Junio C Hamano [Wed, 18 Oct 2017 05:19:01 +0000 (14:19 +0900)]
Merge branch 'jk/diff-blob' into maint
"git cat-file --textconv" started segfaulting recently, which
has been corrected.
* jk/diff-blob:
cat-file: handle NULL object_context.path
Junio C Hamano [Wed, 18 Oct 2017 05:19:01 +0000 (14:19 +0900)]
Merge branch 'jk/describe-omit-some-refs' into maint
"git describe --match" learned to take multiple patterns in v2.13
series, but the feature ignored the patterns after the first one
and did not work at all. This has been fixed.
* jk/describe-omit-some-refs:
describe: fix matching to actually match all patterns