git
6 years agoMerge branch 'en/rename-directory-detection'
Junio C Hamano [Mon, 18 Jun 2018 17:18:44 +0000 (10:18 -0700)] 
Merge branch 'en/rename-directory-detection'

Newly added codepath in merge-recursive had potential buffer
overrun, which has been fixed.

* en/rename-directory-detection:
  merge-recursive: use xstrdup() instead of fixed buffer

6 years agoMerge branch 'rd/doc-remote-tracking-with-hyphen'
Junio C Hamano [Mon, 18 Jun 2018 17:18:43 +0000 (10:18 -0700)] 
Merge branch 'rd/doc-remote-tracking-with-hyphen'

Doc update.

* rd/doc-remote-tracking-with-hyphen:
  Use hyphenated "remote-tracking branch" (docs and comments)

6 years agoMerge branch 'jl/zlib-restore-nul-termination'
Junio C Hamano [Mon, 18 Jun 2018 17:18:43 +0000 (10:18 -0700)] 
Merge branch 'jl/zlib-restore-nul-termination'

Make zlib inflate codepath more robust against versions of zlib
that clobber unused portion of outbuf.

* jl/zlib-restore-nul-termination:
  packfile: correct zlib buffer handling

6 years agoMerge branch 'ab/cred-netrc-no-autodie'
Junio C Hamano [Mon, 18 Jun 2018 17:18:42 +0000 (10:18 -0700)] 
Merge branch 'ab/cred-netrc-no-autodie'

Hotfix for contrib/ stuff broken by this cycle.

* ab/cred-netrc-no-autodie:
  git-credential-netrc: remove use of "autodie"

6 years agoMerge branch 'km/doc-workflows-typofix'
Junio C Hamano [Mon, 18 Jun 2018 17:18:42 +0000 (10:18 -0700)] 
Merge branch 'km/doc-workflows-typofix'

Typofix.

* km/doc-workflows-typofix:
  gitworkflows: fix grammar in 'Merge upwards' rule

6 years agoMerge branch 'ld/git-p4-updates'
Junio C Hamano [Mon, 18 Jun 2018 17:18:41 +0000 (10:18 -0700)] 
Merge branch 'ld/git-p4-updates'

"git p4" updates.

* ld/git-p4-updates:
  git-p4: auto-size the block
  git-p4: narrow the scope of exceptions caught when parsing an int
  git-p4: raise exceptions from p4CmdList based on error from p4 server
  git-p4: better error reporting when p4 fails
  git-p4: add option to disable syncing of p4/master with p4
  git-p4: disable-rebase: allow setting this via configuration
  git-p4: add options --commit and --disable-rebase

6 years agoMerge branch 'rd/diff-options-typofix'
Junio C Hamano [Mon, 18 Jun 2018 17:18:41 +0000 (10:18 -0700)] 
Merge branch 'rd/diff-options-typofix'

Typofix.

* rd/diff-options-typofix:
  diff-options.txt: fix minor typos, font inconsistencies, in docs

6 years agoMerge branch 'rd/comment-typofix-in-sha1-file'
Junio C Hamano [Mon, 18 Jun 2018 17:18:40 +0000 (10:18 -0700)] 
Merge branch 'rd/comment-typofix-in-sha1-file'

In code comment typofix

* rd/comment-typofix-in-sha1-file:
  sha1-file.c: correct $GITDIR to $GIT_DIR in a comment

6 years agoRelNotes 2.18: minor fix to entry about dynamically loading completions
SZEDER Gábor [Mon, 18 Jun 2018 10:46:09 +0000 (12:46 +0200)] 
RelNotes 2.18: minor fix to entry about dynamically loading completions

It was not "newer versions of bash" but newer versions of
bash-completion that made commit 085e2ee0e6 (completion: load
completion file for external subcommand, 2018-04-29) both necessary
and possible.

Update the corresponding RelNotes entry accordingly.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomerge-recursive: use xstrdup() instead of fixed buffer
René Scharfe [Sun, 10 Jun 2018 10:56:31 +0000 (12:56 +0200)] 
merge-recursive: use xstrdup() instead of fixed buffer

Paths can be longer than PATH_MAX.  Avoid a buffer overrun in
check_dir_renamed() by using xstrdup() to make a private copy safely.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoGit 2.18-rc2 v2.18.0-rc2
Junio C Hamano [Wed, 13 Jun 2018 19:57:07 +0000 (12:57 -0700)] 
Git 2.18-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'jk/index-pack-maint'
Junio C Hamano [Wed, 13 Jun 2018 19:50:46 +0000 (12:50 -0700)] 
Merge branch 'jk/index-pack-maint'

"index-pack --strict" has been taught to make sure that it runs the
final object integrity checks after making the freshly indexed
packfile available to itself.

* jk/index-pack-maint:
  index-pack: correct install_packed_git() args
  index-pack: handle --strict checks of non-repo packs
  prepare_commit_graft: treat non-repository as a noop

6 years agoMerge branch 'sg/completion-zsh-workaround'
Junio C Hamano [Wed, 13 Jun 2018 19:50:45 +0000 (12:50 -0700)] 
Merge branch 'sg/completion-zsh-workaround'

Work around zsh segfaulting when loading git-completion.zsh

* sg/completion-zsh-workaround:
  completion: correct zsh detection when run from git-completion.zsh

6 years agoMerge branch 'sb/submodule-merge-in-merge-recursive'
Junio C Hamano [Wed, 13 Jun 2018 19:50:44 +0000 (12:50 -0700)] 
Merge branch 'sb/submodule-merge-in-merge-recursive'

Finishing touches to a topic that already is in 'master'.

* sb/submodule-merge-in-merge-recursive:
  merge-submodule: reduce output verbosity

6 years agoMerge branch 'jk/submodule-fsck-loose-fixup'
Junio C Hamano [Wed, 13 Jun 2018 19:50:44 +0000 (12:50 -0700)] 
Merge branch 'jk/submodule-fsck-loose-fixup'

Finishing touches to a topic that already is in 'maint'.

* jk/submodule-fsck-loose-fixup:
  fsck: avoid looking at NULL blob->object
  t7415: don't bother creating commit for symlink test

6 years agopackfile: correct zlib buffer handling
Jeremy Linton [Wed, 13 Jun 2018 14:22:07 +0000 (09:22 -0500)] 
packfile: correct zlib buffer handling

The buffer being passed to zlib includes a NUL terminator that git
needs to keep in place. unpack_compressed_entry() attempts to detect
the case that the source buffer hasn't been fully consumed by
checking to see if the destination buffer has been over consumed.

This causes a problem, that more recent zlib patches have been
poisoning the unconsumed portions of the buffer which overwrites
the NUL byte, while correctly returning length and status.

Let's place the NUL at the end of the buffer after inflate returns
to assure that it doesn't result in problems for git even if its
been overwritten by zlib.

Signed-off-by: Jeremy Linton <lintonrjeremy@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoRelNotes 2.18: clarify where directory rename detection applies
Elijah Newren [Tue, 12 Jun 2018 23:57:55 +0000 (16:57 -0700)] 
RelNotes 2.18: clarify where directory rename detection applies

Mention that this feature works with some commands (merge and cherry-pick,
implying that it also works with commands that build on these like rebase
-m and rebase -i).  Explicitly mentioning two commands hopefully implies
that it may not always work with other commands (am, and rebase without
flags that imply either -m or -i).

Also, since the directory rename detection from this cycle was
specifically added in merge-recursive and not diffcore-rename, remove the
'in "diff" family" phrase from the note.  (Folks have requested in the
past that `git diff` detect directory renames and somehow simplify its
output, so it may be helpful to avoid implying that diff has any new
capability here.)

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoUse hyphenated "remote-tracking branch" (docs and comments)
Robert P. J. Day [Thu, 7 Jun 2018 11:53:36 +0000 (07:53 -0400)] 
Use hyphenated "remote-tracking branch" (docs and comments)

Use the obvious consensus of hyphenated "remote-tracking branch", and
fix an obvious typo, all in documentation and comments.

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-credential-netrc: remove use of "autodie"
Ævar Arnfjörð Bjarmason [Wed, 13 Jun 2018 07:48:10 +0000 (07:48 +0000)] 
git-credential-netrc: remove use of "autodie"

The "autodie" module was added in Perl 5.10.1, but our INSTALL
document says "version 5.8 or later is needed".

As discussed in <87efhfvxzu.fsf@evledraar.gmail.com> this script is in
contrib/, so we might not want to apply that policy, however in this
case "autodie" was recently added as a "gratuitous safeguard" in
786ef50a23 ("git-credential-netrc: accept gpg option",
2018-05-12) (see
<CAHqJXRE8OKSKcck1APHAHccLZhox+tZi8nNu2RA74RErX8s3Pg@mail.gmail.com>).

Looking at it more carefully the addition of "autodie" inadvertently
introduced a logic error, since having it is equivalent to this patch:

    @@ -245,10 +244,10 @@ sub load_netrc {
      if ($gpgmode) {
      my @cmd = ($options{'gpg'}, qw(--decrypt), $file);
      log_verbose("Using GPG to open $file: [@cmd]");
    - open $io, "-|", @cmd;
    + open $io, "-|", @cmd or die "@cmd: $!";
      } else {
      log_verbose("Opening $file...");
    - open $io, '<', $file;
    + open $io, '<', $file or die "$file: $!$!;
      }

      # nothing to do if the open failed (we log the error later)

As shown in the context the intent of that code is not do die but to
log the error later.

Per my reading of the file this was the only thing autodie was doing
in this file (there was no other code it altered). So let's remove it,
both to fix the logic error and to get rid of the dependency.

1. <87efhfvxzu.fsf@evledraar.gmail.com>
   (https://public-inbox.org/git/87efhfvxzu.fsf@evledraar.gmail.com/)
2. <CAHqJXRE8OKSKcck1APHAHccLZhox+tZi8nNu2RA74RErX8s3Pg@mail.gmail.com>
   (https://public-inbox.org/git/CAHqJXRE8OKSKcck1APHAHccLZhox+tZi8nNu2RA74RErX8s3Pg@mail.gmail.com/)

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: auto-size the block
Luke Diamand [Fri, 8 Jun 2018 20:32:48 +0000 (21:32 +0100)] 
git-p4: auto-size the block

git-p4 originally would fetch changes in one query. On large repos this
could fail because of the limits that Perforce imposes on the number of
items returned and the number of queries in the database.

To fix this, git-p4 learned to query changes in blocks of 512 changes,
However, this can be very slow - if you have a few million changes,
with each chunk taking about a second, it can be an hour or so.

Although it's possible to tune this value manually with the
"--changes-block-size" option, it's far from obvious to ordinary users
that this is what needs doing.

This change alters the block size dynamically by looking for the
specific error messages returned from the Perforce server, and reducing
the block size if the error is seen, either to the limit reported by the
server, or to half the current block size.

That means we can start out with a very large block size, and then let
it automatically drop down to a value that works without error, while
still failing correctly if some other error occurs.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: narrow the scope of exceptions caught when parsing an int
Luke Diamand [Fri, 8 Jun 2018 20:32:47 +0000 (21:32 +0100)] 
git-p4: narrow the scope of exceptions caught when parsing an int

The current code traps all exceptions around some code which parses an
integer, and then talks to Perforce.

That can result in errors from Perforce being ignored. Change the code
to only catch the integer conversion exceptions.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: raise exceptions from p4CmdList based on error from p4 server
Luke Diamand [Fri, 8 Jun 2018 20:32:46 +0000 (21:32 +0100)] 
git-p4: raise exceptions from p4CmdList based on error from p4 server

This change lays some groundwork for better handling of rowcount errors
from the server, where it fails to send us results because we requested
too many.

It adds an option to p4CmdList() to return errors as a Python exception.

The exceptions are derived from P4Exception (something went wrong),
P4ServerException (the server sent us an error code) and
P4RequestSizeException (we requested too many rows/results from the
server database).

This makes the code that handles the errors a bit easier.

The default behavior is unchanged; the new code is enabled with a flag.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: better error reporting when p4 fails
Luke Diamand [Fri, 8 Jun 2018 20:32:45 +0000 (21:32 +0100)] 
git-p4: better error reporting when p4 fails

Currently when p4 fails to run, git-p4 just crashes with an obscure
error message.

For example, if the P4 ticket has expired, you get:

  Error: Cannot locate perforce checkout of <path> in client view

This change checks whether git-p4 can talk to the Perforce server when
the first P4 operation is attempted, and tries to print a meaningful
error message if it fails.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: add option to disable syncing of p4/master with p4
Luke Diamand [Fri, 8 Jun 2018 20:32:44 +0000 (21:32 +0100)] 
git-p4: add option to disable syncing of p4/master with p4

Add an option to the git-p4 submit command to disable syncing
with Perforce.

This is useful for the case where a git-p4 mirror has been setup
on a server somewhere, running from (e.g.) cron, and developers
then clone from this. Having the local cloned copy also sync
from Perforce just isn't useful.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: disable-rebase: allow setting this via configuration
Luke Diamand [Fri, 8 Jun 2018 20:32:43 +0000 (21:32 +0100)] 
git-p4: disable-rebase: allow setting this via configuration

This just lets you set the --disable-rebase option with the
git configuration options git-p4.disableRebase. If you're
using this option, you probably want to set it all the time
for a given repo.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: add options --commit and --disable-rebase
Romain Merland [Fri, 1 Jun 2018 07:46:14 +0000 (09:46 +0200)] 
git-p4: add options --commit and --disable-rebase

On a daily work with multiple local git branches, the usual way to
submit only a specified commit was to cherry-pick the commit on
master then run git-p4 submit.  It can be very annoying to switch
between local branches and master, only to submit one commit.  The
proposed new way is to select directly the commit you want to
submit.

Add option --commit to command 'git-p4 submit' in order to submit
only specified commit(s) in p4.

On a daily work developping software with big compilation time, one
may not want to rebase on his local git tree, in order to avoid long
recompilation.

Add option --disable-rebase to command 'git-p4 submit' in order to
disable rebase after submission.

Thanks-to: Cedric Borgese <cedric.borgese@gmail.com>
Reviewed-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Romain Merland <merlorom@yahoo.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogitworkflows: fix grammar in 'Merge upwards' rule
Kyle Meyer [Sat, 9 Jun 2018 15:19:43 +0000 (11:19 -0400)] 
gitworkflows: fix grammar in 'Merge upwards' rule

Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocompletion: correct zsh detection when run from git-completion.zsh
SZEDER Gábor [Mon, 11 Jun 2018 18:20:53 +0000 (11:20 -0700)] 
completion: correct zsh detection when run from git-completion.zsh

v2.18.0-rc0~90^2 (completion: reduce overhead of clearing cached
--options, 2018-04-18) worked around a bug in bash's "set" builtin on
MacOS by using compgen instead.  It was careful to avoid breaking zsh
by guarding this workaround with

if [[ -n ${ZSH_VERSION-}} ]]

Alas, this interacts poorly with git-completion.zsh's bash emulation:

ZSH_VERSION='' . "$script"

Correct it by instead using a new GIT_SOURCING_ZSH_COMPLETION shell
variable to detect whether git-completion.bash is being sourced from
git-completion.zsh.  This way, the zsh variant is used both when run
from zsh directly and when run via git-completion.zsh.

Reproduction recipe:

 1. cd git/contrib/completion && cp git-completion.zsh _git
 2. Put the following in a new ~/.zshrc file:

  autoload -U compinit; compinit
autoload -U bashcompinit; bashcompinit
fpath=(~/src/git/contrib/completion $fpath)

 3. Open zsh and "git <TAB>".

With this patch:
Triggers nice git-completion.bash based tab completion

Without:
 contrib/completion/git-completion.bash:354: read-only variable: QISUFFIX
 zsh:12: command not found: ___main
 zsh:15: _default: function definition file not found
 _dispatch:70: bad math expression: operand expected at `/usr/bin/g...'
 Segmentation fault

Reported-by: Rick van Hattem <wolph@wol.ph>
Reported-by: Dave Borowitz <dborowitz@google.com>
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoindex-pack: correct install_packed_git() args
Junio C Hamano [Mon, 11 Jun 2018 22:09:18 +0000 (15:09 -0700)] 
index-pack: correct install_packed_git() args

The function does not start taking the repository object as a
parameter before v2.18 track.  Make the topic mergeable to v2.17
maintenance track by dropping it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agodiff-options.txt: fix minor typos, font inconsistencies, in docs
Robert P. J. Day [Mon, 11 Jun 2018 13:56:13 +0000 (09:56 -0400)] 
diff-options.txt: fix minor typos, font inconsistencies, in docs

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomerge-submodule: reduce output verbosity
Leif Middelschulte [Mon, 11 Jun 2018 17:31:28 +0000 (19:31 +0200)] 
merge-submodule: reduce output verbosity

The output shall behave more similar to ordinary file merges' output to provide
a more consistent user experience.

Signed-off-by: Leif Middelschulte <Leif.Middelschulte@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agofsck: avoid looking at NULL blob->object
Jeff King [Mon, 11 Jun 2018 08:35:45 +0000 (04:35 -0400)] 
fsck: avoid looking at NULL blob->object

Commit 159e7b080b (fsck: detect gitmodules files,
2018-05-02) taught fsck to look at the content of
.gitmodules files. If the object turns out not to be a blob
at all, we just complain and punt on checking the content.
And since this was such an obvious and trivial code path, I
didn't even bother to add a test.

Except it _does_ do one non-trivial thing, which is call the
report() function, which wants us to pass a pointer to a
"struct object". Which we don't have (we have only a "struct
object_id"). So we erroneously pass a NULL object to
report(), which gets dereferenced and causes a segfault.

It seems like we could refactor report() to just take the
object_id itself. But we pass the object pointer along to
a callback function, and indeed this ends up in
builtin/fsck.c's objreport() which does want to look at
other parts of the object (like the type).

So instead, let's just use lookup_unknown_object() to get
the real "struct object", and pass that.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot7415: don't bother creating commit for symlink test
Jeff King [Mon, 11 Jun 2018 08:35:40 +0000 (04:35 -0400)] 
t7415: don't bother creating commit for symlink test

Early versions of the fsck .gitmodules detection code
actually required a tree to be at the root of a commit for
it to be checked for .gitmodules. What we ended up with in
159e7b080b (fsck: detect gitmodules files, 2018-05-02),
though, finds a .gitmodules file in _any_ tree (see that
commit for more discussion).

As a result, there's no need to create a commit in our
tests. Let's drop it in the name of simplicity. And since
that was the only thing referencing $tree, we can pull our
tree creation out of a command substitution.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoRelNotes 2.18: typofixes
Junio C Hamano [Mon, 11 Jun 2018 16:15:34 +0000 (09:15 -0700)] 
RelNotes 2.18: typofixes

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoGit 2.18-rc1 v2.18.0-rc1
Junio C Hamano [Mon, 4 Jun 2018 12:41:41 +0000 (21:41 +0900)] 
Git 2.18-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'bc/t3430-fixup'
Junio C Hamano [Mon, 4 Jun 2018 12:39:50 +0000 (21:39 +0900)] 
Merge branch 'bc/t3430-fixup'

Test fix.

* bc/t3430-fixup:
  t3430: test clean-up

6 years agoMerge branch 'bw/refspec-api'
Junio C Hamano [Mon, 4 Jun 2018 12:39:50 +0000 (21:39 +0900)] 
Merge branch 'bw/refspec-api'

Hotfix.

* bw/refspec-api:
  refspec-api: avoid uninitialized field in refspec item

6 years agoMerge branch 'tg/doc-sec-list'
Junio C Hamano [Mon, 4 Jun 2018 12:39:49 +0000 (21:39 +0900)] 
Merge branch 'tg/doc-sec-list'

Doc update.

* tg/doc-sec-list:
  note git-security@googlegroups.com in more places
  SubmittingPatches: replace numbered attributes with names

6 years agoMerge branch 'rd/p4-doc-markup-env'
Junio C Hamano [Mon, 4 Jun 2018 12:39:49 +0000 (21:39 +0900)] 
Merge branch 'rd/p4-doc-markup-env'

Doc markup update.

* rd/p4-doc-markup-env:
  p4.txt: Use backquotes for variable names

6 years agoMerge branch 'nd/remote-update-doc'
Junio C Hamano [Mon, 4 Jun 2018 12:39:48 +0000 (21:39 +0900)] 
Merge branch 'nd/remote-update-doc'

"git remote update" can take both a single remote nickname and a
nickname for remote groups, but only one of them was documented.

* nd/remote-update-doc:
  remote: doc typofix
  remote.txt: update documentation for 'update' command

6 years agoMerge branch 'jt/submodule-pull-recurse-rebase'
Junio C Hamano [Mon, 4 Jun 2018 12:39:48 +0000 (21:39 +0900)] 
Merge branch 'jt/submodule-pull-recurse-rebase'

"git pull -recurse-submodules --rebase", when the submodule
repository's history did not have anything common between ours and
the upstream's, failed to execute.  We need to fetch from them to
continue even in such a case.

* jt/submodule-pull-recurse-rebase:
  submodule: do not pass null OID to setup_revisions

6 years agoremote: doc typofix
Duy Nguyen [Wed, 30 May 2018 15:37:01 +0000 (17:37 +0200)] 
remote: doc typofix

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agosha1-file.c: correct $GITDIR to $GIT_DIR in a comment
Robert P. J. Day [Sun, 3 Jun 2018 14:32:50 +0000 (10:32 -0400)] 
sha1-file.c: correct $GITDIR to $GIT_DIR in a comment

Fix single misspelling of $GITDIR to correct $GIT_DIR in a comment.

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot3430: test clean-up
brian m. carlson [Fri, 1 Jun 2018 17:46:39 +0000 (17:46 +0000)] 
t3430: test clean-up

Remove unnecessary test_tick etc...

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoA bit more topics before -rc1
Junio C Hamano [Fri, 1 Jun 2018 06:16:15 +0000 (15:16 +0900)] 
A bit more topics before -rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'bw/ref-prefix-for-configured-refspec'
Junio C Hamano [Fri, 1 Jun 2018 06:15:35 +0000 (15:15 +0900)] 
Merge branch 'bw/ref-prefix-for-configured-refspec'

* bw/ref-prefix-for-configured-refspec:
  fetch: do not pass ref-prefixes for fetch by exact SHA1

6 years agofetch: do not pass ref-prefixes for fetch by exact SHA1
Jonathan Nieder [Thu, 31 May 2018 07:23:39 +0000 (00:23 -0700)] 
fetch: do not pass ref-prefixes for fetch by exact SHA1

When v2.18.0-rc0~10^2~1 (refspec: consolidate ref-prefix generation
logic, 2018-05-16) factored out the ref-prefix generation code for
reuse, it left out the 'if (!item->exact_sha1)' test in the original
ref-prefix generation code. As a result, fetches by SHA-1 generate
ref-prefixes as though the SHA-1 being fetched were an abbreviated ref
name:

 $ GIT_TRACE_PACKET=1 bin-wrappers/git -c protocol.version=2 \
fetch origin 12039e008f9a4e3394f3f94f8ea897785cb09448
[...]
 packet:        fetch> ref-prefix 12039e008f9a4e3394f3f94f8ea897785cb09448
 packet:        fetch> ref-prefix refs/12039e008f9a4e3394f3f94f8ea897785cb09448
 packet:        fetch> ref-prefix refs/tags/12039e008f9a4e3394f3f94f8ea897785cb09448
 packet:        fetch> ref-prefix refs/heads/12039e008f9a4e3394f3f94f8ea897785cb09448
 packet:        fetch> ref-prefix refs/remotes/12039e008f9a4e3394f3f94f8ea897785cb09448
 packet:        fetch> ref-prefix refs/remotes/12039e008f9a4e3394f3f94f8ea897785cb09448/HEAD
 packet:        fetch> 0000

If there is another ref name on the command line or the object being
fetched is already available locally, then that's mostly harmless.
But otherwise, we error out with

 fatal: no matching remote head

since the server did not send any refs we are interested in.  Filter
out the exact_sha1 refspecs to avoid this.

This patch adds a test to check this behavior that notices another
behavior difference between protocol v0 and v2 in the process.  Add a
NEEDSWORK comment to clear it up.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'cc/tests-without-assuming-ref-files-backend'
Junio C Hamano [Fri, 1 Jun 2018 06:06:41 +0000 (15:06 +0900)] 
Merge branch 'cc/tests-without-assuming-ref-files-backend'

Quite a many tests assumed that newly created refs are made as
loose refs using the files backend, which have been updated to use
proper plumbing like rev-parse and update-ref, to avoid breakage
once we start using different ref backends.

* cc/tests-without-assuming-ref-files-backend:
  t990X: use '.git/objects' as 'deep inside .git' path
  t: make many tests depend less on the refs being files

6 years agoMerge branch 'rd/init-typo'
Junio C Hamano [Fri, 1 Jun 2018 06:06:40 +0000 (15:06 +0900)] 
Merge branch 'rd/init-typo'

Message fix.

* rd/init-typo:
  init: fix grammar in "templates not found" msg

6 years agoMerge branch 'js/rebase-recreate-merge'
Junio C Hamano [Fri, 1 Jun 2018 06:06:40 +0000 (15:06 +0900)] 
Merge branch 'js/rebase-recreate-merge'

Hotfixes.

* js/rebase-recreate-merge:
  sequencer: ensure labels that are object IDs are rewritten
  git-rebase--interactive: fix copy-paste mistake

6 years agoMerge branch 'rd/tag-doc-lightweight'
Junio C Hamano [Fri, 1 Jun 2018 06:06:39 +0000 (15:06 +0900)] 
Merge branch 'rd/tag-doc-lightweight'

Docfix.

* rd/tag-doc-lightweight:
  tag: clarify in the doc that a tag can refer to a non-commit object

6 years agoMerge branch 'rd/doc-options-placeholder'
Junio C Hamano [Fri, 1 Jun 2018 06:06:39 +0000 (15:06 +0900)] 
Merge branch 'rd/doc-options-placeholder'

Docfix.

* rd/doc-options-placeholder:
  Use proper syntax for replaceables in command docs

6 years agoMerge branch 'en/rev-parse-invalid-range'
Junio C Hamano [Fri, 1 Jun 2018 06:06:39 +0000 (15:06 +0900)] 
Merge branch 'en/rev-parse-invalid-range'

"git rev-parse Y..." etc. misbehaved when given endpoints were
not committishes.

* en/rev-parse-invalid-range:
  rev-parse: check lookup'ed commit references for NULL

6 years agoMerge branch 'ld/p4-unshelve'
Junio C Hamano [Fri, 1 Jun 2018 06:06:38 +0000 (15:06 +0900)] 
Merge branch 'ld/p4-unshelve'

"git p4" learned to "unshelve" shelved commit from P4.

* ld/p4-unshelve:
  git-p4: add unshelve command

6 years agoMerge branch 'nd/use-opt-int-set-f'
Junio C Hamano [Fri, 1 Jun 2018 06:06:38 +0000 (15:06 +0900)] 
Merge branch 'nd/use-opt-int-set-f'

Code simplification.

* nd/use-opt-int-set-f:
  Use OPT_SET_INT_F() for cmdline option specification

6 years agoMerge branch 'pa/import-tars-long-names'
Junio C Hamano [Fri, 1 Jun 2018 06:06:38 +0000 (15:06 +0900)] 
Merge branch 'pa/import-tars-long-names'

The import-tars script (in contrib/) has been taught to handle
tarballs with overly long paths that use PAX extended headers.

* pa/import-tars-long-names:
  import-tars: read overlong names from pax extended header

6 years agoMerge branch 'nd/command-list'
Junio C Hamano [Fri, 1 Jun 2018 06:06:37 +0000 (15:06 +0900)] 
Merge branch 'nd/command-list'

The list of commands with their various attributes were spread
across a few places in the build procedure, but it now is getting a
bit more consolidated to allow more automation.

* nd/command-list:
  completion: allow to customize the completable command list
  completion: add and use --list-cmds=alias
  completion: add and use --list-cmds=nohelpers
  Move declaration for alias.c to alias.h
  completion: reduce completable command list
  completion: let git provide the completable command list
  command-list.txt: documentation and guide line
  help: use command-list.txt for the source of guides
  help: add "-a --verbose" to list all commands with synopsis
  git: support --list-cmds=list-<category>
  completion: implement and use --list-cmds=main,others
  git --list-cmds: collect command list in a string_list
  git.c: convert --list-* to --list-cmds=*
  Remove common-cmds.h
  help: use command-list.h for common command list
  generate-cmds.sh: export all commands to command-list.h
  generate-cmds.sh: factor out synopsis extract code

6 years agoindex-pack: handle --strict checks of non-repo packs
Jeff King [Thu, 31 May 2018 22:45:31 +0000 (18:45 -0400)] 
index-pack: handle --strict checks of non-repo packs

Commit 73c3f0f704 (index-pack: check .gitmodules files with
--strict, 2018-05-04) added a call to add_packed_git(), with
the intent that the newly-indexed objects would be available
to the process when we run fsck_finish().  But that's not
what add_packed_git() does. It only allocates the struct,
and you must install_packed_git() on the result. So that
call was effectively doing nothing (except leaking a
struct).

But wait, we passed all of the tests! Does that mean we
don't need the call at all?

For normal cases, no. When we run "index-pack --stdin"
inside a repository, we write the new pack into the object
directory. If fsck_finish() needs to access one of the new
objects, then our initial lookup will fail to find it, but
we'll follow up by running reprepare_packed_git() and
looking again. That logic was meant to handle somebody else
repacking simultaneously, but it ends up working for us
here.

But there is a case that does need this, that we were not
testing. You can run "git index-pack foo.pack" on any file,
even when it is not inside the object directory. Or you may
not even be in a repository at all! This case fails without
doing the proper install_packed_git() call.

We can make this work by adding the install call.

Note that we should be prepared to handle add_packed_git()
failing. We can just silently ignore this case, though. If
fsck_finish() later needs the objects and they're not
available, it will complain itself. And if it doesn't
(because we were able to resolve the whole fsck in the first
pass), then it actually isn't an interesting error at all.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoprepare_commit_graft: treat non-repository as a noop
Jeff King [Thu, 31 May 2018 22:42:53 +0000 (18:42 -0400)] 
prepare_commit_graft: treat non-repository as a noop

The parse_commit_buffer() function consults lookup_commit_graft()
to see if we need to rewrite parents. The latter will look
at $GIT_DIR/info/grafts. If you're outside of a repository,
then this will trigger a BUG() as of b1ef400eec (setup_git_env:
avoid blind fall-back to ".git", 2016-10-20).

It's probably uncommon to actually parse a commit outside of
a repository, but you can see it in action with:

  cd /not/a/git/repo
  git index-pack --strict /some/file.pack

This works fine without --strict, but the fsck checks will
try to parse any commits, triggering the BUG(). We can fix
that by teaching the graft code to behave as if there are no
grafts when we aren't in a repository.

Arguably index-pack (and fsck) are wrong to consider grafts
at all. So another solution is to disable grafts entirely
for those commands. But given that the graft feature is
deprecated anyway, it's not worth even thinking through the
ramifications that might have.

There is one other corner case I considered here. What
should:

  cd /not/a/git/repo
  export GIT_GRAFT_FILE=/file/with/grafts
  git index-pack --strict /some/file.pack

do? We don't have a repository, but the user has pointed us
directly at a graft file, which we could respect. I believe
this case did work that way prior to b1ef400eec. However,
fixing it now would be pretty invasive. Back then we would
just call into setup_git_env() even without a repository.
But these days it actually takes a git_dir argument. So
there would be a fair bit of refactoring of the setup code
involved.

Given the obscurity of this case, plus the fact that grafts
are deprecated and probably shouldn't work under index-pack
anyway, it's not worth pursuing further. This patch at least
un-breaks the common case where you're _not_ using grafts,
but we BUG() anyway trying to even find that out.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorefspec-api: avoid uninitialized field in refspec item
Junio C Hamano [Fri, 1 Jun 2018 02:33:19 +0000 (11:33 +0900)] 
refspec-api: avoid uninitialized field in refspec item

When parse_refspec() function was created at 3eec3700 ("refspec:
factor out parsing a single refspec", 2018-05-16) to take a caller
supplied piece of memory to fill parsed refspec_item, it forgot that
a refspec without colon must set item->dst to NULL to let the users
of refspec know that the result of the fetch does not get stored in
an ref on our side.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agop4.txt: Use backquotes for variable names
Robert P. J. Day [Wed, 30 May 2018 13:04:00 +0000 (09:04 -0400)] 
p4.txt: Use backquotes for variable names

For consistency, use backquotes when referring to environment
variables, as is done in other man pages.

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoremote.txt: update documentation for 'update' command
Duy Nguyen [Wed, 30 May 2018 15:37:01 +0000 (17:37 +0200)] 
remote.txt: update documentation for 'update' command

Commit b344e1614b (git remote update: Fallback to remote if group does
not exist - 2009-04-06) lets "git remote update" accept individual
remotes as well. Previously this command only accepted remote
groups. The commit updates the command syntax but not the actual
document of this subcommand. Update it.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoRelNotes: remove duplicate release note
Elijah Newren [Thu, 31 May 2018 03:24:14 +0000 (20:24 -0700)] 
RelNotes: remove duplicate release note

In the 2.18 cycle, directory rename detection was merged, then reverted,
then reworked in such a way to fix another prominent bug in addition to
the original problem causing it to be reverted.  When the reworked series
was merged, we ended up with two nearly duplicate release notes.  Remove
the second copy, but preserve the information about the extra bug fix.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agonote git-security@googlegroups.com in more places
Thomas Gummerer [Wed, 30 May 2018 20:52:55 +0000 (21:52 +0100)] 
note git-security@googlegroups.com in more places

Add a mention of the security mailing list to the README, and to
Documentation/SubmittingPatches..  2caa7b8d27 ("git manpage: note
git-security@googlegroups.com", 2018-03-08) already added it to the
man page, but for developers either the README, or the documentation
on how to contribute (SubmittingPatches) may be the first place to
look.

Use the same wording as we already have on the git-scm.com website and
in the man page for the README, while the wording is adjusted in
SubmittingPatches to match the surrounding document better.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoSubmittingPatches: replace numbered attributes with names
Thomas Gummerer [Wed, 30 May 2018 20:52:54 +0000 (21:52 +0100)] 
SubmittingPatches: replace numbered attributes with names

Use names instead of numbers for the AsciiDoc attributes that are used
for the footnotes.  We will add more footnotes in subsequent commits,
and attributes should ideally all be unique.  Having named attributes
will help ensure uniqueness, and we won't have to re-number the
attributes if we add a footnote earlier in the document.

In addition it also clarifies that the attribute name/number is not
related to the number the footnote will get in the output.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoGit 2.18-rc0 v2.18.0-rc0
Junio C Hamano [Wed, 30 May 2018 12:51:57 +0000 (21:51 +0900)] 
Git 2.18-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'bw/remote-curl-compressed-responses'
Junio C Hamano [Wed, 30 May 2018 12:51:29 +0000 (21:51 +0900)] 
Merge branch 'bw/remote-curl-compressed-responses'

Our HTTP client code used to advertise that we accept gzip encoding
from the other side; instead, just let cURL library to advertise
and negotiate the best one.

* bw/remote-curl-compressed-responses:
  remote-curl: accept compressed responses with protocol v2
  remote-curl: accept all encodings supported by curl

6 years agoMerge branch 'ma/unpack-trees-free-msgs'
Junio C Hamano [Wed, 30 May 2018 12:51:29 +0000 (21:51 +0900)] 
Merge branch 'ma/unpack-trees-free-msgs'

Leak plugging.

* ma/unpack-trees-free-msgs:
  unpack_trees_options: free messages when done
  argv-array: return the pushed string from argv_push*()
  merge-recursive: provide pair of `unpack_trees_{start,finish}()`
  merge: setup `opts` later in `checkout_fast_forward()`

6 years agoMerge branch 'bc/hash-independent-tests'
Junio C Hamano [Wed, 30 May 2018 12:51:28 +0000 (21:51 +0900)] 
Merge branch 'bc/hash-independent-tests'

Many tests hardcode the raw object names, which would change once
we migrate away from SHA-1.  While some of them must test against
exact object names, most of them do not have to use hardcoded
constants in the test.  The latter kind of tests have been updated
to test the moral equivalent of the original without hardcoding the
actual object names.

* bc/hash-independent-tests: (28 commits)
  t5300: abstract away SHA-1-specific constants
  t4208: abstract away SHA-1-specific constants
  t4045: abstract away SHA-1-specific constants
  t4042: abstract away SHA-1-specific constants
  t4205: sort log output in a hash-independent way
  t/lib-diff-alternative: abstract away SHA-1-specific constants
  t4030: abstract away SHA-1-specific constants
  t4029: abstract away SHA-1-specific constants
  t4029: fix test indentation
  t4022: abstract away SHA-1-specific constants
  t4020: abstract away SHA-1-specific constants
  t4014: abstract away SHA-1-specific constants
  t4008: abstract away SHA-1-specific constants
  t4007: abstract away SHA-1-specific constants
  t3905: abstract away SHA-1-specific constants
  t3702: abstract away SHA-1-specific constants
  t3103: abstract away SHA-1-specific constants
  t2203: abstract away SHA-1-specific constants
  t: skip pack tests if not using SHA-1
  t4044: skip test if not using SHA-1
  ...

6 years agoMerge branch 'ma/regex-no-regfree-after-comp-fail'
Junio C Hamano [Wed, 30 May 2018 12:51:28 +0000 (21:51 +0900)] 
Merge branch 'ma/regex-no-regfree-after-comp-fail'

We used to call regfree() after regcomp() failed in some codepaths,
which have been corrected.

* ma/regex-no-regfree-after-comp-fail:
  regex: do not call `regfree()` if compilation fails

6 years agoMerge branch 'ma/config-store-data-clear'
Junio C Hamano [Wed, 30 May 2018 12:51:28 +0000 (21:51 +0900)] 
Merge branch 'ma/config-store-data-clear'

Leak plugging.

* ma/config-store-data-clear:
  config: let `config_store_data_clear()` handle `key`
  config: let `config_store_data_clear()` handle `value_regex`
  config: free resources of `struct config_store_data`

6 years agoMerge branch 'jk/snprintf-truncation'
Junio C Hamano [Wed, 30 May 2018 12:51:27 +0000 (21:51 +0900)] 
Merge branch 'jk/snprintf-truncation'

Avoid unchecked snprintf() to make future code auditing easier.

* jk/snprintf-truncation:
  fmt_with_err: add a comment that truncation is OK
  shorten_unambiguous_ref: use xsnprintf
  fsmonitor: use internal argv_array of struct child_process
  log_write_email_headers: use strbufs
  http: use strbufs instead of fixed buffers

6 years agoMerge branch 'jk/config-blob-sans-repo'
Junio C Hamano [Wed, 30 May 2018 12:51:27 +0000 (21:51 +0900)] 
Merge branch 'jk/config-blob-sans-repo'

Error codepath fix.

* jk/config-blob-sans-repo:
  config: die when --blob is used outside a repository

6 years agoMerge branch 'sb/submodule-merge-in-merge-recursive'
Junio C Hamano [Wed, 30 May 2018 12:51:27 +0000 (21:51 +0900)] 
Merge branch 'sb/submodule-merge-in-merge-recursive'

By code restructuring of submodule merge in merge-recursive,
informational messages from the codepath are now given using the
same mechanism as other output, and honor the merge.verbosity
configuration.  The code also learned to give a few new messages
when a submodule three-way merge resolves cleanly when one side
records a descendant of the commit chosen by the other side.

* sb/submodule-merge-in-merge-recursive:
  merge-recursive: give notice when submodule commit gets fast-forwarded
  merge-recursive: i18n submodule merge output and respect verbosity
  submodule.c: move submodule merging to merge-recursive.c

6 years agoMerge branch 'js/empty-config-section-fix'
Junio C Hamano [Wed, 30 May 2018 12:51:26 +0000 (21:51 +0900)] 
Merge branch 'js/empty-config-section-fix'

Error codepath fix.

* js/empty-config-section-fix:
  config: a user-provided invalid section is not a BUG

6 years agoMerge branch 'bw/ref-prefix-for-configured-refspec'
Junio C Hamano [Wed, 30 May 2018 12:51:26 +0000 (21:51 +0900)] 
Merge branch 'bw/ref-prefix-for-configured-refspec'

"git fetch $there $refspec" that talks over protocol v2 can take
advantage of server-side ref filtering; the code has been extended
so that this mechanism triggers also when fetching with configured
refspec.

* bw/ref-prefix-for-configured-refspec: (38 commits)
  fetch: generate ref-prefixes when using a configured refspec
  refspec: consolidate ref-prefix generation logic
  submodule: convert push_unpushed_submodules to take a struct refspec
  remote: convert check_push_refs to take a struct refspec
  remote: convert match_push_refs to take a struct refspec
  http-push: store refspecs in a struct refspec
  transport: remove transport_verify_remote_names
  send-pack: store refspecs in a struct refspec
  transport: convert transport_push to take a struct refspec
  push: convert to use struct refspec
  push: check for errors earlier
  remote: convert match_explicit_refs to take a struct refspec
  remote: convert get_ref_match to take a struct refspec
  remote: convert query_refspecs to take a struct refspec
  remote: convert apply_refspecs to take a struct refspec
  remote: convert get_stale_heads to take a struct refspec
  fetch: convert prune_refs to take a struct refspec
  fetch: convert get_ref_map to take a struct refspec
  fetch: convert do_fetch to take a struct refspec
  refspec: remove the deprecated functions
  ...

6 years agoMerge branch 'sb/grep-die-on-unreadable-index'
Junio C Hamano [Wed, 30 May 2018 12:51:26 +0000 (21:51 +0900)] 
Merge branch 'sb/grep-die-on-unreadable-index'

Error behaviour of "git grep" when it cannot read the index was
inconsistent with other commands that uses the index, which has
been corrected to error out early.

* sb/grep-die-on-unreadable-index:
  grep: handle corrupt index files early

6 years agoThe seventh batch for 2.18
Junio C Hamano [Wed, 30 May 2018 05:10:34 +0000 (14:10 +0900)] 
The seventh batch for 2.18

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'sb/submodule-update-try-harder'
Junio C Hamano [Wed, 30 May 2018 05:04:12 +0000 (14:04 +0900)] 
Merge branch 'sb/submodule-update-try-harder'

"git submodule update" attempts two different kinds of "git fetch"
against the upstream repository to grab a commit bound at the
submodule's path, but it incorrectly gave up if the first kind
(i.e. a normal fetch) failed, making the second "last resort" one
(i.e. fetching an exact commit object by object name) ineffective.
This has been corrected.

* sb/submodule-update-try-harder:
  git-submodule.sh: try harder to fetch a submodule

6 years agoMerge branch 'lm/credential-netrc'
Junio C Hamano [Wed, 30 May 2018 05:04:11 +0000 (14:04 +0900)] 
Merge branch 'lm/credential-netrc'

Update credential-netrc helper (in contrib/) to allow customizing
the GPG used to decrypt the encrypted .netrc file.

* lm/credential-netrc:
  git-credential-netrc: accept gpg option
  git-credential-netrc: adapt to test framework for git

6 years agoMerge branch 'ab/get-short-oid'
Junio C Hamano [Wed, 30 May 2018 05:04:11 +0000 (14:04 +0900)] 
Merge branch 'ab/get-short-oid'

When a short hexadecimal string is used to name an object but there
are multiple objects that share the string as the prefix of their
names, the code lists these ambiguous candidates in a help message.
These object names are now sorted according to their types for
easier eyeballing.

* ab/get-short-oid:
  get_short_oid: sort ambiguous objects by type, then SHA-1
  sha1-name.c: move around the collect_ambiguous() function
  git-p4: change "commitish" typo to "committish"
  sha1-array.h: align function arguments
  sha1-name.c: remove stray newline

6 years agoMerge branch 'jt/partial-clone-proto-v2'
Junio C Hamano [Wed, 30 May 2018 05:04:10 +0000 (14:04 +0900)] 
Merge branch 'jt/partial-clone-proto-v2'

Transfer protocol v2 learned to support the partial clone.

* jt/partial-clone-proto-v2:
  {fetch,upload}-pack: support filter in protocol v2
  upload-pack: read config when serving protocol v2
  upload-pack: fix error message typo

6 years agoMerge branch 'bc/object-id'
Junio C Hamano [Wed, 30 May 2018 05:04:10 +0000 (14:04 +0900)] 
Merge branch 'bc/object-id'

Conversion from uchar[20] to struct object_id continues.

* bc/object-id: (42 commits)
  merge-one-file: compute empty blob object ID
  add--interactive: compute the empty tree value
  Update shell scripts to compute empty tree object ID
  sha1_file: only expose empty object constants through git_hash_algo
  dir: use the_hash_algo for empty blob object ID
  sequencer: use the_hash_algo for empty tree object ID
  cache-tree: use is_empty_tree_oid
  sha1_file: convert cached object code to struct object_id
  builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
  builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
  wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
  submodule: convert several uses of EMPTY_TREE_SHA1_HEX
  sequencer: convert one use of EMPTY_TREE_SHA1_HEX
  merge: convert empty tree constant to the_hash_algo
  builtin/merge: switch tree functions to use object_id
  builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
  sha1-file: add functions for hex empty tree and blob OIDs
  builtin/receive-pack: avoid hard-coded constants for push certs
  diff: specify abbreviation size in terms of the_hash_algo
  upload-pack: replace use of several hard-coded constants
  ...

6 years agoMerge branch 'sb/blame-color'
Junio C Hamano [Wed, 30 May 2018 05:04:09 +0000 (14:04 +0900)] 
Merge branch 'sb/blame-color'

"git blame" learns to unhighlight uninteresting metadata from the
originating commit on lines that are the same as the previous one,
and also paint lines in different colors depending on the age of
the commit.

* sb/blame-color:
  builtin/blame: add new coloring scheme config
  builtin/blame: highlight recently changed lines
  builtin/blame: dim uninteresting metadata lines

6 years agoMerge branch 'cf/submodule-progress-dissociate'
Junio C Hamano [Wed, 30 May 2018 05:04:09 +0000 (14:04 +0900)] 
Merge branch 'cf/submodule-progress-dissociate'

"git submodule update" and "git submodule add" supported the
"--reference" option to borrow objects from a neighbouring local
repository like "git clone" does, but lacked the more recent
invention "--dissociate".  Also "git submodule add" has been taught
to take the "--progress" option.

* cf/submodule-progress-dissociate:
  submodule: add --dissociate option to add/update commands
  submodule: add --progress option to add command
  submodule: clean up substitutions in script

6 years agoMerge branch 'sg/complete-paths'
Junio C Hamano [Wed, 30 May 2018 05:04:08 +0000 (14:04 +0900)] 
Merge branch 'sg/complete-paths'

Command line completion (in contrib/) learned to complete pathnames
for various commands better.

* sg/complete-paths:
  t9902-completion: exercise __git_complete_index_file() directly
  completion: don't return with error from __gitcomp_file_direct()
  completion: fill COMPREPLY directly when completing paths
  completion: improve handling quoted paths in 'git ls-files's output
  completion: remove repeated dirnames with 'awk' during path completion
  t9902-completion: ignore COMPREPLY element order in some tests
  completion: use 'awk' to strip trailing path components
  completion: let 'ls-files' and 'diff-index' filter matching paths
  completion: improve handling quoted paths on the command line
  completion: support completing non-ASCII pathnames
  completion: simplify prefix path component handling during path completion
  completion: move __git_complete_index_file() next to its helpers
  t9902-completion: add tests demonstrating issues with quoted pathnames

6 years agoMerge branch 'nd/travis-gcc-8'
Junio C Hamano [Wed, 30 May 2018 05:04:08 +0000 (14:04 +0900)] 
Merge branch 'nd/travis-gcc-8'

Developer support.  Use newer GCC on one of the builds done at
TravisCI.org to get more warnings and errors diagnosed.

* nd/travis-gcc-8:
  travis-ci: run gcc-8 on linux-gcc jobs

6 years agoMerge branch 'nd/pack-struct-commit'
Junio C Hamano [Wed, 30 May 2018 05:04:08 +0000 (14:04 +0900)] 
Merge branch 'nd/pack-struct-commit'

Memory optimization.

* nd/pack-struct-commit:
  commit.h: rearrange 'index' to shrink struct commit

6 years agoMerge branch 'ma/create-pseudoref-with-null-old-oid'
Junio C Hamano [Wed, 30 May 2018 05:04:08 +0000 (14:04 +0900)] 
Merge branch 'ma/create-pseudoref-with-null-old-oid'

"git update-ref A B" is supposed to ensure that ref A does not yet
exist when B is a NULL OID, but this check was not done correctly
for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.

* ma/create-pseudoref-with-null-old-oid:
  refs: handle zero oid for pseudorefs
  t1400: add tests around adding/deleting pseudorefs
  refs.c: refer to "object ID", not "sha1", in error messages

6 years agoMerge branch 'jk/unavailable-can-be-missing'
Junio C Hamano [Wed, 30 May 2018 05:04:07 +0000 (14:04 +0900)] 
Merge branch 'jk/unavailable-can-be-missing'

Code clean-up to turn history traversal more robust in a
semi-corrupt repository.

* jk/unavailable-can-be-missing:
  mark_parents_uninteresting(): avoid most allocation
  mark_parents_uninteresting(): replace list with stack
  mark_parents_uninteresting(): drop missing object check
  mark_tree_contents_uninteresting(): drop missing object check

6 years agoMerge branch 'bp/status-rename-config'
Junio C Hamano [Wed, 30 May 2018 05:04:07 +0000 (14:04 +0900)] 
Merge branch 'bp/status-rename-config'

"git status" learned to honor a new status.renames configuration to
skip rename detection, which could be useful for those who want to
do so without disabling the default rename detection done by the
"git diff" command.

* bp/status-rename-config:
  add status config and command line options for rename detection

6 years agoMerge branch 'js/use-bug-macro'
Junio C Hamano [Wed, 30 May 2018 05:04:07 +0000 (14:04 +0900)] 
Merge branch 'js/use-bug-macro'

Developer support update, by using BUG() macro instead of die() to
mark codepaths that should not happen more clearly.

* js/use-bug-macro:
  BUG_exit_code: fix sparse "symbol not declared" warning
  Convert remaining die*(BUG) messages
  Replace all die("BUG: ...") calls by BUG() ones
  run-command: use BUG() to report bugs, not die()
  test-tool: help verifying BUG() code paths

6 years agoMerge branch 'rs/no-null-ptr-arith-in-fast-export'
Junio C Hamano [Wed, 30 May 2018 05:04:06 +0000 (14:04 +0900)] 
Merge branch 'rs/no-null-ptr-arith-in-fast-export'

Code clean-up to avoid non-standard-conformant pointer arithmetic.

* rs/no-null-ptr-arith-in-fast-export:
  fast-export: avoid NULL pointer arithmetic

6 years agoMerge branch 'nd/repo-clear-keep-the-index'
Junio C Hamano [Wed, 30 May 2018 05:04:05 +0000 (14:04 +0900)] 
Merge branch 'nd/repo-clear-keep-the-index'

the_repository->index is not a allocated piece of memory but
repo_clear() indiscriminately attempted to free(3) it, which has
been corrected.

* nd/repo-clear-keep-the-index:
  repository: fix free problem with repo_clear(the_repository)

6 years agoMerge branch 'ma/lockfile-cleanup'
Junio C Hamano [Wed, 30 May 2018 05:04:05 +0000 (14:04 +0900)] 
Merge branch 'ma/lockfile-cleanup'

Code clean-up to adjust to a more recent lockfile API convention that
allows lockfile instances kept on the stack.

* ma/lockfile-cleanup:
  lock_file: move static locks into functions
  lock_file: make function-local locks non-static
  refs.c: do not die if locking fails in `delete_pseudoref()`
  refs.c: do not die if locking fails in `write_pseudoref()`
  t/helper/test-write-cache: clean up lock-handling

6 years agoMerge branch 'sg/t6500-no-redirect-of-stdin'
Junio C Hamano [Wed, 30 May 2018 05:04:04 +0000 (14:04 +0900)] 
Merge branch 'sg/t6500-no-redirect-of-stdin'

Test cleanup.

* sg/t6500-no-redirect-of-stdin:
  t6050-replace: don't disable stdin for the whole test script

6 years agoMerge branch 'bp/merge-rename-config'
Junio C Hamano [Wed, 30 May 2018 05:04:04 +0000 (14:04 +0900)] 
Merge branch 'bp/merge-rename-config'

With merge.renames configuration set to false, the recursive merge
strategy can be told not to spend cycles trying to find renamed
paths and merge them accordingly.

* bp/merge-rename-config:
  merge: pass aggressive when rename detection is turned off
  merge: add merge.renames config setting
  merge: update documentation for {merge,diff}.renameLimit

6 years agoMerge branch 'js/sequencer-and-root-commits'
Junio C Hamano [Wed, 30 May 2018 05:04:04 +0000 (14:04 +0900)] 
Merge branch 'js/sequencer-and-root-commits'

The implementation of "git rebase -i --root" has been updated to use
the sequencer machinery more.

* js/sequencer-and-root-commits:
  rebase --rebase-merges: root commits can be cousins, too
  rebase --rebase-merges: a "merge" into a new root is a fast-forward
  sequencer: allow introducing new root commits
  rebase -i --root: let the sequencer handle even the initial part
  sequencer: learn about the special "fake root commit" handling
  sequencer: extract helper to update active_cache_tree

6 years agoMerge branch 'dd/send-email-reedit'
Junio C Hamano [Wed, 30 May 2018 05:04:03 +0000 (14:04 +0900)] 
Merge branch 'dd/send-email-reedit'

"git send-email" can sometimes offer confirmation dialog "Send this
email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
'Edit' has been added to this dialog's choice.

* dd/send-email-reedit:
  git-send-email: allow re-editing of message

6 years agoinit: fix grammar in "templates not found" msg
Robert P. J. Day [Tue, 29 May 2018 12:14:35 +0000 (08:14 -0400)] 
init: fix grammar in "templates not found" msg

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>