<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/builtin, branch v2.25.3</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=v2.25.3</id>
<link rel='self' href='https://git.shady.money/git/atom?h=v2.25.3'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2020-03-17T22:02:23Z</updated>
<entry>
<title>Merge branch 'hi/gpg-use-check-signature' into maint</title>
<updated>2020-03-17T22:02:23Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-03-17T22:02:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=4e730fcd1856d6154e054ffa272652e6b648f765'/>
<id>urn:sha1:4e730fcd1856d6154e054ffa272652e6b648f765</id>
<content type='text'>
"git merge signed-tag" while lacking the public key started to say
"No signature", which was utterly wrong.  This regression has been
reverted.

* hi/gpg-use-check-signature:
  Revert "gpg-interface: prefer check_signature() for GPG verification"
</content>
</entry>
<entry>
<title>Merge branch 'ds/partial-clone-fixes' into maint</title>
<updated>2020-03-17T22:02:23Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-03-17T22:02:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=76ccbdaf97c8f1e6d06e6ae37304822633b50678'/>
<id>urn:sha1:76ccbdaf97c8f1e6d06e6ae37304822633b50678</id>
<content type='text'>
Fix for a bug revealed by a recent change to make the protocol v2
the default.

* ds/partial-clone-fixes:
  partial-clone: avoid fetching when looking for objects
  partial-clone: demonstrate bugs in partial fetch
</content>
</entry>
<entry>
<title>Merge branch 'en/check-ignore' into maint</title>
<updated>2020-03-17T22:02:23Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-03-17T22:02:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=16a4bf10359edf34a7c62d6466dab2e33060d332'/>
<id>urn:sha1:16a4bf10359edf34a7c62d6466dab2e33060d332</id>
<content type='text'>
"git check-ignore" did not work when the given path is explicitly
marked as not ignored with a negative entry in the .gitignore file.

* en/check-ignore:
  check-ignore: fix documentation and implementation to match
</content>
</entry>
<entry>
<title>Merge branch 'jk/index-pack-dupfix' into maint</title>
<updated>2020-03-17T22:02:22Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-03-17T22:02:21Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=7e84f4608f9c1f2217e7601010c2451f31dc4e92'/>
<id>urn:sha1:7e84f4608f9c1f2217e7601010c2451f31dc4e92</id>
<content type='text'>
The index-pack code now diagnoses a bad input packstream that
records the same object twice when it is used as delta base; the
code used to declare a software bug when encountering such an
input, but it is an input error.

* jk/index-pack-dupfix:
  index-pack: downgrade twice-resolved REF_DELTA to die()
</content>
</entry>
<entry>
<title>Revert "gpg-interface: prefer check_signature() for GPG verification"</title>
<updated>2020-02-28T17:43:17Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-02-28T17:43:17Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=0106b1d4be166fd4f7bcf0b901d50940c9f539e2'/>
<id>urn:sha1:0106b1d4be166fd4f7bcf0b901d50940c9f539e2</id>
<content type='text'>
This reverts commit 72b006f4bfd30b7c5037c163efaf279ab65bea9c, which
breaks the end-user experience when merging a signed tag without
having the public key.  We should report "can't check because we
have no public key", but the code with this change claimed that
there was no signature.
</content>
</entry>
<entry>
<title>partial-clone: avoid fetching when looking for objects</title>
<updated>2020-02-22T17:23:08Z</updated>
<author>
<name>Derrick Stolee</name>
<email>dstolee@microsoft.com</email>
</author>
<published>2020-02-21T21:47:28Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=3e96c66805f17d7345eba4733bc80c6fe646b95f'/>
<id>urn:sha1:3e96c66805f17d7345eba4733bc80c6fe646b95f</id>
<content type='text'>
When using partial clone, find_non_local_tags() in builtin/fetch.c
checks each remote tag to see if its object also exists locally. There
is no expectation that the object exist locally, but this function
nevertheless triggers a lazy fetch if the object does not exist. This
can be extremely expensive when asking for a commit, as we are
completely removed from the context of the non-existent object and
thus supply no "haves" in the request.

6462d5eb9a (fetch: remove fetch_if_missing=0, 2019-11-05) removed a
global variable that prevented these fetches in favor of a bitflag.
However, some object existence checks were not updated to use this flag.

Update find_non_local_tags() to use OBJECT_INFO_SKIP_FETCH_OBJECT in
addition to OBJECT_INFO_QUICK. The _QUICK option only prevents
repreparing the pack-file structures. We need to be extremely careful
about supplying _SKIP_FETCH_OBJECT when we expect an object to not exist
due to updated refs.

This resolves a broken test in t5616-partial-clone.sh.

Signed-off-by: Derrick Stolee &lt;dstolee@microsoft.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>check-ignore: fix documentation and implementation to match</title>
<updated>2020-02-18T23:28:58Z</updated>
<author>
<name>Elijah Newren</name>
<email>newren@gmail.com</email>
</author>
<published>2020-02-18T23:05:37Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=7ec8125fba96f47b00bb0cab3ed716557e81e7e6'/>
<id>urn:sha1:7ec8125fba96f47b00bb0cab3ed716557e81e7e6</id>
<content type='text'>
check-ignore has two different modes, and neither of these modes has an
implementation that matches the documentation.  These modes differ in
whether they just print paths or whether they also print the final
pattern matched by the path.  The fix is different for both modes, so
I'll discuss both separately.

=== First (default) mode ===

The first mode is documented as:

    For each pathname given via the command-line or from a file via
    --stdin, check whether the file is excluded by .gitignore (or other
    input files to the exclude mechanism) and output the path if it is
    excluded.

However, it fails to do this because it did not account for negated
patterns.  Commands other than check-ignore verify exclusion rules via
calling

   ... -&gt; treat_one_path() -&gt; is_excluded() -&gt; last_matching_pattern()

while check-ignore has a call path of the form:

   ... -&gt; check_ignore()                    -&gt; last_matching_pattern()

The fact that the latter does not include the call to is_excluded()
means that it is susceptible to to messing up negated patterns (since
that is the only significant thing is_excluded() adds over
last_matching_pattern()).  Unfortunately, we can't make it just call
is_excluded(), because the same codepath is used by the verbose mode
which needs to know the matched pattern in question.  This brings us
to...

=== Second (verbose) mode ===

The second mode, known as verbose mode, references the first in the
documentation and says:

    Also output details about the matching pattern (if any) for each
    given pathname. For precedence rules within and between exclude
    sources, see gitignore(5).

The "Also" means it will print patterns that match the exclude rules as
noted for the first mode, and also print which pattern matches.  Unless
more information is printed than just pathname and pattern (which is not
done), this definition is somewhat ill-defined and perhaps even
self-contradictory for negated patterns: A path which matches a negated
exclude pattern is NOT excluded and thus shouldn't be printed by the
former logic, while it certainly does match one of the explicit patterns
and thus should be printed by the latter logic.

=== Resolution ==

Since the second mode exists to find out which pattern matches given
paths, and showing the user a pattern that begins with a '!' is
sufficient for them to figure out whether the pattern is excluded, the
existing behavior is desirable -- we just need to update the
documentation to match the implementation (i.e. it is about printing
which pattern is matched by paths, not about showing which paths are
excluded).

For the first or default mode, users just want to know whether a pattern
is excluded.  As such, the existing documentation is desirable; change
the implementation to match the documented behavior.

Finally, also adjust a few tests in t0008 that were caught up by this
discrepancy in how negated paths were handled.

Signed-off-by: Elijah Newren &lt;newren@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'pb/do-not-recurse-grep-no-index' into maint</title>
<updated>2020-02-14T20:42:31Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-02-14T20:42:31Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=153a1b46f1a4ef46cf257ed14741cb7d3e8c9ada'/>
<id>urn:sha1:153a1b46f1a4ef46cf257ed14741cb7d3e8c9ada</id>
<content type='text'>
"git grep --no-index" should not get affected by the contents of
the .gitmodules file but when "--recurse-submodules" is given or
the "submodule.recurse" variable is set, it did.  Now these
settings are ignored in the "--no-index" mode.

* pb/do-not-recurse-grep-no-index:
  grep: ignore --recurse-submodules if --no-index is given
</content>
</entry>
<entry>
<title>Merge branch 'nd/switch-and-restore' into maint</title>
<updated>2020-02-14T20:42:29Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-02-14T20:42:29Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=e361f36f61b664a36db1d34c3f9e3427ac42656d'/>
<id>urn:sha1:e361f36f61b664a36db1d34c3f9e3427ac42656d</id>
<content type='text'>
"git restore --staged" did not correctly update the cache-tree
structure, resulting in bogus trees to be written afterwards, which
has been corrected.

* nd/switch-and-restore:
  restore: invalidate cache-tree when removing entries with --staged
</content>
</entry>
<entry>
<title>Merge branch 'hw/commit-advise-while-rejecting' into maint</title>
<updated>2020-02-14T20:42:27Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2020-02-14T20:42:27Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=3bba763373a5d0e5fcbe37a5f54a16f9b7f2e7b5'/>
<id>urn:sha1:3bba763373a5d0e5fcbe37a5f54a16f9b7f2e7b5</id>
<content type='text'>
"git commit" gives output similar to "git status" when there is
nothing to commit, but without honoring the advise.statusHints
configuration variable, which has been corrected.

* hw/commit-advise-while-rejecting:
  commit: honor advice.statusHints when rejecting an empty commit
</content>
</entry>
</feed>
