]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
4 years agorevisions API: add a TODO for diff_free(&revs->diffopt)
Ævar Arnfjörð Bjarmason [Thu, 14 Apr 2022 05:56:40 +0000 (07:56 +0200)] 
revisions API: add a TODO for diff_free(&revs->diffopt)

Add a TODO comment indicating that we should release "diffopt" in
release_revisions(). In a preceding commit we started releasing the
"pruning" member of the same type, but handling "diffopt" will require
us to untangle the "no_free" conditions I added in e900d494dcf (diff:
add an API for deferred freeing, 2021-02-11).

Let's leave a TODO comment to that effect, and so that we don't forget
refactor code that was changed to use release_revisions() in earlier
commits to stop using the "diffopt" member after a call to
release_revisions(). This works currently, but would become a logic
error as soon as we started freeing "diffopt". Doing that change now
doesn't harm anything, and future-proofs us against a later change to
release_revisions().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "topo_walk_info"
Ævar Arnfjörð Bjarmason [Thu, 14 Apr 2022 05:56:39 +0000 (07:56 +0200)] 
revisions API: have release_revisions() release "topo_walk_info"

Refactor the existing reset_topo_walk() into a thin wrapper for a
release_revisions_topo_walk_info() + resetting the member to "NULL",
and call release_revisions_topo_walk_info() from release_revisions().

This fixes memory leaks that have been with us ever since
"topo_walk_info" was added to revision.[ch] in
f0d9cc4196a (revision.c: begin refactoring --topo-order logic,
2018-11-01).

Due to various other leaks this makes no tests pass in their entirety,
but e.g. before this running this on git.git:

    ./git -P log --pretty=tformat:"%P   %H | %s" --parents --full-history --topo-order -3 -- README.md

Would report under SANITIZE=leak:

    SUMMARY: LeakSanitizer: 531064 byte(s) leaked in 6 allocation(s).

Now we'll free all of that memory.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "date_mode"
Ævar Arnfjörð Bjarmason [Thu, 14 Apr 2022 05:56:38 +0000 (07:56 +0200)] 
revisions API: have release_revisions() release "date_mode"

Extend the the release_revisions() function so that it frees the
"date_mode" in the "struct ref_info".

This uses the date_mode_release() function added in 974c919d36d (date
API: add and use a date_mode_release(), 2022-02-16). As that commit
notes "t7004-tag.sh" tests for the leaks that are being fixed
here. That test now fails "only" 44 tests, instead of the 46 it failed
before this change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: call diff_free(&revs->pruning) in revisions_release()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:53 +0000 (22:01 +0200)] 
revisions API: call diff_free(&revs->pruning) in revisions_release()

Call diff_free() on the "pruning" member of "struct rev_info".  Doing
so makes several tests pass under SANITIZE=leak.

This was also the last missing piece that allows us to remove the
UNLEAK() in "cmd_diff" and "cmd_diff_index", which allows us to use
those commands as a canary for general leaks in the revisions API. See
[1] for further rationale, and 886e1084d78 (builtin/: add UNLEAKs,
2017-10-01) for the commit that added the UNLEAK() there.

1. https://lore.kernel.org/git/220218.861r00ib86.gmgdl@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: release "reflog_info" in release revisions()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:52 +0000 (22:01 +0200)] 
revisions API: release "reflog_info" in release revisions()

Add a missing reflog_walk_info_release() to "reflog-walk.c" and use it
in release_revisions().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: clear "boundary_commits" in release_revisions()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:51 +0000 (22:01 +0200)] 
revisions API: clear "boundary_commits" in release_revisions()

Clear the "boundary_commits" object_array in release_revisions(). This
makes a few more tests pass under SANITIZE=leak, including
"t/t4126-apply-empty.sh" which started failed as an UNLEAK() in
cmd_format_patch() was removed in a preceding commit.

This also re-marks the various tests relying on "git format-patch" as
passing under "SANITIZE=leak", in the preceding "revisions API users:
use release_revisions() in builtin/log.c" commit those were marked as
failing as we removed the UNLEAK(rev) from cmd_format_patch() in
"builtin/log.c".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "prune_data"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:50 +0000 (22:01 +0200)] 
revisions API: have release_revisions() release "prune_data"

Extend the the release_revisions() function so that it frees the
"prune_data" in the "struct rev_info". This means that any code that
calls "release_revisions()" already can get rid of adjacent calls to
clear_pathspec().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "grep_filter"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:49 +0000 (22:01 +0200)] 
revisions API: have release_revisions() release "grep_filter"

Extend the the release_revisions() function so that it frees the
"grep_filter" in the "struct rev_info".This allows us to mark a test
as passing under "TEST_PASSES_SANITIZE_LEAK=true".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "filter"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:48 +0000 (22:01 +0200)] 
revisions API: have release_revisions() release "filter"

Extend the the release_revisions() function so that it frees the
"filter" in the "struct rev_info". This in combination with a
preceding change to free "cmdline" means that we can mark another set
of tests as passing under "TEST_PASSES_SANITIZE_LEAK=true".

The "filter" member was added recently in ffaa137f646 (revision: put
object filter into struct rev_info, 2022-03-09), and this fixes leaks
intruded in the subsequent leak 7940941de1f (pack-objects: use
rev.filter when possible, 2022-03-09) and 105c6f14ad3 (bundle: parse
filter capability, 2022-03-09).

The "builtin/pack-objects.c" leak in 7940941de1f was effectively with
us already, but the variable was referred to by a "static" file-scoped
variable. The "bundle.c " leak in 105c6f14ad3 was newly introduced
with the new "filter" feature for bundles.

The "t5600-clone-fail-cleanup.sh" change here to add
"TEST_PASSES_SANITIZE_LEAK=true" is one of the cases where
run-command.c in not carrying the abort() exit code upwards would have
had that test passing before, but now it *actually* passes[1]. We
should fix the lack of 1=1 mapping of SANITIZE=leak testing to actual
leaks some other time, but it's an existing edge case, let's just mark
the really-passing test as passing for now.

1. https://lore.kernel.org/git/220303.86fsnz5o9w.gmgdl@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "cmdline"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:47 +0000 (22:01 +0200)] 
revisions API: have release_revisions() release "cmdline"

Extend the the release_revisions() function so that it frees the
"cmdline" in the "struct rev_info". This in combination with a
preceding change to free "commits" and "mailmap" means that we can
whitelist another test under "TEST_PASSES_SANITIZE_LEAK=true".

There was a proposal in [1] to do away with xstrdup()-ing this
add_rev_cmdline(), perhaps that would be worthwhile, but for now let's
just free() it.

We could also make that a "char *" in "struct rev_cmdline_entry"
itself, but since we own it let's expose it as a constant to outside
callers. I proposed that in [2] but have since changed my mind. See
14d30cdfc04 (ref-filter: fix memory leak in `free_array_item()`,
2019-07-10), c514c62a4fd (checkout: fix leak of non-existent branch
names, 2020-08-14) and other log history hits for "free((char *)" for
prior art.

This includes the tests we had false-positive passes on before my
6798b08e848 (perl Git.pm: don't ignore signalled failure in
_cmd_close(), 2022-02-01), now they pass for real.

Since there are 66 tests matching t/t[0-9]*git-svn*.sh it's easier to
list those that don't pass than to touch most of those 66. So let's
introduce a "TEST_FAILS_SANITIZE_LEAK=true", which if set in the tests
won't cause lib-git-svn.sh to set "TEST_PASSES_SANITIZE_LEAK=true.

This change also marks all the tests that we removed
"TEST_FAILS_SANITIZE_LEAK=true" from in an earlier commit due to
removing the UNLEAK() from cmd_format_patch(), we can now assert that
its API use doesn't leak any "struct rev_info" memory.

This change also made commit "t5503-tagfollow.sh" pass on current
master, but that would regress when combined with
ps/fetch-atomic-fixup's de004e848a9 (t5503: simplify setup of test
which exercises failure of backfill, 2022-03-03) (through no fault of
that topic, that change started using "git clone" in the test, which
has an outstanding leak). Let's leave that test out for now to avoid
in-flight semantic conflicts.

1. https://lore.kernel.org/git/YUj%2FgFRh6pwrZalY@carlos-mbp.lan/
2. https://lore.kernel.org/git/87o88obkb1.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "mailmap"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:46 +0000 (22:01 +0200)] 
revisions API: have release_revisions() release "mailmap"

Extend the the release_revisions() function so that it frees the
"mailmap" in the "struct rev_info".

The log family of functions now calls the clear_mailmap() function
added in fa8afd18e5a (revisions API: provide and use a
release_revisions(), 2021-09-19), allowing us to whitelist some tests
with "TEST_PASSES_SANITIZE_LEAK=true".

Unfortunately having a pointer to a mailmap in "struct rev_info"
instead of an embedded member that we "own" get a bit messy, as can be
seen in the change to builtin/commit.c.

When we free() this data we won't be able to tell apart a pointer to a
"mailmap" on the heap from one on the stack. As seen in
ea57bc0d41b (log: add --use-mailmap option, 2013-01-05) the "log"
family allocates it on the heap, but in the find_author_by_nickname()
code added in ea16794e430 (commit: search author pattern against
mailmap, 2013-08-23) we allocated it on the stack instead.

Ideally we'd simply change that member to a "struct string_list
mailmap" and never free() the "mailmap" itself, but that would be a
much larger change to the revisions API.

We have code that needs to hand an existing "mailmap" to a "struct
rev_info", while we could change all of that, let's not go there
now.

The complexity isn't in the ownership of the "mailmap" per-se, but
that various things assume a "rev_info.mailmap == NULL" means "doesn't
want mailmap", if we changed that to an init'd "struct string_list
we'd need to carefully refactor things to change those assumptions.

Let's instead always free() it, and simply declare that if you add
such a "mailmap" it must be allocated on the heap. Any modern libc
will correctly panic if we free() a stack variable, so this should be
safe going forward.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API: have release_revisions() release "commits"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:45 +0000 (22:01 +0200)] 
revisions API: have release_revisions() release "commits"

Extend the the release_revisions() function so that it frees the
"commits" in the "struct rev_info".

We don't expect to use this "struct rev_info" again, so there's no
reason to NULL out revs->commits, as e.g. simplify_merges() and
create_boundary_commit_list() do.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: use release_revisions() for "prune_data" users
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:44 +0000 (22:01 +0200)] 
revisions API users: use release_revisions() for "prune_data" users

Use release_revisions() for users of "struct rev_list" that reach into
the "struct rev_info" and clear the "prune_data" already.

In a subsequent commit we'll teach release_revisions() to clear this
itself, but in the meantime let's invoke release_revisions() here to
clear anything else we may have missed, and for reasons of having
consistent boilerplate.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: use release_revisions() with UNLEAK()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:43 +0000 (22:01 +0200)] 
revisions API users: use release_revisions() with UNLEAK()

Use a release_revisions() with those "struct rev_list" users which
already "UNLEAK" the struct. It may seem odd to simultaneously attempt
to free() memory, but also to explicitly ignore whether we have memory
leaks in the same.

As explained in preceding commits this is being done to use the
built-in commands as a guinea pig for whether the release_revisions()
function works as expected, we'd like to test e.g. whether we segfault
as we change it. In subsequent commits we'll then remove these
UNLEAK() as the function is made to free the memory that caused us to
add them in the first place.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: use release_revisions() in builtin/log.c
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:42 +0000 (22:01 +0200)] 
revisions API users: use release_revisions() in builtin/log.c

In preparation for having the "log" family of functions make wider use
of release_revisions() let's have them call it just before
exiting. This changes the "log", "whatchanged", "show",
"format-patch", etc. commands, all of which live in this file.

The release_revisions() API still only frees the "pending" member, but
will learn to release more members of "struct rev_info" in subsequent
commits.

In the case of "format-patch" revert the addition of UNLEAK() in
dee839a2633 (format-patch: mark rev_info with UNLEAK, 2021-12-16),
which will cause several tests that previously passed under
"TEST_PASSES_SANITIZE_LEAK=true" to start failing.

In subsequent commits we'll now be able to use those tests to check
whether that part of the API is really leaking memory, and will fix
all of those memory leaks. Removing the UNLEAK() allows us to make
incremental progress in that direction. See [1] for further details
about this approach.

Note that the release_revisions() will not be sufficient to deal with
the code in cmd_show() added in 5d7eeee2ac6 (git-show: grok blobs,
trees and tags, too, 2006-12-14) which clobbers the "pending" array in
the case of "OBJ_COMMIT". That will need to be dealt with by some
future follow-up work.

1. https://lore.kernel.org/git/220218.861r00ib86.gmgdl@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: use release_revisions() in http-push.c
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:41 +0000 (22:01 +0200)] 
revisions API users: use release_revisions() in http-push.c

In the case of cmd_main() in http-push.c we need to move the
deceleration of the "struct rev-list" into the loop over the
"remote_refs" when adding a release_revisions().

We'd previously set up the "revs" for each remote, but would
potentially leak memory on each one.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: add "goto cleanup" for release_revisions()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:40 +0000 (22:01 +0200)] 
revisions API users: add "goto cleanup" for release_revisions()

Add a release_revisions() to various users of "struct rev_info" which
requires a minor refactoring to a "goto cleanup" pattern to use that
function.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agostash: always have the owner of "stash_info" free it
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:39 +0000 (22:01 +0200)] 
stash: always have the owner of "stash_info" free it

Change the initialization of the "revision" member of "struct
stash_info" to be initialized vi a macro, and more importantly that
that initializing function be tasked to free it, usually via a "goto
cleanup" pattern.

Despite the "revision" name (and the topic of the series containing
this commit) the "stash info" has nothing to do with the "struct
rev_info". I'm making this change because in the subsequent commit
when we do want to free the "struct rev_info" via a "goto cleanup"
pattern we'd otherwise free() uninitialized memory in some cases, as
we only strbuf_init() the string in get_stash_info().

So while it's not the smallest possible change, let's convert all
users of this pattern in the file while we're at it.

A good follow-up to this change would be to change all the "ret = -1;
goto done;" in this file to instead use a "goto cleanup", and
initialize "int ret = -1" at the start of the relevant functions. That
would allow us to drop a lot of needless brace verbosity on two-line
"if" statements, but let's leave that alone for now.

To ensure that there's a 1=1 mapping between owners of the "struct
stash_info" and free_stash_info() change the assert_stash_ref()
function to be a trivial get_stash_info_assert() wrapper. The caller
will call free_stash_info(), and by returning -1 we'll eventually (via
!!ret) exit with status 1 anyway.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: use release_revisions() needing REV_INFO_INIT
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:38 +0000 (22:01 +0200)] 
revisions API users: use release_revisions() needing REV_INFO_INIT

Use release_revisions() to various users of "struct rev_list" which
need to have their "struct rev_info" zero-initialized before we can
start using it.

For the bundle.c code see the early exit case added in
3bbbe467f29 (bundle verify: error out if called without an object
database, 2019-05-27).

For the relevant bisect.c code see 45b6370812c (bisect: libify
`check_good_are_ancestors_of_bad` and its dependents, 2020-02-17).

For the submodule.c code see the "goto" on "(!left || !right || !sub)"
added in 8e6df65015f (submodule: refactor show_submodule_summary with
helper function, 2016-08-31).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevision.[ch]: document and move code declared around "init"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:37 +0000 (22:01 +0200)] 
revision.[ch]: document and move code declared around "init"

A subsequent commit will add "REV_INFO_INIT" macro adjacent to
repo_init_revisions(), unfortunately between the "struct rev_info"
itself and that function we've added various miscellaneous code
between the two over the years.

Let's move that code either lower in revision.h, giving it API docs
while we're at it, or in cases where it wasn't public API at all move
it into revision.c No lines of code are changed here, only moved
around. The only changes are the addition of new API comments.

The "tree_difference" variable could also be declared like this, which
I think would be a lot clearer, but let's leave that for now to keep
this a move-only change:

static enum {
REV_TREE_SAME,
REV_TREE_NEW, /* Only new files */
REV_TREE_OLD, /* Only files removed */
REV_TREE_DIFFERENT, /* Mixed changes */
} tree_difference = REV_TREE_SAME;

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevisions API users: add straightforward release_revisions()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:36 +0000 (22:01 +0200)] 
revisions API users: add straightforward release_revisions()

Add a release_revisions() to various users of "struct rev_list" in
those straightforward cases where we only need to add the
release_revisions() call to the end of a block, and don't need to
e.g. refactor anything to use a "goto cleanup" pattern.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevision.[ch]: provide and start using a release_revisions()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:35 +0000 (22:01 +0200)] 
revision.[ch]: provide and start using a release_revisions()

The users of the revision.[ch] API's "struct rev_info" are a major
source of memory leaks in the test suite under SANITIZE=leak, which in
turn adds a lot of noise when trying to mark up tests with
"TEST_PASSES_SANITIZE_LEAK=true".

The users of that API are largely one-shot, e.g. "git rev-list" or
"git log", or the "git checkout" and "git stash" being modified here

For these callers freeing the memory is arguably a waste of time, but
in many cases they've actually been trying to free the memory, and
just doing that in a buggy manner.

Let's provide a release_revisions() function for these users, and
start migrating them over per the plan outlined in [1]. Right now this
only handles the "pending" member of the struct, but more will be
added in subsequent commits.

Even though we only clear the "pending" member now, let's not leave a
trap in code like the pre-image of index_differs_from(), where we'd
start doing the wrong thing as soon as the release_revisions() learned
to clear its "diffopt". I.e. we need to call release_revisions() after
we've inspected any state in "struct rev_info".

This leaves in place e.g. clear_pathspec(&rev.prune_data) in
stash_working_tree() in builtin/stash.c, subsequent commits will teach
release_revisions() to free "prune_data" and other members that in
some cases are individually cleared by users of "struct rev_info" by
reaching into its members. Those subsequent commits will remove the
relevant calls to e.g. clear_pathspec().

We avoid amending code in index_differs_from() in diff-lib.c as well
as wt_status_collect_changes_index(), has_unstaged_changes() and
has_uncommitted_changes() in wt-status.c in a way that assumes that we
are already clearing the "diffopt" member. That will be handled in a
subsequent commit.

1. https://lore.kernel.org/git/87a6k8daeu.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agococci: add and apply free_commit_list() rules
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:34 +0000 (22:01 +0200)] 
cocci: add and apply free_commit_list() rules

Add and apply coccinelle rules to remove "if (E)" before
"free_commit_list(E)", the function can accept NULL, and further
change cases where "E = NULL" followed to also be unconditionally.

The code changes in this commit were entirely made by the coccinelle
rule being added here, and applied with:

    make contrib/coccinelle/free.cocci.patch
    patch -p1 <contrib/coccinelle/free.cocci.patch

The only manual intervention here is that the the relevant code in
commit.c has been manually re-indented.

Suggested-by: Phillip Wood <phillip.wood123@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoformat-patch: don't leak "extra_headers" or "ref_message_ids"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:33 +0000 (22:01 +0200)] 
format-patch: don't leak "extra_headers" or "ref_message_ids"

Fix two memory leaks in "struct rev_info" by freeing that memory in
cmd_format_patch(). These two are unusual special-cases in being in
the "struct rev_info", but not being "owned" by the code in
revision.c. I.e. they're members of the struct so that this code in
"builtin/log.c" can conveniently pass information code in
"log-tree.c".

See e.g. the make_cover_letter() caller of log_write_email_headers()
here in "builtin/log.c", and [1] for a demonstration of where the
"extra_headers" and "ref_message_ids" struct members are used.

See 20ff06805c6 (format-patch: resurrect extra headers from config,
2006-06-02) and d1566f7883f (git-format-patch: Make the second and
subsequent mails replies to the first, 2006-07-14) for the initial
introduction of "extra_headers" and "ref_message_ids".

We can count on repo_init_revisions() memset()-ing this data to 0
however, so we can count on it being either NULL or something we
allocated. In the case of "extra_headers" let's add a local "char *"
variable to hold it, to avoid the eventual cast from "const char *"
when we free() it.

1. https://lore.kernel.org/git/220401.868rsoogxf.gmgdl@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agostring_list API users: use string_list_init_{no,}dup
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:32 +0000 (22:01 +0200)] 
string_list API users: use string_list_init_{no,}dup

Follow-up on the introduction of string_list_init_nodup() and
string_list_init_dup() in the series merged in bd4232fac33 (Merge
branch 'ab/struct-init', 2021-07-16) and convert code that implicitly
relied on xcalloc() being equivalent to the initializer to use
xmalloc() and string_list_init_{no,}dup() instead.

In the case of get_unmerged() in merge-recursive.c we used the
combination of xcalloc() and assigning "1" to "strdup_strings" to get
what we'd get via string_list_init_dup(), let's use that instead.

Adjacent code in cmd_format_patch() will be changed in a subsequent
commit, since we're changing that let's change the other in-tree
patterns that do the same. Let's also convert a "x == NULL" to "!x"
per our CodingGuidelines, as we need to change the "if" line anyway.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoblame: use "goto cleanup" for cleanup_scoreboard()
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:31 +0000 (22:01 +0200)] 
blame: use "goto cleanup" for cleanup_scoreboard()

Amend a freeing pattern added in 0906ac2b54b (blame: use changed-path
Bloom filters, 2020-04-16) to use a "goto cleanup", so that we can be
sure that we call cleanup_scoreboard().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot/helper/test-fast-rebase.c: don't leak "struct strbuf"
Ævar Arnfjörð Bjarmason [Wed, 13 Apr 2022 20:01:30 +0000 (22:01 +0200)] 
t/helper/test-fast-rebase.c: don't leak "struct strbuf"

Fix a memory leak that's been with us since f9500261e0a (fast-rebase:
write conflict state to working tree, index, and HEAD, 2021-05-20)
changed this code to move these strbuf_release() into an if/else
block.

We'll also add to "reflog_msg" in the "else" arm of the "if" block
being modified here, and we'll append to "branch_msg" in both
cases. But after f9500261e0a only the "if" block would free these two
"struct strbuf".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMakefile: add a prerequisite to the coverage-report target
Elia Pinto [Thu, 14 Apr 2022 02:25:13 +0000 (02:25 +0000)] 
Makefile: add a prerequisite to the coverage-report target

Directly invoking make coverage-report as a target results in an error because
its prerequisites are missing,

This patch adds the compile-test prerequisite, which is run only once each time
the compile-report target is invoked. In practice, the developer may decide to
review the coverage-report results without necessarily rerunning for this
coverage-test, if it has already been run.

Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'loc/tw/0407' of github.com:l10n-tw/git-po
Jiang Xin [Thu, 14 Apr 2022 05:13:38 +0000 (13:13 +0800)] 
Merge branch 'loc/tw/0407' of github.com:l10n-tw/git-po

* 'loc/tw/0407' of github.com:l10n-tw/git-po:
  l10n: zh_TW: v2.36.0 round 2

4 years agol10n: zh_TW: v2.36.0 round 2
Yi-Jyun Pan [Thu, 7 Apr 2022 06:30:49 +0000 (14:30 +0800)] 
l10n: zh_TW: v2.36.0 round 2

Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
4 years agoRelNotes: revert the description on the reverted topics
Junio C Hamano [Wed, 13 Apr 2022 23:55:36 +0000 (16:55 -0700)] 
RelNotes: revert the description on the reverted topics

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRelNotes: mention safe.directory
Junio C Hamano [Wed, 13 Apr 2022 23:51:41 +0000 (16:51 -0700)] 
RelNotes: mention safe.directory

Helped-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRelNotes: clarify "bisect run unexecutable" tweak
Junio C Hamano [Wed, 13 Apr 2022 23:42:33 +0000 (16:42 -0700)] 
RelNotes: clarify "bisect run unexecutable" tweak

We do not have to guess how common the mistake the change targets is
when describing it.  Such an argument may be good while proposing a
change, but does not quite belong in the record of what has already
happened, i.e. a release note.

Helped-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRevert "fetch: increase test coverage of fetches"
Junio C Hamano [Wed, 13 Apr 2022 22:58:04 +0000 (15:58 -0700)] 
Revert "fetch: increase test coverage of fetches"

This reverts commit 2a0cafd464709cfa22fe7249290c644a2a26c520,
as it expects a working "a ref deletion must produce a single
transaction, not one for loose and another for packed" topic,
which we do not have.

4 years agoRevert "Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs'"
Junio C Hamano [Wed, 13 Apr 2022 22:51:33 +0000 (15:51 -0700)] 
Revert "Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs'"

This reverts commit 991b4d47f0accd3955d05927d5ce434e03ffbdb6, reversing
changes made to bcd020f88e1e22f38422ac3f73ab06b34ec4bef1.

4 years agoSync with Git 2.35.3
Junio C Hamano [Wed, 13 Apr 2022 22:26:32 +0000 (15:26 -0700)] 
Sync with Git 2.35.3

4 years agoGit 2.35.3 v2.35.3
Junio C Hamano [Wed, 13 Apr 2022 22:21:34 +0000 (15:21 -0700)] 
Git 2.35.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.34.3 v2.34.3
Junio C Hamano [Wed, 13 Apr 2022 22:21:31 +0000 (15:21 -0700)] 
Git 2.34.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.33.3 v2.33.3
Junio C Hamano [Wed, 13 Apr 2022 22:21:28 +0000 (15:21 -0700)] 
Git 2.33.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.32.2 v2.32.2
Junio C Hamano [Wed, 13 Apr 2022 22:21:26 +0000 (15:21 -0700)] 
Git 2.32.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.31.3 v2.31.3
Junio C Hamano [Wed, 13 Apr 2022 22:21:08 +0000 (15:21 -0700)] 
Git 2.31.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.30.4 v2.30.4
Junio C Hamano [Wed, 13 Apr 2022 20:31:29 +0000 (13:31 -0700)] 
Git 2.30.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosetup: opt-out of check with safe.directory=*
Derrick Stolee [Wed, 13 Apr 2022 15:32:31 +0000 (15:32 +0000)] 
setup: opt-out of check with safe.directory=*

With the addition of the safe.directory in 8959555ce
(setup_git_directory(): add an owner check for the top-level directory,
2022-03-02) released in v2.35.2, we are receiving feedback from a
variety of users about the feature.

Some users have a very large list of shared repositories and find it
cumbersome to add this config for every one of them.

In a more difficult case, certain workflows involve running Git commands
within containers. The container boundary prevents any global or system
config from communicating `safe.directory` values from the host into the
container. Further, the container almost always runs as a different user
than the owner of the directory in the host.

To simplify the reactions necessary for these users, extend the
definition of the safe.directory config value to include a possible '*'
value. This value implies that all directories are safe, providing a
single setting to opt-out of this protection.

Note that an empty assignment of safe.directory clears all previous
values, and this is already the case with the "if (!value || !*value)"
condition.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosetup: fix safe.directory key not being checked
Matheus Valadares [Wed, 13 Apr 2022 15:32:30 +0000 (15:32 +0000)] 
setup: fix safe.directory key not being checked

It seems that nothing is ever checking to make sure the safe directories
in the configs actually have the key safe.directory, so some unrelated
config that has a value with a certain directory would also make it a
safe directory.

Signed-off-by: Matheus Valadares <me@m28.io>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot0033: add tests for safe.directory
Derrick Stolee [Wed, 13 Apr 2022 15:32:29 +0000 (15:32 +0000)] 
t0033: add tests for safe.directory

It is difficult to change the ownership on a directory in our test
suite, so insert a new GIT_TEST_ASSUME_DIFFERENT_OWNER environment
variable to trick Git into thinking we are in a differently-owned
directory. This allows us to test that the config is parsed correctly.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: fr: v2.36 round 2
Jean-Noël Avila [Wed, 13 Apr 2022 19:21:48 +0000 (21:21 +0200)] 
l10n: fr: v2.36 round 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
4 years agol10n: tr: v2.36.0 round 2
Emir SARI [Wed, 13 Apr 2022 10:28:58 +0000 (13:28 +0300)] 
l10n: tr: v2.36.0 round 2

Signed-off-by: Emir SARI <emir_sari@icloud.com>
4 years agol10n: git.pot: v2.36.0 round 2 (4 new, 3 removed)
Jiang Xin [Wed, 13 Apr 2022 06:55:25 +0000 (14:55 +0800)] 
l10n: git.pot: v2.36.0 round 2 (4 new, 3 removed)

Generate po/git.pot from v2.36.0-rc2 for git v2.36.0 l10n round 2.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
4 years agoMerge branch 'master' of github.com:git/git
Jiang Xin [Wed, 13 Apr 2022 06:51:53 +0000 (14:51 +0800)] 
Merge branch 'master' of github.com:git/git

* 'master' of github.com:git/git: (25 commits)
  Git 2.36-rc2
  i18n: fix some badly formatted i18n strings
  Git 2.36-rc1
  t9902: split test to run on appropriate systems
  ls-tree doc: document interaction with submodules
  Documentation: add --batch-command to cat-file synopsis
  git-ls-tree.txt: fix the name of "%(objectsize:padded)"
  submodule-helper: fix usage string
  doc: replace "--" with {litdd} in credential-cache/fsmonitor
  contrib/scalar: fix 'all' target in Makefile
  Documentation/Makefile: fix "make info" regression in dad9cd7d518
  configure.ac: fix HAVE_SYNC_FILE_RANGE definition
  git-compat-util: really support openssl as a source of entropy
  ls-tree: `-l` should not imply recursive listing
  Git 2.35.2
  Git 2.34.2
  Git 2.33.2
  Git 2.32.1
  Git 2.31.2
  Git 2.30.3
  ...

4 years agot1011: replace test -f with test_path_is_file
Siddharth Asthana [Tue, 12 Apr 2022 20:37:22 +0000 (02:07 +0530)] 
t1011: replace test -f with test_path_is_file

Use test_path_is_file() instead of 'test -f' for better debugging
information.

Signed-off-by: Siddharth Asthana <siddharthasthana31@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.36-rc2 v2.36.0-rc2
Junio C Hamano [Tue, 12 Apr 2022 04:27:02 +0000 (21:27 -0700)] 
Git 2.36-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ja/i18n-fix-for-2.36'
Junio C Hamano [Mon, 11 Apr 2022 23:45:17 +0000 (16:45 -0700)] 
Merge branch 'ja/i18n-fix-for-2.36'

Fixes to some localizable strings.

* ja/i18n-fix-for-2.36:
  i18n: fix some badly formatted i18n strings

4 years agoMerge tag 'v2.35.2'
Junio C Hamano [Mon, 11 Apr 2022 23:44:45 +0000 (16:44 -0700)] 
Merge tag 'v2.35.2'

4 years agoi18n: fix some badly formatted i18n strings
Jean-Noël Avila [Mon, 11 Apr 2022 19:23:30 +0000 (19:23 +0000)] 
i18n: fix some badly formatted i18n strings

String in submodule--helper is not correctly formatting
placeholders. The string in git-send-email is partial.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK
Phillip Wood [Sat, 9 Apr 2022 12:28:37 +0000 (12:28 +0000)] 
tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK

As the address sanitizer checks for a superset of the issues detected
by setting MALLOC_CHECK_ (which tries to detect things like double
frees and off-by-one errors) there is no need to set the latter when
compiling with -fsanitize=address.

This fixes a regression introduced by 131b94a10a ("test-lib.sh: Use
GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34", 2022-03-04)
which causes all the tests to fail with the message

    ASan runtime does not come first in initial library list;
    you should either link runtime to your application or
    manually preload it with LD_PRELOAD.

when git is compiled with SANITIZE=address on systems with glibc >=
2.34. I have tested SANITIZE=leak and SANITIZE=undefined and they do
not suffer from this regression so the fix in this patch should be
sufficient.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot7812: test PCRE2 whitespace bug
René Scharfe [Fri, 8 Apr 2022 16:21:52 +0000 (18:21 +0200)] 
t7812: test PCRE2 whitespace bug

Check if git grep works around the PCRE2 big fixed by their e0c6029
(Fix inifinite loop when a single byte newline is searched in JIT.,
2020-05-29), which affects version 10.35 and earlier.

Searching for leading whitespace also triggers the endless loop.
Set a one-second alarm to abort in case we do get hit by the bug, to
avoid having to wait forever for the test result.

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'fr_2.36_rnd1' of github.com:jnavila/git
Jiang Xin [Mon, 11 Apr 2022 00:48:13 +0000 (08:48 +0800)] 
Merge branch 'fr_2.36_rnd1' of github.com:jnavila/git

* 'fr_2.36_rnd1' of github.com:jnavila/git:
  l10n: fr: v2.36 round 1

4 years agoMerge branch 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po
Jiang Xin [Mon, 11 Apr 2022 00:47:13 +0000 (08:47 +0800)] 
Merge branch 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po

* 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po:
  l10n: zh_CN v2.36.0 round 1
  l10n: Update zh_CN repo link

4 years agol10n: fr: v2.36 round 1
Jean-Noël Avila [Sat, 9 Apr 2022 16:53:27 +0000 (18:53 +0200)] 
l10n: fr: v2.36 round 1

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
4 years agoGit 2.36-rc1 v2.36.0-rc1
Junio C Hamano [Fri, 8 Apr 2022 20:54:49 +0000 (13:54 -0700)] 
Git 2.36-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ld/sparse-index-bash-completion'
Junio C Hamano [Fri, 8 Apr 2022 20:53:48 +0000 (13:53 -0700)] 
Merge branch 'ld/sparse-index-bash-completion'

Test regression fix.

* ld/sparse-index-bash-completion:
  t9902: split test to run on appropriate systems

4 years agoMerge branch 'tl/ls-tree-oid-only'
Junio C Hamano [Fri, 8 Apr 2022 20:53:48 +0000 (13:53 -0700)] 
Merge branch 'tl/ls-tree-oid-only'

Docfix.

* tl/ls-tree-oid-only:
  ls-tree doc: document interaction with submodules

4 years agot9902: split test to run on appropriate systems
Adam Dinwoodie [Fri, 8 Apr 2022 09:53:53 +0000 (10:53 +0100)] 
t9902: split test to run on appropriate systems

The "FUNNYNAMES" test prerequisite passes on Cygwin, as the Cygwin
file system interface has a workaround for the underlying operating
system's lack of support for tabs, newlines or quotes.  However, it does
not add support for backslash, which is treated as a directory
separator, meaning one of the tests added by 48803821b1 ("completion:
handle unusual characters for sparse-checkout", 2022-02-07) will fail on
Cygwin.

To avoid this failure while still getting maximal test coverage, split
that test into two: test handling of paths that include tabs on anything
that has the FUNNYNAMES prerequisite, but skip testing handling of paths
that include backslashes unless both FUNNYNAMES is set and the system is
not Cygwin.

It might be nice to have more granularity than "FUNNYNAMES" and its
sibling "FUNNIERNAMES" provide, so that tests could be run based on
specific individual characters supported by the file system being
tested, but that seems like it would make the prerequisite checks in
this area much more verbose for very little gain.

Signed-off-by: Adam Dinwoodie <adam@dinwoodie.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoconvert: clarify line ending conversion warning
Alex Henrie [Fri, 8 Apr 2022 04:41:54 +0000 (22:41 -0600)] 
convert: clarify line ending conversion warning

The warning about converting line endings is extremely confusing. Its
two sentences each use the word "will" without specifying a timeframe,
which makes it sound like both sentences are referring to the same
timeframe. On top of that, it uses the term "original line endings"
without saying whether "original" means LF or CRLF.

Rephrase the warning to be clear about when the line endings will be
changed and what they will be changed to.

On a platform whose native line endings are not CRLF (e.g. Linux), the
"git add" step in the following sequence triggers the warning in
question:

$ git config core.autocrlf true
$ echo 'Hello world!' >hello.txt
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt
The file will have its original line endings in your working directory

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agols-tree doc: document interaction with submodules
Ævar Arnfjörð Bjarmason [Fri, 8 Apr 2022 16:00:25 +0000 (18:00 +0200)] 
ls-tree doc: document interaction with submodules

The ls-tree documentation had never been updated after it learned to
interact with submodules to explicitly mention them. The initial
support was added in f35a6d3bce7 (Teach core object handling functions
about gitlinks, 2007-04-09). E.g. the discussion of --long added in
f35a6d3bce7 (Teach core object handling functions about gitlinks,
2007-04-09) didn't explicitly mention them.

But this documentation added in 455923e0a15 (ls-tree: introduce
"--format" option, 2022-03-23) had no such excuse, and was actively
misleading by providing an exhaustive but incomplete list of object
types we'd emit.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocontrib/vscode/: debugging with VS Code and gdb
COGONI Guillaume [Thu, 7 Apr 2022 20:40:01 +0000 (22:40 +0200)] 
contrib/vscode/: debugging with VS Code and gdb

The externalConsole=true setting is broken for many users (launching the
debugger with such setting results in VS Code waiting forever without
actually starting the debugger). Also, this setting is a matter of user
preference, and is arguably better set in a "launch" section in the
user-wide settings.json than hardcoded in our script. Remove the line to
use VS Code's default, or the user's setting.

Add useful links in contrib/vscode/README.md to help the user to
configure VS Code and how to use the debugging feature.

Helped-by: Matthieu Moy <Matthieu.Moy@univ-lyon1.fr>
Helped-by: Derrick Stolee <derrickstolee@github.com>
Co-authored-by: BRESSAT Jonathan <git.jonathan.bressat@gmail.com>
Signed-off-by: COGONI Guillaume <cogoni.guillaume@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: zh_CN v2.36.0 round 1
Fangyi Zhou [Wed, 6 Apr 2022 09:39:20 +0000 (10:39 +0100)] 
l10n: zh_CN v2.36.0 round 1

Reviewed-by: 依云 <lilydjwg@gmail.com>
Signed-off-by: Fangyi Zhou <me@fangyi.io>
4 years agol10n: Update zh_CN repo link
Fangyi Zhou [Wed, 6 Apr 2022 09:41:07 +0000 (10:41 +0100)] 
l10n: Update zh_CN repo link

Signed-off-by: Fangyi Zhou <me@fangyi.io>
4 years agoMerge branch 'jc/cat-file-batch-commands'
Junio C Hamano [Thu, 7 Apr 2022 22:04:19 +0000 (15:04 -0700)] 
Merge branch 'jc/cat-file-batch-commands'

Doc fix.

* jc/cat-file-batch-commands:
  Documentation: add --batch-command to cat-file synopsis

4 years agoDocumentation: add --batch-command to cat-file synopsis
Ævar Arnfjörð Bjarmason [Thu, 7 Apr 2022 19:08:59 +0000 (21:08 +0200)] 
Documentation: add --batch-command to cat-file synopsis

440c705ea63 (cat-file: add --batch-command mode, 2022-02-18) added
the new option and operating mode without listing it to the synopsis
section.  Fix it.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'tz/doc-litdd-fixes'
Junio C Hamano [Thu, 7 Apr 2022 19:23:47 +0000 (12:23 -0700)] 
Merge branch 'tz/doc-litdd-fixes'

Documentation markup fix.

* tz/doc-litdd-fixes:
  doc: replace "--" with {litdd} in credential-cache/fsmonitor

4 years agoMerge branch 'js/apply-partial-clone-filters-recursively'
Junio C Hamano [Thu, 7 Apr 2022 19:23:31 +0000 (12:23 -0700)] 
Merge branch 'js/apply-partial-clone-filters-recursively'

Typofix

* js/apply-partial-clone-filters-recursively:
  submodule-helper: fix usage string

4 years agoMerge branch 'tl/ls-tree-oid-only'
Junio C Hamano [Thu, 7 Apr 2022 19:23:23 +0000 (12:23 -0700)] 
Merge branch 'tl/ls-tree-oid-only'

* tl/ls-tree-oid-only:
  git-ls-tree.txt: fix the name of "%(objectsize:padded)"

4 years agogit-ls-tree.txt: fix the name of "%(objectsize:padded)"
Martin Ågren [Thu, 7 Apr 2022 15:52:31 +0000 (17:52 +0200)] 
git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Commit 455923e0a1 ("ls-tree: introduce "--format" option", 2022-03-23)
introduced `--format` and the various placeholders it can take, such as
%(objectname) and %(objectsize).

At some point when that patch was being developed, those placeholders
had shorter names, e.g., %(name) and %(size), which can be seen in the
commit message of 455923e0a1. One instance of "%(size:padded)" also
managed to enter the documentation in the final version of the patch.
Correct it to "%(objectsize:padded)".

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosubmodule-helper: fix usage string
Fangyi Zhou [Wed, 6 Apr 2022 20:32:57 +0000 (21:32 +0100)] 
submodule-helper: fix usage string

The missing space at the end of the line makes the closing square
bracket sticking to the dash in the next line

Found during localisation v2.36.0 round 1

Signed-off-by: Fangyi Zhou <me@fangyi.io>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: po-id for 2.36 (round 1)
Bagas Sanjaya [Wed, 9 Mar 2022 08:00:50 +0000 (15:00 +0700)] 
l10n: po-id for 2.36 (round 1)

Update following components:

  * add-interactive.c
  * branch.c
  * config.c
  * help.c
  * merge-ort-wrappers.c
  * builtin/bisect--helper.c
  * builtin/branch.c
  * builtin/cat-file.c
  * builtin/checkout.c
  * builtin/clone.c
  * builtin/config.c
  * builtin/reflog.c
  * builtin/remote.c
  * builtin/sparse-checkout.c
  * builtin/submodule--helper.c
  * builtin/unpack-objects.c

Translate following new components:
  * connect.c
  * connected.c
  * date.c
  * hook.c
  * files-backend.c
  * ident.c
  * merge-ort.c
  * merge-recursive.c
  * refs.c
  * refspec.c
  * revision.c
  * symlinks.c
  * worktree.c
  * builtin/notes.c
  * builtin/multi-pack-index.c
  * builtin/commit.c
  * builtin/merge-base.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
4 years agodoc: replace "--" with {litdd} in credential-cache/fsmonitor
Todd Zullinger [Wed, 6 Apr 2022 18:41:22 +0000 (14:41 -0400)] 
doc: replace "--" with {litdd} in credential-cache/fsmonitor

Asciidoc renders `--` as em-dash.  This is not appropriate for command
names.  It also breaks linkgit links to these commands.

Fix git-credential-cache--daemon and git-fsmonitor--daemon.  The latter
was added 3248486920 (fsmonitor: document builtin fsmonitor, 2022-03-25)
and included several links.  A check for broken links in the HTML docs
turned this up.

Manually inspecting the other Documentation/git-*--*.txt files turned up
the issue in git-credential-cache--daemon.

While here, quote `git credential-cache--daemon` in the synopsis to
match the vast majority of our other documentation.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'tl/ls-tree-oid-only'
Junio C Hamano [Wed, 6 Apr 2022 22:21:59 +0000 (15:21 -0700)] 
Merge branch 'tl/ls-tree-oid-only'

"git ls-tree" learns "--oid-only" option, similar to "--name-only",
and more generalized "--format" option.
source: <cover.1648026472.git.dyroneteng@gmail.com>

* tl/ls-tree-oid-only:
  ls-tree: `-l` should not imply recursive listing

4 years agoMerge branch 'bc/csprng-mktemps'
Junio C Hamano [Wed, 6 Apr 2022 22:21:58 +0000 (15:21 -0700)] 
Merge branch 'bc/csprng-mktemps'

Build fix.

* bc/csprng-mktemps:
  git-compat-util: really support openssl as a source of entropy

4 years agoMerge branch 'ns/core-fsyncmethod'
Junio C Hamano [Wed, 6 Apr 2022 22:21:58 +0000 (15:21 -0700)] 
Merge branch 'ns/core-fsyncmethod'

A couple of fix-up to a topic that is now in 'master'.
source: <pull.1193.git.1648663716891.gitgitgadget@gmail.com>

* ns/core-fsyncmethod:
  configure.ac: fix HAVE_SYNC_FILE_RANGE definition

4 years agoMerge branch 'ab/make-optim-noop'
Junio C Hamano [Wed, 6 Apr 2022 22:21:58 +0000 (15:21 -0700)] 
Merge branch 'ab/make-optim-noop'

A micro fix to a topic earlier merged to 'master'
source: <patch-1.1-05949221e3f-20220319T002715Z-avarab@gmail.com>

* ab/make-optim-noop:
  contrib/scalar: fix 'all' target in Makefile
  Documentation/Makefile: fix "make info" regression in dad9cd7d518

4 years agoblame: report correct number of lines in progress when using ranges
Edmundo Carmona Antoranz [Wed, 6 Apr 2022 18:13:20 +0000 (20:13 +0200)] 
blame: report correct number of lines in progress when using ranges

When using ranges, use the range sizes as the limit for progress
instead of the size of the full file.

Before:
$ git blame --progress builtin/blame.c > /dev/null
Blaming lines: 100% (1210/1210), done.
$ git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null
Blaming lines:  10% (122/1210), done.
$

After:
$ ./git blame --progress builtin/blame.c > /dev/null
Blaming lines: 100% (1210/1210), done.
$ ./git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null
Blaming lines: 100% (122/122), done.
$

Signed-off-by: Edmundo Carmona Antoranz <eantoranz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot/perf: add iteration setup mechanism to perf-lib
Neeraj Singh [Tue, 5 Apr 2022 05:20:17 +0000 (22:20 -0700)] 
t/perf: add iteration setup mechanism to perf-lib

Tests that affect the repo in stateful ways are easier to write if we
can run setup steps outside of the measured portion of perf iteration.

This change adds a "--setup 'setup-script'" parameter to test_perf. To
make invocations easier to understand, I also moved the prerequisites to
a new --prereq parameter.

The setup facility will be used in the upcoming perf tests for batch
mode, but it already helps in some existing tests, like t5302 and t7820.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocore.fsyncmethod: performance tests for batch mode
Neeraj Singh [Tue, 5 Apr 2022 05:20:18 +0000 (22:20 -0700)] 
core.fsyncmethod: performance tests for batch mode

Add basic performance tests for git commands that can add data to the
object database. We cover:
* git add
* git stash
* git update-index (via git stash)
* git unpack-objects
* git commit --all

We cover all currently available fsync methods as well.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocore.fsyncmethod: tests for batch mode
Neeraj Singh [Tue, 5 Apr 2022 05:20:16 +0000 (22:20 -0700)] 
core.fsyncmethod: tests for batch mode

Add test cases to exercise batch mode for:
 * 'git add'
 * 'git stash'
 * 'git update-index'
 * 'git unpack-objects'

These tests ensure that the added data winds up in the object database.

In this change we introduce a new test helper lib-unique-files.sh. The
goal of this library is to create a tree of files that have different
oids from any other files that may have been created in the current test
repo. This helps us avoid missing validation of an object being added
due to it already being in the repo.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotest-lib-functions: add parsing helpers for ls-files and ls-tree
Neeraj Singh [Tue, 5 Apr 2022 05:20:15 +0000 (22:20 -0700)] 
test-lib-functions: add parsing helpers for ls-files and ls-tree

Several tests use awk to parse OIDs from the output of 'git ls-files
--stage' and 'git ls-tree'. Introduce helpers to centralize these uses
of awk.

Update t5317-pack-objects-filter-objects.sh to use the new ls-files
helper so that it has some usages to review. Other updates are left for
the future.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocore.fsync: use batch mode and sync loose objects by default on Windows
Neeraj Singh [Tue, 5 Apr 2022 05:20:14 +0000 (22:20 -0700)] 
core.fsync: use batch mode and sync loose objects by default on Windows

Git for Windows has defaulted to core.fsyncObjectFiles=true since
September 2017. We turn on syncing of loose object files with batch mode
in upstream Git so that we can get broad coverage of the new code
upstream.

We don't actually do fsyncs in the most of the test suite, since
GIT_TEST_FSYNC is set to 0. However, we do exercise all of the
surrounding batch mode code since GIT_TEST_FSYNC merely makes the
maybe_fsync wrapper always appear to succeed.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agounpack-objects: use the bulk-checkin infrastructure
Neeraj Singh [Tue, 5 Apr 2022 05:20:13 +0000 (22:20 -0700)] 
unpack-objects: use the bulk-checkin infrastructure

The unpack-objects functionality is used by fetch, push, and fast-import
to turn the transfered data into object database entries when there are
fewer objects than the 'unpacklimit' setting.

By enabling an odb-transaction when unpacking objects, we can take advantage
of batched fsyncs.

Here are some performance numbers to justify batch mode for
unpack-objects, collected on a WSL2 Ubuntu VM.

Fsync Mode | Time for 90 objects (ms)
-------------------------------------
       Off | 170
  On,fsync | 760
  On,batch | 230

Note that the default unpackLimit is 100 objects, so there's a 3x
benefit in the worst case. The non-batch mode fsync scales linearly
with the number of objects, so there are significant benefits even with
smaller numbers of objects.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoupdate-index: use the bulk-checkin infrastructure
Neeraj Singh [Tue, 5 Apr 2022 05:20:12 +0000 (22:20 -0700)] 
update-index: use the bulk-checkin infrastructure

The update-index functionality is used internally by 'git stash push' to
setup the internal stashed commit.

This change enables odb-transactions for update-index infrastructure to
speed up adding new objects to the object database by leveraging the
batch fsync functionality.

There is some risk with this change, since under batch fsync, the object
files will be in a tmp-objdir until update-index is complete, so callers
using the --stdin option will not see them until update-index is done.
This risk is mitigated by flushing the ODB transaction prior to
reporting any verbose output so that objects will be visible to callers
that are synchronizing with update-index by snooping its output.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuiltin/add: add ODB transaction around add_files_to_cache
Neeraj Singh [Tue, 5 Apr 2022 05:20:11 +0000 (22:20 -0700)] 
builtin/add: add ODB transaction around add_files_to_cache

The add_files_to_cache function is invoked internally by
builtin/commit.c and builtin/checkout.c for their flags that stage
modified files before doing the larger operation. These commands
can benefit from batched fsyncing.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocache-tree: use ODB transaction around writing a tree
Neeraj Singh [Tue, 5 Apr 2022 05:20:10 +0000 (22:20 -0700)] 
cache-tree: use ODB transaction around writing a tree

Take advantage of the odb transaction infrastructure around writing the
cached tree to the object database.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocore.fsyncmethod: batched disk flushes for loose-objects
Neeraj Singh [Tue, 5 Apr 2022 05:20:09 +0000 (22:20 -0700)] 
core.fsyncmethod: batched disk flushes for loose-objects

When adding many objects to a repo with `core.fsync=loose-object`,
the cost of fsync'ing each object file can become prohibitive.

One major source of the cost of fsync is the implied flush of the
hardware writeback cache within the disk drive. This commit introduces
a new `core.fsyncMethod=batch` option that batches up hardware flushes.
It hooks into the bulk-checkin odb-transaction functionality, takes
advantage of tmp-objdir, and uses the writeout-only support code.

When the new mode is enabled, we do the following for each new object:
1a. Create the object in a tmp-objdir.
2a. Issue a pagecache writeback request and wait for it to complete.

At the end of the entire transaction when unplugging bulk checkin:
1b. Issue an fsync against a dummy file to flush the log and hardware
   writeback cache, which should by now have seen the tmp-objdir writes.
2b. Rename all of the tmp-objdir files to their final names.
3b. When updating the index and/or refs, we assume that Git will issue
   another fsync internal to that operation. This is not the default
   today, but the user now has the option of syncing the index and there
   is a separate patch series to implement syncing of refs.

On a filesystem with a singular journal that is updated during name
operations (e.g. create, link, rename, etc), such as NTFS, HFS+, or XFS
we would expect the fsync to trigger a journal writeout so that this
sequence is enough to ensure that the user's data is durable by the time
the git command returns. This sequence also ensures that no object files
appear in the main object store unless they are fsync-durable.

Batch mode is only enabled if core.fsync includes loose-objects. If
the legacy core.fsyncObjectFiles setting is enabled, but core.fsync does
not include loose-objects, we will use file-by-file fsyncing.

In step (1a) of the sequence, the tmp-objdir is created lazily to avoid
work if no loose objects are ever added to the ODB. We use a tmp-objdir
to maintain the invariant that no loose-objects are visible in the main
ODB unless they are properly fsync-durable. This is important since
future ODB operations that try to create an object with specific
contents will silently drop the new data if an object with the target
hash exists without checking that the loose-object contents match the
hash. Only a full git-fsck would restore the ODB to a functional state
where dataloss doesn't occur.

In step (1b) of the sequence, we issue a fsync against a dummy file
created specifically for the purpose. This method has a little higher
cost than using one of the input object files, but makes adding new
callers of this mechanism easier, since we don't need to figure out
which object file is "last" or risk sharing violations by caching the fd
of the last object file.

_Performance numbers_:

Linux - Hyper-V VM running Kernel 5.11 (Ubuntu 20.04) on a fast SSD.
Mac - macOS 11.5.1 running on a Mac mini on a 1TB Apple SSD.
Windows - Same host as Linux, a preview version of Windows 11.

Adding 500 files to the repo with 'git add' Times reported in seconds.

object file syncing | Linux | Mac   | Windows
--------------------|-------|-------|--------
           disabled | 0.06  |  0.35 | 0.61
              fsync | 1.88  | 11.18 | 2.47
              batch | 0.15  |  0.41 | 1.53

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobulk-checkin: rebrand plug/unplug APIs as 'odb transactions'
Neeraj Singh [Tue, 5 Apr 2022 05:20:08 +0000 (22:20 -0700)] 
bulk-checkin: rebrand plug/unplug APIs as 'odb transactions'

Make it clearer in the naming and documentation of the plug_bulk_checkin
and unplug_bulk_checkin APIs that they can be thought of as
a "transaction" to optimize operations on the object database. These
transactions may be nested so that subsystems like the cache-tree
writing code can optimize their operations without caring whether the
top-level code has a transaction active.

Add a flush_odb_transaction API that will be used in update-index to
make objects visible even if a transaction is active. The flush call may
also be useful in future cases if we hold a transaction active around
calling hooks.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobulk-checkin: rename 'state' variable and separate 'plugged' boolean
Neeraj Singh [Tue, 5 Apr 2022 05:20:07 +0000 (22:20 -0700)] 
bulk-checkin: rename 'state' variable and separate 'plugged' boolean

This commit prepares for adding batch-fsync to the bulk-checkin
infrastructure.

The bulk-checkin infrastructure is currently used to batch up addition
of large blobs to a packfile. When a blob is larger than
big_file_threshold, we unconditionally add it to a pack. If bulk
checkins are 'plugged', we allow multiple large blobs to be added to a
single pack until we reach the packfile size limit; otherwise, we simply
make a new packfile for each large blob. The 'unplug' call tells us when
the series of blob additions is done so that we can finish the packfiles
and make their objects available to subsequent operations.

Stated another way, bulk-checkin allows callers to define a transaction
that adds multiple objects to the object database, where the object
database can optimize its internal operations within the transaction
boundary.

Batched fsync will fit into bulk-checkin by taking advantage of the
plug/unplug functionality to determine the appropriate time to fsync
and make newly-added objects available in the primary object database.

* Rename 'state' variable to 'bulk_checkin_packfile', since we will
  later be adding 'bulk_fsync_objdir'. This also makes the variable
  easier to find in the debugger, since the name is more unique.

* Rename finish_bulk_checkin to flush_bulk_checkin_packfile and call it
  unconditionally from unplug_bulk_checkin. Internally it will
  conditionally do a flush if there's any work to do.

* Move the 'plugged' data member of 'bulk_checkin_state' into a separate
  static variable. Doing this avoids resetting the variable in
  finish_bulk_checkin when zeroing the 'bulk_checkin_state'. As-is, we
  seem to unintentionally disable the plugging functionality the first
  time a new packfile must be created due to packfile size limits. While
  disabling the plugging state only results in suboptimal behavior for
  the current code, it would be fatal for the bulk-fsync functionality
  later in this patch series.

The net effect of these changes is to make a clear separation between
the portion of the bulk-checkin infrastructure that is related to the
packfile (nearly all of it at present) and the part that is related to
other future optimizations of the ODB.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ns/core-fsyncmethod' into ns/batch-fsync
Junio C Hamano [Wed, 6 Apr 2022 20:01:54 +0000 (13:01 -0700)] 
Merge branch 'ns/core-fsyncmethod' into ns/batch-fsync

* ns/core-fsyncmethod:
  configure.ac: fix HAVE_SYNC_FILE_RANGE definition
  core.fsyncmethod: correctly camel-case warning message
  core.fsync: fix incorrect expression for default configuration
  core.fsync: documentation and user-friendly aggregate options
  core.fsync: new option to harden the index
  core.fsync: add configuration parsing
  core.fsync: introduce granular fsync control infrastructure
  core.fsyncmethod: add writeout-only mode
  wrapper: make inclusion of Windows csprng header tightly scoped

4 years agogit-p4: preserve utf8 BOM when importing from p4 to git
Tao Klerks [Mon, 4 Apr 2022 05:50:36 +0000 (05:50 +0000)] 
git-p4: preserve utf8 BOM when importing from p4 to git

Perforce has a file type "utf8" which represents a text file with
explicit BOM. utf8-encoded files *without* BOM are stored as
regular file type "text". The "utf8" file type behaves like text
in all but one important way: it is stored, internally, without
the leading 3 BOM bytes.

git-p4 has historically imported utf8-with-BOM files (files stored,
in Perforce, as type "utf8") the same way as regular text files -
losing the BOM in the process.

Under most circumstances this issue has little functional impact,
as most systems consider the BOM to be optional and redundant, but
this *is* a correctness failure, and can have lead to practical
issues for example when BOMs are explicitly included in test files,
for example in a file encoding test suite.

Fix the handling of utf8-with-BOM files when importing changes from
p4 to git, and introduce a test that checks it is working correctly.

Signed-off-by: Tao Klerks <tao@klerks.biz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogit-p4: support explicit sync of arbitrary existing git-p4 refs
Tao Klerks [Mon, 4 Apr 2022 05:10:54 +0000 (05:10 +0000)] 
git-p4: support explicit sync of arbitrary existing git-p4 refs

With the --branch argument of the "sync" subcommand, git-p4 enables
you to import a perforce branch/path to an arbitrary git ref, using
a full ref path, or to refs/remotes/p4/* or refs/heads/p4/*,
depending on --import-local, using a short ref name.

However, when you later want to explicitly sync such a given ref to
pick up subsequent p4 changes, it only works if the ref was placed
in the p4 path *and* has only one path component (no "/").

This limitation results from a bad assumption in the
existing-branch sync logic, and also means you cannot individually
sync branches detected by --detect-branches, as these also get a
"/" in their names.

Fix "git p4 sync --branch", when called with an existing ref, so
that it works correctly regardless of whether the ref is in the p4
path or not, and (in the case of refs in the p4 path) regardless of
whether it has a "/" in its short name or not.

Also add tests to validate that these branch-specific syncs work
as expected.

Signed-off-by: Tao Klerks <tao@klerks.biz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocontrib/scalar: fix 'all' target in Makefile
Victoria Dye [Tue, 5 Apr 2022 22:35:36 +0000 (22:35 +0000)] 
contrib/scalar: fix 'all' target in Makefile

Add extra ':' to second 'all' target definition to allow 'scalar' to build.
Without this fix, the 'all:' and 'all::' targets together cause a build
failure when 'scalar' build is enabled with 'INCLUDE_SCALAR':

    Makefile:14: *** target file `all' has both : and :: entries.  Stop.

Signed-off-by: Victoria Dye <vdye@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoDocumentation/Makefile: fix "make info" regression in dad9cd7d518
Ævar Arnfjörð Bjarmason [Tue, 5 Apr 2022 19:56:20 +0000 (21:56 +0200)] 
Documentation/Makefile: fix "make info" regression in dad9cd7d518

Fix a regression in my dad9cd7d518 (Makefile: move ".SUFFIXES" rule to
shared.mak, 2022-03-03). As explained in the GNU make documentation
for the $* variable, available at:

info make --index-search='$*'

This rule relied on ".texi" being in the default list of suffixes, as
seen at:

make -f/dev/null -p | grep -v -e ^# -e ^$|grep -F .SUFFIXES

The documentation explains what was going on here:

In an explicit rule, there is no stem; so '$*' cannot be determined
in that way.  Instead, if the target name ends with a recognized
suffix (*note Old-Fashioned Suffix Rules: Suffix Rules.), '$*' is
set to the target name minus the suffix.  For example, if the
target name is 'foo.c', then '$*' is set to 'foo', since '.c' is a
suffix.  GNU 'make' does this bizarre thing only for compatibility
with other implementations of 'make'.  You should generally avoid
using '$*' except in implicit rules or static pattern rules.

If the target name in an explicit rule does not end with a
recognized suffix, '$*' is set to the empty string for that rule.

I.e. this rule added back in 5cefc33bffd (Documentation: add
gitman.info target, 2007-12-10) was resolving gitman.texi from
gitman.info. We can instead just use the more obvious $< variable
referring to the prerequisite.

This was the only use of $* in our Makefiles in an explicit rule, the
three remaining ones are all implicit rules, and therefore didn't
depend on the ".SUFFIXES" list.

Reported-by: Adam Dinwoodie <adam@dinwoodie.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Tested-by: Adam Dinwoodie <adam@dinwoodie.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoapply.c: remove unnecessary include
Garrit Franke [Tue, 5 Apr 2022 11:45:10 +0000 (13:45 +0200)] 
apply.c: remove unnecessary include

Remove include "lockfile.h" from builtin/apply.c, which is orphaned
since 6d058c88264 (apply: move lockfile into `apply_state`, 2017-10-05)

Signed-off-by: Garrit Franke <garrit@slashdev.space>
Signed-off-by: Junio C Hamano <gitster@pobox.com>