git/git.git
4 years agoMerge branch 'cp/completion-clone-recurse-submodules' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:33 +0000 (11:55 -0700)]
Merge branch 'cp/completion-clone-recurse-submodules' into maint

* cp/completion-clone-recurse-submodules:
  completion: add option '--recurse-submodules' to 'git clone'

4 years agoMerge branch 'jk/t4205-cleanup' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:32 +0000 (11:55 -0700)]
Merge branch 'jk/t4205-cleanup' into maint

Test modernization.

* jk/t4205-cleanup:
  t4205: indent here documents
  t4205: drop top-level &&-chaining

4 years agoMerge branch 'jc/hashmap-doc-init' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:31 +0000 (11:55 -0700)]
Merge branch 'jc/hashmap-doc-init' into maint

The API documentation for hashmap was unclear if hashmap_entry
can be safely discarded without any other consideration.  State
that it is safe to do so.

* jc/hashmap-doc-init:
  hashmap: clarify that hashmap_entry can safely be discarded

4 years agoMerge branch 'js/nedmalloc-gcc6-warnings' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:31 +0000 (11:55 -0700)]
Merge branch 'js/nedmalloc-gcc6-warnings' into maint

Squelch compiler warnings for netmalloc (in compat/) library.

* js/nedmalloc-gcc6-warnings:
  nedmalloc: work around overzealous GCC 6 warning
  nedmalloc: fix misleading indentation

4 years agoMerge branch 'nd/fbsd-lazy-mtime' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:30 +0000 (11:55 -0700)]
Merge branch 'nd/fbsd-lazy-mtime' into maint

FreeBSD can lie when asked mtime of a directory, which made the
untracked cache code to fall back to a slow-path, which in turn
caused tests in t7063 to fail because it wanted to verify the
behaviour of the fast-path.

* nd/fbsd-lazy-mtime:
  t7063: work around FreeBSD's lazy mtime update feature

4 years agoMerge branch 'ab/gitweb-link-html-escape' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:30 +0000 (11:55 -0700)]
Merge branch 'ab/gitweb-link-html-escape' into maint

The characters in the label shown for tags/refs for commits in
"gitweb" output are now properly escaped for proper HTML output.

* ab/gitweb-link-html-escape:
  gitweb: escape link body in format_ref_marker

4 years agoMerge branch 'js/t4130-rename-without-ino' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:29 +0000 (11:55 -0700)]
Merge branch 'js/t4130-rename-without-ino' into maint

Windows port was failing some tests in t4130, due to the lack of
inum in the returned values by its lstat(2) emulation.

* js/t4130-rename-without-ino:
  t4130: work around Windows limitation

4 years agoMerge branch 'jc/grep-commandline-vs-configuration' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:29 +0000 (11:55 -0700)]
Merge branch 'jc/grep-commandline-vs-configuration' into maint

"git -c grep.patternType=extended log --basic-regexp" misbehaved
because the internal API to access the grep machinery was not
designed well.

* jc/grep-commandline-vs-configuration:
  grep: further simplify setting the pattern type

4 years agoMerge branch 'jk/diff-do-not-reuse-wtf-needs-cleaning' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:28 +0000 (11:55 -0700)]
Merge branch 'jk/diff-do-not-reuse-wtf-needs-cleaning' into maint

There is an optimization used in "git diff $treeA $treeB" to borrow
an already checked-out copy in the working tree when it is known to
be the same as the blob being compared, expecting that open/mmap of
such a file is faster than reading it from the object store, which
involves inflating and applying delta.  This however kicked in even
when the checked-out copy needs to go through the convert-to-git
conversion (including the clean filter), which defeats the whole
point of the optimization.  The optimization has been disabled when
the conversion is necessary.

* jk/diff-do-not-reuse-wtf-needs-cleaning:
  diff: do not reuse worktree files that need "clean" conversion

4 years agoMerge branch 'pm/build-persistent-https-with-recent-go' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:27 +0000 (11:55 -0700)]
Merge branch 'pm/build-persistent-https-with-recent-go' into maint

The build procedure for "git persistent-https" helper (in contrib/)
has been updated so that it can be built with more recent versions
of Go.

* pm/build-persistent-https-with-recent-go:
  contrib/persistent-https: use Git version for build label
  contrib/persistent-https: update ldflags syntax for Go 1.7+

4 years agoMerge branch 'da/subtree-2.9-regression' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:26 +0000 (11:55 -0700)]
Merge branch 'da/subtree-2.9-regression' into maint

"git merge" in Git v2.9 was taught to forbid merging an unrelated
lines of history by default, but that is exactly the kind of thing
the "--rejoin" mode of "git subtree" (in contrib/) wants to do.
"git subtree" has been taught to use the "--allow-unrelated-histories"
option to override the default.

* da/subtree-2.9-regression:
  subtree: fix "git subtree split --rejoin"
  t7900-subtree.sh: fix quoting and broken && chains

4 years agoMerge branch 'os/no-verify-skips-commit-msg-too' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:25 +0000 (11:55 -0700)]
Merge branch 'os/no-verify-skips-commit-msg-too' into maint

"git commit --help" said "--no-verify" is only about skipping the
pre-commit hook, and failed to say that it also skipped the
commit-msg hook.

* os/no-verify-skips-commit-msg-too:
  commit: describe that --no-verify skips the commit-msg hook in the help text

4 years agoMerge branch 'rs/rm-strbuf-optim' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:24 +0000 (11:55 -0700)]
Merge branch 'rs/rm-strbuf-optim' into maint

The use of strbuf in "git rm" to build filename to remove was a bit
suboptimal, which has been fixed.

* rs/rm-strbuf-optim:
  rm: reuse strbuf for all remove_dir_recursively() calls

4 years agoMerge branch 'jk/parse-options-concat' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:23 +0000 (11:55 -0700)]
Merge branch 'jk/parse-options-concat' into maint

Users of the parse_options_concat() API function need to allocate
extra slots in advance and fill them with OPT_END() when they want
to decide the set of supported options dynamically, which makes the
code error-prone and hard to read.  This has been corrected by tweaking
the API to allocate and return a new copy of "struct option" array.

* jk/parse-options-concat:
  parse_options: allocate a new array when concatenating

4 years agoMerge branch 'ls/travis-enable-httpd-tests' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:22 +0000 (11:55 -0700)]
Merge branch 'ls/travis-enable-httpd-tests' into maint

Allow http daemon tests in Travis CI tests.

* ls/travis-enable-httpd-tests:
  travis-ci: enable web server tests t55xx on Linux

4 years agoMerge branch 'ew/autoconf-pthread' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:20 +0000 (11:55 -0700)]
Merge branch 'ew/autoconf-pthread' into maint

Existing autoconf generated test for the need to link with pthread
library did not check all the functions from pthread libraries;
recent FreeBSD has some functions in libc but not others, and we
mistakenly thought linking with libc is enough when it is not.

* ew/autoconf-pthread:
  configure.ac: stronger test for pthread linkage

4 years agoMerge branch 'rs/help-c-source-with-gitattributes' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:19 +0000 (11:55 -0700)]
Merge branch 'rs/help-c-source-with-gitattributes' into maint

The .c/.h sources are marked as such in our .gitattributes file so
that "git diff -W" and friends would work better.

* rs/help-c-source-with-gitattributes:
  .gitattributes: set file type for C files

4 years agoMerge branch 'mm/status-suggest-merge-abort' into maint
Junio C Hamano [Wed, 10 Aug 2016 18:55:19 +0000 (11:55 -0700)]
Merge branch 'mm/status-suggest-merge-abort' into maint

"git status" learned to suggest "merge --abort" during a conflicted
merge, just like it already suggests "rebase --abort" during a
conflicted rebase.

* mm/status-suggest-merge-abort:
  status: suggest 'git merge --abort' when appropriate

4 years agoHopefully final batch for 2.9.3
Junio C Hamano [Mon, 8 Aug 2016 21:22:36 +0000 (14:22 -0700)]
Hopefully final batch for 2.9.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'sb/pack-protocol-doc-nak' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:47 +0000 (14:21 -0700)]
Merge branch 'sb/pack-protocol-doc-nak' into maint

A doc update.

* sb/pack-protocol-doc-nak:
  Documentation: pack-protocol correct NAK response

4 years agoMerge branch 'rs/submodule-config-code-cleanup' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:46 +0000 (14:21 -0700)]
Merge branch 'rs/submodule-config-code-cleanup' into maint

Code cleanup.

* rs/submodule-config-code-cleanup:
  submodule-config: fix test binary crashing when no arguments given
  submodule-config: combine early return code into one goto
  submodule-config: passing name reference for .gitmodule blobs
  submodule-config: use explicit empty string instead of strbuf in config_from()

4 years agoMerge branch 'sb/submodule-deinit-all' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:46 +0000 (14:21 -0700)]
Merge branch 'sb/submodule-deinit-all' into maint

A comment update for a topic that was merged to Git v2.8.

* sb/submodule-deinit-all:
  submodule deinit: remove outdated comment

4 years agoMerge branch 'rs/worktree-use-strbuf-absolute-path' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:45 +0000 (14:21 -0700)]
Merge branch 'rs/worktree-use-strbuf-absolute-path' into maint

Code simplification.

* rs/worktree-use-strbuf-absolute-path:
  worktree: use strbuf_add_absolute_path() directly

4 years agoMerge branch 'jc/doc-diff-filter-exclude' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:44 +0000 (14:21 -0700)]
Merge branch 'jc/doc-diff-filter-exclude' into maint

Belated doc update for a feature added in v1.8.5.

* jc/doc-diff-filter-exclude:
  diff: document diff-filter exclusion

4 years agoMerge branch 'nd/test-helpers' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:43 +0000 (14:21 -0700)]
Merge branch 'nd/test-helpers' into maint

Build clean-up.

* nd/test-helpers:
  t/test-lib.sh: fix running tests with --valgrind
  Makefile: use VCSSVN_LIB to refer to svn library
  Makefile: drop extra dependencies for test helpers

4 years agoMerge branch 'rs/use-strbuf-addbuf' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:42 +0000 (14:21 -0700)]
Merge branch 'rs/use-strbuf-addbuf' into maint

Code cleanup.

* rs/use-strbuf-addbuf:
  strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
  use strbuf_addbuf() for appending a strbuf to another

4 years agoMerge branch 'lf/recv-sideband-cleanup' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:41 +0000 (14:21 -0700)]
Merge branch 'lf/recv-sideband-cleanup' into maint

Code simplification.

* lf/recv-sideband-cleanup:
  sideband.c: small optimization of strbuf usage
  sideband.c: refactor recv_sideband()

4 years agoMerge branch 'ah/unpack-trees-advice-messages' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:40 +0000 (14:21 -0700)]
Merge branch 'ah/unpack-trees-advice-messages' into maint

Grammofix.

* ah/unpack-trees-advice-messages:
  unpack-trees: fix English grammar in do-this-before-that messages

4 years agoMerge branch 'lf/sideband-returns-void' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:39 +0000 (14:21 -0700)]
Merge branch 'lf/sideband-returns-void' into maint

A small internal API cleanup.

* lf/sideband-returns-void:
  upload-pack.c: make send_client_data() return void
  sideband.c: make send_sideband() return void

4 years agoMerge branch 'jk/send-pack-stdio' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:39 +0000 (14:21 -0700)]
Merge branch 'jk/send-pack-stdio' into maint

Code clean-up.

* jk/send-pack-stdio:
  write_or_die: remove the unused write_or_whine() function
  send-pack: use buffered I/O to talk to pack-objects

4 years agoMerge branch 'pb/commit-editmsg-path' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:38 +0000 (14:21 -0700)]
Merge branch 'pb/commit-editmsg-path' into maint

Code clean-up.

* pb/commit-editmsg-path:
  builtin/commit.c: memoize git-path for COMMIT_EDITMSG

4 years agoMerge branch 'ew/find-perl-on-freebsd-in-local' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:37 +0000 (14:21 -0700)]
Merge branch 'ew/find-perl-on-freebsd-in-local' into maint

Recent FreeBSD stopped making perl available at /usr/bin/perl;
switch the default the built-in path to /usr/local/bin/perl on not
too ancient FreeBSD releases.

* ew/find-perl-on-freebsd-in-local:
  config.mak.uname: correct perl path on FreeBSD

4 years agoMerge branch 'ew/daemon-socket-keepalive' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:37 +0000 (14:21 -0700)]
Merge branch 'ew/daemon-socket-keepalive' into maint

Recent update to "git daemon" tries to enable the socket-level
KEEPALIVE, but when it is spawned via inetd, the standard input
file descriptor may not necessarily be connected to a socket.
Suppress an ENOTSOCK error from setsockopt().

* ew/daemon-socket-keepalive:
  Windows: add missing definition of ENOTSOCK
  daemon: ignore ENOTSOCK from setsockopt

4 years agoMerge branch 'nd/pack-ofs-4gb-limit' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:36 +0000 (14:21 -0700)]
Merge branch 'nd/pack-ofs-4gb-limit' into maint

"git pack-objects" and "git index-pack" mostly operate with off_t
when talking about the offset of objects in a packfile, but there
were a handful of places that used "unsigned long" to hold that
value, leading to an unintended truncation.

* nd/pack-ofs-4gb-limit:
  fsck: use streaming interface for large blobs in pack
  pack-objects: do not truncate result in-pack object size on 32-bit systems
  index-pack: correct "offset" type in unpack_entry_data()
  index-pack: report correct bad object offsets even if they are large
  index-pack: correct "len" type in unpack_data()
  sha1_file.c: use type off_t* for object_info->disk_sizep
  pack-objects: pass length to check_pack_crc() without truncation

4 years agoMerge branch 'rs/notes-merge-no-toctou' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:35 +0000 (14:21 -0700)]
Merge branch 'rs/notes-merge-no-toctou' into maint

"git notes merge" had a code to see if a path exists (and fails if
it does) and then open the path for writing (when it doesn't).
Replace it with open with O_EXCL.

* rs/notes-merge-no-toctou:
  notes-merge: use O_EXCL to avoid overwriting existing files

4 years agoMerge branch 'js/ignore-space-at-eol' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:35 +0000 (14:21 -0700)]
Merge branch 'js/ignore-space-at-eol' into maint

An age old bug that caused "git diff --ignore-space-at-eol"
misbehave has been fixed.

* js/ignore-space-at-eol:
  diff: fix a double off-by-one with --ignore-space-at-eol
  diff: demonstrate a bug with --patience and --ignore-space-at-eol

4 years agoMerge branch 'jk/push-scrub-url' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:34 +0000 (14:21 -0700)]
Merge branch 'jk/push-scrub-url' into maint

"git fetch http://user:pass@host/repo..." scrubbed the userinfo
part, but "git push" didn't.

* jk/push-scrub-url:
  t5541: fix url scrubbing test when GPG is not set
  push: anonymize URL in status output

4 years agoMerge branch 'nd/cache-tree-ita' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:32 +0000 (14:21 -0700)]
Merge branch 'nd/cache-tree-ita' into maint

"git add -N dir/file && git write-tree" produced an incorrect tree
when there are other paths in the same directory that sorts after
"file".

* nd/cache-tree-ita:
  cache-tree: do not generate empty trees as a result of all i-t-a subentries
  cache-tree.c: fix i-t-a entry skipping directory updates sometimes
  test-lib.sh: introduce and use $EMPTY_BLOB
  test-lib.sh: introduce and use $EMPTY_TREE

4 years agoMerge branch 'mh/blame-worktree' into maint
Junio C Hamano [Mon, 8 Aug 2016 21:21:32 +0000 (14:21 -0700)]
Merge branch 'mh/blame-worktree' into maint

"git blame file" allowed the lineage of lines in the uncommitted,
unadded contents of "file" to be inspected, but it refused when
"file" did not appear in the current commit.  When "file" was
created by renaming an existing file (but the change has not been
committed), this restriction was unnecessarily tight.

* mh/blame-worktree:
  t/t8003-blame-corner-cases.sh: Use here documents
  blame: allow to blame paths freshly added to the index

4 years agonedmalloc: work around overzealous GCC 6 warning
René Scharfe [Thu, 4 Aug 2016 21:56:54 +0000 (23:56 +0200)]
nedmalloc: work around overzealous GCC 6 warning

With GCC 6, the strdup() function is declared with the "nonnull"
attribute, stating that it is not allowed to pass a NULL value as
parameter.

In nedmalloc()'s reimplementation of strdup(), Postel's Law is heeded
and NULL parameters are handled gracefully. GCC 6 complains about that
now because it thinks that NULL cannot be passed to strdup() anyway.

Because the callers in this project of strdup() must be prepared to
call any implementation of strdup() supplied by the platform, so it
is pointless to pretend that it is OK to call it with NULL.

Remove the conditional based on NULL-ness of the input; this
squelches the warning.  Check the return value of malloc() instead
to make sure we actually got the memory to write to.

See https://gcc.gnu.org/gcc-6/porting_to.html for details.

Diagnosed-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agonedmalloc: fix misleading indentation
Johannes Schindelin [Thu, 4 Aug 2016 16:07:03 +0000 (18:07 +0200)]
nedmalloc: fix misleading indentation

Some code in nedmalloc is indented in a funny way that could be
misinterpreted as if a line after a for loop was included in the loop
body, when it is not.

GCC 6 complains about this in DEVELOPER=YepSure mode.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot7063: work around FreeBSD's lazy mtime update feature
Nguyễn Thái Ngọc Duy [Wed, 3 Aug 2016 17:45:22 +0000 (19:45 +0200)]
t7063: work around FreeBSD's lazy mtime update feature

Let's start with the commit message of [1] from freebsd.git [2]

    Sync timestamp changes for inodes of special files to disk as late
    as possible (when the inode is reclaimed).  Temporarily only do
    this if option UFS_LAZYMOD configured and softupdates aren't
    enabled.  UFS_LAZYMOD is intentionally left out of
    /sys/conf/options.

    This is mainly to avoid almost useless disk i/o on battery powered
    machines.  It's silly to write to disk (on the next sync or when
    the inode becomes inactive) just because someone hit a key or
    something wrote to the screen or /dev/null.

    PR:             5577 [3]

The short version of that, in the context of t7063, is that when a
directory is updated, its mtime may be updated later, not
immediately. This can be shown with a simple command sequence

    date; sleep 1; touch abc; rm abc; sleep 10; ls -lTd .

One would expect that the date shown in `ls` would be one second from
`date`, but it's 10 seconds later. If we put another `ls -lTd .` in
front of `sleep 10`, then the date of the last `ls` comes as
expected. The first `ls` somehow forces mtime to be updated.

t7063 is really sensitive to directory mtime. When mtime is too "new",
git code suspects racy timestamps and will not trigger the shortcut in
untracked cache, in t7063.24 and eventually be detected in t7063.27

We have two options thanks to this special FreeBSD feature:

1) Stop supporting untracked cache on FreeBSD. Skip t7063 entirely
   when running on FreeBSD

2) Work around this problem (using the same 'ls' trick) and continue
   to support untracked cache on FreeBSD

I initially wanted to go with 1) because I didn't know the exact
nature of this feature and feared that it would make untracked cache
work unreliably, using the cached version when it should not.

Since the behavior of this thing is clearer now. The picture is not
that bad. If this indeed happens often, untracked cache would assume
racy condition more often and _fall back_ to non-untracked cache code
paths. Which means it may be less effective, but it will not show
wrong things.

This patch goes with option 2.

PS. For those who want to look further in FreeBSD source code, this
flag is now called IN_LAZYMOD. I can see it's effective in ext2 and
ufs. zfs is not affected.

[1] 660e6408e6df99a20dacb070c5e7f9739efdf96d
[2] git://github.com/freebsd/freebsd.git
[3] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=5577

Reported-by: Eric Wong <e@80x24.org>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot4130: work around Windows limitation
Johannes Sixt [Wed, 3 Aug 2016 06:15:03 +0000 (08:15 +0200)]
t4130: work around Windows limitation

On Windows, it is already pretty expensive to try to recreate the stat()
data that Git assumes is cheap to obtain. To make things halfway decent
in performance, we even have to skip emulating the inode and to
determine the number of hard links.

This is not a huge problem, usually, as either the size or the mtime or
the ctime are tell-tale enough to say when a file has changed, and even
if not, those changes are typically made after the index file was
written, triggering a rehashing of the files' contents.

The t4130-apply-criss-cross-rename test case, however, requires the
inode to determine that files of equal size were swapped, as renaming
files does not update their mtime. Every once in a while, t4130 fails
on Windows because of this missing piece.

Equal file sizes are not crucial for the test cases, however. Hence,
generate files with different sizes so that there is some property that
the swapped files can be discovered reliably even on Windows.

Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agohashmap: clarify that hashmap_entry can safely be discarded
Junio C Hamano [Tue, 2 Aug 2016 18:04:05 +0000 (11:04 -0700)]
hashmap: clarify that hashmap_entry can safely be discarded

The API documentation said that the hashmap_entry structure to be
embedded in the caller's structure is to be treated as opaque, which
left the reader wondering if it can safely be discarded when it no
longer is necessary.  If the hashmap_entry structure had references
to external resources such as allocated memory or an open file
descriptor, merely free(3)ing the containing structure (when the
caller's structure is on the heap) or letting it go out of scope
(when it is on the stack) would end up leaking the external
resource.

Document that there is no need for hashmap_entry_clear() that
corresponds to hashmap_entry_init() to give the API users a little
bit of peace of mind.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogitweb: escape link body in format_ref_marker
Andreas Brauchli [Fri, 29 Jul 2016 14:49:37 +0000 (16:49 +0200)]
gitweb: escape link body in format_ref_marker

Fix a case where an html link can be generated from unescaped input
resulting in invalid strict xhtml or potentially injected code.

An overview of a repo with a tag "1.0.0&0.0.1" would previously result
in an unescaped ampersand in the link body.

Signed-off-by: Andreas Brauchli <a.brauchli@elementarea.net>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubmodule-config: fix test binary crashing when no arguments given
Heiko Voigt [Thu, 28 Jul 2016 12:50:05 +0000 (14:50 +0200)]
submodule-config: fix test binary crashing when no arguments given

Since arg[0] will be NULL without any argument here and starts_with()
does not like NULL-pointers.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubmodule-config: combine early return code into one goto
Heiko Voigt [Thu, 28 Jul 2016 12:49:47 +0000 (14:49 +0200)]
submodule-config: combine early return code into one goto

So we have simpler return handling code and all the cleanup code in
almost one place.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubmodule-config: passing name reference for .gitmodule blobs
Heiko Voigt [Thu, 28 Jul 2016 12:49:11 +0000 (14:49 +0200)]
submodule-config: passing name reference for .gitmodule blobs

Commit 959b5455 (submodule: implement a config API for lookup of
.gitmodules values, 2015-08-18) implemented the initial version of the
submodule config cache. During development of that initial version we
extracted the function gitmodule_sha1_from_commit(). During that process
we missed that the strbuf rev was still used in config_from() and now is
left empty. Lets fix this by also returning this string.

This means that now when reading .gitmodules from revisions, the error
messages also contain a reference to the blob they are from.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoSome fixes for 2.9.3
Junio C Hamano [Thu, 28 Jul 2016 18:28:32 +0000 (11:28 -0700)]
Some fixes for 2.9.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ak/lazy-prereq-mktemp' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:26:03 +0000 (11:26 -0700)]
Merge branch 'ak/lazy-prereq-mktemp' into maint

A test that unconditionally used "mktemp" learned that the command
is not necessarily available everywhere.

* ak/lazy-prereq-mktemp:
  t7610: test for mktemp before test execution

4 years agoMerge branch 'nd/icase' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:26:03 +0000 (11:26 -0700)]
Merge branch 'nd/icase' into maint

"git grep -i" has been taught to fold case in non-ascii locales
correctly.

* nd/icase:
  grep.c: reuse "icase" variable
  diffcore-pickaxe: support case insensitive match on non-ascii
  diffcore-pickaxe: Add regcomp_or_die()
  grep/pcre: support utf-8
  gettext: add is_utf8_locale()
  grep/pcre: prepare locale-dependent tables for icase matching
  grep: rewrite an if/else condition to avoid duplicate expression
  grep/icase: avoid kwsset when -F is specified
  grep/icase: avoid kwsset on literal non-ascii strings
  test-regex: expose full regcomp() to the command line
  test-regex: isolate the bug test code
  grep: break down an "if" stmt in preparation for next changes

4 years agoMerge branch 'sb/submodule-parallel-fetch' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:26:02 +0000 (11:26 -0700)]
Merge branch 'sb/submodule-parallel-fetch' into maint

Fix recently introduced codepaths that are involved in parallel
submodule operations, which gave up on reading too early, and
could have wasted CPU while attempting to write under a corner
case condition.

* sb/submodule-parallel-fetch:
  hoist out handle_nonblock function for xread and xwrite
  xwrite: poll on non-blocking FDs
  xread: retry after poll on EAGAIN/EWOULDBLOCK

4 years agoMerge branch 'dk/blame-move-no-reason-for-1-line-context' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:26:01 +0000 (11:26 -0700)]
Merge branch 'dk/blame-move-no-reason-for-1-line-context' into maint

"git blame -M" missed a single line that was moved within the file.

* dk/blame-move-no-reason-for-1-line-context:
  blame: require 0 context lines while finding moved lines with -M

4 years agoMerge branch 'jk/test-match-signal' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:26:00 +0000 (11:26 -0700)]
Merge branch 'jk/test-match-signal' into maint

The test framework learned a new helper test_match_signal to
check an exit code from getting killed by an expected signal.

* jk/test-match-signal:
  t/lib-git-daemon: use test_match_signal
  test_must_fail: use test_match_signal
  t0005: use test_match_signal as appropriate
  tests: factor portable signal check out of t0005

4 years agoMerge branch 'js/am-call-theirs-theirs-in-fallback-3way' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:59 +0000 (11:25 -0700)]
Merge branch 'js/am-call-theirs-theirs-in-fallback-3way' into maint

One part of "git am" had an oddball helper function that called
stuff from outside "his" as opposed to calling what we have "ours",
which was not gender-neutral and also inconsistent with the rest of
the system where outside stuff is usuall called "theirs" in
contrast to "ours".

* js/am-call-theirs-theirs-in-fallback-3way:
  am: counteract gender bias

4 years agoMerge branch 'js/t3404-grammo-fix' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:58 +0000 (11:25 -0700)]
Merge branch 'js/t3404-grammo-fix' into maint

Grammofix.

* js/t3404-grammo-fix:
  t3404: fix a grammo (commands are ran -> commands are run)

4 years agoMerge branch 'nd/doc-new-command' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:57 +0000 (11:25 -0700)]
Merge branch 'nd/doc-new-command' into maint

Typofix in a doc.

* nd/doc-new-command:
  new-command.txt: correct the command description file

4 years agoMerge branch 'ew/gc-auto-pack-limit-fix' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:56 +0000 (11:25 -0700)]
Merge branch 'ew/gc-auto-pack-limit-fix' into maint

"gc.autoPackLimit" when set to 1 should not trigger a repacking
when there is only one pack, but the code counted poorly and did
so.

* ew/gc-auto-pack-limit-fix:
  gc: fix off-by-one error with gc.autoPackLimit

4 years agoMerge branch 'js/color-on-windows-comment' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:55 +0000 (11:25 -0700)]
Merge branch 'js/color-on-windows-comment' into maint

For a long time, we carried an in-code comment that said our
colored output would work only when we use fprintf/fputs on
Windows, which no longer is the case for the past few years.

* js/color-on-windows-comment:
  color.h: remove obsolete comment about limitations on Windows

4 years agoMerge branch 'mm/doc-tt' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:54 +0000 (11:25 -0700)]
Merge branch 'mm/doc-tt' into maint

More mark-up updates to typeset strings that are expected to
literally typed by the end user in fixed-width font.

* mm/doc-tt:
  doc: typeset HEAD and variants as literal
  CodingGuidelines: formatting HEAD in documentation
  doc: typeset long options with argument as literal
  doc: typeset '--' as literal
  doc: typeset long command-line options as literal
  doc: typeset short command-line options as literal
  Documentation/git-mv.txt: fix whitespace indentation

4 years agoMerge branch 'js/sign-empty-commit-fix' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:53 +0000 (11:25 -0700)]
Merge branch 'js/sign-empty-commit-fix' into maint

"git commit --amend --allow-empty-message -S" for a commit without
any message body could have misidentified where the header of the
commit object ends.

* js/sign-empty-commit-fix:
  commit -S: avoid invalid pointer with empty message

4 years agoMerge branch 'ps/rebase-i-auto-unstash-upon-abort' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:52 +0000 (11:25 -0700)]
Merge branch 'ps/rebase-i-auto-unstash-upon-abort' into maint

"git rebase -i --autostash" did not restore the auto-stashed change
when the operation was aborted.

* ps/rebase-i-auto-unstash-upon-abort:
  rebase -i: restore autostash on abort

4 years agoMerge branch 'nd/ita-cleanup' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:51 +0000 (11:25 -0700)]
Merge branch 'nd/ita-cleanup' into maint

Git does not know what the contents in the index should be for a
path added with "git add -N" yet, so "git grep --cached" should not
show hits (or show lack of hits, with -L) in such a path, but that
logic does not apply to "git grep", i.e. searching in the working
tree files.  But we did so by mistake, which has been corrected.

* nd/ita-cleanup:
  grep: fix grepping for "intent to add" files
  t7810-grep.sh: fix a whitespace inconsistency
  t7810-grep.sh: fix duplicated test name

4 years agoMerge branch 'js/find-commit-subject-ignore-leading-blanks' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:50 +0000 (11:25 -0700)]
Merge branch 'js/find-commit-subject-ignore-leading-blanks' into maint

A helper function that takes the contents of a commit object and
finds its subject line did not ignore leading blank lines, as is
commonly done by other codepaths.  Make it ignore leading blank
lines to match.

* js/find-commit-subject-ignore-leading-blanks:
  reset --hard: skip blank lines when reporting the commit subject
  sequencer: use skip_blank_lines() to find the commit subject
  commit -C: skip blank lines at the beginning of the message
  commit.c: make find_commit_subject() more robust
  pretty: make the skip_blank_lines() function public

4 years agoMerge branch 'dg/subtree-rebase-test' into maint
Junio C Hamano [Thu, 28 Jul 2016 18:25:49 +0000 (11:25 -0700)]
Merge branch 'dg/subtree-rebase-test' into maint

Add a test to specify the desired behaviour that currently is not
available in "git rebase -Xsubtree=...".

* dg/subtree-rebase-test:
  contrib/subtree: Add a test for subtree rebase that loses commits

4 years agot4205: indent here documents
Jeff King [Wed, 27 Jul 2016 18:55:23 +0000 (14:55 -0400)]
t4205: indent here documents

Our usual style in the test scripts is to indent here
documents with tabs, and use "<<-" to strip the tabs. The
result is easier to read.

This old test script did not do so in its inception, and
further tests added onto it followed the local style. Let's
bring it in line with our usual style.

Some of the tests actually care quite a bit about
whitespace, but none of them do so at the beginning of the
line (because they use things like qz_to_tab_space to avoid
depending on the literal whitespace), so we can do a fairly
mechanical conversion.

Most of the here-docs also use interpolation, so they have
been left as "<<-EOF". In a few cases, though, where
interpolation was not in use, I've converted them to
"<<-\EOF" to match our usual "don't interpolate unless you
need to" style.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot4205: drop top-level &&-chaining
Jeff King [Wed, 27 Jul 2016 18:55:02 +0000 (14:55 -0400)]
t4205: drop top-level &&-chaining

The test currently does something like:

  do_one() &&
  do_two() &&
  test_expect_success ...

We generally avoid performing actions at the top-level of
the script (outside of a test_expect block) for two reasons:

  1. The test harness is not checking and reporting if they
     fail.

  2. Their output is not handled correctly (not hidden by
     default, nor shown with "-v").

Using &&-chains seems like it should help with (1), but it
doesn't. If either of the commands fails, we simply skip
running the follow-on test entirely, and the test harness
has no idea.

We can fix this by pushing that setup into its own block.
It _could_ go into the following test block, but since the
result in this case is used by multiple tests, it's more
clear to mark it explicitly as a distinct setup step.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocompletion: add option '--recurse-submodules' to 'git clone'
Chris Packham [Wed, 27 Jul 2016 08:34:06 +0000 (20:34 +1200)]
completion: add option '--recurse-submodules' to 'git clone'

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubtree: fix "git subtree split --rejoin"
David Aguilar [Tue, 26 Jul 2016 04:14:15 +0000 (21:14 -0700)]
subtree: fix "git subtree split --rejoin"

"git merge" in v2.9 prevents merging unrelated histories.

"git subtree split --rejoin" creates unrelated histories when
creating a split repo from a raw sub-directory that did not
originate from an invocation of "git subtree add".

Restore the original behavior by passing --allow-unrelated-histories
when merging subtrees.  This ensures that the synthetic history
created by "git subtree split" can be merged.

Add a test to ensure that this feature works as advertised.

Reported-by: Brett Cundal <brett.cundal@iugome.com>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot7900-subtree.sh: fix quoting and broken && chains
David Aguilar [Tue, 26 Jul 2016 04:14:14 +0000 (21:14 -0700)]
t7900-subtree.sh: fix quoting and broken && chains

Allow whitespace in arguments to subtree_test_create_repo.
Add missing && chains.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubmodule deinit: remove outdated comment
Stefan Beller [Tue, 26 Jul 2016 00:35:38 +0000 (17:35 -0700)]
submodule deinit: remove outdated comment

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommit: describe that --no-verify skips the commit-msg hook in the help text
Orgad Shaneh [Tue, 26 Jul 2016 14:00:15 +0000 (17:00 +0300)]
commit: describe that --no-verify skips the commit-msg hook in the help text

This brings the short help in line with the documentation.

Signed-off-by: Orgad Shaneh <orgads@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoconfig.mak.uname: correct perl path on FreeBSD
Nguyễn Thái Ngọc Duy [Mon, 25 Jul 2016 16:21:25 +0000 (18:21 +0200)]
config.mak.uname: correct perl path on FreeBSD

It looks the the symlink /usr/bin/perl (to /usr/local/bin/perl) has
been removed at least on FreeBSD 10.3. See [1] for more information.

[1] https://svnweb.freebsd.org/ports/head/UPDATING?r1=386270&r2=386269&pathrev=386270&diff_format=c

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Helped-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogrep: further simplify setting the pattern type
Junio C Hamano [Fri, 22 Jul 2016 18:43:14 +0000 (11:43 -0700)]
grep: further simplify setting the pattern type

When c5c31d33 (grep: move pattern-type bits support to top-level
grep.[ch], 2012-10-03) introduced grep_commit_pattern_type() helper
function, the intention was to allow the users of grep API to having
to fiddle only with .pattern_type_option (which can be set to "fixed",
"basic", "extended", and "pcre"), and then immediately before compiling
the pattern strings for use, call grep_commit_pattern_type() to have
it prepare various bits in the grep_opt structure (like .fixed,
.regflags, etc.).

However, grep_set_pattern_type_option() helper function the grep API
internally uses were left as an external function by mistake.  This
function shouldn't have been made callable by the users of the API.

Later when the grep API was used in revision traversal machinery,
the caller then mistakenly started calling the function around
34a4ae55 (log --grep: use the same helper to set -E/-F options as
"git grep", 2012-10-03), instead of setting the .pattern_type_option
field and letting the grep_commit_pattern_type() to take care of the
details.

This caused an unnecessary bug that made a configured
grep.patternType take precedence over the command line options
(e.g. --basic-regexp, --fixed-strings) in "git log" family of
commands.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoDocumentation: pack-protocol correct NAK response
Stefan Beller [Fri, 22 Jul 2016 20:28:20 +0000 (13:28 -0700)]
Documentation: pack-protocol correct NAK response

In the transport protocol we use NAK to signal the non existence of a
common base, so fix the documentation. This helps readers of the document,
as they don't have to wonder about the difference between NAK and NACK.
As NACK is used in git archive and upload-archive, this is easy to get
wrong.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodiff: do not reuse worktree files that need "clean" conversion
Jeff King [Fri, 22 Jul 2016 15:27:53 +0000 (11:27 -0400)]
diff: do not reuse worktree files that need "clean" conversion

When accessing a blob for a diff, we may try to reuse file
contents in the working tree, under the theory that it is
faster to mmap those file contents than it would be to
extract the content from the object database.

When we have to filter those contents, though, that
assumption does not hold. Even for our internal conversions
like CRLF, we have to allocate and fill a new buffer anyway.
But much worse, for external clean filters we have to exec
an arbitrary script, and we have no idea how expensive it
may be to run.

So let's skip this optimization when conversion into git's
"clean" form is required. This applies whenever the
"want_file" flag is false. When it's true, the caller
actually wants the smudged worktree contents, which the
reused file by definition already has (in fact, this is a
key optimization going the other direction, since reusing
the worktree file there lets us skip smudge filters).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoWindows: add missing definition of ENOTSOCK
Johannes Sixt [Thu, 21 Jul 2016 20:59:06 +0000 (22:59 +0200)]
Windows: add missing definition of ENOTSOCK

The previous commit introduced the first use of ENOTSOCK. This macro is
not available on Windows. Define it as WSAENOTSOCK because that is the
corresponding error value reported by the Windows versions of socket
functions.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocontrib/persistent-https: use Git version for build label
Parker Moore [Thu, 21 Jul 2016 01:00:00 +0000 (19:00 -0600)]
contrib/persistent-https: use Git version for build label

The previous method simply used the UNIX timestamp of when the binary was
built as its build label.

    $ make && ./git-remote-persistent-http -print_label
    1469061546

This patch aims to align the label for this binary with the Git version
contained in the GIT-VERSION-FILE. This gives a better sense of the version
of the binary as it can be mapped to a particular revision or release of
Git itself. For example:

    $ make && ./git-remote-persistent-http -print_label
    2.9.1.275.g75676c8

Discussion of this patch is available on a related thread in the mailing
list surrounding this package called "contrib/persistent-https: update
ldflags syntax for Go 1.7+". The gmane.org link is:
http://article.gmane.org/gmane.comp.version-control.git/299653/

Signed-off-by: Parker Moore <parkrmoore@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocontrib/persistent-https: update ldflags syntax for Go 1.7+
Parker Moore [Thu, 21 Jul 2016 00:58:57 +0000 (18:58 -0600)]
contrib/persistent-https: update ldflags syntax for Go 1.7+

Running `make all` in `contrib/persistent-https` results in a
failure on Go 1.7 and above.

Specifically, the error is:

    go build -o git-remote-persistent-https \
   -ldflags "-X main._BUILD_EMBED_LABEL 1468613136"
    # _/Users/parkr/github/git/contrib/persistent-https
    /usr/local/Cellar/go/1.7rc1/libexec/pkg/tool/darwin_amd64/link: -X
flag requires argument of the form importpath.name=value
    make: *** [git-remote-persistent-https] Error 2

This `name=value` syntax for the -X flag was introduced in Go v1.5
(released Aug 19, 2015):

 - release notes: https://golang.org/doc/go1.5#link
 - commit: https://github.com/golang/go/commit/12795c02f3d6fc54ece09a86e70aaa40a94d5131

In Go v1.7, support for the old syntax was removed:

 - release notes: https://tip.golang.org/doc/go1.7#compiler
 - commit: https://github.com/golang/go/commit/51b624e6a29b135ce0fadb22b678acf4998ff16f

Add '=' between the symbol and its value for recent versions of Go,
while leaving it out for older ones.

Signed-off-by: Parker Moore <parkrmoore@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agostatus: suggest 'git merge --abort' when appropriate
Matthieu Moy [Thu, 21 Jul 2016 12:58:37 +0000 (14:58 +0200)]
status: suggest 'git merge --abort' when appropriate

We already suggest 'git rebase --abort' during a conflicted rebase.
Similarly, suggest 'git merge --abort' during conflict resolution on
'git merge'.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agostrbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
René Scharfe [Thu, 21 Jul 2016 16:46:44 +0000 (18:46 +0200)]
strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()

Implement strbuf_addbuf() as a normal function in order to avoid calling
strbuf_grow() twice, with the second callinside strbud_add() being a
no-op.  This is slightly faster and also reduces the text size a bit.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot5541: fix url scrubbing test when GPG is not set
Jeff King [Wed, 20 Jul 2016 11:32:26 +0000 (05:32 -0600)]
t5541: fix url scrubbing test when GPG is not set

When the GPG prereq is not set, we do not run test 34. That
test changes the directory of the test script as a side
effect (something we usually frown on, but which matches the
style of the rest of this script). When test 35 (the
url-scrubbing test) runs, it expects to be in the directory
from test 34. If it's not, the test fails; we are in a
different sub-repo, our test-commit is built on a different
history, and the push becomes a non-fast-forward.

We can fix this by unconditionally moving to the directory
we expect (again, against our usual style but matching how
the rest of the script operates).

As an additional protection, let's also switch from "make a
new commit and push to master" to just "push to a new
branch". We don't care about the branch name; we just want
_some_ ref update to trigger the status output. Pushing to a
new branch is less likely to run into problems with
force-updates, changing the checked-out branch, etc.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubmodule-config: use explicit empty string instead of strbuf in config_from()
René Scharfe [Tue, 19 Jul 2016 19:05:43 +0000 (21:05 +0200)]
submodule-config: use explicit empty string instead of strbuf in config_from()

Use a string constant instead of an empty strbuf to shorten the code
and make it easier to read.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agouse strbuf_addbuf() for appending a strbuf to another
René Scharfe [Tue, 19 Jul 2016 18:36:29 +0000 (20:36 +0200)]
use strbuf_addbuf() for appending a strbuf to another

Use strbuf_addbuf() where possible; it's shorter and more efficient.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot/t8003-blame-corner-cases.sh: Use here documents
Mike Hommey [Fri, 15 Jul 2016 23:23:46 +0000 (08:23 +0900)]
t/t8003-blame-corner-cases.sh: Use here documents

Somehow, this test was using:

{
echo A
echo B
} > file

block to feed file contents. This changes those to the form most common
in git test scripts:

cat >file <<-\EOF
A
B
EOF

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoblame: allow to blame paths freshly added to the index
Mike Hommey [Fri, 15 Jul 2016 23:23:45 +0000 (08:23 +0900)]
blame: allow to blame paths freshly added to the index

When blaming files, changes in the work tree are taken into account
and displayed as being "Not Committed Yet".

However, when blaming a file that is not known to the current HEAD,
git blame fails with `no such path 'foo' in HEAD`, even when the file
was git add'ed.

Allowing such a blame is useful when the new file added to the index
(not yet committed) was created by renaming an existing file.  It
also is useful when the new file was created from pieces already in
HEAD, moved or copied from other files and blaming with copy
detection (i.e. "-C").

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocache-tree: do not generate empty trees as a result of all i-t-a subentries
Nguyễn Thái Ngọc Duy [Sat, 16 Jul 2016 05:06:27 +0000 (07:06 +0200)]
cache-tree: do not generate empty trees as a result of all i-t-a subentries

If a subdirectory contains nothing but i-t-a entries, we generate an
empty tree object and add it to its parent tree. Which is wrong. Such
a subdirectory should not be added.

Note that this has a cascading effect. If subdir 'a/b/c' contains
nothing but i-t-a entries, we ignore it. But then if 'a/b' contains
only (the non-existing) 'a/b/c', then we should ignore 'a/b' while
building 'a' too. And it goes all the way up to top directory.

Noticed-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocache-tree.c: fix i-t-a entry skipping directory updates sometimes
Nguyễn Thái Ngọc Duy [Sat, 16 Jul 2016 05:06:26 +0000 (07:06 +0200)]
cache-tree.c: fix i-t-a entry skipping directory updates sometimes

Commit 3cf773e (cache-tree: fix writing cache-tree when CE_REMOVE is
present - 2012-12-16) skips i-t-a entries when building trees objects
from the index. Unfortunately it may skip too much.

The code in question checks if an entry is an i-t-a one, then no tree
entry will be written. But it does not take into account that
directories can also be written with the same code. Suppose we have
this in the index.

    a-file
    subdir/file1
    subdir/file2
    subdir/file3
    the-last-file

We write an entry for a-file as normal and move on to subdir/file1,
where we realize the entry name for this level is simply just
"subdir", write down an entry for "subdir" then jump three items ahead
to the-last-file.

That is what happens normally when the first file in subdir is not an
i-t-a entry. If subdir/file1 is an i-t-a, because of the broken
condition in this code, we still think "subdir" is an i-t-a file and
not writing "subdir" down and jump to the-last-file. The result tree
now only has two items: a-file and the-last-file. subdir should be
there too (even though it only records two sub-entries, file2 and
file3).

If the i-t-a entry is subdir/file2 or subdir/file3, this is not a
problem because we jump over them anyway. Which may explain why the
bug is hidden for nearly four years.

Fix it by making sure we only skip i-t-a entries when the entry in
question is actual an index entry, not a directory.

Reported-by: Yuri Kanivetsky <yuri.kanivetsky@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotest-lib.sh: introduce and use $EMPTY_BLOB
Nguyễn Thái Ngọc Duy [Sat, 16 Jul 2016 05:06:25 +0000 (07:06 +0200)]
test-lib.sh: introduce and use $EMPTY_BLOB

Similar to $EMPTY_TREE this makes it easier to recognize this special
SHA-1 and change hash later.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotest-lib.sh: introduce and use $EMPTY_TREE
Nguyễn Thái Ngọc Duy [Sat, 16 Jul 2016 05:06:24 +0000 (07:06 +0200)]
test-lib.sh: introduce and use $EMPTY_TREE

This is a special SHA1. Let's keep it at one place, easier to replace
later when the hash change comes, easier to recognize.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoconfigure.ac: stronger test for pthread linkage
Eric Wong [Mon, 18 Jul 2016 10:22:08 +0000 (10:22 +0000)]
configure.ac: stronger test for pthread linkage

We need to test linkage of pthread_create and pthread_join,
as pthread_mutex_* and pthread_key_* functions do not need
extra linkage under FreeBSD 10.3, leading to a false-positive
of the empty case.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodaemon: ignore ENOTSOCK from setsockopt
Eric Wong [Mon, 18 Jul 2016 04:59:11 +0000 (04:59 +0000)]
daemon: ignore ENOTSOCK from setsockopt

In inetd mode, we are not guaranteed stdin or stdout is a
socket; callers could filter the data through a pipe
or be testing with regular files.

This prevents t5802 from polluting syslog.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.9.2 v2.9.2
Junio C Hamano [Fri, 15 Jul 2016 17:48:16 +0000 (10:48 -0700)]
Git 2.9.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'jk/tzoffset-fix' into maint
Junio C Hamano [Fri, 15 Jul 2016 16:43:42 +0000 (09:43 -0700)]
Merge branch 'jk/tzoffset-fix' into maint

Skip tests that are unrunnable on platforms without 64-bit long
to avoid unnecessary test failures.

* jk/tzoffset-fix:
  t0006: skip "far in the future" test when unsigned long is not long enough

4 years agot0006: skip "far in the future" test when unsigned long is not long enough
Jeff King [Mon, 11 Jul 2016 23:54:18 +0000 (19:54 -0400)]
t0006: skip "far in the future" test when unsigned long is not long enough

Git's source code refers to timestamps as unsigned longs.  On 32-bit
platforms, as well as on Windows, unsigned long is not large enough
to capture dates that are "absurdly far in the future".

While we can fix this issue properly by replacing unsigned long with
a larger type, we want to be a bit more conservative and just skip
those tests on the maint track.

Signed-off-by: Jeff King <peff@peff.net>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodiff: document diff-filter exclusion
Junio C Hamano [Thu, 14 Jul 2016 19:17:47 +0000 (12:17 -0700)]
diff: document diff-filter exclusion

In v1.8.5 days, 7f2ea5f0 (diff: allow lowercase letter to specify
what change class to exclude, 2013-07-17) taught the "--diff-filter"
mechanism to take lowercase letters as exclusion, but we forgot to
document it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopush: anonymize URL in status output
Jeff King [Wed, 13 Jul 2016 23:36:53 +0000 (19:36 -0400)]
push: anonymize URL in status output

Commit 47abd85 (fetch: Strip usernames from url's before
storing them, 2009-04-17) taught fetch to anonymize URLs.
The primary purpose there was to avoid sticking passwords in
merge-commit messages, but as a side effect, we also avoid
printing them to stderr.

The push side does not have the merge-commit problem, but it
probably should avoid printing them to stderr. We can reuse
the same anonymizing function.

Note that for this to come up, the credentials would have to
appear either on the command line or in a git config file,
neither of which is particularly secure. So people _should_
be switching to using credential helpers instead, which
makes this problem go away. But that's no excuse not to
improve the situation for people who for whatever reason end
up using credentials embedded in the URL.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agofsck: use streaming interface for large blobs in pack
Nguyễn Thái Ngọc Duy [Wed, 13 Jul 2016 15:44:04 +0000 (17:44 +0200)]
fsck: use streaming interface for large blobs in pack

For blobs, we want to make sure the on-disk data is not corrupted
(i.e. can be inflated and produce the expected SHA-1). Blob content is
opaque, there's nothing else inside to check for.

For really large blobs, we may want to avoid unpacking the entire blob
in memory, just to check whether it produces the same SHA-1. On 32-bit
systems, we may not have enough virtual address space for such memory
allocation. And even on 64-bit where it's not a problem, allocating a
lot more memory could result in kicking other parts of systems to swap
file, generating lots of I/O and slowing everything down.

For this particular operation, not unpacking the blob and letting
check_sha1_signature, which supports streaming interface, do the job
is sufficient. check_sha1_signature() is not shown in the diff,
unfortunately. But if will be called when "data_valid && !data" is
false.

We will call the callback function "fn" with NULL as "data". The only
callback of this function is fsck_obj_buffer(), which does not touch
"data" at all if it's a blob.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopack-objects: do not truncate result in-pack object size on 32-bit systems
Nguyễn Thái Ngọc Duy [Wed, 13 Jul 2016 15:44:03 +0000 (17:44 +0200)]
pack-objects: do not truncate result in-pack object size on 32-bit systems

A typical diff will not show what's going on and you need to see full
functions. The core code is like this, at the end of of write_one()

e->idx.offset = *offset;
size = write_object(f, e, *offset);
if (!size) {
e->idx.offset = recursing;
return WRITE_ONE_BREAK;
}
written_list[nr_written++] = &e->idx;

/* make sure off_t is sufficiently large not to wrap */
if (signed_add_overflows(*offset, size))
die("pack too large for current definition of off_t");
*offset += size;

Here we can see that the in-pack object size is returned by
write_object (or indirectly by write_reuse_object). And it's used to
calculate object offsets, which end up in the pack index file,
generated at the end.

If "size" overflows (on 32-bit sytems, unsigned long is 32-bit while
off_t can be 64-bit), we got wrong offsets and produce incorrect .idx
file, which may make it look like the .pack file is corrupted.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoindex-pack: correct "offset" type in unpack_entry_data()
Nguyễn Thái Ngọc Duy [Wed, 13 Jul 2016 15:44:02 +0000 (17:44 +0200)]
index-pack: correct "offset" type in unpack_entry_data()

unpack_entry_data() receives an off_t value from unpack_raw_entry(),
which could be larger than unsigned long on 32-bit systems with large
file support. Correct the type so truncation does not happen. This
only affects bad object reporting though.

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