]> Kevux Git Server - rit/log
rit
8 years agocommit: allocate array using object_id size
Patryk Obara [Fri, 18 Aug 2017 18:33:13 +0000 (20:33 +0200)]
commit: allocate array using object_id size

struct commit_graft aggregates an array of object_id's, which have
size >= GIT_MAX_RAWSZ bytes. This change prevents memory allocation
error when size of object_id is larger than GIT_SHA1_RAWSZ.

Signed-off-by: Patryk Obara <patryk.obara@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agocommit: replace the raw buffer with strbuf in read_graft_line
Patryk Obara [Fri, 18 Aug 2017 18:33:12 +0000 (20:33 +0200)]
commit: replace the raw buffer with strbuf in read_graft_line

This simplifies function declaration and allows for use of strbuf_rtrim
instead of modifying buffer directly.

Signed-off-by: Patryk Obara <patryk.obara@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoDocumentation/git-for-each-ref: clarify peeling of tags for --format
Michael J Gruber [Fri, 18 Aug 2017 14:51:23 +0000 (16:51 +0200)]
Documentation/git-for-each-ref: clarify peeling of tags for --format

`*` in format strings means peeling of tag objects so that object field
names refer to the object that the tag object points at, instead of the
tag object itself.

Currently, this is documented using grammar that is clearly inspired by
classical latin, though missing more than an article in order to be
classical english.

Try and straighten that explanation out a bit.

Signed-off-by: Michael J Gruber <git@grubix.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoDocumentation: use proper wording for ref format strings
Michael J Gruber [Fri, 18 Aug 2017 14:51:22 +0000 (16:51 +0200)]
Documentation: use proper wording for ref format strings

Various commands list refs and allow to use a format string for the
output that interpolates from the ref as well as the object it points
at (for-each-ref; branch and tag in list mode).

Currently, the documentation talks about interpolating from the object.
This is confusing because a ref points to an object but not vice versa,
so the object cannot possible know %(refname), for example. Thus, this is
wrong independent of refs being objects (one day, maybe) or not.

Change the wording to make this clearer (and distinguish it from formats
for the log family).

Signed-off-by: Michael J Gruber <git@grubix.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1_file: fix definition of null_sha1
Patryk Obara [Fri, 18 Aug 2017 01:59:35 +0000 (03:59 +0200)]
sha1_file: fix definition of null_sha1

The array is declared in cache.h as:

  extern const unsigned char null_sha1[GIT_MAX_RAWSZ];

Definition in sha1_file.c must match.

Signed-off-by: Patryk Obara <patryk.obara@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agogit-grep: correct exit code with --quiet and -L
Anthony Sottile [Fri, 18 Aug 2017 01:38:51 +0000 (18:38 -0700)]
git-grep: correct exit code with --quiet and -L

The handling of `status_only` no longer interferes with the handling of
`unmatch_name_only`.  `--quiet` no longer affects the exit code when using
`-L`/`--files-without-match`.

Signed-off-by: Anthony Sottile <asottile@umich.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: retire sane_truncate_fn
Junio C Hamano [Thu, 17 Aug 2017 17:27:28 +0000 (10:27 -0700)]
diff: retire sane_truncate_fn

Long time ago, 23707811 ("diff: do not chomp hunk-header in the
middle of a character", 2008-01-02) introduced sane_truncate_line()
helper function to trim the "function header" line that is shown at
the end of the hunk header line, in order to avoid chomping it in
the middle of a single UTF-8 character.  It also added a facility to
define a custom callback function to make it possible to extend it
to non UTF-8 encodings.

During the following 8 1/2 years, nobody found need for this custom
callback facility.

A custom callback function is a wrong design to use here anyway---if
your contents need support for non UTF-8 encoding, you shouldn't
have to write a custom function and recompile Git to plumb it in.  A
better approach would be to extend sane_truncate_line() function and
have a new member in emit_callback to conditionally trigger it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agofiles-backend: cheapen refname_available check when locking refs
Michael Haggerty [Thu, 17 Aug 2017 15:12:50 +0000 (17:12 +0200)]
files-backend: cheapen refname_available check when locking refs

When locking references in preparation for updating them, we need to
check that none of the newly added references D/F conflict with
existing references (e.g., we don't allow `refs/foo` to be added if
`refs/foo/bar` already exists, or vice versa).

Prior to 524a9fdb51 (refs_verify_refname_available(): use function in
more places, 2017-04-16), conflicts with existing loose references
were checked by looking directly in the filesystem, and then conflicts
with existing packed references were checked by running
`verify_refname_available_dir()` against the packed-refs cache.

But that commit changed the final check to call
`refs_verify_refname_available()` against the *whole* files ref-store,
including both loose and packed references, with the following
comment:

> This means that those callsites now check for conflicts with all
> references rather than just packed refs, but the performance cost
> shouldn't be significant (and will be regained later).

That comment turned out to be too sanguine. User s@kazlauskas.me
reported that fetches involving a very large number of references in
neighboring directories were slowed down by that change.

The problem is that when fetching, each reference is updated
individually, within its own reference transaction. This is done
because some reference updates might succeed even though others fail.
But every time a reference update transaction is finished,
`clear_loose_ref_cache()` is called. So when it is time to update the
next reference, part of the loose ref cache has to be repopulated for
the `refs_verify_refname_available()` call. If the references are all
in neighboring directories, then the cost of repopulating the
reference cache increases with the number of references, resulting in
O(N²) effort.

The comment above also claims that the performance cost "will be
regained later". The idea was that once the packed-refs were finished
being split out into a separate ref-store, we could limit the
`refs_verify_refname_available()` call to the packed references again.
That is what we do now.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot5526: fix some broken && chains
Heiko Voigt [Thu, 17 Aug 2017 10:36:13 +0000 (12:36 +0200)]
t5526: fix some broken && chains

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agobranch: quote branch/ref names to improve readability
Kaartic Sivaraam [Thu, 17 Aug 2017 02:54:25 +0000 (08:24 +0530)]
branch: quote branch/ref names to improve readability

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agobuiltin/branch: stop supporting the "--set-upstream" option
Kaartic Sivaraam [Thu, 17 Aug 2017 02:54:24 +0000 (08:24 +0530)]
builtin/branch: stop supporting the "--set-upstream" option

The '--set-upstream' option of branch was deprecated in b347d06b
("branch: deprecate --set-upstream and show help if we detect
possible mistaken use", 2012-08-30) and has been planned for removal
ever since.

In order to prevent "--set-upstream" on a command line from being taken as
an abbreviated form of "--set-upstream-to", explicitly catch "--set-upstream"
option and die, instead of just removing it from the list of options.

Before this change, an attempt to use "--set-upstream" resulted in:

    $ git branch
    * master

    $ git branch --set-upstream origin/master
    The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
    Branch origin/master set up to track local branch master.

    $ echo $?
    0

    $ git branch
    * master
      origin/master

With this change, the behaviour becomes like this:

    $ git branch
    * master

    $ git branch --set-upstream origin/master
    fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.

    $ echo $?
    128

    $ git branch
    * master

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot3200: cleanup cruft of a test
Kaartic Sivaraam [Thu, 17 Aug 2017 02:54:23 +0000 (08:24 +0530)]
t3200: cleanup cruft of a test

Avoiding the clean up step of tests may help in some cases but in other
cases they cause the other unrelated tests to fail for unobvious reasons.
It's better to cleanup a few things to keep other tests from failing
as a result of it.

So, cleanup a cruft left behind by an old test in order for the changes that
are to be introduced to be independent of it.

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosubmodule.sh: remove unused variable
Stefan Beller [Wed, 16 Aug 2017 22:50:42 +0000 (15:50 -0700)]
submodule.sh: remove unused variable

This could have been part of 48308681b0 (git submodule update: have a
dedicated helper for cloning, 2016-02-29).

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1dc: allow building with the external sha1dc library
Takashi Iwai [Tue, 15 Aug 2017 12:04:17 +0000 (14:04 +0200)]
sha1dc: allow building with the external sha1dc library

Some distros provide SHA1 collision-detect code as a shared library.
It's the same code as we have in git tree (but may be with a different
init default for hash), and git can link with it as well; at least, it
may make maintenance easier, according to our security guys.

This patch allows user to build git linking with the external sha1dc
library instead of the built-in code.  User needs to define
DC_SHA1_EXTERNAL explicitly.  As default without it, the built-in
sha1dc code is used like before.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1dc: build git plumbing code more explicitly
Takashi Iwai [Tue, 15 Aug 2017 12:04:16 +0000 (14:04 +0200)]
sha1dc: build git plumbing code more explicitly

The plumbing code between sha1dc and git is defined in
sha1dc_git.[ch], but these aren't compiled / included directly but
only via the indirect inclusion from sha1dc code.  This is slightly
confusing when you try to trace the build flow.

This patch brings the following changes for simplification:

  - Make sha1dc_git.c stand-alone and build from Makefile

  - sha1dc_git.h is the common header to include further sha1.h
    depending on the build condition

  - Move comments for plumbing codes from the header to definitions

This is also meant as a preliminary work for further plumbing with
external sha1dc shlib.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: define block by number of alphanumeric chars
Jonathan Tan [Wed, 16 Aug 2017 01:27:39 +0000 (18:27 -0700)]
diff: define block by number of alphanumeric chars

The existing behavior of diff --color-moved=zebra does not define the
minimum size of a block at all, instead relying on a heuristic applied
later to filter out sets of adjacent moved lines that are shorter than 3
lines long. This can be confusing, because a block could thus be colored
as moved at the source but not at the destination (or vice versa),
depending on its neighbors.

Instead, teach diff that the minimum size of a block is 20 alphanumeric
characters, the same heuristic used by "git blame". This allows diff to
still exclude uninteresting lines appearing on their own (such as those
solely consisting of one or a few closing braces), as was the intention
of the adjacent-moved-line heuristic.

This requires a change in some tests in that some of their lines are no
longer considered to be part of a block, because they are too short.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: respect MIN_BLOCK_LENGTH for last block
Jonathan Tan [Wed, 16 Aug 2017 01:27:38 +0000 (18:27 -0700)]
diff: respect MIN_BLOCK_LENGTH for last block

Currently, MIN_BLOCK_LENGTH is only checked when diff encounters a line
that does not belong to the current block. In particular, this means
that MIN_BLOCK_LENGTH is not checked after all lines are encountered.

Perform that check.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoconvert: add SAFE_CRLF_KEEP_CRLF
Torsten Bögershausen [Sun, 13 Aug 2017 08:51:04 +0000 (10:51 +0200)]
convert: add SAFE_CRLF_KEEP_CRLF

When convert_to_git() is called, the caller may want to keep CRLF to
be kept as CRLF (and not converted into LF).

This will be used in the next commit, when apply works with files
that have CRLF and patches are applied onto these files.

Add the new value "SAFE_CRLF_KEEP_CRLF" to safe_crlf.

Prepare convert_to_git() to be able to run the clean filter, skip
the CRLF conversion and run the ident filter.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agocommit: skip discarding the index if there is no pre-commit hook
Kevin Willford [Mon, 14 Aug 2017 21:54:25 +0000 (15:54 -0600)]
commit: skip discarding the index if there is no pre-commit hook

If there is not a pre-commit hook, there is no reason to discard
the index and reread it.

This change checks to presence of a pre-commit hook and then only
discards the index if there was one.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosub-process: print the cmd when a capability is unsupported
Christian Couder [Wed, 16 Aug 2017 12:40:36 +0000 (14:40 +0200)]
sub-process: print the cmd when a capability is unsupported

In handshake_capabilities() we use warning() when a capability
is not supported, so the exit code of the function is 0 and no
further error is shown. This is a problem because the warning
message doesn't tell us which subprocess cmd failed.

On the contrary if we cannot write a packet from this function,
we use error() and then subprocess_start() outputs:

    initialization for subprocess '<cmd>' failed

so we can know which subprocess cmd failed.

Let's improve the warning() message, so that we can know which
subprocess cmd failed.

Helped-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1_file: make read_info_alternates static
Stefan Beller [Tue, 15 Aug 2017 20:13:19 +0000 (13:13 -0700)]
sha1_file: make read_info_alternates static

read_info_alternates is not used from outside, so let's make it static.

We have to declare the function before link_alt_odb_entry instead of
moving the code around, link_alt_odb_entry calls read_info_alternates,
which in turn calls link_alt_odb_entry.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot1002: stop using sum(1)
René Scharfe [Mon, 14 Aug 2017 20:16:34 +0000 (22:16 +0200)]
t1002: stop using sum(1)

sum(1) is a command for calculating checksums of the contents of files.
It was part of early editions of Unix ("Research Unix", 1972/1973, [1]).
cksum(1) appeared in 4.4BSD (1993) as a replacement [2], and became part
of POSIX.1-2008 [3].  OpenBSD 5.6 (2014) removed sum(1).

We only use sum(1) in t1002 to check for changes in three files.  On
MinGW we use md5sum(1) instead.  We could switch to the standard command
cksum(1) for all platforms; MinGW comes with GNU coreutils now, which
provides sum(1), cksum(1) and md5sum(1).  Use our standard method for
checking for file changes instead: test_cmp.

It's more convenient because it shows differences nicely, it's faster on
MinGW because we have a special implementation there based only on
shell-internal commands, it's simpler as it allows us to avoid stripping
out unnecessary entries from the checksum file using grep(1), and it's
more consistent with the rest of the test suite.

We already compare changed files with their expected new contents using
diff(1), so we don't need to check with "test_must_fail test_cmp" if
they differ from their original state.  A later patch could convert the
direct diff(1) calls to test_cmp as well.

With all sum(1) calls gone, remove the MinGW-specific implementation
from test-lib.sh as well.

[1] http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man1/sum.1
[2] http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.4BSD/usr/share/man/cat1/cksum.0
[3] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cksum.html

Signed-off-by: René Scharfe <l.s.r@web.de>
Reviewed-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agopretty: support normalization options for %(trailers)
Jeff King [Tue, 15 Aug 2017 10:25:27 +0000 (06:25 -0400)]
pretty: support normalization options for %(trailers)

The interpret-trailers command recently learned some options
to make its output easier to parse (for a caller whose only
interested in picking out the trailer values). But it's not
very efficient for asking for the trailers of many commits
in a single invocation.

We already have "%(trailers)" to do that, but it doesn't
know about unfolding or omitting non-trailers. Let's plumb
those options through, so you can have the best of both.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot4205: refactor %(trailers) tests
Jeff King [Tue, 15 Aug 2017 10:24:39 +0000 (06:24 -0400)]
t4205: refactor %(trailers) tests

We currently have one test for %(trailers). In preparation
for more, let's refactor a few bits:

  - move the commit creation to its own setup step so it can
    be reused by multiple tests

  - add a trailer with whitespace continuation (to confirm
    that it is left untouched)

  - fix the sample text which claims the placeholder is %bT.
    This was switched long ago to %(trailers)

  - replace one "cat" with an "echo" when generating the
    expected output. This saves a process (and sets a better
    pattern for future tests to follow).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agopretty: move trailer formatting to trailer.c
Jeff King [Tue, 15 Aug 2017 10:23:56 +0000 (06:23 -0400)]
pretty: move trailer formatting to trailer.c

The next commit will add many features to the %(trailer)
placeholder in pretty.c. We'll need to access some internal
functions of trailer.c for that, so our options are either:

  1. expose those functions publicly

or

  2. make an entry point into trailer.c to do the formatting

Doing (2) ends up exposing less surface area, though do note
that caveats in the docstring of the new function.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agointerpret-trailers: add --parse convenience option
Jeff King [Tue, 15 Aug 2017 10:23:34 +0000 (06:23 -0400)]
interpret-trailers: add --parse convenience option

The last few commits have added command line options that
can turn interpret-trailers into a parsing tool. Since
they'd most often be used together, let's provide a
convenient single option for callers to invoke this mode.

This is implemented as a callback rather than a boolean so
that its effect is applied immediately, as if those options
had been specified. Later options can then override them.
E.g.:

  git interpret-trailers --parse --no-unfold

would work.

Let's also update the documentation to make clear that this
parsing mode behaves quite differently than the normal
"add trailers to the input" mode.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agointerpret-trailers: add an option to unfold values
Jeff King [Tue, 15 Aug 2017 10:23:29 +0000 (06:23 -0400)]
interpret-trailers: add an option to unfold values

The point of "--only-trailers" is to give a caller an output
that's easy for them to parse. Getting rid of the
non-trailer material helps, but we still may see more
complicated syntax like whitespace continuation. Let's add
an option to unfold any continuation, giving the output as a
single "key: value" line per trailer.

As a bonus, this could be used even without --only-trailers
to clean up unusual formatting in the incoming data.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agointerpret-trailers: add an option to show only existing trailers
Jeff King [Tue, 15 Aug 2017 10:23:25 +0000 (06:23 -0400)]
interpret-trailers: add an option to show only existing trailers

It can be useful to invoke interpret-trailers for the
primary purpose of parsing existing trailers. But in that
case, we don't want to apply existing ifMissing or ifExists
rules from the config. Let's add a special mode where we
avoid applying those rules. Coupled with --only-trailers,
this gives us a reasonable parsing tool.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agointerpret-trailers: add an option to show only the trailers
Jeff King [Tue, 15 Aug 2017 10:23:21 +0000 (06:23 -0400)]
interpret-trailers: add an option to show only the trailers

In theory it's easy for any reader who wants to parse
trailers to do so. But there are a lot of subtle corner
cases around what counts as a trailer, when the trailer
block begins and ends, etc. Since interpret-trailers already
has our parsing logic, let's let callers ask it to just
output the trailers.

They still have to parse the "key: value" lines, but at
least they can ignore all of the other corner cases.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodoc: clarify "config --bool" behaviour with empty string
Andreas Heiduk [Mon, 14 Aug 2017 22:12:18 +0000 (00:12 +0200)]
doc: clarify "config --bool" behaviour with empty string

`git config --bool xxx.yyy` returns `true` for `[xxx]yyy` but
`false` for `[xxx]yyy=` or `[xxx]yyy=""`.  This is tested in
t1300-repo-config.sh since 09bc098c2.

Signed-off-by: Andreas Heiduk <asheiduk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agostash: prevent warning about null bytes in input
Kevin Daudt [Mon, 14 Aug 2017 21:43:33 +0000 (23:43 +0200)]
stash: prevent warning about null bytes in input

The `no_changes` function calls the `untracked_files` function through
command substitution. `untracked_files` will return null bytes because it
runs ls-files with the '-z' option.

Bash since version 4.4 warns about these null bytes. As they are not
required for the test that is being done, make sure `untracked_files`
does not output null bytes when not required.

This is achieved by adding a parameter to the `untracked_files` function to
specify wither `-z` should be passed to ls-files or not.

This warning is triggered when running git stash save -u resulting in
two warnings:

    git-stash: line 43: warning: command substitution: ignored null byte
    in input

Signed-off-by: Kevin Daudt <me@ikke.info>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMakefile: add style build rule
Brandon Williams [Mon, 14 Aug 2017 21:30:46 +0000 (14:30 -0700)]
Makefile: add style build rule

Add the 'style' build rule which will run git-clang-format on the diff
between HEAD and the current worktree.  The result is a diff of
suggested changes.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoclang-format: outline the git project's coding style
Brandon Williams [Mon, 14 Aug 2017 21:30:45 +0000 (14:30 -0700)]
clang-format: outline the git project's coding style

Add a '.clang-format' file which outlines the git project's coding
style.  This can be used with clang-format to auto-format .c and .h
files to conform with git's style.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agorebase: turn on progress option by default for format-patch
Kevin Willford [Thu, 10 Aug 2017 18:32:56 +0000 (14:32 -0400)]
rebase: turn on progress option by default for format-patch

Pass the "--progress" option to format-patch when the standard error
stream is connected to the terminal and "--quiet" is not given.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoformat-patch: have progress option while generating patches
Kevin Willford [Thu, 10 Aug 2017 18:32:55 +0000 (14:32 -0400)]
format-patch: have progress option while generating patches

When generating patches for the rebase command, if the user does
not realize the branch they are rebasing onto is thousands of
commits different, there is no progress indication after initial
rewinding message.

The progress meter as presented in this patch assumes the thousands of
patches to have a fine granularity as well as assuming to require all
the same amount of work/time for each, such that a steady progress bar
is achieved.

We do not want to estimate the time for each patch based e.g.
on their size or number of touched files (or parents) as that is too
expensive for just a progress meter.

This patch allows a progress option to be passed to format-patch
so that the user can be informed the progress of generating the
patch.  This option is then used by the rebase command when
calling format-patch.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotree-walk: convert fill_tree_descriptor() to object_id
René Scharfe [Sat, 12 Aug 2017 08:32:59 +0000 (10:32 +0200)]
tree-walk: convert fill_tree_descriptor() to object_id

All callers of fill_tree_descriptor() have been converted to object_id
already, so convert that function as well.  As a nice side-effect we get
rid of NULL checks in tree-diff.c, as fill_tree_descriptor() already
does them for us.

Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Reviewed-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff: avoid redundantly clearing a flag
Jonathan Tan [Fri, 11 Aug 2017 22:49:14 +0000 (15:49 -0700)]
diff: avoid redundantly clearing a flag

No code in diff.c sets DIFF_SYMBOL_MOVED_LINE except in
mark_color_as_moved(), so it is redundant to clear it for the current
line. Therefore, clear it only for previous lines.

This makes a refactoring in a subsequent patch easier.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agointerpret-trailers: fix documentation typo
Paolo Bonzini [Tue, 1 Aug 2017 09:03:33 +0000 (11:03 +0200)]
interpret-trailers: fix documentation typo

Self-explanatory... trailer.ifexists is documented with the
right name, but after a while it switches to ifexist.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agointerpret-trailers: add options for actions
Paolo Bonzini [Tue, 1 Aug 2017 09:03:32 +0000 (11:03 +0200)]
interpret-trailers: add options for actions

Allow using non-default values for trailers without having to set
them up in .gitconfig first.  For example, if you have the following
configuration

     trailer.signed-off-by.where = end

you may use "--where before" when a patch author forgets his
Signed-off-by and provides it in a separate email.  Likewise for
--if-exists and --if-missing

Reverting to the behavior specified by .gitconfig is done with
--no-where, --no-if-exists and --no-if-missing.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotrailers: introduce struct new_trailer_item
Paolo Bonzini [Tue, 1 Aug 2017 09:03:31 +0000 (11:03 +0200)]
trailers: introduce struct new_trailer_item

This will provide a place to store the current state of the
--where, --if-exists and --if-missing options.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agohook: use correct logical variable
Kaartic Sivaraam [Mon, 14 Aug 2017 08:46:46 +0000 (14:16 +0530)]
hook: use correct logical variable

Sign-off added should be that of the "committer", not that of the
"commit's author"; that is how the rest of Git adds sign-off using
sequencer.c::append_signoff().

Use the correct logical variable that identifies the committer.

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff-delta: do not allow delta offset truncation
Martin Koegler [Thu, 10 Aug 2017 18:13:09 +0000 (20:13 +0200)]
diff-delta: do not allow delta offset truncation

Prevent generating delta offsets beyond 4G, as the xdelta used in
the pack format cannot represent such large offset.

Signed-off-by: Martin Koegler <martin.koegler@chello.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agohttp: use a feature check to enable GSSAPI delegation control
Tom G. Christensen [Fri, 11 Aug 2017 16:37:34 +0000 (18:37 +0200)]
http: use a feature check to enable GSSAPI delegation control

Turn the version check into a feature check to ensure this functionality
is also enabled with vendor supported curl versions where the feature
may have been backported.

Signed-off-by: Tom G. Christensen <tgc@jupiterrise.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agohttp: fix handling of missing CURLPROTO_*
Tom G. Christensen [Fri, 11 Aug 2017 16:37:33 +0000 (18:37 +0200)]
http: fix handling of missing CURLPROTO_*

Commit aeae4db1 refactored the handling of the curl protocol
restriction support into a function but failed to add a version
check for older versions of curl that lack CURLPROTO_* support.

Add the missing check and at the same time convert it to a feature
check instead of a version based check.  This is done to ensure that
vendor supported curl versions that have had CURLPROTO_* support
backported are handled correctly.

Signed-off-by: Tom G. Christensen <tgc@jupiterrise.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agostash: clean untracked files before reset
Nicolas Morey-Chaisemartin [Fri, 11 Aug 2017 17:14:43 +0000 (19:14 +0200)]
stash: clean untracked files before reset

If calling git stash -u on a repo that contains a file that is not
ignored any more due to a current modification of the gitignore file,
this file is stashed but not remove from the working tree.
This is due to git-stash first doing a reset --hard which clears the
.gitignore file modification and the call git clean, leaving the file
untouched.
This causes git stash pop to fail due to the file existing.

This patch simply switches the order between cleaning and resetting
and adds a test for this usecase.

Reported-by: Sam Partington <sam@whiteoctober.co.uk>
Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@morey-chaisemartin.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1_file: remove read_packed_sha1()
Jonathan Tan [Fri, 11 Aug 2017 20:36:15 +0000 (13:36 -0700)]
sha1_file: remove read_packed_sha1()

Use read_object() in its place instead. This avoids duplication of code.

This makes force_object_loose() slightly slower (because of a redundant
check of loose object storage), but only in the error case.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1_file: set whence in storage-specific info fn
Jonathan Tan [Fri, 11 Aug 2017 20:36:14 +0000 (13:36 -0700)]
sha1_file: set whence in storage-specific info fn

Move the setting of oi->whence to sha1_loose_object_info() and
packed_object_info().

This allows sha1_object_info_extended() to not need to know about the
delta base cache. This will be useful during a future refactoring in
which packfile-related functions, including the handling of the delta
base cache, will be moved to a separate file.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoThe first batch of topics after the 2.14 cycle
Junio C Hamano [Fri, 11 Aug 2017 20:34:31 +0000 (13:34 -0700)]
The first batch of topics after the 2.14 cycle

Notably, let's declare that we aim to make "git add ''" illegal in
the cycle after this one.

The topic to do so, ex/deprecate-empty-pathspec-as-match-all, has
been cooking in 'next' too long, and will stay there during this
cycle, but not after.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'ma/pager-per-subcommand-action'
Junio C Hamano [Fri, 11 Aug 2017 20:27:07 +0000 (13:27 -0700)]
Merge branch 'ma/pager-per-subcommand-action'

The "tag.pager" configuration variable was useless for those who
actually create tag objects, as it interfered with the use of an
editor.  A new mechanism has been introduced for commands to enable
pager depending on what operation is being carried out to fix this,
and then "git tag -l" is made to run pager by default.

* ma/pager-per-subcommand-action:
  git.c: ignore pager.* when launching builtin as dashed external
  tag: change default of `pager.tag` to "on"
  tag: respect `pager.tag` in list-mode only
  t7006: add tests for how git tag paginates
  git.c: provide setup_auto_pager()
  git.c: let builtins opt for handling `pager.foo` themselves
  builtin.h: take over documentation from api-builtin.txt

8 years agoMerge branch 'jk/rev-list-empty-input'
Junio C Hamano [Fri, 11 Aug 2017 20:27:07 +0000 (13:27 -0700)]
Merge branch 'jk/rev-list-empty-input'

"git log --tag=no-such-tag" showed log starting from HEAD, which
has been fixed---it now shows nothing.

* jk/rev-list-empty-input:
  revision: do not fallback to default when rev_input_given is set
  rev-list: don't show usage when we see empty ref patterns
  revision: add rev_input_given flag
  t6018: flesh out empty input/output rev-list tests

8 years agoMerge branch 'jt/t1450-fsck-corrupt-packfile'
Junio C Hamano [Fri, 11 Aug 2017 20:27:07 +0000 (13:27 -0700)]
Merge branch 'jt/t1450-fsck-corrupt-packfile'

A test update.

* jt/t1450-fsck-corrupt-packfile:
  tests: ensure fsck fails on corrupt packfiles

8 years agoMerge branch 'js/git-gui-msgfmt-on-windows'
Junio C Hamano [Fri, 11 Aug 2017 20:27:06 +0000 (13:27 -0700)]
Merge branch 'js/git-gui-msgfmt-on-windows'

Because recent Git for Windows do come with a real msgfmt, the
build procedure for git-gui has been updated to use it instead of a
hand-rolled substitute.

* js/git-gui-msgfmt-on-windows:
  git-gui (MinGW): make use of MSys2's msgfmt
  git gui: allow for a long recentrepo list
  git gui: de-dup selected repo from recentrepo history
  git gui: cope with duplicates in _get_recentrepo
  git-gui: remove duplicate entries from .gitconfig's gui.recentrepo

8 years agoMerge branch 'eb/contacts-reported-by'
Junio C Hamano [Fri, 11 Aug 2017 20:27:06 +0000 (13:27 -0700)]
Merge branch 'eb/contacts-reported-by'

"git contacts" (in contrib/) now lists the address on the
"Reported-by:" trailer to its output, in addition to those on
S-o-b: and other trailers, to make it easier to notify (and thank)
the original bug reporter.

* eb/contacts-reported-by:
  git-contacts: also recognise "Reported-by:"

8 years agoMerge branch 'dl/credential-cache-socket-in-xdg-cache'
Junio C Hamano [Fri, 11 Aug 2017 20:27:06 +0000 (13:27 -0700)]
Merge branch 'dl/credential-cache-socket-in-xdg-cache'

A recently added test for the "credential-cache" helper revealed
that EOF detection done around the time the connection to the cache
daemon is torn down were flaky.  This was fixed by reacting to
ECONNRESET and behaving as if we got an EOF.

* dl/credential-cache-socket-in-xdg-cache:
  credential-cache: interpret an ECONNRESET as an EOF

8 years agoMerge branch 'rg/rerere-train-overwrite'
Junio C Hamano [Fri, 11 Aug 2017 20:27:05 +0000 (13:27 -0700)]
Merge branch 'rg/rerere-train-overwrite'

The "rerere-train" script (in contrib/) learned the "--overwrite"
option to allow overwriting existing recorded resolutions.

* rg/rerere-train-overwrite:
  contrib/rerere-train: optionally overwrite existing resolutions

8 years agoMerge branch 'jb/t8008-cleanup'
Junio C Hamano [Fri, 11 Aug 2017 20:27:05 +0000 (13:27 -0700)]
Merge branch 'jb/t8008-cleanup'

Code clean-up.

* jb/t8008-cleanup:
  t8008: rely on rev-parse'd HEAD instead of sha1 value

8 years agoMerge branch 'jt/subprocess-handshake'
Junio C Hamano [Fri, 11 Aug 2017 20:27:05 +0000 (13:27 -0700)]
Merge branch 'jt/subprocess-handshake'

Code cleanup.

* jt/subprocess-handshake:
  sub-process: refactor handshake to common function
  Documentation: migrate sub-process docs to header

8 years agoMerge branch 'dc/fmt-merge-msg-microcleanup'
Junio C Hamano [Fri, 11 Aug 2017 20:27:05 +0000 (13:27 -0700)]
Merge branch 'dc/fmt-merge-msg-microcleanup'

Code cleanup.

* dc/fmt-merge-msg-microcleanup:
  fmt-merge-msg: fix coding style

8 years agoMerge branch 'ah/doc-wserrorhighlight'
Junio C Hamano [Fri, 11 Aug 2017 20:27:04 +0000 (13:27 -0700)]
Merge branch 'ah/doc-wserrorhighlight'

Doc update.

* ah/doc-wserrorhighlight:
  doc: add missing values "none" and "default" for diff.wsErrorHighlight

8 years agoMerge branch 'cc/ref-is-hidden-microcleanup'
Junio C Hamano [Fri, 11 Aug 2017 20:27:03 +0000 (13:27 -0700)]
Merge branch 'cc/ref-is-hidden-microcleanup'

Code cleanup.

* cc/ref-is-hidden-microcleanup:
  refs: use skip_prefix() in ref_is_hidden()

8 years agoMerge branch 'js/run-process-parallel-api-fix'
Junio C Hamano [Fri, 11 Aug 2017 20:27:02 +0000 (13:27 -0700)]
Merge branch 'js/run-process-parallel-api-fix'

API fix.

* js/run-process-parallel-api-fix:
  run_processes_parallel: change confusing task_cb convention

8 years agoMerge branch 'hb/gitweb-project-list'
Junio C Hamano [Fri, 11 Aug 2017 20:27:01 +0000 (13:27 -0700)]
Merge branch 'hb/gitweb-project-list'

When a directory is not readable, "gitweb" fails to build the
project list.  Work this around by skipping such a directory.

* hb/gitweb-project-list:
  gitweb: skip unreadable subdirectories

8 years agoMerge branch 'ks/commit-abort-on-empty-message-fix'
Junio C Hamano [Fri, 11 Aug 2017 20:27:01 +0000 (13:27 -0700)]
Merge branch 'ks/commit-abort-on-empty-message-fix'

"git commit" when seeing an totally empty message said "you did not
edit the message", which is clearly wrong.  The message has been
corrected.

* ks/commit-abort-on-empty-message-fix:
  commit: check for empty message before the check for untouched template

8 years agoMerge branch 'sb/hashmap-cleanup'
Junio C Hamano [Fri, 11 Aug 2017 20:27:01 +0000 (13:27 -0700)]
Merge branch 'sb/hashmap-cleanup'

Many uses of comparision callback function the hashmap API uses
cast the callback function type when registering it to
hashmap_init(), which defeats the compile time type checking when
the callback interface changes (e.g. gaining more parameters).
The callback implementations have been updated to take "void *"
pointers and cast them to the type they expect instead.

* sb/hashmap-cleanup:
  t/helper/test-hashmap: use custom data instead of duplicate cmp functions
  name-hash.c: drop hashmap_cmp_fn cast
  submodule-config.c: drop hashmap_cmp_fn cast
  remote.c: drop hashmap_cmp_fn cast
  patch-ids.c: drop hashmap_cmp_fn cast
  convert/sub-process: drop cast to hashmap_cmp_fn
  config.c: drop hashmap_cmp_fn cast
  builtin/describe: drop hashmap_cmp_fn cast
  builtin/difftool.c: drop hashmap_cmp_fn cast
  attr.c: drop hashmap_cmp_fn cast

8 years agoMerge branch 'jk/reflog-walk'
Junio C Hamano [Fri, 11 Aug 2017 20:27:00 +0000 (13:27 -0700)]
Merge branch 'jk/reflog-walk'

Numerous bugs in walking of reflogs via "log -g" and friends have
been fixed.

* jk/reflog-walk:
  reflog-walk: apply --since/--until to reflog dates
  reflog-walk: stop using fake parents
  rev-list: check reflog_info before showing usage
  get_revision_1(): replace do-while with an early return
  log: do not free parents when walking reflog
  log: clarify comment about reflog cycles
  revision: disallow reflog walking with revs->limited
  t1414: document some reflog-walk oddities

8 years agoMerge branch 'ls/filter-process-delayed'
Junio C Hamano [Fri, 11 Aug 2017 20:27:00 +0000 (13:27 -0700)]
Merge branch 'ls/filter-process-delayed'

The filter-process interface learned to allow a process with long
latency give a "delayed" response.

* ls/filter-process-delayed:
  convert: add "status=delayed" to filter process protocol
  convert: refactor capabilities negotiation
  convert: move multiple file filter error handling to separate function
  convert: put the flags field before the flag itself for consistent style
  t0021: write "OUT <size>" only on success
  t0021: make debug log file name configurable
  t0021: keep filter log files on comparison

8 years agoMerge branch 'st/lib-gpg-kill-stray-agent'
Junio C Hamano [Fri, 11 Aug 2017 20:27:00 +0000 (13:27 -0700)]
Merge branch 'st/lib-gpg-kill-stray-agent'

Some versions of GnuPG fails to kill gpg-agent it auto-spawned
and such a left-over agent can interfere with a test.  Work it
around by attempting to kill one before starting a new test.

* st/lib-gpg-kill-stray-agent:
  t: lib-gpg: flush gpg agent on startup

8 years agoMerge branch 'rs/pack-objects-pbase-cleanup'
Junio C Hamano [Fri, 11 Aug 2017 20:27:00 +0000 (13:27 -0700)]
Merge branch 'rs/pack-objects-pbase-cleanup'

Code clean-up.

* rs/pack-objects-pbase-cleanup:
  pack-objects: remove unnecessary NULL check

8 years agoMerge branch 'jt/fsck-code-cleanup'
Junio C Hamano [Fri, 11 Aug 2017 20:26:59 +0000 (13:26 -0700)]
Merge branch 'jt/fsck-code-cleanup'

Code clean-up.

* jt/fsck-code-cleanup:
  fsck: cleanup unused variable
  object: remove "used" field from struct object
  fsck: remove redundant parse_tree() invocation

8 years agoMerge branch 'jc/http-sslkey-and-ssl-cert-are-paths'
Junio C Hamano [Fri, 11 Aug 2017 20:26:59 +0000 (13:26 -0700)]
Merge branch 'jc/http-sslkey-and-ssl-cert-are-paths'

The http.{sslkey,sslCert} configuration variables are to be
interpreted as a pathname that honors "~[username]/" prefix, but
weren't, which has been fixed.

* jc/http-sslkey-and-ssl-cert-are-paths:
  http.c: http.sslcert and http.sslkey are both pathnames

8 years agoMerge branch 'jk/c99'
Junio C Hamano [Fri, 11 Aug 2017 20:26:58 +0000 (13:26 -0700)]
Merge branch 'jk/c99'

Start using selected c99 constructs in small, stable and
essentialpart of the system to catch people who care about
older compilers that do not grok them.

* jk/c99:
  clean.c: use designated initializer
  strbuf: use designated initializers in STRBUF_INIT

8 years agoMerge branch 'jk/ref-filter-colors'
Junio C Hamano [Fri, 11 Aug 2017 20:26:58 +0000 (13:26 -0700)]
Merge branch 'jk/ref-filter-colors'

"%C(color name)" in the pretty print format always produced ANSI
color escape codes, which was an early design mistake.  They now
honor the configuration (e.g. "color.ui = never") and also tty-ness
of the output medium.

* jk/ref-filter-colors:
  ref-filter: consult want_color() before emitting colors
  pretty: respect color settings for %C placeholders
  rev-list: pass diffopt->use_colors through to pretty-print
  for-each-ref: load config earlier
  color: check color.ui in git_default_config()
  ref-filter: pass ref_format struct to atom parsers
  ref-filter: factor out the parsing of sorting atoms
  ref-filter: make parse_ref_filter_atom a private function
  ref-filter: provide a function for parsing sort options
  ref-filter: move need_color_reset_at_eol into ref_format
  ref-filter: abstract ref format into its own struct
  ref-filter: simplify automatic color reset
  t: use test_decode_color rather than literal ANSI codes
  docs/for-each-ref: update pointer to color syntax
  check return value of verify_ref_format()

8 years agoMerge branch 'wd/rebase-conflict-guide'
Junio C Hamano [Fri, 11 Aug 2017 20:26:58 +0000 (13:26 -0700)]
Merge branch 'wd/rebase-conflict-guide'

The advice message given when "git rebase" stops for conflicting
changes has been improved.

* wd/rebase-conflict-guide:
  rebase: make resolve message clearer for inexperienced users

8 years agoMerge branch 'rs/stat-data-unaligned-reads-fix'
Junio C Hamano [Fri, 11 Aug 2017 20:26:58 +0000 (13:26 -0700)]
Merge branch 'rs/stat-data-unaligned-reads-fix'

Code clean-up.

* rs/stat-data-unaligned-reads-fix:
  dir: support platforms that require aligned reads

8 years agoMerge branch 'rs/move-array'
Junio C Hamano [Fri, 11 Aug 2017 20:26:57 +0000 (13:26 -0700)]
Merge branch 'rs/move-array'

Code clean-up.

* rs/move-array:
  ls-files: don't try to prune an empty index
  apply: use COPY_ARRAY and MOVE_ARRAY in update_image()
  use MOVE_ARRAY
  add MOVE_ARRAY

8 years agoMerge branch 'rs/bswap-ubsan-fix'
Junio C Hamano [Fri, 11 Aug 2017 20:26:57 +0000 (13:26 -0700)]
Merge branch 'rs/bswap-ubsan-fix'

Code clean-up.

* rs/bswap-ubsan-fix:
  bswap: convert get_be16, get_be32 and put_be32 to inline functions
  bswap: convert to unsigned before shifting in get_be32

8 years agoMerge branch 'ks/prepare-commit-msg-sample'
Junio C Hamano [Fri, 11 Aug 2017 20:26:56 +0000 (13:26 -0700)]
Merge branch 'ks/prepare-commit-msg-sample'

Remove an example that is now obsolete from a sample hook,
and improve an old example in it that added a sign-off manually
to use the interpret-trailers command.

* ks/prepare-commit-msg-sample:
  hook: add a simple first example
  hook: add sign-off using "interpret-trailers"
  hook: name the positional variables
  hook: cleanup script

8 years agoMerge branch 'bw/object-id'
Junio C Hamano [Fri, 11 Aug 2017 20:26:56 +0000 (13:26 -0700)]
Merge branch 'bw/object-id'

Conversion from uchar[20] to struct object_id continues.

* bw/object-id:
  receive-pack: don't access hash of NULL object_id pointer
  notes: don't access hash of NULL object_id pointer
  tree-diff: don't access hash of NULL object_id pointer

8 years agoMerge branch 'bc/object-id'
Junio C Hamano [Fri, 11 Aug 2017 20:26:55 +0000 (13:26 -0700)]
Merge branch 'bc/object-id'

Conversion from uchar[20] to struct object_id continues.

* bc/object-id:
  sha1_name: convert uses of 40 to GIT_SHA1_HEXSZ
  sha1_name: convert GET_SHA1* flags to GET_OID*
  sha1_name: convert get_sha1* to get_oid*
  Convert remaining callers of get_sha1 to get_oid.
  builtin/unpack-file: convert to struct object_id
  bisect: convert bisect_checkout to struct object_id
  builtin/update_ref: convert to struct object_id
  sequencer: convert to struct object_id
  remote: convert struct push_cas to struct object_id
  submodule: convert submodule config lookup to use object_id
  builtin/merge-tree: convert remaining caller of get_sha1 to object_id
  builtin/fsck: convert remaining caller of get_sha1 to object_id

8 years agoMerge branch 'sb/object-id'
Junio C Hamano [Fri, 11 Aug 2017 20:26:55 +0000 (13:26 -0700)]
Merge branch 'sb/object-id'

Conversion from uchar[20] to struct object_id continues.

* sb/object-id:
  tag: convert gpg_verify_tag to use struct object_id
  commit: convert lookup_commit_graft to struct object_id

8 years agosha1_file: release delta_stack on error in unpack_entry()
René Scharfe [Thu, 10 Aug 2017 09:42:21 +0000 (11:42 +0200)]
sha1_file: release delta_stack on error in unpack_entry()

When unpack_entry() encounters a broken packed object, it returns early.
It adjusts the reference count of the pack window, but leaks the buffer
for a big delta stack in case the small automatic one was not enough.
Jump to the cleanup code at end instead, which takes care of that.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agofsck: free buffers on error in fsck_obj()
René Scharfe [Thu, 10 Aug 2017 09:42:10 +0000 (11:42 +0200)]
fsck: free buffers on error in fsck_obj()

Move the code for releasing tree buffers and commit buffers in
fsck_obj() to the end of the function and make sure it's executed no
matter of an error is encountered or not.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agostrbuf: clear errno before calling getdelim(3)
René Scharfe [Thu, 10 Aug 2017 20:56:40 +0000 (22:56 +0200)]
strbuf: clear errno before calling getdelim(3)

getdelim(3) returns -1 at the end of the file and if it encounters an
error, but sets errno only in the latter case.  Set errno to zero before
calling it to avoid misdiagnosing an out-of-memory condition due to a
left-over value from some other function call.

Reported-by: Yaroslav Halchenko <yoh@onerussian.com>
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agowin32: plug memory leak on realloc() failure in syslog()
René Scharfe [Thu, 10 Aug 2017 10:23:45 +0000 (12:23 +0200)]
win32: plug memory leak on realloc() failure in syslog()

If realloc() fails then the original buffer is still valid.  Free it
before exiting the function.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agomerge: use skip_prefix()
René Scharfe [Thu, 10 Aug 2017 16:47:55 +0000 (18:47 +0200)]
merge: use skip_prefix()

Get rid of a magic string length constant by using skip_prefix() instead
of starts_with().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agodiff-delta: fix encoding size that would not fit in "unsigned int"
Martin Koegler [Thu, 10 Aug 2017 07:01:01 +0000 (09:01 +0200)]
diff-delta: fix encoding size that would not fit in "unsigned int"

The current delta code produces incorrect pack objects for files > 4GB,
because the size is copied from size_t field to "unsigned int" variables
during the encoding process.

Signed-off-by: Martin Koegler <martin.koegler@chello.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotrailer: put process_trailers() options into a struct
Jeff King [Thu, 10 Aug 2017 18:03:58 +0000 (14:03 -0400)]
trailer: put process_trailers() options into a struct

We already have two options and are about to add a few more.
To avoid having a huge number of boolean arguments, let's
convert to an options struct which can be passed in.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot1200: remove t1200-tutorial.sh
Stefan Beller [Wed, 9 Aug 2017 21:22:53 +0000 (14:22 -0700)]
t1200: remove t1200-tutorial.sh

v1.2.0~121 (New tutorial, 2006-01-22) rewrote the tutorial such that the
original intent of 2ae6c70674 (Adapt tutorial to cygwin and add test case,
2005-10-13) to test the examples from the tutorial doesn't hold any more.

There are dedicated tests for the commands used, even "git whatchanged",
such that removing these tests doesn't seem like a reduction in test
coverage.

Signed-off-by: Stefan Beller <sbeller@google.com>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1_file: drop experimental GIT_USE_LOOKUP search
Jeff King [Wed, 9 Aug 2017 10:14:32 +0000 (06:14 -0400)]
sha1_file: drop experimental GIT_USE_LOOKUP search

Long ago in 628522ec14 (sha1-lookup: more memory efficient
search in sorted list of SHA-1, 2007-12-29) we added
sha1_entry_pos(), a binary search that uses the uniform
distribution of sha1s to scale the selection of mid-points.
As this was a performance experiment, we tied it to the
GIT_USE_LOOKUP environment variable and never enabled it by
default.

This code was successful in reducing the number of steps in
each search. But the overhead of the scaling ends up making
it slower when the cache is warm. Here are best-of-five
timings for running rev-list on linux.git, which will have
to look up every object:

  $ time git rev-list --objects --all >/dev/null
  real 0m35.357s
  user 0m35.016s
  sys 0m0.340s

  $ time GIT_USE_LOOKUP=1 git rev-list --objects --all >/dev/null
  real 0m37.364s
  user 0m37.045s
  sys 0m0.316s

The USE_LOOKUP version might have more benefit on a cold
cache, as the time to fault in each page would dominate. But
that would be for a single lookup. In practice, most
operations tend to look up many objects, and the whole pack
.idx will end up warm.

It's possible that the code could be better optimized to
compete with a naive binary search for the warm-cache case,
and we could have the best of both worlds. But over the
years nobody has done so, and this is largely dead code that
is rarely run outside of the test suite. Let's drop it in
the name of simplicity.

This lets us remove sha1_entry_pos() entirely, as the .idx
lookup code was the only caller.  Note that sha1-lookup.c
still contains sha1_pos(), which differs from
sha1_entry_pos() in two ways:

  - it has a different interface; it uses a function pointer
    to access sha1 entries rather than a size/offset pair
    describing the table's memory layout

  - it only scales the initial selection of "mi", rather
    than each iteration of the search

We can't get rid of this function, as it's called from
several places. It may be that we could replace it with a
simple binary search, but that's out of scope for this patch
(and would need benchmarking).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agohashcmp: use memcmp instead of open-coded loop
Jeff King [Wed, 9 Aug 2017 10:16:45 +0000 (06:16 -0400)]
hashcmp: use memcmp instead of open-coded loop

In 1a812f3a70 (hashcmp(): inline memcmp() by hand to
optimize, 2011-04-28), it was reported that an open-coded
loop outperformed memcmp() for comparing sha1s.

Discussion[1] a few years later in 2013 showed that this
depends on your libc's version of memcmp(). In particular,
glibc 2.13 optimized their memcmp around 2011. Here are
current timings with glibc 2.24 (best-of-five, on
linux.git):

  [before this patch, open-coded]
  $ time git rev-list --objects --all
  real 0m35.357s
  user 0m35.016s
  sys 0m0.340s

  [after this patch, memcmp]
  real 0m32.930s
  user 0m32.630s
  sys 0m0.300s

Now that we've had 6 years for that version of glibc to
make its way onto people's machines, it's worth revisiting
our benchmarks and switching to memcmp().

It may be that there are other non-glibc systems where
memcmp() isn't as well optimized. But since our single data
point in favor of open-coding was on a now-ancient glibc, we
should probably assume the system memcmp is good unless
proven otherwise. We may end up with a SLOW_MEMCMP Makefile
knob, but we can hold off on that until we actually find
such a system in practice.

[1] https://public-inbox.org/git/20130318073229.GA5551@sigill.intra.peff.net/

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoapply: remove prefix_length member from apply_state
René Scharfe [Wed, 9 Aug 2017 15:54:46 +0000 (17:54 +0200)]
apply: remove prefix_length member from apply_state

Use a NULL-and-NUL check to see if we have a prefix and consistently use
C string functions on it instead of storing its length in a member of
struct apply_state.  This avoids strlen() calls and simplifies the code.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agobuiltin/add: add detail to a 'cannot chmod' error message
Ramsay Jones [Wed, 9 Aug 2017 00:51:23 +0000 (01:51 +0100)]
builtin/add: add detail to a 'cannot chmod' error message

In addition to adding the missing newline, add the x-ecutable bit
'mode change' character to the error message. This message now has
the same form as similar messages output by 'update-index'.

Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosha1_file: avoid comparison if no packed hash matches the first byte
René Scharfe [Tue, 8 Aug 2017 22:07:30 +0000 (00:07 +0200)]
sha1_file: avoid comparison if no packed hash matches the first byte

find_pack_entry_one() uses the fan-out table of pack indexes to find out
which entries match the first byte of the searched hash and does a
binary search on this subset of the main index table.

If there are no matching entries then lo and hi will have the same
value.  The binary search still starts and compares the hash of the
following entry (which has a non-matching first byte, so won't cause any
trouble), or whatever comes after the sorted list of entries.

The probability of that stray comparison matching by mistake is low, but
let's not take any chances and check when entering the binary search
loop if we're actually done already.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot4062: use less than 256 repetitions in regex
René Scharfe [Wed, 9 Aug 2017 14:15:10 +0000 (16:15 +0200)]
t4062: use less than 256 repetitions in regex

OpenBSD's regex library has a repetition limit (RE_DUP_MAX) of 255.
That's the minimum acceptable value according to POSIX.  In t4062 we use
4096 repetitions in the test "-G matches", though, causing it to fail.
Combine two repetition operators, both less than 256, to arrive at 4096
zeros instead of using a single one, to fix the test on OpenBSD.

Original-patch-by: David Coppa <dcoppa@openbsd.org>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot3700: fix broken test under !POSIXPERM
René Scharfe [Tue, 8 Aug 2017 19:21:41 +0000 (21:21 +0200)]
t3700: fix broken test under !POSIXPERM

76e368c378 (t3700: fix broken test under !SANITY) explains that the test
'git add --chmod=[+-]x changes index with already added file' can fail
if xfoo3 is still present as a symlink from a previous test and deletes
it with rm(1).  That still leaves it present in the index, which causes
the test to fail if POSIXPERM is not defined.  Get rid of it by calling
"git reset --hard" as well, as 76e368c378 already mentioned in passing.

Helped-by: Adam Dinwoodie <adam@dinwoodie.org>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoam: fix signoff when other trailers are present
Phillip Wood [Tue, 8 Aug 2017 10:25:33 +0000 (11:25 +0100)]
am: fix signoff when other trailers are present

If there was no 'Signed-off-by:' trailer but another trailer such as
'Reported-by:' then 'git am --signoff' would add a blank line between
the existing trailers and the added 'Signed-off-by:' line. e.g.

    Rebase accepts '--rerere-autoupdate' as an option but only honors
    it if '-m' is also given. Fix it for a non-interactive rebase by
    passing on the option to 'git am' and 'git cherry-pick'.

Reported-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Fix by using the code provided for this purpose in sequencer.c.
Change the tests so that they check the formatting of the
'Signed-off-by:' lines rather than just grepping for them.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agogit svn fetch: Create correct commit timestamp when using --localtime
Urs Thuermann [Sat, 5 Aug 2017 00:12:15 +0000 (02:12 +0200)]
git svn fetch: Create correct commit timestamp when using --localtime

In parse_svn_date() prepend the correct UTC offset to the timestamp
returned.  This is the offset in effect at the commit time instead of
the offset in effect at calling time.

Signed-off-by: Urs Thuermann <urs@isnogud.escape.de>
Reviewed-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoperl/Git.pm: typofix in a comment
Junio C Hamano [Mon, 7 Aug 2017 22:15:57 +0000 (15:15 -0700)]
perl/Git.pm: typofix in a comment

No change of behaviour intended.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoparse_decoration_style: drop unused argument `var`
Martin Ågren [Mon, 7 Aug 2017 18:20:50 +0000 (20:20 +0200)]
parse_decoration_style: drop unused argument `var`

The previous commit left it unused.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotreewide: deprecate git_config_maybe_bool, use git_parse_maybe_bool
Martin Ågren [Mon, 7 Aug 2017 18:20:49 +0000 (20:20 +0200)]
treewide: deprecate git_config_maybe_bool, use git_parse_maybe_bool

The only difference between these is that the former takes an argument
`name` which it ignores completely. Still, the callers are quite careful
to provide reasonable values for it.

Once in-flight topics have landed, we should be able to remove
git_config_maybe_bool. In the meantime, document it as deprecated in the
technical documentation. While at it, document git_parse_maybe_bool.

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