merge(3p/git): Merge git upstream at v2.26.2
This commit is contained in:
commit
5229c9b232
1006 changed files with 149006 additions and 60819 deletions
15
third_party/git/.cirrus.yml
vendored
Normal file
15
third_party/git/.cirrus.yml
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
env:
|
||||||
|
CIRRUS_CLONE_DEPTH: 1
|
||||||
|
|
||||||
|
freebsd_12_task:
|
||||||
|
freebsd_instance:
|
||||||
|
image: freebsd-12-1-release-amd64
|
||||||
|
install_script:
|
||||||
|
pkg install -y gettext gmake perl5
|
||||||
|
create_user_script:
|
||||||
|
- pw useradd git
|
||||||
|
- chown -R git:git .
|
||||||
|
build_script:
|
||||||
|
- su git -c gmake
|
||||||
|
test_script:
|
||||||
|
- su git -c 'gmake test'
|
2
third_party/git/.editorconfig
vendored
2
third_party/git/.editorconfig
vendored
|
@ -4,7 +4,7 @@ insert_final_newline = true
|
||||||
|
|
||||||
# The settings for C (*.c and *.h) files are mirrored in .clang-format. Keep
|
# The settings for C (*.c and *.h) files are mirrored in .clang-format. Keep
|
||||||
# them in sync.
|
# them in sync.
|
||||||
[*.{c,h,sh,perl,pl,pm}]
|
[*.{c,h,sh,perl,pl,pm,txt}]
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
tab_width = 8
|
tab_width = 8
|
||||||
|
|
||||||
|
|
3
third_party/git/.gitignore
vendored
3
third_party/git/.gitignore
vendored
|
@ -158,6 +158,7 @@
|
||||||
/git-show-branch
|
/git-show-branch
|
||||||
/git-show-index
|
/git-show-index
|
||||||
/git-show-ref
|
/git-show-ref
|
||||||
|
/git-sparse-checkout
|
||||||
/git-stage
|
/git-stage
|
||||||
/git-stash
|
/git-stash
|
||||||
/git-status
|
/git-status
|
||||||
|
@ -216,6 +217,7 @@
|
||||||
/tags
|
/tags
|
||||||
/TAGS
|
/TAGS
|
||||||
/cscope*
|
/cscope*
|
||||||
|
*.hcc
|
||||||
*.obj
|
*.obj
|
||||||
*.lib
|
*.lib
|
||||||
*.res
|
*.res
|
||||||
|
@ -231,7 +233,6 @@
|
||||||
*.ipdb
|
*.ipdb
|
||||||
*.dll
|
*.dll
|
||||||
.vs/
|
.vs/
|
||||||
*.manifest
|
|
||||||
Debug/
|
Debug/
|
||||||
Release/
|
Release/
|
||||||
/UpgradeLog*.htm
|
/UpgradeLog*.htm
|
||||||
|
|
6
third_party/git/.mailmap
vendored
6
third_party/git/.mailmap
vendored
|
@ -18,6 +18,7 @@ Alexey Shumkin <alex.crezoff@gmail.com> <zapped@mail.ru>
|
||||||
Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com>
|
Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com>
|
||||||
Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com>
|
Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com>
|
||||||
Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu>
|
Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu>
|
||||||
|
Andrey Mazo <ahippo@yandex.com> Mazo, Andrey <amazo@checkvideo.com>
|
||||||
Aneesh Kumar K.V <aneesh.kumar@gmail.com>
|
Aneesh Kumar K.V <aneesh.kumar@gmail.com>
|
||||||
Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu>
|
Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu>
|
||||||
Amos Waterland <apw@debian.org> <apw@us.ibm.com>
|
Amos Waterland <apw@debian.org> <apw@us.ibm.com>
|
||||||
|
@ -30,6 +31,7 @@ Brandon Casey <drafnel@gmail.com> <casey@nrlssc.navy.mil>
|
||||||
Brandon Williams <bwilliams.eng@gmail.com> <bmwill@google.com>
|
Brandon Williams <bwilliams.eng@gmail.com> <bmwill@google.com>
|
||||||
brian m. carlson <sandals@crustytoothpaste.net>
|
brian m. carlson <sandals@crustytoothpaste.net>
|
||||||
brian m. carlson <sandals@crustytoothpaste.net> <sandals@crustytoothpaste.ath.cx>
|
brian m. carlson <sandals@crustytoothpaste.net> <sandals@crustytoothpaste.ath.cx>
|
||||||
|
brian m. carlson <sandals@crustytoothpaste.net> <bk2204@github.com>
|
||||||
Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com>
|
Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com>
|
||||||
Bryan Larsen <bryan@larsen.st> <bryanlarsen@yahoo.com>
|
Bryan Larsen <bryan@larsen.st> <bryanlarsen@yahoo.com>
|
||||||
Cheng Renquan <crquan@gmail.com>
|
Cheng Renquan <crquan@gmail.com>
|
||||||
|
@ -58,7 +60,9 @@ David S. Miller <davem@davemloft.net>
|
||||||
David Turner <novalis@novalis.org> <dturner@twopensource.com>
|
David Turner <novalis@novalis.org> <dturner@twopensource.com>
|
||||||
David Turner <novalis@novalis.org> <dturner@twosigma.com>
|
David Turner <novalis@novalis.org> <dturner@twosigma.com>
|
||||||
Derrick Stolee <dstolee@microsoft.com> <stolee@gmail.com>
|
Derrick Stolee <dstolee@microsoft.com> <stolee@gmail.com>
|
||||||
|
Derrick Stolee <dstolee@microsoft.com> Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
|
||||||
Deskin Miller <deskinm@umich.edu>
|
Deskin Miller <deskinm@umich.edu>
|
||||||
|
Đoàn Trần Công Danh <congdanhqx@gmail.com> Doan Tran Cong Danh
|
||||||
Dirk Süsserott <newsletter@dirk.my1.cc>
|
Dirk Süsserott <newsletter@dirk.my1.cc>
|
||||||
Eric Blake <eblake@redhat.com> <ebb9@byu.net>
|
Eric Blake <eblake@redhat.com> <ebb9@byu.net>
|
||||||
Eric Hanchrow <eric.hanchrow@gmail.com> <offby1@blarg.net>
|
Eric Hanchrow <eric.hanchrow@gmail.com> <offby1@blarg.net>
|
||||||
|
@ -107,6 +111,7 @@ Jim Meyering <jim@meyering.net> <meyering@redhat.com>
|
||||||
Joachim Berdal Haga <cjhaga@fys.uio.no>
|
Joachim Berdal Haga <cjhaga@fys.uio.no>
|
||||||
Joachim Jablon <joachim.jablon@people-doc.com> <ewjoachim@gmail.com>
|
Joachim Jablon <joachim.jablon@people-doc.com> <ewjoachim@gmail.com>
|
||||||
Johannes Schindelin <Johannes.Schindelin@gmx.de> <johannes.schindelin@gmx.de>
|
Johannes Schindelin <Johannes.Schindelin@gmx.de> <johannes.schindelin@gmx.de>
|
||||||
|
Johannes Schindelin <Johannes.Schindelin@gmx.de> Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
|
||||||
Johannes Sixt <j6t@kdbg.org> <J.Sixt@eudaptics.com>
|
Johannes Sixt <j6t@kdbg.org> <J.Sixt@eudaptics.com>
|
||||||
Johannes Sixt <j6t@kdbg.org> <j.sixt@viscovery.net>
|
Johannes Sixt <j6t@kdbg.org> <j.sixt@viscovery.net>
|
||||||
Johannes Sixt <j6t@kdbg.org> <johannes.sixt@telecom.at>
|
Johannes Sixt <j6t@kdbg.org> <johannes.sixt@telecom.at>
|
||||||
|
@ -285,6 +290,7 @@ William Pursell <bill.pursell@gmail.com>
|
||||||
YONETANI Tomokazu <y0n3t4n1@gmail.com> <qhwt+git@les.ath.cx>
|
YONETANI Tomokazu <y0n3t4n1@gmail.com> <qhwt+git@les.ath.cx>
|
||||||
YONETANI Tomokazu <y0n3t4n1@gmail.com> <y0netan1@dragonflybsd.org>
|
YONETANI Tomokazu <y0n3t4n1@gmail.com> <y0netan1@dragonflybsd.org>
|
||||||
YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
||||||
|
Yi-Jyun Pan <pan93412@gmail.com>
|
||||||
# the two anonymous contributors are different persons:
|
# the two anonymous contributors are different persons:
|
||||||
anonymous <linux@horizon.com>
|
anonymous <linux@horizon.com>
|
||||||
anonymous <linux@horizon.net>
|
anonymous <linux@horizon.net>
|
||||||
|
|
6
third_party/git/.tsan-suppressions
vendored
6
third_party/git/.tsan-suppressions
vendored
|
@ -8,3 +8,9 @@
|
||||||
# in practice it (hopefully!) doesn't matter.
|
# in practice it (hopefully!) doesn't matter.
|
||||||
race:^want_color$
|
race:^want_color$
|
||||||
race:^transfer_debug$
|
race:^transfer_debug$
|
||||||
|
|
||||||
|
# A boolean value, which tells whether the replace_map has been initialized or
|
||||||
|
# not, is read racily with an update. As this variable is written to only once,
|
||||||
|
# and it's OK if the value change right after reading it, this shouldn't be a
|
||||||
|
# problem.
|
||||||
|
race:^lookup_replace_object$
|
||||||
|
|
93
third_party/git/CODE_OF_CONDUCT.md
vendored
Normal file
93
third_party/git/CODE_OF_CONDUCT.md
vendored
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
# Git Code of Conduct
|
||||||
|
|
||||||
|
This code of conduct outlines our expectations for participants within
|
||||||
|
the Git community, as well as steps for reporting unacceptable behavior.
|
||||||
|
We are committed to providing a welcoming and inspiring community for
|
||||||
|
all and expect our code of conduct to be honored. Anyone who violates
|
||||||
|
this code of conduct may be banned from the community.
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to make participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age,
|
||||||
|
body size, disability, ethnicity, sex characteristics, gender identity and
|
||||||
|
expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity and
|
||||||
|
orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all project spaces, and it also applies
|
||||||
|
when an individual is representing the project or its community in public
|
||||||
|
spaces. Examples of representing a project or community include using an
|
||||||
|
official project e-mail address, posting via an official social media account,
|
||||||
|
or acting as an appointed representative at an online or offline event.
|
||||||
|
Representation of a project may be further defined and clarified by project
|
||||||
|
maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team at git@sfconservancy.org. All
|
||||||
|
complaints will be reviewed and investigated and will result in a response
|
||||||
|
that is deemed necessary and appropriate to the circumstances. The project
|
||||||
|
team is obligated to maintain confidentiality with regard to the reporter of
|
||||||
|
an incident. Further details of specific enforcement policies may be posted
|
||||||
|
separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
The project leadership team can be contacted by email as a whole at
|
||||||
|
git@sfconservancy.org, or individually:
|
||||||
|
|
||||||
|
- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
|
||||||
|
- Christian Couder <christian.couder@gmail.com>
|
||||||
|
- Jeff King <peff@peff.net>
|
||||||
|
- Junio C Hamano <gitster@pobox.com>
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see
|
||||||
|
https://www.contributor-covenant.org/faq
|
|
@ -75,7 +75,7 @@ For shell scripts specifically (not exhaustive):
|
||||||
|
|
||||||
- If you want to find out if a command is available on the user's
|
- If you want to find out if a command is available on the user's
|
||||||
$PATH, you should use 'type <command>', instead of 'which <command>'.
|
$PATH, you should use 'type <command>', instead of 'which <command>'.
|
||||||
The output of 'which' is not machine parseable and its exit code
|
The output of 'which' is not machine parsable and its exit code
|
||||||
is not reliable across platforms.
|
is not reliable across platforms.
|
||||||
|
|
||||||
- We use POSIX compliant parameter substitutions and avoid bashisms;
|
- We use POSIX compliant parameter substitutions and avoid bashisms;
|
||||||
|
@ -203,7 +203,7 @@ For C programs:
|
||||||
. since early 2012 with e1327023ea, we have been using an enum
|
. since early 2012 with e1327023ea, we have been using an enum
|
||||||
definition whose last element is followed by a comma. This, like
|
definition whose last element is followed by a comma. This, like
|
||||||
an array initializer that ends with a trailing comma, can be used
|
an array initializer that ends with a trailing comma, can be used
|
||||||
to reduce the patch noise when adding a new identifer at the end.
|
to reduce the patch noise when adding a new identifier at the end.
|
||||||
|
|
||||||
. since mid 2017 with cbc0f81d, we have been using designated
|
. since mid 2017 with cbc0f81d, we have been using designated
|
||||||
initializers for struct (e.g. "struct t v = { .val = 'a' };").
|
initializers for struct (e.g. "struct t v = { .val = 'a' };").
|
||||||
|
|
8
third_party/git/Documentation/Makefile
vendored
8
third_party/git/Documentation/Makefile
vendored
|
@ -77,6 +77,7 @@ API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technica
|
||||||
SP_ARTICLES += $(API_DOCS)
|
SP_ARTICLES += $(API_DOCS)
|
||||||
|
|
||||||
TECH_DOCS += MyFirstContribution
|
TECH_DOCS += MyFirstContribution
|
||||||
|
TECH_DOCS += MyFirstObjectWalk
|
||||||
TECH_DOCS += SubmittingPatches
|
TECH_DOCS += SubmittingPatches
|
||||||
TECH_DOCS += technical/hash-function-transition
|
TECH_DOCS += technical/hash-function-transition
|
||||||
TECH_DOCS += technical/http-protocol
|
TECH_DOCS += technical/http-protocol
|
||||||
|
@ -123,7 +124,8 @@ ASCIIDOC_HTML = xhtml11
|
||||||
ASCIIDOC_DOCBOOK = docbook
|
ASCIIDOC_DOCBOOK = docbook
|
||||||
ASCIIDOC_CONF = -f asciidoc.conf
|
ASCIIDOC_CONF = -f asciidoc.conf
|
||||||
ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
|
ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
|
||||||
-agit_version=$(GIT_VERSION)
|
-amanversion=$(GIT_VERSION) \
|
||||||
|
-amanmanual='Git Manual' -amansource='Git'
|
||||||
TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
|
TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
|
||||||
TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
|
TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
|
||||||
MANPAGE_XSL = manpage-normal.xsl
|
MANPAGE_XSL = manpage-normal.xsl
|
||||||
|
@ -197,11 +199,13 @@ ifdef USE_ASCIIDOCTOR
|
||||||
ASCIIDOC = asciidoctor
|
ASCIIDOC = asciidoctor
|
||||||
ASCIIDOC_CONF =
|
ASCIIDOC_CONF =
|
||||||
ASCIIDOC_HTML = xhtml5
|
ASCIIDOC_HTML = xhtml5
|
||||||
ASCIIDOC_DOCBOOK = docbook45
|
ASCIIDOC_DOCBOOK = docbook5
|
||||||
ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
|
ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
|
||||||
ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
|
ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
|
||||||
ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
|
ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
|
||||||
DBLATEX_COMMON =
|
DBLATEX_COMMON =
|
||||||
|
XMLTO_EXTRA += --skip-validation
|
||||||
|
XMLTO_EXTRA += -x manpage.xsl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SHELL_PATH ?= $(SHELL)
|
SHELL_PATH ?= $(SHELL)
|
||||||
|
|
|
@ -23,6 +23,42 @@ useful additional context:
|
||||||
- `Documentation/SubmittingPatches`
|
- `Documentation/SubmittingPatches`
|
||||||
- `Documentation/howto/new-command.txt`
|
- `Documentation/howto/new-command.txt`
|
||||||
|
|
||||||
|
[[getting-help]]
|
||||||
|
=== Getting Help
|
||||||
|
|
||||||
|
If you get stuck, you can seek help in the following places.
|
||||||
|
|
||||||
|
==== git@vger.kernel.org
|
||||||
|
|
||||||
|
This is the main Git project mailing list where code reviews, version
|
||||||
|
announcements, design discussions, and more take place. Those interested in
|
||||||
|
contributing are welcome to post questions here. The Git list requires
|
||||||
|
plain-text-only emails and prefers inline and bottom-posting when replying to
|
||||||
|
mail; you will be CC'd in all replies to you. Optionally, you can subscribe to
|
||||||
|
the list by sending an email to majordomo@vger.kernel.org with "subscribe git"
|
||||||
|
in the body. The https://lore.kernel.org/git[archive] of this mailing list is
|
||||||
|
available to view in a browser.
|
||||||
|
|
||||||
|
==== https://groups.google.com/forum/#!forum/git-mentoring[git-mentoring@googlegroups.com]
|
||||||
|
|
||||||
|
This mailing list is targeted to new contributors and was created as a place to
|
||||||
|
post questions and receive answers outside of the public eye of the main list.
|
||||||
|
Veteran contributors who are especially interested in helping mentor newcomers
|
||||||
|
are present on the list. In order to avoid search indexers, group membership is
|
||||||
|
required to view messages; anyone can join and no approval is required.
|
||||||
|
|
||||||
|
==== https://webchat.freenode.net/#git-devel[#git-devel] on Freenode
|
||||||
|
|
||||||
|
This IRC channel is for conversations between Git contributors. If someone is
|
||||||
|
currently online and knows the answer to your question, you can receive help
|
||||||
|
in real time. Otherwise, you can read the
|
||||||
|
https://colabti.org/irclogger/irclogger_logs/git-devel[scrollback] to see
|
||||||
|
whether someone answered you. IRC does not allow offline private messaging, so
|
||||||
|
if you try to private message someone and then log out of IRC, they cannot
|
||||||
|
respond to you. It's better to ask your questions in the channel so that you
|
||||||
|
can be answered if you disconnect and so that others can learn from the
|
||||||
|
conversation.
|
||||||
|
|
||||||
[[getting-started]]
|
[[getting-started]]
|
||||||
== Getting Started
|
== Getting Started
|
||||||
|
|
||||||
|
@ -38,6 +74,26 @@ $ git clone https://github.com/git/git git
|
||||||
$ cd git
|
$ cd git
|
||||||
----
|
----
|
||||||
|
|
||||||
|
[[dependencies]]
|
||||||
|
=== Installing Dependencies
|
||||||
|
|
||||||
|
To build Git from source, you need to have a handful of dependencies installed
|
||||||
|
on your system. For a hint of what's needed, you can take a look at
|
||||||
|
`INSTALL`, paying close attention to the section about Git's dependencies on
|
||||||
|
external programs and libraries. That document mentions a way to "test-drive"
|
||||||
|
our freshly built Git without installing; that's the method we'll be using in
|
||||||
|
this tutorial.
|
||||||
|
|
||||||
|
Make sure that your environment has everything you need by building your brand
|
||||||
|
new clone of Git from the above step:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ make
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: The Git build is parallelizable. `-j#` is not included above but you can
|
||||||
|
use it as you prefer, here and elsewhere.
|
||||||
|
|
||||||
[[identify-problem]]
|
[[identify-problem]]
|
||||||
=== Identify Problem to Solve
|
=== Identify Problem to Solve
|
||||||
|
|
||||||
|
@ -97,8 +153,8 @@ int cmd_psuh(int argc, const char **argv, const char *prefix)
|
||||||
----
|
----
|
||||||
|
|
||||||
We'll also need to add the declaration of psuh; open up `builtin.h`, find the
|
We'll also need to add the declaration of psuh; open up `builtin.h`, find the
|
||||||
declaration for `cmd_push`, and add a new line for `psuh` immediately before it,
|
declaration for `cmd_pull`, and add a new line for `psuh` immediately before it,
|
||||||
in order to keep the declarations sorted:
|
in order to keep the declarations alphabetically sorted:
|
||||||
|
|
||||||
----
|
----
|
||||||
int cmd_psuh(int argc, const char **argv, const char *prefix);
|
int cmd_psuh(int argc, const char **argv, const char *prefix);
|
||||||
|
@ -123,7 +179,7 @@ int cmd_psuh(int argc, const char **argv, const char *prefix)
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
Let's try to build it. Open `Makefile`, find where `builtin/push.o` is added
|
Let's try to build it. Open `Makefile`, find where `builtin/pull.o` is added
|
||||||
to `BUILTIN_OBJS`, and add `builtin/psuh.o` in the same way next to it in
|
to `BUILTIN_OBJS`, and add `builtin/psuh.o` in the same way next to it in
|
||||||
alphabetical order. Once you've done so, move to the top-level directory and
|
alphabetical order. Once you've done so, move to the top-level directory and
|
||||||
build simply with `make`. Also add the `DEVELOPER=1` variable to turn on
|
build simply with `make`. Also add the `DEVELOPER=1` variable to turn on
|
||||||
|
@ -138,9 +194,6 @@ NOTE: When you are developing the Git project, it's preferred that you use the
|
||||||
`DEVELOPER` flag; if there's some reason it doesn't work for you, you can turn
|
`DEVELOPER` flag; if there's some reason it doesn't work for you, you can turn
|
||||||
it off, but it's a good idea to mention the problem to the mailing list.
|
it off, but it's a good idea to mention the problem to the mailing list.
|
||||||
|
|
||||||
NOTE: The Git build is parallelizable. `-j#` is not included above but you can
|
|
||||||
use it as you prefer, here and elsewhere.
|
|
||||||
|
|
||||||
Great, now your new command builds happily on its own. But nobody invokes it.
|
Great, now your new command builds happily on its own. But nobody invokes it.
|
||||||
Let's change that.
|
Let's change that.
|
||||||
|
|
||||||
|
@ -149,7 +202,7 @@ a `cmd_struct` to the `commands[]` array. `struct cmd_struct` takes a string
|
||||||
with the command name, a function pointer to the command implementation, and a
|
with the command name, a function pointer to the command implementation, and a
|
||||||
setup option flag. For now, let's keep mimicking `push`. Find the line where
|
setup option flag. For now, let's keep mimicking `push`. Find the line where
|
||||||
`cmd_push` is registered, copy it, and modify it for `cmd_psuh`, placing the new
|
`cmd_push` is registered, copy it, and modify it for `cmd_psuh`, placing the new
|
||||||
line in alphabetical order.
|
line in alphabetical order (immediately before `cmd_pull`).
|
||||||
|
|
||||||
The options are documented in `builtin.h` under "Adding a new built-in." Since
|
The options are documented in `builtin.h` under "Adding a new built-in." Since
|
||||||
we hope to print some data about the user's current workspace context later,
|
we hope to print some data about the user's current workspace context later,
|
||||||
|
@ -167,7 +220,7 @@ Check it out! You've got a command! Nice work! Let's commit this.
|
||||||
|
|
||||||
`git status` reveals modified `Makefile`, `builtin.h`, and `git.c` as well as
|
`git status` reveals modified `Makefile`, `builtin.h`, and `git.c` as well as
|
||||||
untracked `builtin/psuh.c` and `git-psuh`. First, let's take care of the binary,
|
untracked `builtin/psuh.c` and `git-psuh`. First, let's take care of the binary,
|
||||||
which should be ignored. Open `.gitignore` in your editor, find `/git-push`, and
|
which should be ignored. Open `.gitignore` in your editor, find `/git-pull`, and
|
||||||
add an entry for your new command in alphabetical order:
|
add an entry for your new command in alphabetical order:
|
||||||
|
|
||||||
----
|
----
|
||||||
|
@ -534,6 +587,28 @@ you want to pass as a parameter something which would usually be interpreted as
|
||||||
a flag.) `parse_options()` will terminate parsing when it reaches `--` and give
|
a flag.) `parse_options()` will terminate parsing when it reaches `--` and give
|
||||||
you the rest of the options afterwards, untouched.
|
you the rest of the options afterwards, untouched.
|
||||||
|
|
||||||
|
Now that you have a usage hint, you can teach Git how to show it in the general
|
||||||
|
command list shown by `git help git` or `git help -a`, which is generated from
|
||||||
|
`command-list.txt`. Find the line for 'git-pull' so you can add your 'git-psuh'
|
||||||
|
line above it in alphabetical order. Now, we can add some attributes about the
|
||||||
|
command which impacts where it shows up in the aforementioned help commands. The
|
||||||
|
top of `command-list.txt` shares some information about what each attribute
|
||||||
|
means; in those help pages, the commands are sorted according to these
|
||||||
|
attributes. `git psuh` is user-facing, or porcelain - so we will mark it as
|
||||||
|
"mainporcelain". For "mainporcelain" commands, the comments at the top of
|
||||||
|
`command-list.txt` indicate we can also optionally add an attribute from another
|
||||||
|
list; since `git psuh` shows some information about the user's workspace but
|
||||||
|
doesn't modify anything, let's mark it as "info". Make sure to keep your
|
||||||
|
attributes in the same style as the rest of `command-list.txt` using spaces to
|
||||||
|
align and delineate them:
|
||||||
|
|
||||||
|
----
|
||||||
|
git-prune-packed plumbingmanipulators
|
||||||
|
git-psuh mainporcelain info
|
||||||
|
git-pull mainporcelain remote
|
||||||
|
git-push mainporcelain remote
|
||||||
|
----
|
||||||
|
|
||||||
Build again. Now, when you run with `-h`, you should see your usage printed and
|
Build again. Now, when you run with `-h`, you should see your usage printed and
|
||||||
your command terminated before anything else interesting happens. Great!
|
your command terminated before anything else interesting happens. Great!
|
||||||
|
|
||||||
|
@ -746,6 +821,14 @@ will automatically run your PRs through the CI even without the permission given
|
||||||
but you will not be able to `/submit` your changes until someone allows you to
|
but you will not be able to `/submit` your changes until someone allows you to
|
||||||
use the tool.
|
use the tool.
|
||||||
|
|
||||||
|
NOTE: You can typically find someone who can `/allow` you on GitGitGadget by
|
||||||
|
either examining recent pull requests where someone has been granted `/allow`
|
||||||
|
(https://github.com/gitgitgadget/git/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+%22%2Fallow%22[Search:
|
||||||
|
is:pr is:open "/allow"]), in which case both the author and the person who
|
||||||
|
granted the `/allow` can now `/allow` you, or by inquiring on the
|
||||||
|
https://webchat.freenode.net/#git-devel[#git-devel] IRC channel on Freenode
|
||||||
|
linking your pull request and asking for someone to `/allow` you.
|
||||||
|
|
||||||
If the CI fails, you can update your changes with `git rebase -i` and push your
|
If the CI fails, you can update your changes with `git rebase -i` and push your
|
||||||
branch again:
|
branch again:
|
||||||
|
|
||||||
|
@ -970,7 +1053,7 @@ reviewers the changes you've made that may not be as visible.
|
||||||
You will also need to go and find the Message-Id of your previous cover letter.
|
You will also need to go and find the Message-Id of your previous cover letter.
|
||||||
You can either note it when you send the first series, from the output of `git
|
You can either note it when you send the first series, from the output of `git
|
||||||
send-email`, or you can look it up on the
|
send-email`, or you can look it up on the
|
||||||
https://public-inbox.org/git[mailing list]. Find your cover letter in the
|
https://lore.kernel.org/git[mailing list]. Find your cover letter in the
|
||||||
archives, click on it, then click "permalink" or "raw" to reveal the Message-Id
|
archives, click on it, then click "permalink" or "raw" to reveal the Message-Id
|
||||||
header. It should match:
|
header. It should match:
|
||||||
|
|
||||||
|
|
905
third_party/git/Documentation/MyFirstObjectWalk.txt
vendored
Normal file
905
third_party/git/Documentation/MyFirstObjectWalk.txt
vendored
Normal file
|
@ -0,0 +1,905 @@
|
||||||
|
= My First Object Walk
|
||||||
|
|
||||||
|
== What's an Object Walk?
|
||||||
|
|
||||||
|
The object walk is a key concept in Git - this is the process that underpins
|
||||||
|
operations like object transfer and fsck. Beginning from a given commit, the
|
||||||
|
list of objects is found by walking parent relationships between commits (commit
|
||||||
|
X based on commit W) and containment relationships between objects (tree Y is
|
||||||
|
contained within commit X, and blob Z is located within tree Y, giving our
|
||||||
|
working tree for commit X something like `y/z.txt`).
|
||||||
|
|
||||||
|
A related concept is the revision walk, which is focused on commit objects and
|
||||||
|
their parent relationships and does not delve into other object types. The
|
||||||
|
revision walk is used for operations like `git log`.
|
||||||
|
|
||||||
|
=== Related Reading
|
||||||
|
|
||||||
|
- `Documentation/user-manual.txt` under "Hacking Git" contains some coverage of
|
||||||
|
the revision walker in its various incarnations.
|
||||||
|
- `revision.h`
|
||||||
|
- https://eagain.net/articles/git-for-computer-scientists/[Git for Computer Scientists]
|
||||||
|
gives a good overview of the types of objects in Git and what your object
|
||||||
|
walk is really describing.
|
||||||
|
|
||||||
|
== Setting Up
|
||||||
|
|
||||||
|
Create a new branch from `master`.
|
||||||
|
|
||||||
|
----
|
||||||
|
git checkout -b revwalk origin/master
|
||||||
|
----
|
||||||
|
|
||||||
|
We'll put our fiddling into a new command. For fun, let's name it `git walken`.
|
||||||
|
Open up a new file `builtin/walken.c` and set up the command handler:
|
||||||
|
|
||||||
|
----
|
||||||
|
/*
|
||||||
|
* "git walken"
|
||||||
|
*
|
||||||
|
* Part of the "My First Object Walk" tutorial.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "builtin.h"
|
||||||
|
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
trace_printf(_("cmd_walken incoming...\n"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: `trace_printf()` differs from `printf()` in that it can be turned on or
|
||||||
|
off at runtime. For the purposes of this tutorial, we will write `walken` as
|
||||||
|
though it is intended for use as a "plumbing" command: that is, a command which
|
||||||
|
is used primarily in scripts, rather than interactively by humans (a "porcelain"
|
||||||
|
command). So we will send our debug output to `trace_printf()` instead. When
|
||||||
|
running, enable trace output by setting the environment variable `GIT_TRACE`.
|
||||||
|
|
||||||
|
Add usage text and `-h` handling, like all subcommands should consistently do
|
||||||
|
(our test suite will notice and complain if you fail to do so).
|
||||||
|
|
||||||
|
----
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
const char * const walken_usage[] = {
|
||||||
|
N_("git walken"),
|
||||||
|
NULL,
|
||||||
|
}
|
||||||
|
struct option options[] = {
|
||||||
|
OPT_END()
|
||||||
|
};
|
||||||
|
|
||||||
|
argc = parse_options(argc, argv, prefix, options, walken_usage, 0);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix);
|
||||||
|
----
|
||||||
|
|
||||||
|
Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
|
||||||
|
maintaining alphabetical ordering:
|
||||||
|
|
||||||
|
----
|
||||||
|
{ "walken", cmd_walken, RUN_SETUP },
|
||||||
|
----
|
||||||
|
|
||||||
|
Add it to the `Makefile` near the line for `builtin/worktree.o`:
|
||||||
|
|
||||||
|
----
|
||||||
|
BUILTIN_OBJS += builtin/walken.o
|
||||||
|
----
|
||||||
|
|
||||||
|
Build and test out your command, without forgetting to ensure the `DEVELOPER`
|
||||||
|
flag is set, and with `GIT_TRACE` enabled so the debug output can be seen:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ echo DEVELOPER=1 >>config.mak
|
||||||
|
$ make
|
||||||
|
$ GIT_TRACE=1 ./bin-wrappers/git walken
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: For a more exhaustive overview of the new command process, take a look at
|
||||||
|
`Documentation/MyFirstContribution.txt`.
|
||||||
|
|
||||||
|
NOTE: A reference implementation can be found at
|
||||||
|
https://github.com/nasamuffin/git/tree/revwalk.
|
||||||
|
|
||||||
|
=== `struct rev_cmdline_info`
|
||||||
|
|
||||||
|
The definition of `struct rev_cmdline_info` can be found in `revision.h`.
|
||||||
|
|
||||||
|
This struct is contained within the `rev_info` struct and is used to reflect
|
||||||
|
parameters provided by the user over the CLI.
|
||||||
|
|
||||||
|
`nr` represents the number of `rev_cmdline_entry` present in the array.
|
||||||
|
|
||||||
|
`alloc` is used by the `ALLOC_GROW` macro. Check `cache.h` - this variable is
|
||||||
|
used to track the allocated size of the list.
|
||||||
|
|
||||||
|
Per entry, we find:
|
||||||
|
|
||||||
|
`item` is the object provided upon which to base the object walk. Items in Git
|
||||||
|
can be blobs, trees, commits, or tags. (See `Documentation/gittutorial-2.txt`.)
|
||||||
|
|
||||||
|
`name` is the object ID (OID) of the object - a hex string you may be familiar
|
||||||
|
with from using Git to organize your source in the past. Check the tutorial
|
||||||
|
mentioned above towards the top for a discussion of where the OID can come
|
||||||
|
from.
|
||||||
|
|
||||||
|
`whence` indicates some information about what to do with the parents of the
|
||||||
|
specified object. We'll explore this flag more later on; take a look at
|
||||||
|
`Documentation/revisions.txt` to get an idea of what could set the `whence`
|
||||||
|
value.
|
||||||
|
|
||||||
|
`flags` are used to hint the beginning of the revision walk and are the first
|
||||||
|
block under the `#include`s in `revision.h`. The most likely ones to be set in
|
||||||
|
the `rev_cmdline_info` are `UNINTERESTING` and `BOTTOM`, but these same flags
|
||||||
|
can be used during the walk, as well.
|
||||||
|
|
||||||
|
=== `struct rev_info`
|
||||||
|
|
||||||
|
This one is quite a bit longer, and many fields are only used during the walk
|
||||||
|
by `revision.c` - not configuration options. Most of the configurable flags in
|
||||||
|
`struct rev_info` have a mirror in `Documentation/rev-list-options.txt`. It's a
|
||||||
|
good idea to take some time and read through that document.
|
||||||
|
|
||||||
|
== Basic Commit Walk
|
||||||
|
|
||||||
|
First, let's see if we can replicate the output of `git log --oneline`. We'll
|
||||||
|
refer back to the implementation frequently to discover norms when performing
|
||||||
|
an object walk of our own.
|
||||||
|
|
||||||
|
To do so, we'll first find all the commits, in order, which preceded the current
|
||||||
|
commit. We'll extract the name and subject of the commit from each.
|
||||||
|
|
||||||
|
Ideally, we will also be able to find out which ones are currently at the tip of
|
||||||
|
various branches.
|
||||||
|
|
||||||
|
=== Setting Up
|
||||||
|
|
||||||
|
Preparing for your object walk has some distinct stages.
|
||||||
|
|
||||||
|
1. Perform default setup for this mode, and others which may be invoked.
|
||||||
|
2. Check configuration files for relevant settings.
|
||||||
|
3. Set up the `rev_info` struct.
|
||||||
|
4. Tweak the initialized `rev_info` to suit the current walk.
|
||||||
|
5. Prepare the `rev_info` for the walk.
|
||||||
|
6. Iterate over the objects, processing each one.
|
||||||
|
|
||||||
|
==== Default Setups
|
||||||
|
|
||||||
|
Before examining configuration files which may modify command behavior, set up
|
||||||
|
default state for switches or options your command may have. If your command
|
||||||
|
utilizes other Git components, ask them to set up their default states as well.
|
||||||
|
For instance, `git log` takes advantage of `grep` and `diff` functionality, so
|
||||||
|
its `init_log_defaults()` sets its own state (`decoration_style`) and asks
|
||||||
|
`grep` and `diff` to initialize themselves by calling each of their
|
||||||
|
initialization functions.
|
||||||
|
|
||||||
|
For our first example within `git walken`, we don't intend to use any other
|
||||||
|
components within Git, and we don't have any configuration to do. However, we
|
||||||
|
may want to add some later, so for now, we can add an empty placeholder. Create
|
||||||
|
a new function in `builtin/walken.c`:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void init_walken_defaults(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We don't actually need the same components `git log` does; leave this
|
||||||
|
* empty for now.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Make sure to add a line invoking it inside of `cmd_walken()`.
|
||||||
|
|
||||||
|
----
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
init_walken_defaults();
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Configuring From `.gitconfig`
|
||||||
|
|
||||||
|
Next, we should have a look at any relevant configuration settings (i.e.,
|
||||||
|
settings readable and settable from `git config`). This is done by providing a
|
||||||
|
callback to `git_config()`; within that callback, you can also invoke methods
|
||||||
|
from other components you may need that need to intercept these options. Your
|
||||||
|
callback will be invoked once per each configuration value which Git knows about
|
||||||
|
(global, local, worktree, etc.).
|
||||||
|
|
||||||
|
Similarly to the default values, we don't have anything to do here yet
|
||||||
|
ourselves; however, we should call `git_default_config()` if we aren't calling
|
||||||
|
any other existing config callbacks.
|
||||||
|
|
||||||
|
Add a new function to `builtin/walken.c`:
|
||||||
|
|
||||||
|
----
|
||||||
|
static int git_walken_config(const char *var, const char *value, void *cb)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* For now, we don't have any custom configuration, so fall back to
|
||||||
|
* the default config.
|
||||||
|
*/
|
||||||
|
return git_default_config(var, value, cb);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Make sure to invoke `git_config()` with it in your `cmd_walken()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
git_config(git_walken_config, NULL);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Setting Up `rev_info`
|
||||||
|
|
||||||
|
Now that we've gathered external configuration and options, it's time to
|
||||||
|
initialize the `rev_info` object which we will use to perform the walk. This is
|
||||||
|
typically done by calling `repo_init_revisions()` with the repository you intend
|
||||||
|
to target, as well as the `prefix` argument of `cmd_walken` and your `rev_info`
|
||||||
|
struct.
|
||||||
|
|
||||||
|
Add the `struct rev_info` and the `repo_init_revisions()` call:
|
||||||
|
----
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
/* This can go wherever you like in your declarations.*/
|
||||||
|
struct rev_info rev;
|
||||||
|
...
|
||||||
|
|
||||||
|
/* This should go after the git_config() call. */
|
||||||
|
repo_init_revisions(the_repository, &rev, prefix);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Tweaking `rev_info` For the Walk
|
||||||
|
|
||||||
|
We're getting close, but we're still not quite ready to go. Now that `rev` is
|
||||||
|
initialized, we can modify it to fit our needs. This is usually done within a
|
||||||
|
helper for clarity, so let's add one:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void final_rev_info_setup(struct rev_info *rev)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We want to mimic the appearance of `git log --oneline`, so let's
|
||||||
|
* force oneline format.
|
||||||
|
*/
|
||||||
|
get_commit_format("oneline", rev);
|
||||||
|
|
||||||
|
/* Start our object walk at HEAD. */
|
||||||
|
add_head_to_pending(rev);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
====
|
||||||
|
Instead of using the shorthand `add_head_to_pending()`, you could do
|
||||||
|
something like this:
|
||||||
|
----
|
||||||
|
struct setup_revision_opt opt;
|
||||||
|
|
||||||
|
memset(&opt, 0, sizeof(opt));
|
||||||
|
opt.def = "HEAD";
|
||||||
|
opt.revarg_opt = REVARG_COMMITTISH;
|
||||||
|
setup_revisions(argc, argv, rev, &opt);
|
||||||
|
----
|
||||||
|
Using a `setup_revision_opt` gives you finer control over your walk's starting
|
||||||
|
point.
|
||||||
|
====
|
||||||
|
|
||||||
|
Then let's invoke `final_rev_info_setup()` after the call to
|
||||||
|
`repo_init_revisions()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
final_rev_info_setup(&rev);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Later, we may wish to add more arguments to `final_rev_info_setup()`. But for
|
||||||
|
now, this is all we need.
|
||||||
|
|
||||||
|
==== Preparing `rev_info` For the Walk
|
||||||
|
|
||||||
|
Now that `rev` is all initialized and configured, we've got one more setup step
|
||||||
|
before we get rolling. We can do this in a helper, which will both prepare the
|
||||||
|
`rev_info` for the walk, and perform the walk itself. Let's start the helper
|
||||||
|
with the call to `prepare_revision_walk()`, which can return an error without
|
||||||
|
dying on its own:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_commit_walk(struct rev_info *rev)
|
||||||
|
{
|
||||||
|
if (prepare_revision_walk(rev))
|
||||||
|
die(_("revision walk setup failed"));
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: `die()` prints to `stderr` and exits the program. Since it will print to
|
||||||
|
`stderr` it's likely to be seen by a human, so we will localize it.
|
||||||
|
|
||||||
|
==== Performing the Walk!
|
||||||
|
|
||||||
|
Finally! We are ready to begin the walk itself. Now we can see that `rev_info`
|
||||||
|
can also be used as an iterator; we move to the next item in the walk by using
|
||||||
|
`get_revision()` repeatedly. Add the listed variable declarations at the top and
|
||||||
|
the walk loop below the `prepare_revision_walk()` call within your
|
||||||
|
`walken_commit_walk()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_commit_walk(struct rev_info *rev)
|
||||||
|
{
|
||||||
|
struct commit *commit;
|
||||||
|
struct strbuf prettybuf = STRBUF_INIT;
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
while ((commit = get_revision(rev))) {
|
||||||
|
if (!commit)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
strbuf_reset(&prettybuf);
|
||||||
|
pp_commit_easy(CMIT_FMT_ONELINE, commit, &prettybuf);
|
||||||
|
puts(prettybuf.buf);
|
||||||
|
}
|
||||||
|
strbuf_release(&prettybuf);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: `puts()` prints a `char*` to `stdout`. Since this is the part of the
|
||||||
|
command we expect to be machine-parsed, we're sending it directly to stdout.
|
||||||
|
|
||||||
|
Give it a shot.
|
||||||
|
|
||||||
|
----
|
||||||
|
$ make
|
||||||
|
$ ./bin-wrappers/git walken
|
||||||
|
----
|
||||||
|
|
||||||
|
You should see all of the subject lines of all the commits in
|
||||||
|
your tree's history, in order, ending with the initial commit, "Initial revision
|
||||||
|
of "git", the information manager from hell". Congratulations! You've written
|
||||||
|
your first revision walk. You can play with printing some additional fields
|
||||||
|
from each commit if you're curious; have a look at the functions available in
|
||||||
|
`commit.h`.
|
||||||
|
|
||||||
|
=== Adding a Filter
|
||||||
|
|
||||||
|
Next, let's try to filter the commits we see based on their author. This is
|
||||||
|
equivalent to running `git log --author=<pattern>`. We can add a filter by
|
||||||
|
modifying `rev_info.grep_filter`, which is a `struct grep_opt`.
|
||||||
|
|
||||||
|
First some setup. Add `init_grep_defaults()` to `init_walken_defaults()` and add
|
||||||
|
`grep_config()` to `git_walken_config()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void init_walken_defaults(void)
|
||||||
|
{
|
||||||
|
init_grep_defaults(the_repository);
|
||||||
|
}
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
static int git_walken_config(const char *var, const char *value, void *cb)
|
||||||
|
{
|
||||||
|
grep_config(var, value, cb);
|
||||||
|
return git_default_config(var, value, cb);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Next, we can modify the `grep_filter`. This is done with convenience functions
|
||||||
|
found in `grep.h`. For fun, we're filtering to only commits from folks using a
|
||||||
|
`gmail.com` email address - a not-very-precise guess at who may be working on
|
||||||
|
Git as a hobby. Since we're checking the author, which is a specific line in the
|
||||||
|
header, we'll use the `append_header_grep_pattern()` helper. We can use
|
||||||
|
the `enum grep_header_field` to indicate which part of the commit header we want
|
||||||
|
to search.
|
||||||
|
|
||||||
|
In `final_rev_info_setup()`, add your filter line:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void final_rev_info_setup(int argc, const char **argv,
|
||||||
|
const char *prefix, struct rev_info *rev)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
append_header_grep_pattern(&rev->grep_filter, GREP_HEADER_AUTHOR,
|
||||||
|
"gmail");
|
||||||
|
compile_grep_patterns(&rev->grep_filter);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
`append_header_grep_pattern()` adds your new "gmail" pattern to `rev_info`, but
|
||||||
|
it won't work unless we compile it with `compile_grep_patterns()`.
|
||||||
|
|
||||||
|
NOTE: If you are using `setup_revisions()` (for example, if you are passing a
|
||||||
|
`setup_revision_opt` instead of using `add_head_to_pending()`), you don't need
|
||||||
|
to call `compile_grep_patterns()` because `setup_revisions()` calls it for you.
|
||||||
|
|
||||||
|
NOTE: We could add the same filter via the `append_grep_pattern()` helper if we
|
||||||
|
wanted to, but `append_header_grep_pattern()` adds the `enum grep_context` and
|
||||||
|
`enum grep_pat_token` for us.
|
||||||
|
|
||||||
|
=== Changing the Order
|
||||||
|
|
||||||
|
There are a few ways that we can change the order of the commits during a
|
||||||
|
revision walk. Firstly, we can use the `enum rev_sort_order` to choose from some
|
||||||
|
typical orderings.
|
||||||
|
|
||||||
|
`topo_order` is the same as `git log --topo-order`: we avoid showing a parent
|
||||||
|
before all of its children have been shown, and we avoid mixing commits which
|
||||||
|
are in different lines of history. (`git help log`'s section on `--topo-order`
|
||||||
|
has a very nice diagram to illustrate this.)
|
||||||
|
|
||||||
|
Let's see what happens when we run with `REV_SORT_BY_COMMIT_DATE` as opposed to
|
||||||
|
`REV_SORT_BY_AUTHOR_DATE`. Add the following:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void final_rev_info_setup(int argc, const char **argv,
|
||||||
|
const char *prefix, struct rev_info *rev)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
rev->topo_order = 1;
|
||||||
|
rev->sort_order = REV_SORT_BY_COMMIT_DATE;
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Let's output this into a file so we can easily diff it with the walk sorted by
|
||||||
|
author date.
|
||||||
|
|
||||||
|
----
|
||||||
|
$ make
|
||||||
|
$ ./bin-wrappers/git walken > commit-date.txt
|
||||||
|
----
|
||||||
|
|
||||||
|
Then, let's sort by author date and run it again.
|
||||||
|
|
||||||
|
----
|
||||||
|
static void final_rev_info_setup(int argc, const char **argv,
|
||||||
|
const char *prefix, struct rev_info *rev)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
rev->topo_order = 1;
|
||||||
|
rev->sort_order = REV_SORT_BY_AUTHOR_DATE;
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
----
|
||||||
|
$ make
|
||||||
|
$ ./bin-wrappers/git walken > author-date.txt
|
||||||
|
----
|
||||||
|
|
||||||
|
Finally, compare the two. This is a little less helpful without object names or
|
||||||
|
dates, but hopefully we get the idea.
|
||||||
|
|
||||||
|
----
|
||||||
|
$ diff -u commit-date.txt author-date.txt
|
||||||
|
----
|
||||||
|
|
||||||
|
This display indicates that commits can be reordered after they're written, for
|
||||||
|
example with `git rebase`.
|
||||||
|
|
||||||
|
Let's try one more reordering of commits. `rev_info` exposes a `reverse` flag.
|
||||||
|
Set that flag somewhere inside of `final_rev_info_setup()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void final_rev_info_setup(int argc, const char **argv, const char *prefix,
|
||||||
|
struct rev_info *rev)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
rev->reverse = 1;
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Run your walk again and note the difference in order. (If you remove the grep
|
||||||
|
pattern, you should see the last commit this call gives you as your current
|
||||||
|
HEAD.)
|
||||||
|
|
||||||
|
== Basic Object Walk
|
||||||
|
|
||||||
|
So far we've been walking only commits. But Git has more types of objects than
|
||||||
|
that! Let's see if we can walk _all_ objects, and find out some information
|
||||||
|
about each one.
|
||||||
|
|
||||||
|
We can base our work on an example. `git pack-objects` prepares all kinds of
|
||||||
|
objects for packing into a bitmap or packfile. The work we are interested in
|
||||||
|
resides in `builtins/pack-objects.c:get_object_list()`; examination of that
|
||||||
|
function shows that the all-object walk is being performed by
|
||||||
|
`traverse_commit_list()` or `traverse_commit_list_filtered()`. Those two
|
||||||
|
functions reside in `list-objects.c`; examining the source shows that, despite
|
||||||
|
the name, these functions traverse all kinds of objects. Let's have a look at
|
||||||
|
the arguments to `traverse_commit_list_filtered()`, which are a superset of the
|
||||||
|
arguments to the unfiltered version.
|
||||||
|
|
||||||
|
- `struct list_objects_filter_options *filter_options`: This is a struct which
|
||||||
|
stores a filter-spec as outlined in `Documentation/rev-list-options.txt`.
|
||||||
|
- `struct rev_info *revs`: This is the `rev_info` used for the walk.
|
||||||
|
- `show_commit_fn show_commit`: A callback which will be used to handle each
|
||||||
|
individual commit object.
|
||||||
|
- `show_object_fn show_object`: A callback which will be used to handle each
|
||||||
|
non-commit object (so each blob, tree, or tag).
|
||||||
|
- `void *show_data`: A context buffer which is passed in turn to `show_commit`
|
||||||
|
and `show_object`.
|
||||||
|
- `struct oidset *omitted`: A linked-list of object IDs which the provided
|
||||||
|
filter caused to be omitted.
|
||||||
|
|
||||||
|
It looks like this `traverse_commit_list_filtered()` uses callbacks we provide
|
||||||
|
instead of needing us to call it repeatedly ourselves. Cool! Let's add the
|
||||||
|
callbacks first.
|
||||||
|
|
||||||
|
For the sake of this tutorial, we'll simply keep track of how many of each kind
|
||||||
|
of object we find. At file scope in `builtin/walken.c` add the following
|
||||||
|
tracking variables:
|
||||||
|
|
||||||
|
----
|
||||||
|
static int commit_count;
|
||||||
|
static int tag_count;
|
||||||
|
static int blob_count;
|
||||||
|
static int tree_count;
|
||||||
|
----
|
||||||
|
|
||||||
|
Commits are handled by a different callback than other objects; let's do that
|
||||||
|
one first:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_show_commit(struct commit *cmt, void *buf)
|
||||||
|
{
|
||||||
|
commit_count++;
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
The `cmt` argument is fairly self-explanatory. But it's worth mentioning that
|
||||||
|
the `buf` argument is actually the context buffer that we can provide to the
|
||||||
|
traversal calls - `show_data`, which we mentioned a moment ago.
|
||||||
|
|
||||||
|
Since we have the `struct commit` object, we can look at all the same parts that
|
||||||
|
we looked at in our earlier commit-only walk. For the sake of this tutorial,
|
||||||
|
though, we'll just increment the commit counter and move on.
|
||||||
|
|
||||||
|
The callback for non-commits is a little different, as we'll need to check
|
||||||
|
which kind of object we're dealing with:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_show_object(struct object *obj, const char *str, void *buf)
|
||||||
|
{
|
||||||
|
switch (obj->type) {
|
||||||
|
case OBJ_TREE:
|
||||||
|
tree_count++;
|
||||||
|
break;
|
||||||
|
case OBJ_BLOB:
|
||||||
|
blob_count++;
|
||||||
|
break;
|
||||||
|
case OBJ_TAG:
|
||||||
|
tag_count++;
|
||||||
|
break;
|
||||||
|
case OBJ_COMMIT:
|
||||||
|
BUG("unexpected commit object in walken_show_object\n");
|
||||||
|
default:
|
||||||
|
BUG("unexpected object type %s in walken_show_object\n",
|
||||||
|
type_name(obj->type));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Again, `obj` is fairly self-explanatory, and we can guess that `buf` is the same
|
||||||
|
context pointer that `walken_show_commit()` receives: the `show_data` argument
|
||||||
|
to `traverse_commit_list()` and `traverse_commit_list_filtered()`. Finally,
|
||||||
|
`str` contains the name of the object, which ends up being something like
|
||||||
|
`foo.txt` (blob), `bar/baz` (tree), or `v1.2.3` (tag).
|
||||||
|
|
||||||
|
To help assure us that we aren't double-counting commits, we'll include some
|
||||||
|
complaining if a commit object is routed through our non-commit callback; we'll
|
||||||
|
also complain if we see an invalid object type. Since those two cases should be
|
||||||
|
unreachable, and would only change in the event of a semantic change to the Git
|
||||||
|
codebase, we complain by using `BUG()` - which is a signal to a developer that
|
||||||
|
the change they made caused unintended consequences, and the rest of the
|
||||||
|
codebase needs to be updated to understand that change. `BUG()` is not intended
|
||||||
|
to be seen by the public, so it is not localized.
|
||||||
|
|
||||||
|
Our main object walk implementation is substantially different from our commit
|
||||||
|
walk implementation, so let's make a new function to perform the object walk. We
|
||||||
|
can perform setup which is applicable to all objects here, too, to keep separate
|
||||||
|
from setup which is applicable to commit-only walks.
|
||||||
|
|
||||||
|
We'll start by enabling all types of objects in the `struct rev_info`. We'll
|
||||||
|
also turn on `tree_blobs_in_commit_order`, which means that we will walk a
|
||||||
|
commit's tree and everything it points to immediately after we find each commit,
|
||||||
|
as opposed to waiting for the end and walking through all trees after the commit
|
||||||
|
history has been discovered. With the appropriate settings configured, we are
|
||||||
|
ready to call `prepare_revision_walk()`.
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_object_walk(struct rev_info *rev)
|
||||||
|
{
|
||||||
|
rev->tree_objects = 1;
|
||||||
|
rev->blob_objects = 1;
|
||||||
|
rev->tag_objects = 1;
|
||||||
|
rev->tree_blobs_in_commit_order = 1;
|
||||||
|
|
||||||
|
if (prepare_revision_walk(rev))
|
||||||
|
die(_("revision walk setup failed"));
|
||||||
|
|
||||||
|
commit_count = 0;
|
||||||
|
tag_count = 0;
|
||||||
|
blob_count = 0;
|
||||||
|
tree_count = 0;
|
||||||
|
----
|
||||||
|
|
||||||
|
Let's start by calling just the unfiltered walk and reporting our counts.
|
||||||
|
Complete your implementation of `walken_object_walk()`:
|
||||||
|
|
||||||
|
----
|
||||||
|
traverse_commit_list(rev, walken_show_commit, walken_show_object, NULL);
|
||||||
|
|
||||||
|
printf("commits %d\nblobs %d\ntags %d\ntrees %d\n", commit_count,
|
||||||
|
blob_count, tag_count, tree_count);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: This output is intended to be machine-parsed. Therefore, we are not
|
||||||
|
sending it to `trace_printf()`, and we are not localizing it - we need scripts
|
||||||
|
to be able to count on the formatting to be exactly the way it is shown here.
|
||||||
|
If we were intending this output to be read by humans, we would need to localize
|
||||||
|
it with `_()`.
|
||||||
|
|
||||||
|
Finally, we'll ask `cmd_walken()` to use the object walk instead. Discussing
|
||||||
|
command line options is out of scope for this tutorial, so we'll just hardcode
|
||||||
|
a branch we can change at compile time. Where you call `final_rev_info_setup()`
|
||||||
|
and `walken_commit_walk()`, instead branch like so:
|
||||||
|
|
||||||
|
----
|
||||||
|
if (1) {
|
||||||
|
add_head_to_pending(&rev);
|
||||||
|
walken_object_walk(&rev);
|
||||||
|
} else {
|
||||||
|
final_rev_info_setup(argc, argv, prefix, &rev);
|
||||||
|
walken_commit_walk(&rev);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: For simplicity, we've avoided all the filters and sorts we applied in
|
||||||
|
`final_rev_info_setup()` and simply added `HEAD` to our pending queue. If you
|
||||||
|
want, you can certainly use the filters we added before by moving
|
||||||
|
`final_rev_info_setup()` out of the conditional and removing the call to
|
||||||
|
`add_head_to_pending()`.
|
||||||
|
|
||||||
|
Now we can try to run our command! It should take noticeably longer than the
|
||||||
|
commit walk, but an examination of the output will give you an idea why. Your
|
||||||
|
output should look similar to this example, but with different counts:
|
||||||
|
|
||||||
|
----
|
||||||
|
Object walk completed. Found 55733 commits, 100274 blobs, 0 tags, and 104210 trees.
|
||||||
|
----
|
||||||
|
|
||||||
|
This makes sense. We have more trees than commits because the Git project has
|
||||||
|
lots of subdirectories which can change, plus at least one tree per commit. We
|
||||||
|
have no tags because we started on a commit (`HEAD`) and while tags can point to
|
||||||
|
commits, commits can't point to tags.
|
||||||
|
|
||||||
|
NOTE: You will have different counts when you run this yourself! The number of
|
||||||
|
objects grows along with the Git project.
|
||||||
|
|
||||||
|
=== Adding a Filter
|
||||||
|
|
||||||
|
There are a handful of filters that we can apply to the object walk laid out in
|
||||||
|
`Documentation/rev-list-options.txt`. These filters are typically useful for
|
||||||
|
operations such as creating packfiles or performing a partial clone. They are
|
||||||
|
defined in `list-objects-filter-options.h`. For the purposes of this tutorial we
|
||||||
|
will use the "tree:1" filter, which causes the walk to omit all trees and blobs
|
||||||
|
which are not directly referenced by commits reachable from the commit in
|
||||||
|
`pending` when the walk begins. (`pending` is the list of objects which need to
|
||||||
|
be traversed during a walk; you can imagine a breadth-first tree traversal to
|
||||||
|
help understand. In our case, that means we omit trees and blobs not directly
|
||||||
|
referenced by `HEAD` or `HEAD`'s history, because we begin the walk with only
|
||||||
|
`HEAD` in the `pending` list.)
|
||||||
|
|
||||||
|
First, we'll need to `#include "list-objects-filter-options.h`" and set up the
|
||||||
|
`struct list_objects_filter_options` at the top of the function.
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_object_walk(struct rev_info *rev)
|
||||||
|
{
|
||||||
|
struct list_objects_filter_options filter_options = {};
|
||||||
|
|
||||||
|
...
|
||||||
|
----
|
||||||
|
|
||||||
|
For now, we are not going to track the omitted objects, so we'll replace those
|
||||||
|
parameters with `NULL`. For the sake of simplicity, we'll add a simple
|
||||||
|
build-time branch to use our filter or not. Replace the line calling
|
||||||
|
`traverse_commit_list()` with the following, which will remind us which kind of
|
||||||
|
walk we've just performed:
|
||||||
|
|
||||||
|
----
|
||||||
|
if (0) {
|
||||||
|
/* Unfiltered: */
|
||||||
|
trace_printf(_("Unfiltered object walk.\n"));
|
||||||
|
traverse_commit_list(rev, walken_show_commit,
|
||||||
|
walken_show_object, NULL);
|
||||||
|
} else {
|
||||||
|
trace_printf(
|
||||||
|
_("Filtered object walk with filterspec 'tree:1'.\n"));
|
||||||
|
parse_list_objects_filter(&filter_options, "tree:1");
|
||||||
|
|
||||||
|
traverse_commit_list_filtered(&filter_options, rev,
|
||||||
|
walken_show_commit, walken_show_object, NULL, NULL);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
`struct list_objects_filter_options` is usually built directly from a command
|
||||||
|
line argument, so the module provides an easy way to build one from a string.
|
||||||
|
Even though we aren't taking user input right now, we can still build one with
|
||||||
|
a hardcoded string using `parse_list_objects_filter()`.
|
||||||
|
|
||||||
|
With the filter spec "tree:1", we are expecting to see _only_ the root tree for
|
||||||
|
each commit; therefore, the tree object count should be less than or equal to
|
||||||
|
the number of commits. (For an example of why that's true: `git commit --revert`
|
||||||
|
points to the same tree object as its grandparent.)
|
||||||
|
|
||||||
|
=== Counting Omitted Objects
|
||||||
|
|
||||||
|
We also have the capability to enumerate all objects which were omitted by a
|
||||||
|
filter, like with `git log --filter=<spec> --filter-print-omitted`. Asking
|
||||||
|
`traverse_commit_list_filtered()` to populate the `omitted` list means that our
|
||||||
|
object walk does not perform any better than an unfiltered object walk; all
|
||||||
|
reachable objects are walked in order to populate the list.
|
||||||
|
|
||||||
|
First, add the `struct oidset` and related items we will use to iterate it:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_object_walk(
|
||||||
|
...
|
||||||
|
|
||||||
|
struct oidset omitted;
|
||||||
|
struct oidset_iter oit;
|
||||||
|
struct object_id *oid = NULL;
|
||||||
|
int omitted_count = 0;
|
||||||
|
oidset_init(&omitted, 0);
|
||||||
|
|
||||||
|
...
|
||||||
|
----
|
||||||
|
|
||||||
|
Modify the call to `traverse_commit_list_filtered()` to include your `omitted`
|
||||||
|
object:
|
||||||
|
|
||||||
|
----
|
||||||
|
...
|
||||||
|
|
||||||
|
traverse_commit_list_filtered(&filter_options, rev,
|
||||||
|
walken_show_commit, walken_show_object, NULL, &omitted);
|
||||||
|
|
||||||
|
...
|
||||||
|
----
|
||||||
|
|
||||||
|
Then, after your traversal, the `oidset` traversal is pretty straightforward.
|
||||||
|
Count all the objects within and modify the print statement:
|
||||||
|
|
||||||
|
----
|
||||||
|
/* Count the omitted objects. */
|
||||||
|
oidset_iter_init(&omitted, &oit);
|
||||||
|
|
||||||
|
while ((oid = oidset_iter_next(&oit)))
|
||||||
|
omitted_count++;
|
||||||
|
|
||||||
|
printf("commits %d\nblobs %d\ntags %d\ntrees%d\nomitted %d\n",
|
||||||
|
commit_count, blob_count, tag_count, tree_count, omitted_count);
|
||||||
|
----
|
||||||
|
|
||||||
|
By running your walk with and without the filter, you should find that the total
|
||||||
|
object count in each case is identical. You can also time each invocation of
|
||||||
|
the `walken` subcommand, with and without `omitted` being passed in, to confirm
|
||||||
|
to yourself the runtime impact of tracking all omitted objects.
|
||||||
|
|
||||||
|
=== Changing the Order
|
||||||
|
|
||||||
|
Finally, let's demonstrate that you can also reorder walks of all objects, not
|
||||||
|
just walks of commits. First, we'll make our handlers chattier - modify
|
||||||
|
`walken_show_commit()` and `walken_show_object()` to print the object as they
|
||||||
|
go:
|
||||||
|
|
||||||
|
----
|
||||||
|
static void walken_show_commit(struct commit *cmt, void *buf)
|
||||||
|
{
|
||||||
|
trace_printf("commit: %s\n", oid_to_hex(&cmt->object.oid));
|
||||||
|
commit_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void walken_show_object(struct object *obj, const char *str, void *buf)
|
||||||
|
{
|
||||||
|
trace_printf("%s: %s\n", type_name(obj->type), oid_to_hex(&obj->oid));
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: Since we will be examining this output directly as humans, we'll use
|
||||||
|
`trace_printf()` here. Additionally, since this change introduces a significant
|
||||||
|
number of printed lines, using `trace_printf()` will allow us to easily silence
|
||||||
|
those lines without having to recompile.
|
||||||
|
|
||||||
|
(Leave the counter increment logic in place.)
|
||||||
|
|
||||||
|
With only that change, run again (but save yourself some scrollback):
|
||||||
|
|
||||||
|
----
|
||||||
|
$ GIT_TRACE=1 ./bin-wrappers/git walken | head -n 10
|
||||||
|
----
|
||||||
|
|
||||||
|
Take a look at the top commit with `git show` and the object ID you printed; it
|
||||||
|
should be the same as the output of `git show HEAD`.
|
||||||
|
|
||||||
|
Next, let's change a setting on our `struct rev_info` within
|
||||||
|
`walken_object_walk()`. Find where you're changing the other settings on `rev`,
|
||||||
|
such as `rev->tree_objects` and `rev->tree_blobs_in_commit_order`, and add the
|
||||||
|
`reverse` setting at the bottom:
|
||||||
|
|
||||||
|
----
|
||||||
|
...
|
||||||
|
|
||||||
|
rev->tree_objects = 1;
|
||||||
|
rev->blob_objects = 1;
|
||||||
|
rev->tag_objects = 1;
|
||||||
|
rev->tree_blobs_in_commit_order = 1;
|
||||||
|
rev->reverse = 1;
|
||||||
|
|
||||||
|
...
|
||||||
|
----
|
||||||
|
|
||||||
|
Now, run again, but this time, let's grab the last handful of objects instead
|
||||||
|
of the first handful:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ make
|
||||||
|
$ GIT_TRACE=1 ./bin-wrappers git walken | tail -n 10
|
||||||
|
----
|
||||||
|
|
||||||
|
The last commit object given should have the same OID as the one we saw at the
|
||||||
|
top before, and running `git show <oid>` with that OID should give you again
|
||||||
|
the same results as `git show HEAD`. Furthermore, if you run and examine the
|
||||||
|
first ten lines again (with `head` instead of `tail` like we did before applying
|
||||||
|
the `reverse` setting), you should see that now the first commit printed is the
|
||||||
|
initial commit, `e83c5163`.
|
||||||
|
|
||||||
|
== Wrapping Up
|
||||||
|
|
||||||
|
Let's review. In this tutorial, we:
|
||||||
|
|
||||||
|
- Built a commit walk from the ground up
|
||||||
|
- Enabled a grep filter for that commit walk
|
||||||
|
- Changed the sort order of that filtered commit walk
|
||||||
|
- Built an object walk (tags, commits, trees, and blobs) from the ground up
|
||||||
|
- Learned how to add a filter-spec to an object walk
|
||||||
|
- Changed the display order of the filtered object walk
|
|
@ -251,7 +251,7 @@ Updates in v1.5.0 since v1.4.4 series
|
||||||
the repository when that happens.
|
the repository when that happens.
|
||||||
|
|
||||||
|
|
||||||
* Crufts removal
|
* Cruft removal
|
||||||
|
|
||||||
- We used to say "old commits are retrievable using reflog and
|
- We used to say "old commits are retrievable using reflog and
|
||||||
'master@{yesterday}' syntax as long as you haven't run
|
'master@{yesterday}' syntax as long as you haven't run
|
||||||
|
@ -379,7 +379,7 @@ Updates in v1.5.0 since v1.4.4 series
|
||||||
- The value of i18n.commitencoding in the originating
|
- The value of i18n.commitencoding in the originating
|
||||||
repository is recorded in the commit object on the "encoding"
|
repository is recorded in the commit object on the "encoding"
|
||||||
header, if it is not UTF-8. git-log and friends notice this,
|
header, if it is not UTF-8. git-log and friends notice this,
|
||||||
and reencodes the message to the log output encoding when
|
and re-encodes the message to the log output encoding when
|
||||||
displaying, if they are different. The log output encoding
|
displaying, if they are different. The log output encoding
|
||||||
is determined by "git log --encoding=<encoding>",
|
is determined by "git log --encoding=<encoding>",
|
||||||
i18n.logoutputencoding configuration, or i18n.commitencoding
|
i18n.logoutputencoding configuration, or i18n.commitencoding
|
||||||
|
|
|
@ -11,7 +11,7 @@ push running this release will issue a big warning when the
|
||||||
configuration variable is missing. Please refer to:
|
configuration variable is missing. Please refer to:
|
||||||
|
|
||||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||||
|
|
||||||
for more details on the reason why this change is needed and the
|
for more details on the reason why this change is needed and the
|
||||||
transition plan.
|
transition plan.
|
||||||
|
|
|
@ -11,7 +11,7 @@ push running this release will issue a big warning when the
|
||||||
configuration variable is missing. Please refer to:
|
configuration variable is missing. Please refer to:
|
||||||
|
|
||||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||||
|
|
||||||
for more details on the reason why this change is needed and the
|
for more details on the reason why this change is needed and the
|
||||||
transition plan.
|
transition plan.
|
||||||
|
|
|
@ -11,7 +11,7 @@ push running this release will issue a big warning when the
|
||||||
configuration variable is missing. Please refer to:
|
configuration variable is missing. Please refer to:
|
||||||
|
|
||||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||||
|
|
||||||
for more details on the reason why this change is needed and the
|
for more details on the reason why this change is needed and the
|
||||||
transition plan.
|
transition plan.
|
||||||
|
|
|
@ -10,7 +10,7 @@ Fixes since v1.6.5.3
|
||||||
|
|
||||||
* "git prune-packed" gave progress output even when its standard error is
|
* "git prune-packed" gave progress output even when its standard error is
|
||||||
not connected to a terminal; this caused cron jobs that run it to
|
not connected to a terminal; this caused cron jobs that run it to
|
||||||
produce crufts.
|
produce cruft.
|
||||||
|
|
||||||
* "git pack-objects --all-progress" is an option to ask progress output
|
* "git pack-objects --all-progress" is an option to ask progress output
|
||||||
from write-object phase _if_ progress output were to be produced, and
|
from write-object phase _if_ progress output were to be produced, and
|
||||||
|
|
|
@ -22,7 +22,7 @@ push running this release will issue a big warning when the
|
||||||
configuration variable is missing. Please refer to:
|
configuration variable is missing. Please refer to:
|
||||||
|
|
||||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||||
|
|
||||||
for more details on the reason why this change is needed and the
|
for more details on the reason why this change is needed and the
|
||||||
transition plan.
|
transition plan.
|
||||||
|
|
|
@ -64,7 +64,7 @@ users will fare this time.
|
||||||
Please refer to:
|
Please refer to:
|
||||||
|
|
||||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||||
|
|
||||||
for more details on the reason why this change is needed and the
|
for more details on the reason why this change is needed and the
|
||||||
transition process that already took place so far.
|
transition process that already took place so far.
|
||||||
|
|
|
@ -34,7 +34,7 @@ Fixes since v1.7.0.1
|
||||||
* "git status" in 1.7.0 lacked the optimization we used to have in 1.6.X series
|
* "git status" in 1.7.0 lacked the optimization we used to have in 1.6.X series
|
||||||
to speed up scanning of large working tree.
|
to speed up scanning of large working tree.
|
||||||
|
|
||||||
* "gitweb" did not diagnose parsing errors properly while reading tis configuration
|
* "gitweb" did not diagnose parsing errors properly while reading its configuration
|
||||||
file.
|
file.
|
||||||
|
|
||||||
And other minor fixes and documentation updates.
|
And other minor fixes and documentation updates.
|
||||||
|
|
|
@ -7,7 +7,7 @@ Fixes since v1.7.10.3
|
||||||
* The message file for Swedish translation has been updated a bit.
|
* The message file for Swedish translation has been updated a bit.
|
||||||
|
|
||||||
* A name taken from mailmap was copied into an internal buffer
|
* A name taken from mailmap was copied into an internal buffer
|
||||||
incorrectly and could overun the buffer if it is too long.
|
incorrectly and could overrun the buffer if it is too long.
|
||||||
|
|
||||||
* A malformed commit object that has a header line chomped in the
|
* A malformed commit object that has a header line chomped in the
|
||||||
middle could kill git with a NULL pointer dereference.
|
middle could kill git with a NULL pointer dereference.
|
||||||
|
|
|
@ -25,7 +25,7 @@ Fixes since v1.7.12.2
|
||||||
its Accept-Encoding header.
|
its Accept-Encoding header.
|
||||||
|
|
||||||
* "git receive-pack" (the counterpart to "git push") did not give
|
* "git receive-pack" (the counterpart to "git push") did not give
|
||||||
progress output while processing objects it received to the puser
|
progress output while processing objects it received to the user
|
||||||
when run over the smart-http protocol.
|
when run over the smart-http protocol.
|
||||||
|
|
||||||
* "git status" honored the ignore=dirty settings in .gitmodules but
|
* "git status" honored the ignore=dirty settings in .gitmodules but
|
||||||
|
|
|
@ -22,7 +22,7 @@ Fixes since v1.7.5.2
|
||||||
* "git log --stdin path" with an input that has additional pathspec
|
* "git log --stdin path" with an input that has additional pathspec
|
||||||
used to corrupt memory.
|
used to corrupt memory.
|
||||||
|
|
||||||
* "git send-pack" (hence "git push") over smalt-HTTP protocol could
|
* "git send-pack" (hence "git push") over smart-HTTP protocol could
|
||||||
deadlock when the client side pack-object died early.
|
deadlock when the client side pack-object died early.
|
||||||
|
|
||||||
* Compressed tarball gitweb generates used to be made with the timestamp
|
* Compressed tarball gitweb generates used to be made with the timestamp
|
||||||
|
|
|
@ -233,7 +233,7 @@ to them for details).
|
||||||
together, misdetected branches.
|
together, misdetected branches.
|
||||||
|
|
||||||
* "git receive-pack" (the counterpart to "git push") did not give
|
* "git receive-pack" (the counterpart to "git push") did not give
|
||||||
progress output while processing objects it received to the puser
|
progress output while processing objects it received to the user
|
||||||
when run over the smart-http protocol.
|
when run over the smart-http protocol.
|
||||||
|
|
||||||
* When you misspell the command name you give to the "exec" action in
|
* When you misspell the command name you give to the "exec" action in
|
||||||
|
|
|
@ -15,7 +15,7 @@ Fixes since v1.8.4
|
||||||
in 1.8.4-rc1).
|
in 1.8.4-rc1).
|
||||||
|
|
||||||
* "git rebase -i" and other scripted commands were feeding a
|
* "git rebase -i" and other scripted commands were feeding a
|
||||||
random, data dependant error message to 'echo' and expecting it
|
random, data dependent error message to 'echo' and expecting it
|
||||||
to come out literally.
|
to come out literally.
|
||||||
|
|
||||||
* Setting the "submodule.<name>.path" variable to the empty
|
* Setting the "submodule.<name>.path" variable to the empty
|
||||||
|
|
|
@ -58,7 +58,7 @@ Foreign interfaces, subsystems and ports.
|
||||||
credential helper interface from Git.pm.
|
credential helper interface from Git.pm.
|
||||||
|
|
||||||
* Update build for Cygwin 1.[57]. Torsten Bögershausen reports that
|
* Update build for Cygwin 1.[57]. Torsten Bögershausen reports that
|
||||||
this is fine with Cygwin 1.7 ($gmane/225824) so let's try moving it
|
this is fine with Cygwin 1.7 (cf. <51A606A0.5060101@web.de>) so let's try moving it
|
||||||
ahead.
|
ahead.
|
||||||
|
|
||||||
* The credential helper to talk to keychain on OS X (in contrib/) has
|
* The credential helper to talk to keychain on OS X (in contrib/) has
|
||||||
|
|
|
@ -13,7 +13,7 @@ Git v2.1.3 Release Notes
|
||||||
they are new enough to support the `--output` option.
|
they are new enough to support the `--output` option.
|
||||||
|
|
||||||
* "git pack-objects" forgot to disable the codepath to generate
|
* "git pack-objects" forgot to disable the codepath to generate
|
||||||
object recheability bitmap when it needs to split the resulting
|
object reachability bitmap when it needs to split the resulting
|
||||||
pack.
|
pack.
|
||||||
|
|
||||||
* "gitweb" used deprecated CGI::startfrom, which was removed from
|
* "gitweb" used deprecated CGI::startfrom, which was removed from
|
||||||
|
|
|
@ -478,7 +478,7 @@ notes for details).
|
||||||
* One part of "git am" had an oddball helper function that called
|
* One part of "git am" had an oddball helper function that called
|
||||||
stuff from outside "his" as opposed to calling what we have "ours",
|
stuff from outside "his" as opposed to calling what we have "ours",
|
||||||
which was not gender-neutral and also inconsistent with the rest of
|
which was not gender-neutral and also inconsistent with the rest of
|
||||||
the system where outside stuff is usuall called "theirs" in
|
the system where outside stuff is usually called "theirs" in
|
||||||
contrast to "ours".
|
contrast to "ours".
|
||||||
|
|
||||||
* "git blame file" allowed the lineage of lines in the uncommitted,
|
* "git blame file" allowed the lineage of lines in the uncommitted,
|
||||||
|
|
|
@ -86,7 +86,7 @@ Fixes since v2.10.1
|
||||||
by refusing to check out a branch that is already checked out in
|
by refusing to check out a branch that is already checked out in
|
||||||
another worktree. However, this also prevented checking out a
|
another worktree. However, this also prevented checking out a
|
||||||
branch, which is designated as the primary branch of a bare
|
branch, which is designated as the primary branch of a bare
|
||||||
reopsitory, in a worktree that is connected to the bare
|
repository, in a worktree that is connected to the bare
|
||||||
repository. The check has been corrected to allow it.
|
repository. The check has been corrected to allow it.
|
||||||
|
|
||||||
* "git rebase" immediately after "git clone" failed to find the fork
|
* "git rebase" immediately after "git clone" failed to find the fork
|
||||||
|
|
|
@ -104,7 +104,7 @@ Fixes since v2.11
|
||||||
"git difftool --dir-diff" from a subdirectory never worked. This
|
"git difftool --dir-diff" from a subdirectory never worked. This
|
||||||
has been fixed.
|
has been fixed.
|
||||||
|
|
||||||
* "git p4" that tracks multile p4 paths imported a single changelist
|
* "git p4" that tracks multiple p4 paths imported a single changelist
|
||||||
that touches files in these multiple paths as one commit, followed
|
that touches files in these multiple paths as one commit, followed
|
||||||
by many empty commits. This has been fixed.
|
by many empty commits. This has been fixed.
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,7 @@ notes for details).
|
||||||
"git difftool --dir-diff" from a subdirectory never worked. This
|
"git difftool --dir-diff" from a subdirectory never worked. This
|
||||||
has been fixed.
|
has been fixed.
|
||||||
|
|
||||||
* "git p4" that tracks multile p4 paths imported a single changelist
|
* "git p4" that tracks multiple p4 paths imported a single changelist
|
||||||
that touches files in these multiple paths as one commit, followed
|
that touches files in these multiple paths as one commit, followed
|
||||||
by many empty commits. This has been fixed.
|
by many empty commits. This has been fixed.
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ UI, Workflows & Features
|
||||||
been changed to enable "--decorate".
|
been changed to enable "--decorate".
|
||||||
|
|
||||||
* The output from "git status --short" has been extended to show
|
* The output from "git status --short" has been extended to show
|
||||||
various kinds of dirtyness in submodules differently; instead of to
|
various kinds of dirtiness in submodules differently; instead of to
|
||||||
"M" for modified, 'm' and '?' can be shown to signal changes only
|
"M" for modified, 'm' and '?' can be shown to signal changes only
|
||||||
to the working tree of the submodule but not the commit that is
|
to the working tree of the submodule but not the commit that is
|
||||||
checked out.
|
checked out.
|
||||||
|
|
|
@ -25,7 +25,7 @@ Fixes since v2.13.2
|
||||||
* The code to pick up and execute command alias definition from the
|
* The code to pick up and execute command alias definition from the
|
||||||
configuration used to switch to the top of the working tree and
|
configuration used to switch to the top of the working tree and
|
||||||
then come back when the expanded alias was executed, which was
|
then come back when the expanded alias was executed, which was
|
||||||
unnecessarilyl complex. Attempt to simplify the logic by using the
|
unnecessarily complex. Attempt to simplify the logic by using the
|
||||||
early-config mechanism that does not chdir around.
|
early-config mechanism that does not chdir around.
|
||||||
|
|
||||||
* "git add -p" were updated in 2.12 timeframe to cope with custom
|
* "git add -p" were updated in 2.12 timeframe to cope with custom
|
||||||
|
@ -35,7 +35,7 @@ Fixes since v2.13.2
|
||||||
* Fix a recent regression to "git rebase -i" and add tests that would
|
* Fix a recent regression to "git rebase -i" and add tests that would
|
||||||
have caught it and others.
|
have caught it and others.
|
||||||
|
|
||||||
* An unaligned 32-bit access in pack-bitmap code ahs been corrected.
|
* An unaligned 32-bit access in pack-bitmap code has been corrected.
|
||||||
|
|
||||||
* Tighten error checks for invalid "git apply" input.
|
* Tighten error checks for invalid "git apply" input.
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||||
* Some platforms have ulong that is smaller than time_t, and our
|
* Some platforms have ulong that is smaller than time_t, and our
|
||||||
historical use of ulong for timestamp would mean they cannot
|
historical use of ulong for timestamp would mean they cannot
|
||||||
represent some timestamp that the platform allows. Invent a
|
represent some timestamp that the platform allows. Invent a
|
||||||
separate and dedicated timestamp_t (so that we can distingiuish
|
separate and dedicated timestamp_t (so that we can distinguish
|
||||||
timestamps and a vanilla ulongs, which along is already a good
|
timestamps and a vanilla ulongs, which along is already a good
|
||||||
move), and then declare uintmax_t is the type to be used as the
|
move), and then declare uintmax_t is the type to be used as the
|
||||||
timestamp_t.
|
timestamp_t.
|
||||||
|
@ -442,7 +442,7 @@ notes for details).
|
||||||
* The code to pick up and execute command alias definition from the
|
* The code to pick up and execute command alias definition from the
|
||||||
configuration used to switch to the top of the working tree and
|
configuration used to switch to the top of the working tree and
|
||||||
then come back when the expanded alias was executed, which was
|
then come back when the expanded alias was executed, which was
|
||||||
unnecessarilyl complex. Attempt to simplify the logic by using the
|
unnecessarily complex. Attempt to simplify the logic by using the
|
||||||
early-config mechanism that does not chdir around.
|
early-config mechanism that does not chdir around.
|
||||||
|
|
||||||
* Fix configuration codepath to pay proper attention to commondir
|
* Fix configuration codepath to pay proper attention to commondir
|
||||||
|
|
54
third_party/git/Documentation/RelNotes/2.14.6.txt
vendored
Normal file
54
third_party/git/Documentation/RelNotes/2.14.6.txt
vendored
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
Git v2.14.6 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release addresses the security issues CVE-2019-1348,
|
||||||
|
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
|
||||||
|
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387.
|
||||||
|
|
||||||
|
Fixes since v2.14.5
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* CVE-2019-1348:
|
||||||
|
The --export-marks option of git fast-import is exposed also via
|
||||||
|
the in-stream command feature export-marks=... and it allows
|
||||||
|
overwriting arbitrary paths.
|
||||||
|
|
||||||
|
* CVE-2019-1349:
|
||||||
|
When submodules are cloned recursively, under certain circumstances
|
||||||
|
Git could be fooled into using the same Git directory twice. We now
|
||||||
|
require the directory to be empty.
|
||||||
|
|
||||||
|
* CVE-2019-1350:
|
||||||
|
Incorrect quoting of command-line arguments allowed remote code
|
||||||
|
execution during a recursive clone in conjunction with SSH URLs.
|
||||||
|
|
||||||
|
* CVE-2019-1351:
|
||||||
|
While the only permitted drive letters for physical drives on
|
||||||
|
Windows are letters of the US-English alphabet, this restriction
|
||||||
|
does not apply to virtual drives assigned via subst <letter>:
|
||||||
|
<path>. Git mistook such paths for relative paths, allowing writing
|
||||||
|
outside of the worktree while cloning.
|
||||||
|
|
||||||
|
* CVE-2019-1352:
|
||||||
|
Git was unaware of NTFS Alternate Data Streams, allowing files
|
||||||
|
inside the .git/ directory to be overwritten during a clone.
|
||||||
|
|
||||||
|
* CVE-2019-1353:
|
||||||
|
When running Git in the Windows Subsystem for Linux (also known as
|
||||||
|
"WSL") while accessing a working directory on a regular Windows
|
||||||
|
drive, none of the NTFS protections were active.
|
||||||
|
|
||||||
|
* CVE-2019-1354:
|
||||||
|
Filenames on Linux/Unix can contain backslashes. On Windows,
|
||||||
|
backslashes are directory separators. Git did not use to refuse to
|
||||||
|
write out tracked files with such filenames.
|
||||||
|
|
||||||
|
* CVE-2019-1387:
|
||||||
|
Recursive clones are currently affected by a vulnerability that is
|
||||||
|
caused by too-lax validation of submodule names, allowing very
|
||||||
|
targeted attacks via remote code execution in recursive clones.
|
||||||
|
|
||||||
|
Credit for finding these vulnerabilities goes to Microsoft Security
|
||||||
|
Response Center, in particular to Nicolas Joly. The `fast-import`
|
||||||
|
fixes were provided by Jeff King, the other fixes by Johannes
|
||||||
|
Schindelin with help from Garima Singh.
|
11
third_party/git/Documentation/RelNotes/2.15.4.txt
vendored
Normal file
11
third_party/git/Documentation/RelNotes/2.15.4.txt
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Git v2.15.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6 to address
|
||||||
|
the security issues CVE-2019-1348, CVE-2019-1349, CVE-2019-1350,
|
||||||
|
CVE-2019-1351, CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, and
|
||||||
|
CVE-2019-1387; see the release notes for that version for details.
|
||||||
|
|
||||||
|
In conjunction with a vulnerability that was fixed in v2.20.2,
|
||||||
|
`.gitmodules` is no longer allowed to contain entries of the form
|
||||||
|
`submodule.<name>.update=!command`.
|
|
@ -407,7 +407,7 @@ Fixes since v2.15
|
||||||
(merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).
|
(merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).
|
||||||
|
|
||||||
* Amending commits in git-gui broke the author name that is non-ascii
|
* Amending commits in git-gui broke the author name that is non-ascii
|
||||||
due to incorrect enconding conversion.
|
due to incorrect encoding conversion.
|
||||||
|
|
||||||
* Recent update to the submodule configuration code broke "diff-tree"
|
* Recent update to the submodule configuration code broke "diff-tree"
|
||||||
by accidentally stopping to read from the index upfront.
|
by accidentally stopping to read from the index upfront.
|
||||||
|
|
|
@ -24,7 +24,7 @@ Fixes since v2.16.2
|
||||||
|
|
||||||
* The http tracing code, often used to debug connection issues,
|
* The http tracing code, often used to debug connection issues,
|
||||||
learned to redact potentially sensitive information from its output
|
learned to redact potentially sensitive information from its output
|
||||||
so that it can be more safely sharable.
|
so that it can be more safely shareable.
|
||||||
|
|
||||||
* Crash fix for a corner case where an error codepath tried to unlock
|
* Crash fix for a corner case where an error codepath tried to unlock
|
||||||
what it did not acquire lock on.
|
what it did not acquire lock on.
|
||||||
|
|
8
third_party/git/Documentation/RelNotes/2.16.6.txt
vendored
Normal file
8
third_party/git/Documentation/RelNotes/2.16.6.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Git v2.16.6 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6 and in
|
||||||
|
v2.15.4 addressing the security issues CVE-2019-1348, CVE-2019-1349,
|
||||||
|
CVE-2019-1350, CVE-2019-1351, CVE-2019-1352, CVE-2019-1353,
|
||||||
|
CVE-2019-1354, and CVE-2019-1387; see the release notes for those
|
||||||
|
versions for details.
|
|
@ -216,7 +216,7 @@ Fixes since v2.16
|
||||||
|
|
||||||
* The http tracing code, often used to debug connection issues,
|
* The http tracing code, often used to debug connection issues,
|
||||||
learned to redact potentially sensitive information from its output
|
learned to redact potentially sensitive information from its output
|
||||||
so that it can be more safely sharable.
|
so that it can be more safely shareable.
|
||||||
(merge 8ba18e6fa4 jt/http-redact-cookies later to maint).
|
(merge 8ba18e6fa4 jt/http-redact-cookies later to maint).
|
||||||
|
|
||||||
* Crash fix for a corner case where an error codepath tried to unlock
|
* Crash fix for a corner case where an error codepath tried to unlock
|
||||||
|
|
12
third_party/git/Documentation/RelNotes/2.17.3.txt
vendored
Normal file
12
third_party/git/Documentation/RelNotes/2.17.3.txt
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Git v2.17.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6 and in
|
||||||
|
v2.15.4 addressing the security issues CVE-2019-1348, CVE-2019-1349,
|
||||||
|
CVE-2019-1350, CVE-2019-1351, CVE-2019-1352, CVE-2019-1353,
|
||||||
|
CVE-2019-1354, and CVE-2019-1387; see the release notes for those
|
||||||
|
versions for details.
|
||||||
|
|
||||||
|
In addition, `git fsck` was taught to identify `.gitmodules` entries
|
||||||
|
of the form `submodule.<name>.update=!command`, which have been
|
||||||
|
disallowed in v2.15.4.
|
16
third_party/git/Documentation/RelNotes/2.17.4.txt
vendored
Normal file
16
third_party/git/Documentation/RelNotes/2.17.4.txt
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
Git v2.17.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release is to address the security issue: CVE-2020-5260
|
||||||
|
|
||||||
|
Fixes since v2.17.3
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* With a crafted URL that contains a newline in it, the credential
|
||||||
|
helper machinery can be fooled to give credential information for
|
||||||
|
a wrong host. The attack has been made impossible by forbidding
|
||||||
|
a newline character in any value passed via the credential
|
||||||
|
protocol.
|
||||||
|
|
||||||
|
Credit for finding the vulnerability goes to Felix Wilhelm of Google
|
||||||
|
Project Zero.
|
22
third_party/git/Documentation/RelNotes/2.17.5.txt
vendored
Normal file
22
third_party/git/Documentation/RelNotes/2.17.5.txt
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
Git v2.17.5 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release is to address a security issue: CVE-2020-11008
|
||||||
|
|
||||||
|
Fixes since v2.17.4
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* With a crafted URL that contains a newline or empty host, or lacks
|
||||||
|
a scheme, the credential helper machinery can be fooled into
|
||||||
|
providing credential information that is not appropriate for the
|
||||||
|
protocol in use and host being contacted.
|
||||||
|
|
||||||
|
Unlike the vulnerability CVE-2020-5260 fixed in v2.17.4, the
|
||||||
|
credentials are not for a host of the attacker's choosing; instead,
|
||||||
|
they are for some unspecified host (based on how the configured
|
||||||
|
credential helper handles an absent "host" parameter).
|
||||||
|
|
||||||
|
The attack has been made impossible by refusing to work with
|
||||||
|
under-specified credential patterns.
|
||||||
|
|
||||||
|
Credit for finding the vulnerability goes to Carlo Arenas.
|
|
@ -179,7 +179,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||||
(merge 00a3da2a13 nd/remove-ignore-env-field later to maint).
|
(merge 00a3da2a13 nd/remove-ignore-env-field later to maint).
|
||||||
|
|
||||||
* Code to find the length to uniquely abbreviate object names based
|
* Code to find the length to uniquely abbreviate object names based
|
||||||
on packfile content, which is a relatively recent addtion, has been
|
on packfile content, which is a relatively recent addition, has been
|
||||||
optimized to use the same fan-out table.
|
optimized to use the same fan-out table.
|
||||||
|
|
||||||
* The mechanism to use parse-options API to automate the command line
|
* The mechanism to use parse-options API to automate the command line
|
||||||
|
|
8
third_party/git/Documentation/RelNotes/2.18.2.txt
vendored
Normal file
8
third_party/git/Documentation/RelNotes/2.18.2.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Git v2.18.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4
|
||||||
|
and in v2.17.3, addressing the security issues CVE-2019-1348,
|
||||||
|
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
|
||||||
|
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387; see the release notes
|
||||||
|
for those versions for details.
|
5
third_party/git/Documentation/RelNotes/2.18.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.18.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.18.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.18.4.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.18.4.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.18.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
|
@ -106,7 +106,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||||
* The conversion to pass "the_repository" and then "a_repository"
|
* The conversion to pass "the_repository" and then "a_repository"
|
||||||
throughout the object access API continues.
|
throughout the object access API continues.
|
||||||
|
|
||||||
* Continuing with the idea to programatically enumerate various
|
* Continuing with the idea to programmatically enumerate various
|
||||||
pieces of data required for command line completion, teach the
|
pieces of data required for command line completion, teach the
|
||||||
codebase to report the list of configuration variables
|
codebase to report the list of configuration variables
|
||||||
subcommands care about to help complete them.
|
subcommands care about to help complete them.
|
||||||
|
|
8
third_party/git/Documentation/RelNotes/2.19.3.txt
vendored
Normal file
8
third_party/git/Documentation/RelNotes/2.19.3.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Git v2.19.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4
|
||||||
|
and in v2.17.3, addressing the security issues CVE-2019-1348,
|
||||||
|
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
|
||||||
|
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387; see the release notes
|
||||||
|
for those versions for details.
|
5
third_party/git/Documentation/RelNotes/2.19.4.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.19.4.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.19.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.19.5.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.19.5.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.19.5 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
|
@ -119,7 +119,7 @@ UI, Workflows & Features
|
||||||
alias expansion.
|
alias expansion.
|
||||||
|
|
||||||
* The documentation of "git gc" has been updated to mention that it
|
* The documentation of "git gc" has been updated to mention that it
|
||||||
is no longer limited to "pruning away crufts" but also updates
|
is no longer limited to "pruning away cruft" but also updates
|
||||||
ancillary files like commit-graph as a part of repository
|
ancillary files like commit-graph as a part of repository
|
||||||
optimization.
|
optimization.
|
||||||
|
|
||||||
|
|
18
third_party/git/Documentation/RelNotes/2.20.2.txt
vendored
Normal file
18
third_party/git/Documentation/RelNotes/2.20.2.txt
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
Git v2.20.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4
|
||||||
|
and in v2.17.3, addressing the security issues CVE-2019-1348,
|
||||||
|
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
|
||||||
|
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387; see the release notes
|
||||||
|
for those versions for details.
|
||||||
|
|
||||||
|
The change to disallow `submodule.<name>.update=!command` entries in
|
||||||
|
`.gitmodules` which was introduced v2.15.4 (and for which v2.17.3
|
||||||
|
added explicit fsck checks) fixes the vulnerability in v2.20.x where a
|
||||||
|
recursive clone followed by a submodule update could execute code
|
||||||
|
contained within the repository without the user explicitly having
|
||||||
|
asked for that (CVE-2019-19604).
|
||||||
|
|
||||||
|
Credit for finding this vulnerability goes to Joern Schneeweisz,
|
||||||
|
credit for the fixes goes to Jonathan Nieder.
|
5
third_party/git/Documentation/RelNotes/2.20.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.20.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.20.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.20.4.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.20.4.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.20.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
12
third_party/git/Documentation/RelNotes/2.21.1.txt
vendored
Normal file
12
third_party/git/Documentation/RelNotes/2.21.1.txt
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Git v2.21.1 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4,
|
||||||
|
v2.17.3 and in v2.20.2, addressing the security issues CVE-2019-1348,
|
||||||
|
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
|
||||||
|
CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and CVE-2019-19604;
|
||||||
|
see the release notes for those versions for details.
|
||||||
|
|
||||||
|
Additionally, this version also includes a couple of fixes for the
|
||||||
|
Windows-specific quoting of command-line arguments when Git executes
|
||||||
|
a Unix shell on Windows.
|
5
third_party/git/Documentation/RelNotes/2.21.2.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.21.2.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.21.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.21.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.21.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.21.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
8
third_party/git/Documentation/RelNotes/2.22.2.txt
vendored
Normal file
8
third_party/git/Documentation/RelNotes/2.22.2.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Git v2.22.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4,
|
||||||
|
v2.17.3, v2.20.2 and in v2.21.1, addressing the security issues
|
||||||
|
CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351,
|
||||||
|
CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and
|
||||||
|
CVE-2019-19604; see the release notes for those versions for details.
|
5
third_party/git/Documentation/RelNotes/2.22.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.22.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.22.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.22.4.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.22.4.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.22.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
8
third_party/git/Documentation/RelNotes/2.23.1.txt
vendored
Normal file
8
third_party/git/Documentation/RelNotes/2.23.1.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Git v2.23.1 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4,
|
||||||
|
v2.17.3, v2.20.2 and in v2.21.1, addressing the security issues
|
||||||
|
CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351,
|
||||||
|
CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and
|
||||||
|
CVE-2019-19604; see the release notes for those versions for details.
|
5
third_party/git/Documentation/RelNotes/2.23.2.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.23.2.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.23.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.23.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.23.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.23.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
398
third_party/git/Documentation/RelNotes/2.24.0.txt
vendored
Normal file
398
third_party/git/Documentation/RelNotes/2.24.0.txt
vendored
Normal file
|
@ -0,0 +1,398 @@
|
||||||
|
Git 2.24 Release Notes
|
||||||
|
======================
|
||||||
|
|
||||||
|
Updates since v2.23
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Backward compatibility note
|
||||||
|
|
||||||
|
* "filter-branch" is showing its age and alternatives are available.
|
||||||
|
From this release, we started to discourage its use and hint
|
||||||
|
people about filter-repo.
|
||||||
|
|
||||||
|
UI, Workflows & Features
|
||||||
|
|
||||||
|
* We now have an active interim maintainer for the Git-Gui part of
|
||||||
|
the system. Praise and thank Pratyush Yadav for volunteering.
|
||||||
|
|
||||||
|
* The command line parser learned "--end-of-options" notation; the
|
||||||
|
standard convention for scripters to have hardcoded set of options
|
||||||
|
first on the command line, and force the command to treat end-user
|
||||||
|
input as non-options, has been to use "--" as the delimiter, but
|
||||||
|
that would not work for commands that use "--" as a delimiter
|
||||||
|
between revs and pathspec.
|
||||||
|
|
||||||
|
* A mechanism to affect the default setting for a (related) group of
|
||||||
|
configuration variables is introduced.
|
||||||
|
|
||||||
|
* "git fetch" learned "--set-upstream" option to help those who first
|
||||||
|
clone from their private fork they intend to push to, add the true
|
||||||
|
upstream via "git remote add" and then "git fetch" from it.
|
||||||
|
|
||||||
|
* Device-tree files learned their own userdiff patterns.
|
||||||
|
(merge 3c81760bc6 sb/userdiff-dts later to maint).
|
||||||
|
|
||||||
|
* "git rebase --rebase-merges" learned to drive different merge
|
||||||
|
strategies and pass strategy specific options to them.
|
||||||
|
|
||||||
|
* A new "pre-merge-commit" hook has been introduced.
|
||||||
|
|
||||||
|
* Command line completion updates for "git -c var.name=val" have been
|
||||||
|
added.
|
||||||
|
|
||||||
|
* The lazy clone machinery has been taught that there can be more
|
||||||
|
than one promisor remote and consult them in order when downloading
|
||||||
|
missing objects on demand.
|
||||||
|
|
||||||
|
* The list-objects-filter API (used to create a sparse/lazy clone)
|
||||||
|
learned to take a combined filter specification.
|
||||||
|
|
||||||
|
* The documentation and tests for "git format-patch" have been
|
||||||
|
cleaned up.
|
||||||
|
|
||||||
|
* On Windows, the root level of UNC share is now allowed to be used
|
||||||
|
just like any other directory.
|
||||||
|
|
||||||
|
* The command line completion support (in contrib/) learned about the
|
||||||
|
"--skip" option of "git revert" and "git cherry-pick".
|
||||||
|
|
||||||
|
* "git rebase --keep-base <upstream>" tries to find the original base
|
||||||
|
of the topic being rebased and rebase on top of that same base,
|
||||||
|
which is useful when running the "git rebase -i" (and its limited
|
||||||
|
variant "git rebase -x").
|
||||||
|
|
||||||
|
The command also has learned to fast-forward in more cases where it
|
||||||
|
can instead of replaying to recreate identical commits.
|
||||||
|
|
||||||
|
* A configuration variable tells "git fetch" to write the commit
|
||||||
|
graph after finishing.
|
||||||
|
|
||||||
|
* "git add -i" has been taught to show the total number of hunks and
|
||||||
|
the hunks that has been processed so far when showing prompts.
|
||||||
|
|
||||||
|
* "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
|
||||||
|
submodules, but this did not apply to "git fetch --multiple" that
|
||||||
|
fetches from multiple remote repositories. It now does.
|
||||||
|
|
||||||
|
* The installation instruction for zsh completion script (in
|
||||||
|
contrib/) has been a bit improved.
|
||||||
|
|
||||||
|
|
||||||
|
Performance, Internal Implementation, Development Support etc.
|
||||||
|
|
||||||
|
* The code to write commit-graph over given commit object names has
|
||||||
|
been made a bit more robust.
|
||||||
|
|
||||||
|
* The first line of verbose output from each test piece now carries
|
||||||
|
the test name and number to help scanning with eyeballs.
|
||||||
|
|
||||||
|
* Further clean-up of the initialization code.
|
||||||
|
|
||||||
|
* xmalloc() used to have a mechanism to ditch memory and address
|
||||||
|
space resources as the last resort upon seeing an allocation
|
||||||
|
failure from the underlying malloc(), which made the code complex
|
||||||
|
and thread-unsafe with dubious benefit, as major memory resource
|
||||||
|
users already do limit their uses with various other mechanisms.
|
||||||
|
It has been simplified away.
|
||||||
|
|
||||||
|
* Unnecessary full-tree diff in "git log -L" machinery has been
|
||||||
|
optimized away.
|
||||||
|
|
||||||
|
* The http transport lacked some optimization the native transports
|
||||||
|
learned to avoid unnecessary ref advertisement, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Preparation for SHA-256 upgrade continues in the test department.
|
||||||
|
(merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).
|
||||||
|
|
||||||
|
* The memory ownership model of the "git fast-import" got
|
||||||
|
straightened out.
|
||||||
|
|
||||||
|
* Output from trace2 subsystem is formatted more prettily now.
|
||||||
|
|
||||||
|
* The internal code originally invented for ".gitignore" processing
|
||||||
|
got reshuffled and renamed to make it less tied to "excluding" and
|
||||||
|
stress more that it is about "matching", as it has been reused for
|
||||||
|
things like sparse checkout specification that want to check if a
|
||||||
|
path is "included".
|
||||||
|
|
||||||
|
* "git stash" learned to write refreshed index back to disk.
|
||||||
|
|
||||||
|
* Coccinelle checks are done on more source files than before now.
|
||||||
|
|
||||||
|
* The cache-tree code has been taught to be less aggressive in
|
||||||
|
attempting to see if a tree object it computed already exists in
|
||||||
|
the repository.
|
||||||
|
|
||||||
|
* The code to parse and use the commit-graph file has been made more
|
||||||
|
robust against corrupted input.
|
||||||
|
|
||||||
|
* The hg-to-git script (in contrib/) has been updated to work with
|
||||||
|
Python 3.
|
||||||
|
|
||||||
|
* Update the way build artifacts in t/helper/ directory are ignored.
|
||||||
|
|
||||||
|
* Preparation for SHA-256 upgrade continues.
|
||||||
|
|
||||||
|
* "git log --graph" for an octopus merge is sometimes colored
|
||||||
|
incorrectly, which is demonstrated and documented but not yet
|
||||||
|
fixed.
|
||||||
|
|
||||||
|
* The trace2 output, when sending them to files in a designated
|
||||||
|
directory, can populate the directory with too many files; a
|
||||||
|
mechanism is introduced to set the maximum number of files and
|
||||||
|
discard further logs when the maximum is reached.
|
||||||
|
|
||||||
|
* We have adopted a Code-of-conduct document.
|
||||||
|
(merge 3f9ef874a7 jk/coc later to maint).
|
||||||
|
|
||||||
|
|
||||||
|
Fixes since v2.23
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* "git grep --recurse-submodules" that looks at the working tree
|
||||||
|
files looked at the contents in the index in submodules, instead of
|
||||||
|
files in the working tree.
|
||||||
|
(merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).
|
||||||
|
|
||||||
|
* Codepaths to walk tree objects have been audited for integer
|
||||||
|
overflows and hardened.
|
||||||
|
(merge 5aa02f9868 jk/tree-walk-overflow later to maint).
|
||||||
|
|
||||||
|
* "git pack-refs" can lose refs that are created while running, which
|
||||||
|
is getting corrected.
|
||||||
|
(merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).
|
||||||
|
|
||||||
|
* "git checkout" and "git restore" to re-populate the index from a
|
||||||
|
tree-ish (typically HEAD) did not work correctly for a path that
|
||||||
|
was removed and then added again with the intent-to-add bit, when
|
||||||
|
the corresponding working tree file was empty. This has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Compilation fix.
|
||||||
|
(merge 70597e8386 rs/nedalloc-fixlets later to maint).
|
||||||
|
|
||||||
|
* "git gui" learned to call the clean-up procedure before exiting.
|
||||||
|
(merge 0d88f3d2c5 py/git-gui-do-quit later to maint).
|
||||||
|
|
||||||
|
* We promoted the "indent heuristics" that decides where to split
|
||||||
|
diff hunks from experimental to the default a few years ago, but
|
||||||
|
some stale documentation still marked it as experimental, which has
|
||||||
|
been corrected.
|
||||||
|
(merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).
|
||||||
|
|
||||||
|
* Fix a mismerge that happened in 2.22 timeframe.
|
||||||
|
(merge acb7da05ac en/checkout-mismerge-fix later to maint).
|
||||||
|
|
||||||
|
* "git archive" recorded incorrect length in extended pax header in
|
||||||
|
some corner cases, which has been corrected.
|
||||||
|
(merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).
|
||||||
|
|
||||||
|
* On-demand object fetching in lazy clone incorrectly tried to fetch
|
||||||
|
commits from submodule projects, while still working in the
|
||||||
|
superproject, which has been corrected.
|
||||||
|
(merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).
|
||||||
|
|
||||||
|
* Prepare get_short_oid() codepath to be thread-safe.
|
||||||
|
(merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).
|
||||||
|
|
||||||
|
* "for-each-ref" and friends that show refs did not protect themselves
|
||||||
|
against ancient tags that did not record tagger names when asked to
|
||||||
|
show "%(taggername)", which have been corrected.
|
||||||
|
(merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).
|
||||||
|
|
||||||
|
* The "git am" based backend of "git rebase" ignored the result of
|
||||||
|
updating ".gitattributes" done in one step when replaying
|
||||||
|
subsequent steps.
|
||||||
|
(merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).
|
||||||
|
|
||||||
|
* Tell cURL library to use the same malloc() implementation, with the
|
||||||
|
xmalloc() wrapper, as the rest of the system, for consistency.
|
||||||
|
(merge 93b980e58f cb/curl-use-xmalloc later to maint).
|
||||||
|
|
||||||
|
* Build fix to adjust .gitignore to unignore a path that we started to track.
|
||||||
|
(merge aac6ff7b5b js/visual-studio later to maint).
|
||||||
|
|
||||||
|
* A few implementation fixes in the notes API.
|
||||||
|
(merge 60fe477a0b mh/notes-duplicate-entries later to maint).
|
||||||
|
|
||||||
|
* Fix an earlier regression to "git push --all" which should have
|
||||||
|
been forbidden when the target remote repository is set to be a
|
||||||
|
mirror.
|
||||||
|
(merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).
|
||||||
|
|
||||||
|
* Fix an earlier regression in the test suite, which mistakenly
|
||||||
|
stopped running HTTPD tests.
|
||||||
|
(merge 3960290675 sg/git-test-boolean later to maint).
|
||||||
|
|
||||||
|
* "git rebase --autostash <upstream> <branch>", when <branch> is
|
||||||
|
different from the current branch, incorrectly moved the tip of the
|
||||||
|
current branch, which has been corrected.
|
||||||
|
(merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).
|
||||||
|
|
||||||
|
* Update support for Asciidoctor documentation toolchain.
|
||||||
|
(merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).
|
||||||
|
|
||||||
|
* Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
|
||||||
|
no longer works with the older one.
|
||||||
|
(merge f6461b82b9 bc/doc-use-docbook-5 later to maint).
|
||||||
|
|
||||||
|
* The markup used in user-manual has been updated to work better with
|
||||||
|
asciidoctor.
|
||||||
|
(merge c4d2f6143a ma/user-manual-markup-update later to maint).
|
||||||
|
|
||||||
|
* Make sure the grep machinery does not abort when seeing a payload
|
||||||
|
that is not UTF-8 even when JIT is not in use with PCRE1.
|
||||||
|
(merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).
|
||||||
|
|
||||||
|
* The name of the blob object that stores the filter specification
|
||||||
|
for sparse cloning/fetching was interpreted in a wrong place in the
|
||||||
|
code, causing Git to abort.
|
||||||
|
|
||||||
|
* "git log --decorate-refs-exclude=<pattern>" was incorrectly
|
||||||
|
overruled when the "--simplify-by-decoration" option is used, which
|
||||||
|
has been corrected.
|
||||||
|
(merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).
|
||||||
|
|
||||||
|
* The "upload-pack" (the counterpart of "git fetch") needs to disable
|
||||||
|
commit-graph when responding to a shallow clone/fetch request, but
|
||||||
|
the way this was done made Git panic, which has been corrected.
|
||||||
|
|
||||||
|
* The object traversal machinery has been optimized not to load tree
|
||||||
|
objects when we are only interested in commit history.
|
||||||
|
(merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).
|
||||||
|
|
||||||
|
* The object name parser for "Nth parent" syntax has been made more
|
||||||
|
robust against integer overflows.
|
||||||
|
(merge 59fa5f5a25 rs/nth-parent-parse later to maint).
|
||||||
|
|
||||||
|
* The code used in following tags in "git fetch" has been optimized.
|
||||||
|
(merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).
|
||||||
|
|
||||||
|
* Regression fix for progress output.
|
||||||
|
(merge 2bb74b53a4 sg/progress-fix later to maint).
|
||||||
|
|
||||||
|
* A bug in merge-recursive code that triggers when a branch with a
|
||||||
|
symbolic link is merged with a branch that replaces it with a
|
||||||
|
directory has been fixed.
|
||||||
|
(merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).
|
||||||
|
|
||||||
|
* The rename detection logic sorts a list of rename source candidates
|
||||||
|
by similarity to pick the best candidate, which means that a tie
|
||||||
|
between sources with the same similarity is broken by the original
|
||||||
|
location in the original candidate list (which is sorted by path).
|
||||||
|
Force the sorting by similarity done with a stable sort, which is
|
||||||
|
not promised by system supplied qsort(3), to ensure consistent
|
||||||
|
results across platforms.
|
||||||
|
(merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).
|
||||||
|
|
||||||
|
* The code to skip "UTF" and "UTF-" prefix, when computing an advice
|
||||||
|
message, did not work correctly when the prefix was "UTF", which
|
||||||
|
has been fixed.
|
||||||
|
(merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).
|
||||||
|
|
||||||
|
* The author names taken from SVN repositories may have extra leading
|
||||||
|
or trailing whitespaces, which are now munged away.
|
||||||
|
(merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).
|
||||||
|
|
||||||
|
* "git rebase -i" showed a wrong HEAD while "reword" open the editor.
|
||||||
|
(merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).
|
||||||
|
|
||||||
|
* A few simplification and bugfixes to PCRE interface.
|
||||||
|
(merge c581e4a749 ab/pcre-jit-fixes later to maint).
|
||||||
|
|
||||||
|
* PCRE fixes.
|
||||||
|
(merge ff61681b46 cb/pcre1-cleanup later to maint).
|
||||||
|
|
||||||
|
* "git range-diff" segfaulted when diff.noprefix configuration was
|
||||||
|
used, as it blindly expected the patch it internally generates to
|
||||||
|
have the standard a/ and b/ prefixes. The command now forces the
|
||||||
|
internal patch to be built without any prefix, not to be affected
|
||||||
|
by any end-user configuration.
|
||||||
|
(merge 937b76ed49 js/range-diff-noprefix later to maint).
|
||||||
|
|
||||||
|
* "git stash apply" in a subdirectory of a secondary worktree failed
|
||||||
|
to access the worktree correctly, which has been corrected.
|
||||||
|
(merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).
|
||||||
|
|
||||||
|
* The merge-recursive machinery is one of the most complex parts of
|
||||||
|
the system that accumulated cruft over time. This large series
|
||||||
|
cleans up the implementation quite a bit.
|
||||||
|
(merge b657047719 en/merge-recursive-cleanup later to maint).
|
||||||
|
|
||||||
|
* Pretty-printed command line formatter (used in e.g. reporting the
|
||||||
|
command being run by the tracing API) had a bug that lost an
|
||||||
|
argument that is an empty string, which has been corrected.
|
||||||
|
(merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).
|
||||||
|
|
||||||
|
* "git range-diff" failed to handle mode-only change, which has been
|
||||||
|
corrected.
|
||||||
|
(merge 2b6a9b13ca tg/range-diff-output-update later to maint).
|
||||||
|
|
||||||
|
* Dev support update.
|
||||||
|
(merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).
|
||||||
|
|
||||||
|
* "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
|
||||||
|
not "mkdir -p <outdir>", which was corrected.
|
||||||
|
|
||||||
|
* "git stash save" lost local changes to submodules, which has been
|
||||||
|
corrected.
|
||||||
|
(merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).
|
||||||
|
|
||||||
|
* The atomic push over smart HTTP transport did not work, which has
|
||||||
|
been corrected.
|
||||||
|
(merge 6f1194246a bc/smart-http-atomic-push later to maint).
|
||||||
|
|
||||||
|
* Other code cleanup, docfix, build fix, etc.
|
||||||
|
(merge d1387d3895 en/fast-import-merge-doc later to maint).
|
||||||
|
(merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
|
||||||
|
(merge 415b770b88 ds/midx-expire-repack later to maint).
|
||||||
|
(merge 19800bdc3f nd/diff-parseopt later to maint).
|
||||||
|
(merge 58166c2e9d tg/t0021-racefix later to maint).
|
||||||
|
(merge 7027f508c7 dl/compat-cleanup later to maint).
|
||||||
|
(merge e770fbfeff jc/test-cleanup later to maint).
|
||||||
|
(merge 1fd881d404 rs/trace2-dst-warning later to maint).
|
||||||
|
(merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
|
||||||
|
(merge 9784f97321 mh/release-commit-memory-fix later to maint).
|
||||||
|
(merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
|
||||||
|
(merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
|
||||||
|
(merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
|
||||||
|
(merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
|
||||||
|
(merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
|
||||||
|
(merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
|
||||||
|
(merge 47b27c96fa ss/get-time-cleanup later to maint).
|
||||||
|
(merge dd2e50a84e jk/commit-graph-cleanup later to maint).
|
||||||
|
(merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
|
||||||
|
(merge 40e747e89d dl/submodule-set-branch later to maint).
|
||||||
|
(merge 689a146c91 rs/commit-graph-use-list-count later to maint).
|
||||||
|
(merge 0eb7c37a8a js/doc-patch-text later to maint).
|
||||||
|
(merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
|
||||||
|
(merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
|
||||||
|
(merge af78249463 cc/svn-fe-py-shebang later to maint).
|
||||||
|
(merge 7bd97d6dff rs/alias-use-copy-array later to maint).
|
||||||
|
(merge c46ebc2496 sg/travis-help-debug later to maint).
|
||||||
|
(merge 24c681794f ps/my-first-contribution-alphasort later to maint).
|
||||||
|
(merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
|
||||||
|
(merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
|
||||||
|
(merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
|
||||||
|
(merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
|
||||||
|
(merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
|
||||||
|
(merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
|
||||||
|
(merge 53d687bf5f ah/cleanups later to maint).
|
||||||
|
(merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
|
||||||
|
(merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
|
||||||
|
(merge d928a8388a am/t0028-utf16-tests later to maint).
|
||||||
|
(merge b05b40930e dl/t0000-skip-test-test later to maint).
|
||||||
|
(merge 03d3b1297c js/xdiffi-comment-updates later to maint).
|
||||||
|
(merge 57d8f4b4c7 js/doc-stash-save later to maint).
|
||||||
|
(merge 8c1cfd58e3 ta/t1308-typofix later to maint).
|
||||||
|
(merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
|
||||||
|
(merge 68b69211b2 bb/compat-util-comment-fix later to maint).
|
||||||
|
(merge 5cc6a4be11 rs/http-push-simplify later to maint).
|
||||||
|
(merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
|
||||||
|
(merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
|
||||||
|
(merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
|
||||||
|
(merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
|
||||||
|
(merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
|
||||||
|
(merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
|
||||||
|
(merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).
|
8
third_party/git/Documentation/RelNotes/2.24.1.txt
vendored
Normal file
8
third_party/git/Documentation/RelNotes/2.24.1.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Git v2.24.1 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges up the fixes that appear in v2.14.6, v2.15.4,
|
||||||
|
v2.17.3, v2.20.2 and in v2.21.1, addressing the security issues
|
||||||
|
CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351,
|
||||||
|
CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and
|
||||||
|
CVE-2019-19604; see the release notes for those versions for details.
|
5
third_party/git/Documentation/RelNotes/2.24.2.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.24.2.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.24.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.24.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.24.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.24.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
370
third_party/git/Documentation/RelNotes/2.25.0.txt
vendored
Normal file
370
third_party/git/Documentation/RelNotes/2.25.0.txt
vendored
Normal file
|
@ -0,0 +1,370 @@
|
||||||
|
Git 2.25 Release Notes
|
||||||
|
======================
|
||||||
|
|
||||||
|
Updates since v2.24
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Backward compatibility notes
|
||||||
|
|
||||||
|
|
||||||
|
UI, Workflows & Features
|
||||||
|
|
||||||
|
* A tutorial on object enumeration has been added.
|
||||||
|
|
||||||
|
* The branch description ("git branch --edit-description") has been
|
||||||
|
used to fill the body of the cover letters by the format-patch
|
||||||
|
command; this has been enhanced so that the subject can also be
|
||||||
|
filled.
|
||||||
|
|
||||||
|
* "git rebase --preserve-merges" has been marked as deprecated; this
|
||||||
|
release stops advertising it in the "git rebase -h" output.
|
||||||
|
|
||||||
|
* The code to generate multi-pack index learned to show (or not to
|
||||||
|
show) progress indicators.
|
||||||
|
|
||||||
|
* "git apply --3way" learned to honor merge.conflictStyle
|
||||||
|
configuration variable, like merges would.
|
||||||
|
|
||||||
|
* The custom format for "git log --format=<format>" learned the l/L
|
||||||
|
placeholder that is similar to e/E that fills in the e-mail
|
||||||
|
address, but only the local part on the left side of '@'.
|
||||||
|
|
||||||
|
* Documentation pages for "git shortlog" now list commit limiting
|
||||||
|
options explicitly.
|
||||||
|
|
||||||
|
* The patterns to detect function boundary for Elixir language has
|
||||||
|
been added.
|
||||||
|
|
||||||
|
* The completion script (in contrib/) learned that the "--onto"
|
||||||
|
option of "git rebase" can take its argument as the value of the
|
||||||
|
option.
|
||||||
|
|
||||||
|
* The userdiff machinery has been taught that "async def" is another
|
||||||
|
way to begin a "function" in Python.
|
||||||
|
|
||||||
|
* "git range-diff" learned to take the "--notes=<ref>" and the
|
||||||
|
"--no-notes" options to control the commit notes included in the
|
||||||
|
log message that gets compared.
|
||||||
|
|
||||||
|
* "git rev-parse --show-toplevel" run outside of any working tree did
|
||||||
|
not error out, which has been corrected.
|
||||||
|
|
||||||
|
* A few commands learned to take the pathspec from the standard input
|
||||||
|
or a named file, instead of taking it as the command line
|
||||||
|
arguments, with the "--pathspec-from-file" option.
|
||||||
|
|
||||||
|
* "git submodule" learned a subcommand "set-url".
|
||||||
|
|
||||||
|
* "git log" family learned "--pretty=reference" that gives the name
|
||||||
|
of a commit in the format that is often used to refer to it in log
|
||||||
|
messages.
|
||||||
|
|
||||||
|
* The interaction between "git clone --recurse-submodules" and
|
||||||
|
alternate object store was ill-designed. The documentation and
|
||||||
|
code have been taught to make more clear recommendations when the
|
||||||
|
users see failures.
|
||||||
|
|
||||||
|
* Management of sparsely checked-out working tree has gained a
|
||||||
|
dedicated "sparse-checkout" command.
|
||||||
|
|
||||||
|
* Miscellaneous small UX improvements on "git-p4".
|
||||||
|
|
||||||
|
* "git sparse-checkout list" subcommand learned to give its output in
|
||||||
|
a more concise form when the "cone" mode is in effect.
|
||||||
|
|
||||||
|
|
||||||
|
Performance, Internal Implementation, Development Support etc.
|
||||||
|
|
||||||
|
* Debugging support for lazy cloning has been a bit improved.
|
||||||
|
|
||||||
|
* Move the definition of a set of bitmask constants from 0ctal
|
||||||
|
literal to (1U<<count) notation.
|
||||||
|
|
||||||
|
* Test updates to prepare for SHA-2 transition continues.
|
||||||
|
|
||||||
|
* Crufty code and logic accumulated over time around the object
|
||||||
|
parsing and low-level object access used in "git fsck" have been
|
||||||
|
cleaned up.
|
||||||
|
|
||||||
|
* The implementation of "git log --graph" got refactored and then its
|
||||||
|
output got simplified.
|
||||||
|
|
||||||
|
* Follow recent push to move API docs from Documentation/ to header
|
||||||
|
files and update config.h
|
||||||
|
|
||||||
|
* "git bundle" has been taught to use the parse options API. "git
|
||||||
|
bundle verify" learned "--quiet" and "git bundle create" learned
|
||||||
|
options to control the progress output.
|
||||||
|
|
||||||
|
* Handling of commit objects that use non UTF-8 encoding during
|
||||||
|
"rebase -i" has been improved.
|
||||||
|
|
||||||
|
* The beginning of rewriting "git add -i" in C.
|
||||||
|
|
||||||
|
* A label used in the todo list that are generated by "git rebase
|
||||||
|
--rebase-merges" is used as a part of a refname; the logic to come
|
||||||
|
up with the label has been tightened to avoid names that cannot be
|
||||||
|
used as such.
|
||||||
|
|
||||||
|
* The logic to avoid duplicate label names generated by "git rebase
|
||||||
|
--rebase-merges" forgot that the machinery itself uses "onto" as a
|
||||||
|
label name, which must be avoided by auto-generated labels, which
|
||||||
|
has been corrected.
|
||||||
|
|
||||||
|
* We have had compatibility fallback macro definitions for "PRIuMAX",
|
||||||
|
"PRIu32", etc. but did not for "PRIdMAX", while the code used the
|
||||||
|
last one apparently without any hiccup reported recently. The
|
||||||
|
fallback macro definitions for these <inttypes.h> macros that must
|
||||||
|
appear in C99 systems have been removed.
|
||||||
|
|
||||||
|
* Recently we have declared that GIT_TEST_* variables take the
|
||||||
|
usual boolean values (it used to be that some used "non-empty
|
||||||
|
means true" and taking GIT_TEST_VAR=YesPlease as true); make
|
||||||
|
sure we notice and fail when non-bool strings are given to
|
||||||
|
these variables.
|
||||||
|
|
||||||
|
* Users of oneway_merge() (like "reset --hard") learned to take
|
||||||
|
advantage of fsmonitor to avoid unnecessary lstat(2) calls.
|
||||||
|
|
||||||
|
* Performance tweak on "git push" into a repository with many refs
|
||||||
|
that point at objects we have never heard of.
|
||||||
|
|
||||||
|
* PerfTest fix to avoid stale result mixed up with the latest round
|
||||||
|
of test results.
|
||||||
|
|
||||||
|
* Hide lower-level verify_signed-buffer() API as a pure helper to
|
||||||
|
implement the public check_signature() function, in order to
|
||||||
|
encourage new callers to use the correct and more strict
|
||||||
|
validation.
|
||||||
|
|
||||||
|
* Unnecessary reading of state variables back from the disk during
|
||||||
|
sequencer operation has been reduced.
|
||||||
|
|
||||||
|
* The code has been made to avoid gmtime() and localtime() and prefer
|
||||||
|
their reentrant counterparts.
|
||||||
|
|
||||||
|
* In a repository with many packfiles, the cost of the procedure that
|
||||||
|
avoids registering the same packfile twice was unnecessarily high
|
||||||
|
by using an inefficient search algorithm, which has been corrected.
|
||||||
|
|
||||||
|
* Redo "git name-rev" to avoid recursive calls.
|
||||||
|
|
||||||
|
* FreeBSD CI support via Cirrus-CI has been added.
|
||||||
|
|
||||||
|
|
||||||
|
Fixes since v2.24
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* "rebase -i" ceased to run post-commit hook by mistake in an earlier
|
||||||
|
update, which has been corrected.
|
||||||
|
|
||||||
|
* "git notes copy $original" ought to copy the notes attached to the
|
||||||
|
original object to HEAD, but a mistaken tightening to command line
|
||||||
|
parameter validation made earlier disabled that feature by mistake.
|
||||||
|
|
||||||
|
* When all files from some subdirectory were renamed to the root
|
||||||
|
directory, the directory rename heuristics would fail to detect that
|
||||||
|
as a rename/merge of the subdirectory to the root directory, which has
|
||||||
|
been corrected.
|
||||||
|
|
||||||
|
* Code clean-up and a bugfix in the logic used to tell worktree local
|
||||||
|
and repository global refs apart.
|
||||||
|
(merge f45f88b2e4 sg/dir-trie-fixes later to maint).
|
||||||
|
|
||||||
|
* "git stash save" in a working tree that is sparsely checked out
|
||||||
|
mistakenly removed paths that are outside the area of interest.
|
||||||
|
(merge 4a58c3d7f7 js/update-index-ignore-removal-for-skip-worktree later to maint).
|
||||||
|
|
||||||
|
* "git rev-parse --git-path HEAD.lock" did not give the right path
|
||||||
|
when run in a secondary worktree.
|
||||||
|
(merge 76a53d640f js/git-path-head-dot-lock-fix later to maint).
|
||||||
|
|
||||||
|
* "git merge --no-commit" needs "--no-ff" if you do not want to move
|
||||||
|
HEAD, which has been corrected in the manual page for "git bisect".
|
||||||
|
(merge 8dd327b246 ma/bisect-doc-sample-update later to maint).
|
||||||
|
|
||||||
|
* "git worktree add" internally calls "reset --hard" that should not
|
||||||
|
descend into submodules, even when submodule.recurse configuration
|
||||||
|
is set, but it was affected. This has been corrected.
|
||||||
|
(merge 4782cf2ab6 pb/no-recursive-reset-hard-in-worktree-add later to maint).
|
||||||
|
|
||||||
|
* Messages from die() etc. can be mixed up from multiple processes
|
||||||
|
without even line buffering on Windows, which has been worked
|
||||||
|
around.
|
||||||
|
(merge 116d1fa6c6 js/vreportf-wo-buffering later to maint).
|
||||||
|
|
||||||
|
* HTTP transport had possible allocator/deallocator mismatch, which
|
||||||
|
has been corrected.
|
||||||
|
|
||||||
|
* The watchman integration for fsmonitor was racy, which has been
|
||||||
|
corrected to be more conservative.
|
||||||
|
(merge dd0b61f577 kw/fsmonitor-watchman-fix later to maint).
|
||||||
|
|
||||||
|
* Fetching from multiple remotes into the same repository in parallel
|
||||||
|
had a bad interaction with the recent change to (optionally) update
|
||||||
|
the commit-graph after a fetch job finishes, as these parallel
|
||||||
|
fetches compete with each other. Which has been corrected.
|
||||||
|
|
||||||
|
* Recent update to "git stash pop" made the command empty the index
|
||||||
|
when run with the "--quiet" option, which has been corrected.
|
||||||
|
|
||||||
|
* "git fetch" codepath had a big "do not lazily fetch missing objects
|
||||||
|
when I ask if something exists" switch. This has been corrected by
|
||||||
|
marking the "does this thing exist?" calls with "if not please do not
|
||||||
|
lazily fetch it" flag.
|
||||||
|
|
||||||
|
* Test update to avoid wasted cycles.
|
||||||
|
(merge e0316695ec sg/skip-skipped-prereq later to maint).
|
||||||
|
|
||||||
|
* Error handling after "git push" finishes sending the packdata and
|
||||||
|
waits for the response to the remote side has been improved.
|
||||||
|
(merge ad7a403268 jk/send-pack-remote-failure later to maint).
|
||||||
|
|
||||||
|
* Some codepaths in "gitweb" that forgot to escape URLs generated
|
||||||
|
based on end-user input have been corrected.
|
||||||
|
(merge a376e37b2c jk/gitweb-anti-xss later to maint).
|
||||||
|
|
||||||
|
* CI jobs for macOS has been made less chatty when updating perforce
|
||||||
|
package used during testing.
|
||||||
|
(merge 0dbc4a0edf jc/azure-ci-osx-fix-fix later to maint).
|
||||||
|
|
||||||
|
* "git unpack-objects" used to show progress based only on the number
|
||||||
|
of received and unpacked objects, which stalled when it has to
|
||||||
|
handle an unusually large object. It now shows the throughput as
|
||||||
|
well.
|
||||||
|
(merge bae60ba7e9 sg/unpack-progress-throughput later to maint).
|
||||||
|
|
||||||
|
* The sequencer machinery compared the HEAD and the state it is
|
||||||
|
attempting to commit to decide if the result would be a no-op
|
||||||
|
commit, even when amending a commit, which was incorrect, and
|
||||||
|
has been corrected.
|
||||||
|
|
||||||
|
* The code to parse GPG output used to assume incorrectly that the
|
||||||
|
finterprint for the primary key would always be present for a valid
|
||||||
|
signature, which has been corrected.
|
||||||
|
(merge 67a6ea6300 hi/gpg-optional-pkfp-fix later to maint).
|
||||||
|
|
||||||
|
* "git submodule status" and "git submodule status --cached" show
|
||||||
|
different things, but the documentation did not cover them
|
||||||
|
correctly, which has been corrected.
|
||||||
|
(merge 8d483c8408 mg/doc-submodule-status-cached later to maint).
|
||||||
|
|
||||||
|
* "git reset --patch $object" without any pathspec should allow a
|
||||||
|
tree object to be given, but incorrectly required a committish,
|
||||||
|
which has been corrected.
|
||||||
|
|
||||||
|
* "git submodule status" that is run from a subdirectory of the
|
||||||
|
superproject did not work well, which has been corrected.
|
||||||
|
(merge 1f3aea22c7 mg/submodule-status-from-a-subdirectory later to maint).
|
||||||
|
|
||||||
|
* The revision walking machinery uses resources like per-object flag
|
||||||
|
bits that need to be reset before a new iteration of walking
|
||||||
|
begins, but the resources related to topological walk were not
|
||||||
|
cleared correctly, which has been corrected.
|
||||||
|
(merge 0aa0c2b2ec mh/clear-topo-walk-upon-reset later to maint).
|
||||||
|
|
||||||
|
* TravisCI update.
|
||||||
|
(merge 176441bfb5 sg/osx-force-gcc-9 later to maint).
|
||||||
|
|
||||||
|
* While running "revert" or "cherry-pick --edit" for multiple
|
||||||
|
commits, a recent regression incorrectly detected "nothing to
|
||||||
|
commit, working tree clean", instead of replaying the commits,
|
||||||
|
which has been corrected.
|
||||||
|
(merge befd4f6a81 sg/assume-no-todo-update-in-cherry-pick later to maint).
|
||||||
|
|
||||||
|
* Work around a issue where a FD that is left open when spawning a
|
||||||
|
child process and is kept open in the child can interfere with the
|
||||||
|
operation in the parent process on Windows.
|
||||||
|
|
||||||
|
* One kind of progress messages were always given during commit-graph
|
||||||
|
generation, instead of following the "if it takes more than two
|
||||||
|
seconds, show progress" pattern, which has been corrected.
|
||||||
|
|
||||||
|
* "git rebase" did not work well when format.useAutoBase
|
||||||
|
configuration variable is set, which has been corrected.
|
||||||
|
|
||||||
|
* The "diff" machinery learned not to lose added/removed blank lines
|
||||||
|
in the context when --ignore-blank-lines and --function-context are
|
||||||
|
used at the same time.
|
||||||
|
(merge 0bb313a552 rs/xdiff-ignore-ws-w-func-context later to maint).
|
||||||
|
|
||||||
|
* The test on "fast-import" used to get stuck when "fast-import" died
|
||||||
|
in the middle.
|
||||||
|
(merge 0d9b0d7885 sg/t9300-robustify later to maint).
|
||||||
|
|
||||||
|
* "git format-patch" can take a set of configured format.notes values
|
||||||
|
to specify which notes refs to use in the log message part of the
|
||||||
|
output. The behaviour of this was not consistent with multiple
|
||||||
|
--notes command line options, which has been corrected.
|
||||||
|
(merge e0f9095aaa dl/format-patch-notes-config-fixup later to maint).
|
||||||
|
|
||||||
|
* "git p4" used to ignore lfs.storage configuration variable, which
|
||||||
|
has been corrected.
|
||||||
|
(merge ea94b16fb8 rb/p4-lfs later to maint).
|
||||||
|
|
||||||
|
* Assorted fixes to the directory traversal API.
|
||||||
|
(merge 6836d2fe06 en/fill-directory-fixes later to maint).
|
||||||
|
|
||||||
|
* Forbid pathnames that the platform's filesystem cannot represent on
|
||||||
|
MinGW.
|
||||||
|
(merge 4dc42c6c18 js/mingw-reserved-filenames later to maint).
|
||||||
|
|
||||||
|
* "git rebase --signoff" stopped working when the command was written
|
||||||
|
in C, which has been corrected.
|
||||||
|
(merge 4fe7e43c53 en/rebase-signoff-fix later to maint).
|
||||||
|
|
||||||
|
* An earlier update to Git for Windows declared that a tree object is
|
||||||
|
invalid if it has a path component with backslash in it, which was
|
||||||
|
overly strict, which has been corrected. The only protection the
|
||||||
|
Windows users need is to prevent such path (or any path that their
|
||||||
|
filesystem cannot check out) from entering the index.
|
||||||
|
(merge 224c7d70fa js/mingw-loosen-overstrict-tree-entry-checks later to maint).
|
||||||
|
|
||||||
|
* The code to write split commit-graph file(s) upon fetching computed
|
||||||
|
bogus value for the parameter used in splitting the resulting
|
||||||
|
files, which has been corrected.
|
||||||
|
(merge 63020f175f ds/commit-graph-set-size-mult later to maint).
|
||||||
|
|
||||||
|
* Other code cleanup, docfix, build fix, etc.
|
||||||
|
(merge 80736d7c5e jc/am-show-current-patch-docfix later to maint).
|
||||||
|
(merge 8b656572ca sg/commit-graph-usage-fix later to maint).
|
||||||
|
(merge 6c02042139 mr/clone-dir-exists-to-path-exists later to maint).
|
||||||
|
(merge 44ae131e38 sg/blame-indent-heuristics-is-now-the-default later to maint).
|
||||||
|
(merge 0115e5d929 dl/doc-diff-no-index-implies-exit-code later to maint).
|
||||||
|
(merge 270de6acbe en/t6024-style later to maint).
|
||||||
|
(merge 14c4776d75 ns/test-desc-typofix later to maint).
|
||||||
|
(merge 68d40f30c4 dj/typofix-merge-strat later to maint).
|
||||||
|
(merge f66e0401ab jk/optim-in-pack-idx-conversion later to maint).
|
||||||
|
(merge 169bed7421 rs/parse-options-dup-null-fix later to maint).
|
||||||
|
(merge 51bd6be32d rs/use-copy-array-in-mingw-shell-command-preparation later to maint).
|
||||||
|
(merge b018719927 ma/t7004 later to maint).
|
||||||
|
(merge 932757b0cc ar/install-doc-update-cmds-needing-the-shell later to maint).
|
||||||
|
(merge 46efd28be1 ep/guard-kset-tar-headers later to maint).
|
||||||
|
(merge 9e5afdf997 ec/fetch-mark-common-refs-trace2 later to maint).
|
||||||
|
(merge f0e58b3fe8 pb/submodule-update-fetches later to maint).
|
||||||
|
(merge 2a02262078 dl/t5520-cleanup later to maint).
|
||||||
|
(merge a4fb016ba1 js/pkt-line-h-typofix later to maint).
|
||||||
|
(merge 54a7a64613 rs/simplify-prepare-cmd later to maint).
|
||||||
|
(merge 3eae30e464 jk/lore-is-the-archive later to maint).
|
||||||
|
(merge 14b7664df8 dl/lore-is-the-archive later to maint).
|
||||||
|
(merge 0e40a73a4c po/bundle-doc-clonable later to maint).
|
||||||
|
(merge e714b898c6 as/t7812-missing-redirects-fix later to maint).
|
||||||
|
(merge 528d9e6d01 jk/perf-wo-git-dot-pm later to maint).
|
||||||
|
(merge fc42f20e24 sg/test-squelch-noise-in-commit-bulk later to maint).
|
||||||
|
(merge c64368e3a2 bc/t9001-zsh-in-posix-emulation-mode later to maint).
|
||||||
|
(merge 11de8dd7ef dr/branch-usage-casefix later to maint).
|
||||||
|
(merge e05e8cf074 rs/archive-zip-code-cleanup later to maint).
|
||||||
|
(merge 147ee35558 rs/commit-export-env-simplify later to maint).
|
||||||
|
(merge 4507ecc771 rs/patch-id-use-oid-to-hex later to maint).
|
||||||
|
(merge 51a0a4ed95 mr/bisect-use-after-free later to maint).
|
||||||
|
(merge cc2bd5c45d pb/submodule-doc-xref later to maint).
|
||||||
|
(merge df5be01669 ja/doc-markup-cleanup later to maint).
|
||||||
|
(merge 7c5cea7242 mr/bisect-save-pointer-to-const-string later to maint).
|
||||||
|
(merge 20a67e8ce9 js/use-test-tool-on-path later to maint).
|
||||||
|
(merge 4e61b2214d ew/packfile-syscall-optim later to maint).
|
||||||
|
(merge ace0f86c7f pb/clarify-line-log-doc later to maint).
|
||||||
|
(merge 763a59e71c en/merge-recursive-oid-eq-simplify later to maint).
|
||||||
|
(merge 4e2c4c0d4f do/gitweb-typofix-in-comments later to maint).
|
||||||
|
(merge 421c0ffb02 jb/doc-multi-pack-idx-fix later to maint).
|
||||||
|
(merge f8740c586b pm/am-in-body-header-doc-update later to maint).
|
||||||
|
(merge 5814d44d9b tm/doc-submodule-absorb-fix later to maint).
|
55
third_party/git/Documentation/RelNotes/2.25.1.txt
vendored
Normal file
55
third_party/git/Documentation/RelNotes/2.25.1.txt
vendored
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
Git 2.25.1 Release Notes
|
||||||
|
========================
|
||||||
|
|
||||||
|
Fixes since v2.25
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* "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.
|
||||||
|
|
||||||
|
* has_object_file() said "no" given an object registered to the
|
||||||
|
system via pretend_object_file(), making it inconsistent with
|
||||||
|
read_object_file(), causing lazy fetch to attempt fetching an
|
||||||
|
empty tree from promisor remotes.
|
||||||
|
|
||||||
|
* The code that tries to skip over the entries for the paths in a
|
||||||
|
single directory using the cache-tree was not careful enough
|
||||||
|
against corrupt index file.
|
||||||
|
|
||||||
|
* Complete an update to tutorial that encourages "git switch" over
|
||||||
|
"git checkout" that was done only half-way.
|
||||||
|
|
||||||
|
* Reduce unnecessary round-trip when running "ls-remote" over the
|
||||||
|
stateless RPC mechanism.
|
||||||
|
|
||||||
|
* "git restore --staged" did not correctly update the cache-tree
|
||||||
|
structure, resulting in bogus trees to be written afterwards, which
|
||||||
|
has been corrected.
|
||||||
|
|
||||||
|
* The code recently added to move to the entry beyond the ones in the
|
||||||
|
same directory in the index in the sparse-cone mode did not count
|
||||||
|
the number of entries to skip over incorrectly, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Work around test breakages caused by custom regex engine used in
|
||||||
|
libasan, when address sanitizer is used with more recent versions
|
||||||
|
of gcc and clang.
|
||||||
|
|
||||||
|
* "git fetch --refmap=" option has got a better documentation.
|
||||||
|
|
||||||
|
* Corner case bugs in "git clean" that stems from a (necessarily for
|
||||||
|
performance reasons) awkward calling convention in the directory
|
||||||
|
enumeration API has been corrected.
|
||||||
|
|
||||||
|
* "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.
|
||||||
|
|
||||||
|
* Technical details of the bundle format has been documented.
|
||||||
|
|
||||||
|
* Unhelpful warning messages during documentation build have been
|
||||||
|
squelched.
|
||||||
|
|
||||||
|
Also contains various documentation updates, code clean-ups and minor fixups.
|
60
third_party/git/Documentation/RelNotes/2.25.2.txt
vendored
Normal file
60
third_party/git/Documentation/RelNotes/2.25.2.txt
vendored
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
Git 2.25.2 Release Notes
|
||||||
|
========================
|
||||||
|
|
||||||
|
Fixes since v2.25.1
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* Minor bugfixes to "git add -i" that has recently been rewritten in C.
|
||||||
|
|
||||||
|
* An earlier update to show the location of working tree in the error
|
||||||
|
message did not consider the possibility that a git command may be
|
||||||
|
run in a bare repository, which has been corrected.
|
||||||
|
|
||||||
|
* The "--recurse-submodules" option of various subcommands did not
|
||||||
|
work well when run in an alternate worktree, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Running "git rm" on a submodule failed unnecessarily when
|
||||||
|
.gitmodules is only cache-dirty, which has been corrected.
|
||||||
|
|
||||||
|
* "git rebase -i" identifies existing commits in its todo file with
|
||||||
|
their abbreviated object name, which could become ambigous as it
|
||||||
|
goes to create new commits, and has a mechanism to avoid ambiguity
|
||||||
|
in the main part of its execution. A few other cases however were
|
||||||
|
not covered by the protection against ambiguity, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* The code to automatically shrink the fan-out in the notes tree had
|
||||||
|
an off-by-one bug, which has been killed.
|
||||||
|
|
||||||
|
* "git check-ignore" did not work when the given path is explicitly
|
||||||
|
marked as not ignored with a negative entry in the .gitignore file.
|
||||||
|
|
||||||
|
* The merge-recursive machinery failed to refresh the cache entry for
|
||||||
|
a merge result in a couple of places, resulting in an unnecessary
|
||||||
|
merge failure, which has been fixed.
|
||||||
|
|
||||||
|
* Fix for a bug revealed by a recent change to make the protocol v2
|
||||||
|
the default.
|
||||||
|
|
||||||
|
* "git merge signed-tag" while lacking the public key started to say
|
||||||
|
"No signature", which was utterly wrong. This regression has been
|
||||||
|
reverted.
|
||||||
|
|
||||||
|
* MinGW's poll() emulation has been improved.
|
||||||
|
|
||||||
|
* "git show" and others gave an object name in raw format in its
|
||||||
|
error output, which has been corrected to give it in hex.
|
||||||
|
|
||||||
|
* Both "git ls-remote -h" and "git grep -h" give short usage help,
|
||||||
|
like any other Git subcommand, but it is not unreasonable to expect
|
||||||
|
that the former would behave the same as "git ls-remote --head"
|
||||||
|
(there is no other sensible behaviour for the latter). The
|
||||||
|
documentation has been updated in an attempt to clarify this.
|
||||||
|
|
||||||
|
Also contains various documentation updates, code clean-ups and minor fixups.
|
5
third_party/git/Documentation/RelNotes/2.25.3.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.25.3.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.25.3 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.25.4.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.25.4.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.25.4 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
341
third_party/git/Documentation/RelNotes/2.26.0.txt
vendored
Normal file
341
third_party/git/Documentation/RelNotes/2.26.0.txt
vendored
Normal file
|
@ -0,0 +1,341 @@
|
||||||
|
Git 2.26 Release Notes
|
||||||
|
======================
|
||||||
|
|
||||||
|
Updates since v2.25
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Backward compatibility notes
|
||||||
|
|
||||||
|
* "git rebase" uses a different backend that is based on the 'merge'
|
||||||
|
machinery by default. There are a few known differences in the
|
||||||
|
behaviour from the traditional machinery based on patch+apply.
|
||||||
|
|
||||||
|
If your workflow is negatively affected by this change, please
|
||||||
|
report it to git@vger.kernel.org so that we can take a look into
|
||||||
|
it. After doing so, you can set the 'rebase.backend' configuration
|
||||||
|
variable to 'apply', in order to use the old default behaviour in
|
||||||
|
the meantime.
|
||||||
|
|
||||||
|
|
||||||
|
UI, Workflows & Features
|
||||||
|
|
||||||
|
* Sample credential helper for using .netrc has been updated to work
|
||||||
|
out of the box.
|
||||||
|
|
||||||
|
* gpg.minTrustLevel configuration variable has been introduced to
|
||||||
|
tell various signature verification codepaths the required minimum
|
||||||
|
trust level.
|
||||||
|
|
||||||
|
* The command line completion (in contrib/) learned to complete
|
||||||
|
subcommands and arguments to "git worktree".
|
||||||
|
|
||||||
|
* Disambiguation logic to tell revisions and pathspec apart has been
|
||||||
|
tweaked so that backslash-escaped glob special characters do not
|
||||||
|
count in the "wildcards are pathspec" rule.
|
||||||
|
|
||||||
|
* One effect of specifying where the GIT_DIR is (either with the
|
||||||
|
environment variable, or with the "git --git-dir=<where> cmd"
|
||||||
|
option) is to disable the repository discovery. This has been
|
||||||
|
placed a bit more stress in the documentation, as new users often
|
||||||
|
get confused.
|
||||||
|
|
||||||
|
* Two help messages given when "git add" notices the user gave it
|
||||||
|
nothing to add have been updated to use advise() API.
|
||||||
|
|
||||||
|
* A new version of fsmonitor-watchman hook has been introduced, to
|
||||||
|
avoid races.
|
||||||
|
|
||||||
|
* "git config" learned to show in which "scope", in addition to in
|
||||||
|
which file, each config setting comes from.
|
||||||
|
|
||||||
|
* The basic 7 colors learned the brighter counterparts
|
||||||
|
(e.g. "brightred").
|
||||||
|
|
||||||
|
* "git sparse-checkout" learned a new "add" subcommand.
|
||||||
|
|
||||||
|
* A configuration element used for credential subsystem can now use
|
||||||
|
wildcard pattern to specify for which set of URLs the entry
|
||||||
|
applies.
|
||||||
|
|
||||||
|
* "git clone --recurse-submodules --single-branch" now uses the same
|
||||||
|
single-branch option when cloning the submodules.
|
||||||
|
|
||||||
|
* "git rm" and "git stash" learns the new "--pathspec-from-file"
|
||||||
|
option.
|
||||||
|
|
||||||
|
* "git am --show-current-patch" is a way to show the piece of e-mail
|
||||||
|
for the stopped step, which is not suitable to directly feed "git
|
||||||
|
apply" (it is designed to be a good "git am" input). It learned a
|
||||||
|
new option to show only the patch part.
|
||||||
|
|
||||||
|
* Handling of conflicting renames in merge-recursive have further
|
||||||
|
been made consistent with how existing codepaths try to mimic what
|
||||||
|
is done to add/add conflicts.
|
||||||
|
|
||||||
|
|
||||||
|
Performance, Internal Implementation, Development Support etc.
|
||||||
|
|
||||||
|
* Tell .editorconfig that in this project, *.txt files are indented
|
||||||
|
with tabs.
|
||||||
|
|
||||||
|
* The test-lint machinery knew to check "VAR=VAL shell_function"
|
||||||
|
construct, but did not check "VAR= shell_function", which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Replace "git config --bool" calls with "git config --type=bool" in
|
||||||
|
sample templates.
|
||||||
|
|
||||||
|
* The effort to move "git-add--interactive" to C continues.
|
||||||
|
|
||||||
|
* Improve error message generation for "git submodule add".
|
||||||
|
|
||||||
|
* Preparation of test scripts for the day when the object names will
|
||||||
|
use SHA-256 continues.
|
||||||
|
|
||||||
|
* Warn programmers about pretend_object_file() that allows the code
|
||||||
|
to tentatively use in-core objects.
|
||||||
|
|
||||||
|
* The way "git pack-objects" reuses objects stored in existing pack
|
||||||
|
to generate its result has been improved.
|
||||||
|
|
||||||
|
* The transport protocol version 2 becomes the default one.
|
||||||
|
|
||||||
|
* Traditionally, we avoided threaded grep while searching in objects
|
||||||
|
(as opposed to files in the working tree) as accesses to the object
|
||||||
|
layer is not thread-safe. This limitation is getting lifted.
|
||||||
|
|
||||||
|
* "git rebase -i" (and friends) used to unnecessarily check out the
|
||||||
|
tip of the branch to be rebased, which has been corrected.
|
||||||
|
|
||||||
|
* A low-level API function get_oid(), that accepts various ways to
|
||||||
|
name an object, used to issue end-user facing error messages
|
||||||
|
without l10n, which has been updated to be translatable.
|
||||||
|
|
||||||
|
* Unneeded connectivity check is now disabled in a partial clone when
|
||||||
|
fetching into it.
|
||||||
|
|
||||||
|
* Some rough edges in the sparse-checkout feature, especially around
|
||||||
|
the cone mode, have been cleaned up.
|
||||||
|
|
||||||
|
* The diff-* plumbing family of subcommands now pay attention to the
|
||||||
|
diff.wsErrorHighlight configuration, which has been ignored before;
|
||||||
|
this allows "git add -p" to also show the whitespace problems to
|
||||||
|
the end user.
|
||||||
|
|
||||||
|
* Some codepaths were given a repository instance as a parameter to
|
||||||
|
work in the repository, but passed the_repository instance to its
|
||||||
|
callees, which has been cleaned up (somewhat).
|
||||||
|
|
||||||
|
* Memory footprint and performance of "git name-rev" has been
|
||||||
|
improved.
|
||||||
|
|
||||||
|
* The object reachability bitmap machinery and the partial cloning
|
||||||
|
machinery were not prepared to work well together, because some
|
||||||
|
object-filtering criteria that partial clones use inherently rely
|
||||||
|
on object traversal, but the bitmap machinery is an optimization
|
||||||
|
to bypass that object traversal. There however are some cases
|
||||||
|
where they can work together, and they were taught about them.
|
||||||
|
|
||||||
|
* "git rebase" has learned to use the merge backend (i.e. the
|
||||||
|
machinery that drives "rebase -i") by default, while allowing
|
||||||
|
"--apply" option to use the "apply" backend (e.g. the moral
|
||||||
|
equivalent of "format-patch piped to am"). The rebase.backend
|
||||||
|
configuration variable can be set to customize.
|
||||||
|
|
||||||
|
* Underlying machinery of "git bisect--helper" is being refactored
|
||||||
|
into pieces that are more easily reused.
|
||||||
|
|
||||||
|
|
||||||
|
Fixes since v2.25
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* "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.
|
||||||
|
|
||||||
|
* has_object_file() said "no" given an object registered to the
|
||||||
|
system via pretend_object_file(), making it inconsistent with
|
||||||
|
read_object_file(), causing lazy fetch to attempt fetching an
|
||||||
|
empty tree from promisor remotes.
|
||||||
|
|
||||||
|
* Complete an update to tutorial that encourages "git switch" over
|
||||||
|
"git checkout" that was done only half-way.
|
||||||
|
|
||||||
|
* C pedantry ;-) fix.
|
||||||
|
|
||||||
|
* The code that tries to skip over the entries for the paths in a
|
||||||
|
single directory using the cache-tree was not careful enough
|
||||||
|
against corrupt index file.
|
||||||
|
|
||||||
|
* Reduce unnecessary round-trip when running "ls-remote" over the
|
||||||
|
stateless RPC mechanism.
|
||||||
|
|
||||||
|
* "git restore --staged" did not correctly update the cache-tree
|
||||||
|
structure, resulting in bogus trees to be written afterwards, which
|
||||||
|
has been corrected.
|
||||||
|
|
||||||
|
* The code recently added to move to the entry beyond the ones in the
|
||||||
|
same directory in the index in the sparse-cone mode did not count
|
||||||
|
the number of entries to skip over incorrectly, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Rendering by "git log --graph" of ancestry lines leading to a merge
|
||||||
|
commit were made suboptimal to waste vertical space a bit with a
|
||||||
|
recent update, which has been corrected.
|
||||||
|
|
||||||
|
* Work around test breakages caused by custom regex engine used in
|
||||||
|
libasan, when address sanitizer is used with more recent versions
|
||||||
|
of gcc and clang.
|
||||||
|
|
||||||
|
* Minor bugfixes to "git add -i" that has recently been rewritten in C.
|
||||||
|
|
||||||
|
* "git fetch --refmap=" option has got a better documentation.
|
||||||
|
|
||||||
|
* "git checkout X" did not correctly fail when X is not a local
|
||||||
|
branch but could name more than one remote-tracking branches
|
||||||
|
(i.e. to be dwimmed as the starting point to create a corresponding
|
||||||
|
local branch), which has been corrected.
|
||||||
|
(merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).
|
||||||
|
|
||||||
|
* Corner case bugs in "git clean" that stems from a (necessarily for
|
||||||
|
performance reasons) awkward calling convention in the directory
|
||||||
|
enumeration API has been corrected.
|
||||||
|
|
||||||
|
* A fetch that is told to recursively fetch updates in submodules
|
||||||
|
inevitably produces reams of output, and it becomes hard to spot
|
||||||
|
error messages. The command has been taught to enumerate
|
||||||
|
submodules that had errors at the end of the operation.
|
||||||
|
(merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).
|
||||||
|
|
||||||
|
* The "--recurse-submodules" option of various subcommands did not
|
||||||
|
work well when run in an alternate worktree, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Futureproofing a test not to depend on the current implementation
|
||||||
|
detail.
|
||||||
|
|
||||||
|
* Running "git rm" on a submodule failed unnecessarily when
|
||||||
|
.gitmodules is only cache-dirty, which has been corrected.
|
||||||
|
|
||||||
|
* C pedantry ;-) fix.
|
||||||
|
|
||||||
|
* "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.
|
||||||
|
|
||||||
|
* Technical details of the bundle format has been documented.
|
||||||
|
|
||||||
|
* Unhelpful warning messages during documentation build have been squelched.
|
||||||
|
|
||||||
|
* "git rebase -i" identifies existing commits in its todo file with
|
||||||
|
their abbreviated object name, which could become ambiguous as it
|
||||||
|
goes to create new commits, and has a mechanism to avoid ambiguity
|
||||||
|
in the main part of its execution. A few other cases however were
|
||||||
|
not covered by the protection against ambiguity, which has been
|
||||||
|
corrected.
|
||||||
|
|
||||||
|
* Allow the rebase.missingCommitsCheck configuration to kick in when
|
||||||
|
"rebase --edit-todo" and "rebase --continue" restarts the procedure.
|
||||||
|
(merge 5a5445d878 ag/edit-todo-drop-check later to maint).
|
||||||
|
|
||||||
|
* The way "git submodule status" reports an initialized but not yet
|
||||||
|
populated submodule has not been reimplemented correctly when a
|
||||||
|
part of the "git submodule" command was rewritten in C, which has
|
||||||
|
been corrected.
|
||||||
|
(merge f38c92452d pk/status-of-uncloned-submodule later to maint).
|
||||||
|
|
||||||
|
* The code to automatically shrink the fan-out in the notes tree had
|
||||||
|
an off-by-one bug, which has been killed.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
|
||||||
|
* The code to compute the commit-graph has been taught to use a more
|
||||||
|
robust way to tell if two object directories refer to the same
|
||||||
|
thing.
|
||||||
|
(merge a7df60cac8 tb/commit-graph-object-dir later to maint).
|
||||||
|
|
||||||
|
* "git remote rename X Y" needs to adjust configuration variables
|
||||||
|
(e.g. branch.<name>.remote) whose value used to be X to Y.
|
||||||
|
branch.<name>.pushRemote is now also updated.
|
||||||
|
|
||||||
|
* Update to doc-diff.
|
||||||
|
|
||||||
|
* Doc markup fix.
|
||||||
|
|
||||||
|
* "git check-ignore" did not work when the given path is explicitly
|
||||||
|
marked as not ignored with a negative entry in the .gitignore file.
|
||||||
|
|
||||||
|
* The merge-recursive machinery failed to refresh the cache entry for
|
||||||
|
a merge result in a couple of places, resulting in an unnecessary
|
||||||
|
merge failure, which has been fixed.
|
||||||
|
|
||||||
|
* Fix for a bug revealed by a recent change to make the protocol v2
|
||||||
|
the default.
|
||||||
|
|
||||||
|
* In rare cases "git worktree add <path>" could think that <path>
|
||||||
|
was already a registered worktree even when it wasn't and refuse
|
||||||
|
to add the new worktree. This has been corrected.
|
||||||
|
(merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).
|
||||||
|
|
||||||
|
* "git push" should stop from updating a branch that is checked out
|
||||||
|
when receive.denyCurrentBranch configuration is set, but it failed
|
||||||
|
to pay attention to checkouts in secondary worktrees. This has
|
||||||
|
been corrected.
|
||||||
|
(merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).
|
||||||
|
|
||||||
|
* "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
|
||||||
|
checked it out, even when the BRANCH is checked out in a different
|
||||||
|
worktree. This has been corrected.
|
||||||
|
(merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).
|
||||||
|
|
||||||
|
* "git describe" in a repository with multiple root commits sometimes
|
||||||
|
gave up looking for the best tag to describe a given commit with
|
||||||
|
too early, which has been adjusted.
|
||||||
|
|
||||||
|
* "git merge signed-tag" while lacking the public key started to say
|
||||||
|
"No signature", which was utterly wrong. This regression has been
|
||||||
|
reverted.
|
||||||
|
|
||||||
|
* MinGW's poll() emulation has been improved.
|
||||||
|
|
||||||
|
* "git show" and others gave an object name in raw format in its
|
||||||
|
error output, which has been corrected to give it in hex.
|
||||||
|
|
||||||
|
* "git fetch" over HTTP walker protocol did not show any progress
|
||||||
|
output. We inherently do not know how much work remains, but still
|
||||||
|
we can show something not to bore users.
|
||||||
|
(merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).
|
||||||
|
|
||||||
|
* Both "git ls-remote -h" and "git grep -h" give short usage help,
|
||||||
|
like any other Git subcommand, but it is not unreasonable to expect
|
||||||
|
that the former would behave the same as "git ls-remote --head"
|
||||||
|
(there is no other sensible behaviour for the latter). The
|
||||||
|
documentation has been updated in an attempt to clarify this.
|
||||||
|
|
||||||
|
* Other code cleanup, docfix, build fix, etc.
|
||||||
|
(merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
|
||||||
|
(merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
|
||||||
|
(merge c513a958b6 ss/t6025-modernize later to maint).
|
||||||
|
(merge b441717256 dl/test-must-fail-fixes later to maint).
|
||||||
|
(merge d031049da3 mt/sparse-checkout-doc-update later to maint).
|
||||||
|
(merge 145136a95a jc/skip-prefix later to maint).
|
||||||
|
(merge 5290d45134 jk/alloc-cleanups later to maint).
|
||||||
|
(merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
|
||||||
|
(merge 517b60564e rs/strbuf-insertstr later to maint).
|
||||||
|
(merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
|
||||||
|
(merge de26f02db1 js/test-avoid-pipe later to maint).
|
||||||
|
(merge a2dc43414c es/doc-mentoring later to maint).
|
||||||
|
(merge 02bbbe9df9 es/worktree-cleanup later to maint).
|
||||||
|
(merge 2ce6d075fa rs/micro-cleanups later to maint).
|
||||||
|
(merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
|
||||||
|
(merge 3c29e21eb0 ma/test-cleanup later to maint).
|
||||||
|
(merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
|
||||||
|
(merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
|
||||||
|
(merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
|
||||||
|
(merge fd0bc17557 kk/complete-diff-color-moved later to maint).
|
||||||
|
(merge 65bf820d0e en/test-cleanup later to maint).
|
5
third_party/git/Documentation/RelNotes/2.26.1.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.26.1.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.26.1 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.4; see
|
||||||
|
the release notes for that version for details.
|
5
third_party/git/Documentation/RelNotes/2.26.2.txt
vendored
Normal file
5
third_party/git/Documentation/RelNotes/2.26.2.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Git v2.26.2 Release Notes
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This release merges the security fix that appears in v2.17.5; see
|
||||||
|
the release notes for that version for details.
|
|
@ -12,7 +12,7 @@ Fixes since v2.3.2
|
||||||
* Description given by "grep -h" for its --exclude-standard option
|
* Description given by "grep -h" for its --exclude-standard option
|
||||||
was phrased poorly.
|
was phrased poorly.
|
||||||
|
|
||||||
* Documentaton for "git remote add" mentioned "--tags" and
|
* Documentation for "git remote add" mentioned "--tags" and
|
||||||
"--no-tags" and it was not clear that fetch from the remote in
|
"--no-tags" and it was not clear that fetch from the remote in
|
||||||
the future will use the default behaviour when neither is given
|
the future will use the default behaviour when neither is given
|
||||||
to override it.
|
to override it.
|
||||||
|
|
|
@ -4,7 +4,7 @@ Git v2.3.7 Release Notes
|
||||||
Fixes since v2.3.6
|
Fixes since v2.3.6
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
* An earlier update to the parser that disects a URL broke an
|
* An earlier update to the parser that dissects a URL broke an
|
||||||
address, followed by a colon, followed by an empty string (instead
|
address, followed by a colon, followed by an empty string (instead
|
||||||
of the port number), e.g. ssh://example.com:/path/to/repo.
|
of the port number), e.g. ssh://example.com:/path/to/repo.
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ Fixes since v2.4.3
|
||||||
* Some time ago, "git blame" (incorrectly) lost the convert_to_git()
|
* Some time ago, "git blame" (incorrectly) lost the convert_to_git()
|
||||||
call when synthesizing a fake "tip" commit that represents the
|
call when synthesizing a fake "tip" commit that represents the
|
||||||
state in the working tree, which broke folks who record the history
|
state in the working tree, which broke folks who record the history
|
||||||
with LF line ending to make their project portabile across
|
with LF line ending to make their project portable across
|
||||||
platforms while terminating lines in their working tree files with
|
platforms while terminating lines in their working tree files with
|
||||||
CRLF for their platform.
|
CRLF for their platform.
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,8 @@ Performance, Internal Implementation, Development Support etc.
|
||||||
incorrect patch text to "git apply". Add tests to demonstrate
|
incorrect patch text to "git apply". Add tests to demonstrate
|
||||||
this.
|
this.
|
||||||
|
|
||||||
I have a slight suspicion that this may be $gmane/87202 coming back
|
I have a slight suspicion that this may be
|
||||||
|
cf. <7vtzf77wjp.fsf@gitster.siamese.dyndns.org> coming back
|
||||||
and biting us (I seem to have said "let's run with this and see
|
and biting us (I seem to have said "let's run with this and see
|
||||||
what happens" back then).
|
what happens" back then).
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ UI, Workflows & Features
|
||||||
|
|
||||||
* "git interpret-trailers" can now run outside of a Git repository.
|
* "git interpret-trailers" can now run outside of a Git repository.
|
||||||
|
|
||||||
* "git p4" learned to reencode the pathname it uses to communicate
|
* "git p4" learned to re-encode the pathname it uses to communicate
|
||||||
with the p4 depot with a new option.
|
with the p4 depot with a new option.
|
||||||
|
|
||||||
* Give progress meter to "git filter-branch".
|
* Give progress meter to "git filter-branch".
|
||||||
|
|
|
@ -10,7 +10,7 @@ Fixes since v2.7
|
||||||
setting GIT_WORK_TREE environment themselves.
|
setting GIT_WORK_TREE environment themselves.
|
||||||
|
|
||||||
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
||||||
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
|
fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
|
||||||
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
||||||
array.
|
array.
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ Fixes since v2.7.2
|
||||||
tests.
|
tests.
|
||||||
|
|
||||||
* "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
|
* "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
|
||||||
rev, i.e. the object named by the the pathname with wildcard
|
rev, i.e. the object named by the pathname with wildcard
|
||||||
characters in a tree object.
|
characters in a tree object.
|
||||||
|
|
||||||
* "git rev-parse --git-common-dir" used in the worktree feature
|
* "git rev-parse --git-common-dir" used in the worktree feature
|
||||||
|
|
|
@ -189,7 +189,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||||
* Some calls to strcpy(3) triggers a false warning from static
|
* Some calls to strcpy(3) triggers a false warning from static
|
||||||
analyzers that are less intelligent than humans, and reducing the
|
analyzers that are less intelligent than humans, and reducing the
|
||||||
number of these false hits helps us notice real issues. A few
|
number of these false hits helps us notice real issues. A few
|
||||||
calls to strcpy(3) in a couple of protrams that are already safe
|
calls to strcpy(3) in a couple of programs that are already safe
|
||||||
has been rewritten to avoid false warnings.
|
has been rewritten to avoid false warnings.
|
||||||
|
|
||||||
* The "name_path" API was an attempt to reduce the need to construct
|
* The "name_path" API was an attempt to reduce the need to construct
|
||||||
|
@ -270,7 +270,7 @@ notes for details).
|
||||||
setting GIT_WORK_TREE environment themselves.
|
setting GIT_WORK_TREE environment themselves.
|
||||||
|
|
||||||
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
||||||
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
|
fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
|
||||||
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
||||||
array.
|
array.
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,8 @@ Fixes since v2.8.2
|
||||||
This is necessary to use Git on Windows shared directories, and is
|
This is necessary to use Git on Windows shared directories, and is
|
||||||
already enabled for the MinGW and plain Windows builds. It also
|
already enabled for the MinGW and plain Windows builds. It also
|
||||||
has been used in Cygwin packaged versions of Git for quite a while.
|
has been used in Cygwin packaged versions of Git for quite a while.
|
||||||
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
See https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/
|
||||||
and http://thread.gmane.org/gmane.comp.version-control.git/275680.
|
and https://lore.kernel.org/git/20150811100527.GW14466@dinwoodie.org/.
|
||||||
|
|
||||||
* "git replace -e" did not honour "core.editor" configuration.
|
* "git replace -e" did not honour "core.editor" configuration.
|
||||||
|
|
||||||
|
|
|
@ -368,7 +368,7 @@ notes for details).
|
||||||
This is necessary to use Git on Windows shared directories, and is
|
This is necessary to use Git on Windows shared directories, and is
|
||||||
already enabled for the MinGW and plain Windows builds. It also
|
already enabled for the MinGW and plain Windows builds. It also
|
||||||
has been used in Cygwin packaged versions of Git for quite a while.
|
has been used in Cygwin packaged versions of Git for quite a while.
|
||||||
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
See https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/
|
||||||
|
|
||||||
* "merge-octopus" strategy did not ensure that the index is clean
|
* "merge-octopus" strategy did not ensure that the index is clean
|
||||||
when merge begins.
|
when merge begins.
|
||||||
|
|
|
@ -36,7 +36,7 @@ Fixes since v2.9.2
|
||||||
* One part of "git am" had an oddball helper function that called
|
* One part of "git am" had an oddball helper function that called
|
||||||
stuff from outside "his" as opposed to calling what we have "ours",
|
stuff from outside "his" as opposed to calling what we have "ours",
|
||||||
which was not gender-neutral and also inconsistent with the rest of
|
which was not gender-neutral and also inconsistent with the rest of
|
||||||
the system where outside stuff is usuall called "theirs" in
|
the system where outside stuff is usually called "theirs" in
|
||||||
contrast to "ours".
|
contrast to "ours".
|
||||||
|
|
||||||
* The test framework learned a new helper test_match_signal to
|
* The test framework learned a new helper test_match_signal to
|
||||||
|
|
20
third_party/git/Documentation/SubmittingPatches
vendored
20
third_party/git/Documentation/SubmittingPatches
vendored
|
@ -142,19 +142,25 @@ archive, summarize the relevant points of the discussion.
|
||||||
|
|
||||||
[[commit-reference]]
|
[[commit-reference]]
|
||||||
If you want to reference a previous commit in the history of a stable
|
If you want to reference a previous commit in the history of a stable
|
||||||
branch, use the format "abbreviated sha1 (subject, date)",
|
branch, use the format "abbreviated hash (subject, date)", like this:
|
||||||
with the subject enclosed in a pair of double-quotes, like this:
|
|
||||||
|
|
||||||
....
|
....
|
||||||
Commit f86a374 ("pack-bitmap.c: fix a memleak", 2015-03-30)
|
Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
|
||||||
noticed that ...
|
noticed that ...
|
||||||
....
|
....
|
||||||
|
|
||||||
The "Copy commit summary" command of gitk can be used to obtain this
|
The "Copy commit summary" command of gitk can be used to obtain this
|
||||||
format, or this invocation of `git show`:
|
format (with the subject enclosed in a pair of double-quotes), or this
|
||||||
|
invocation of `git show`:
|
||||||
|
|
||||||
....
|
....
|
||||||
git show -s --date=short --pretty='format:%h ("%s", %ad)' <commit>
|
git show -s --pretty=reference <commit>
|
||||||
|
....
|
||||||
|
|
||||||
|
or, on an older version of Git without support for --pretty=reference:
|
||||||
|
|
||||||
|
....
|
||||||
|
git show -s --date=short --pretty='format:%h (%s, %ad)' <commit>
|
||||||
....
|
....
|
||||||
|
|
||||||
[[git-tools]]
|
[[git-tools]]
|
||||||
|
@ -372,9 +378,9 @@ such as "Thanks-to:", "Based-on-patch-by:", or "Mentored-by:".
|
||||||
Some parts of the system have dedicated maintainers with their own
|
Some parts of the system have dedicated maintainers with their own
|
||||||
repositories.
|
repositories.
|
||||||
|
|
||||||
- `git-gui/` comes from git-gui project, maintained by Pat Thoyts:
|
- `git-gui/` comes from git-gui project, maintained by Pratyush Yadav:
|
||||||
|
|
||||||
git://repo.or.cz/git-gui.git
|
https://github.com/prati0100/git-gui.git
|
||||||
|
|
||||||
- `gitk-git/` comes from Paul Mackerras's gitk project:
|
- `gitk-git/` comes from Paul Mackerras's gitk project:
|
||||||
|
|
||||||
|
|
6
third_party/git/Documentation/asciidoc.conf
vendored
6
third_party/git/Documentation/asciidoc.conf
vendored
|
@ -78,9 +78,9 @@ template::[header-declarations]
|
||||||
<refmeta>
|
<refmeta>
|
||||||
<refentrytitle>{mantitle}</refentrytitle>
|
<refentrytitle>{mantitle}</refentrytitle>
|
||||||
<manvolnum>{manvolnum}</manvolnum>
|
<manvolnum>{manvolnum}</manvolnum>
|
||||||
<refmiscinfo class="source">Git</refmiscinfo>
|
<refmiscinfo class="source">{mansource}</refmiscinfo>
|
||||||
<refmiscinfo class="version">{git_version}</refmiscinfo>
|
<refmiscinfo class="version">{manversion}</refmiscinfo>
|
||||||
<refmiscinfo class="manual">Git Manual</refmiscinfo>
|
<refmiscinfo class="manual">{manmanual}</refmiscinfo>
|
||||||
</refmeta>
|
</refmeta>
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
<refname>{manname}</refname>
|
<refname>{manname}</refname>
|
||||||
|
|
|
@ -9,8 +9,11 @@ module Git
|
||||||
named :chrome
|
named :chrome
|
||||||
|
|
||||||
def process(parent, target, attrs)
|
def process(parent, target, attrs)
|
||||||
if parent.document.basebackend? 'html'
|
prefix = parent.document.attr('git-relative-html-prefix')
|
||||||
prefix = parent.document.attr('git-relative-html-prefix')
|
if parent.document.doctype == 'book'
|
||||||
|
"<ulink url=\"#{prefix}#{target}.html\">" \
|
||||||
|
"#{target}(#{attrs[1]})</ulink>"
|
||||||
|
elsif parent.document.basebackend? 'html'
|
||||||
%(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
|
%(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
|
||||||
elsif parent.document.basebackend? 'docbook'
|
elsif parent.document.basebackend? 'docbook'
|
||||||
"<citerefentry>\n" \
|
"<citerefentry>\n" \
|
||||||
|
@ -20,9 +23,26 @@ module Git
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
|
||||||
|
def process document, output
|
||||||
|
if document.basebackend? 'docbook'
|
||||||
|
mansource = document.attributes['mansource']
|
||||||
|
manversion = document.attributes['manversion']
|
||||||
|
manmanual = document.attributes['manmanual']
|
||||||
|
new_tags = "" \
|
||||||
|
"<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \
|
||||||
|
"<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \
|
||||||
|
"<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n"
|
||||||
|
output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>")
|
||||||
|
end
|
||||||
|
output
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Asciidoctor::Extensions.register do
|
Asciidoctor::Extensions.register do
|
||||||
inline_macro Git::Documentation::LinkGitProcessor, :linkgit
|
inline_macro Git::Documentation::LinkGitProcessor, :linkgit
|
||||||
|
postprocessor Git::Documentation::DocumentPostProcessor
|
||||||
end
|
end
|
||||||
|
|
76
third_party/git/Documentation/config.txt
vendored
76
third_party/git/Documentation/config.txt
vendored
|
@ -142,7 +142,7 @@ refer to linkgit:gitignore[5] for details. For convenience:
|
||||||
|
|
||||||
`gitdir/i`::
|
`gitdir/i`::
|
||||||
This is the same as `gitdir` except that matching is done
|
This is the same as `gitdir` except that matching is done
|
||||||
case-insensitively (e.g. on case-insensitive file sytems)
|
case-insensitively (e.g. on case-insensitive file systems)
|
||||||
|
|
||||||
`onbranch`::
|
`onbranch`::
|
||||||
The data that follows the keyword `onbranch:` is taken to be a
|
The data that follows the keyword `onbranch:` is taken to be a
|
||||||
|
@ -178,47 +178,49 @@ to either specify only the realpath version, or both versions.
|
||||||
Example
|
Example
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
# Core variables
|
----
|
||||||
[core]
|
# Core variables
|
||||||
; Don't trust file modes
|
[core]
|
||||||
filemode = false
|
; Don't trust file modes
|
||||||
|
filemode = false
|
||||||
|
|
||||||
# Our diff algorithm
|
# Our diff algorithm
|
||||||
[diff]
|
[diff]
|
||||||
external = /usr/local/bin/diff-wrapper
|
external = /usr/local/bin/diff-wrapper
|
||||||
renames = true
|
renames = true
|
||||||
|
|
||||||
[branch "devel"]
|
[branch "devel"]
|
||||||
remote = origin
|
remote = origin
|
||||||
merge = refs/heads/devel
|
merge = refs/heads/devel
|
||||||
|
|
||||||
# Proxy settings
|
# Proxy settings
|
||||||
[core]
|
[core]
|
||||||
gitProxy="ssh" for "kernel.org"
|
gitProxy="ssh" for "kernel.org"
|
||||||
gitProxy=default-proxy ; for the rest
|
gitProxy=default-proxy ; for the rest
|
||||||
|
|
||||||
[include]
|
[include]
|
||||||
path = /path/to/foo.inc ; include by absolute path
|
path = /path/to/foo.inc ; include by absolute path
|
||||||
path = foo.inc ; find "foo.inc" relative to the current file
|
path = foo.inc ; find "foo.inc" relative to the current file
|
||||||
path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory
|
path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory
|
||||||
|
|
||||||
; include if $GIT_DIR is /path/to/foo/.git
|
; include if $GIT_DIR is /path/to/foo/.git
|
||||||
[includeIf "gitdir:/path/to/foo/.git"]
|
[includeIf "gitdir:/path/to/foo/.git"]
|
||||||
path = /path/to/foo.inc
|
path = /path/to/foo.inc
|
||||||
|
|
||||||
; include for all repositories inside /path/to/group
|
; include for all repositories inside /path/to/group
|
||||||
[includeIf "gitdir:/path/to/group/"]
|
[includeIf "gitdir:/path/to/group/"]
|
||||||
path = /path/to/foo.inc
|
path = /path/to/foo.inc
|
||||||
|
|
||||||
; include for all repositories inside $HOME/to/group
|
; include for all repositories inside $HOME/to/group
|
||||||
[includeIf "gitdir:~/to/group/"]
|
[includeIf "gitdir:~/to/group/"]
|
||||||
path = /path/to/foo.inc
|
path = /path/to/foo.inc
|
||||||
|
|
||||||
; relative paths are always relative to the including
|
; relative paths are always relative to the including
|
||||||
; file (if the condition is true); their location is not
|
; file (if the condition is true); their location is not
|
||||||
; affected by the condition
|
; affected by the condition
|
||||||
[includeIf "gitdir:/path/to/group/"]
|
[includeIf "gitdir:/path/to/group/"]
|
||||||
path = foo.inc
|
path = foo.inc
|
||||||
|
----
|
||||||
|
|
||||||
; include only if we are in a worktree where foo-branch is
|
; include only if we are in a worktree where foo-branch is
|
||||||
; currently checked out
|
; currently checked out
|
||||||
|
@ -261,7 +263,9 @@ color::
|
||||||
+
|
+
|
||||||
The basic colors accepted are `normal`, `black`, `red`, `green`, `yellow`,
|
The basic colors accepted are `normal`, `black`, `red`, `green`, `yellow`,
|
||||||
`blue`, `magenta`, `cyan` and `white`. The first color given is the
|
`blue`, `magenta`, `cyan` and `white`. The first color given is the
|
||||||
foreground; the second is the background.
|
foreground; the second is the background. All the basic colors except
|
||||||
|
`normal` have a bright variant that can be speficied by prefixing the
|
||||||
|
color with `bright`, like `brightred`.
|
||||||
+
|
+
|
||||||
Colors may also be given as numbers between 0 and 255; these use ANSI
|
Colors may also be given as numbers between 0 and 255; these use ANSI
|
||||||
256-color mode (but note that not all terminals may support this). If
|
256-color mode (but note that not all terminals may support this). If
|
||||||
|
@ -345,6 +349,8 @@ include::config/difftool.txt[]
|
||||||
|
|
||||||
include::config/fastimport.txt[]
|
include::config/fastimport.txt[]
|
||||||
|
|
||||||
|
include::config/feature.txt[]
|
||||||
|
|
||||||
include::config/fetch.txt[]
|
include::config/fetch.txt[]
|
||||||
|
|
||||||
include::config/format.txt[]
|
include::config/format.txt[]
|
||||||
|
|
5
third_party/git/Documentation/config/add.txt
vendored
5
third_party/git/Documentation/config/add.txt
vendored
|
@ -5,3 +5,8 @@ add.ignore-errors (deprecated)::
|
||||||
option of linkgit:git-add[1]. `add.ignore-errors` is deprecated,
|
option of linkgit:git-add[1]. `add.ignore-errors` is deprecated,
|
||||||
as it does not follow the usual naming convention for configuration
|
as it does not follow the usual naming convention for configuration
|
||||||
variables.
|
variables.
|
||||||
|
|
||||||
|
add.interactive.useBuiltin::
|
||||||
|
[EXPERIMENTAL] Set to `true` to use the experimental built-in
|
||||||
|
implementation of the interactive version of linkgit:git-add[1]
|
||||||
|
instead of the Perl script version. Is `false` by default.
|
||||||
|
|
|
@ -107,4 +107,13 @@ advice.*::
|
||||||
editor input from the user.
|
editor input from the user.
|
||||||
nestedTag::
|
nestedTag::
|
||||||
Advice shown if a user attempts to recursively tag a tag object.
|
Advice shown if a user attempts to recursively tag a tag object.
|
||||||
|
submoduleAlternateErrorStrategyDie::
|
||||||
|
Advice shown when a submodule.alternateErrorStrategy option
|
||||||
|
configured to "die" causes a fatal error.
|
||||||
|
addIgnoredFile::
|
||||||
|
Advice shown if a user attempts to add an ignored file to
|
||||||
|
the index.
|
||||||
|
addEmptyPathspec::
|
||||||
|
Advice shown if a user runs the add command without providing
|
||||||
|
the pathspec parameter.
|
||||||
--
|
--
|
||||||
|
|
|
@ -81,15 +81,16 @@ branch.<name>.rebase::
|
||||||
"git pull" is run. See "pull.rebase" for doing this in a non
|
"git pull" is run. See "pull.rebase" for doing this in a non
|
||||||
branch-specific manner.
|
branch-specific manner.
|
||||||
+
|
+
|
||||||
When `merges`, pass the `--rebase-merges` option to 'git rebase'
|
When `merges` (or just 'm'), pass the `--rebase-merges` option to 'git rebase'
|
||||||
so that the local merge commits are included in the rebase (see
|
so that the local merge commits are included in the rebase (see
|
||||||
linkgit:git-rebase[1] for details).
|
linkgit:git-rebase[1] for details).
|
||||||
+
|
+
|
||||||
When `preserve` (deprecated in favor of `merges`), also pass
|
When `preserve` (or just 'p', deprecated in favor of `merges`), also pass
|
||||||
`--preserve-merges` along to 'git rebase' so that locally committed merge
|
`--preserve-merges` along to 'git rebase' so that locally committed merge
|
||||||
commits will not be flattened by running 'git pull'.
|
commits will not be flattened by running 'git pull'.
|
||||||
+
|
+
|
||||||
When the value is `interactive`, the rebase is run in interactive mode.
|
When the value is `interactive` (or just 'i'), the rebase is run in interactive
|
||||||
|
mode.
|
||||||
+
|
+
|
||||||
*NOTE*: this is a possibly dangerous operation; do *not* use
|
*NOTE*: this is a possibly dangerous operation; do *not* use
|
||||||
it unless you understand the implications (see linkgit:git-rebase[1]
|
it unless you understand the implications (see linkgit:git-rebase[1]
|
||||||
|
|
33
third_party/git/Documentation/config/core.txt
vendored
33
third_party/git/Documentation/config/core.txt
vendored
|
@ -68,6 +68,17 @@ core.fsmonitor::
|
||||||
avoiding unnecessary processing of files that have not changed.
|
avoiding unnecessary processing of files that have not changed.
|
||||||
See the "fsmonitor-watchman" section of linkgit:githooks[5].
|
See the "fsmonitor-watchman" section of linkgit:githooks[5].
|
||||||
|
|
||||||
|
core.fsmonitorHookVersion::
|
||||||
|
Sets the version of hook that is to be used when calling fsmonitor.
|
||||||
|
There are currently versions 1 and 2. When this is not set,
|
||||||
|
version 2 will be tried first and if it fails then version 1
|
||||||
|
will be tried. Version 1 uses a timestamp as input to determine
|
||||||
|
which files have changes since that time but some monitors
|
||||||
|
like watchman have race conditions when used with a timestamp.
|
||||||
|
Version 2 uses an opaque string so that the monitor can return
|
||||||
|
something that can be used to determine what files have changed
|
||||||
|
without race conditions.
|
||||||
|
|
||||||
core.trustctime::
|
core.trustctime::
|
||||||
If false, the ctime differences between the index and the
|
If false, the ctime differences between the index and the
|
||||||
working tree are ignored; useful when the inode change time
|
working tree are ignored; useful when the inode change time
|
||||||
|
@ -86,7 +97,9 @@ core.untrackedCache::
|
||||||
it will automatically be removed, if set to `false`. Before
|
it will automatically be removed, if set to `false`. Before
|
||||||
setting it to `true`, you should check that mtime is working
|
setting it to `true`, you should check that mtime is working
|
||||||
properly on your system.
|
properly on your system.
|
||||||
See linkgit:git-update-index[1]. `keep` by default.
|
See linkgit:git-update-index[1]. `keep` by default, unless
|
||||||
|
`feature.manyFiles` is enabled which sets this setting to
|
||||||
|
`true` by default.
|
||||||
|
|
||||||
core.checkStat::
|
core.checkStat::
|
||||||
When missing or is set to `default`, many fields in the stat
|
When missing or is set to `default`, many fields in the stat
|
||||||
|
@ -557,6 +570,12 @@ core.unsetenvvars::
|
||||||
Defaults to `PERL5LIB` to account for the fact that Git for
|
Defaults to `PERL5LIB` to account for the fact that Git for
|
||||||
Windows insists on using its own Perl interpreter.
|
Windows insists on using its own Perl interpreter.
|
||||||
|
|
||||||
|
core.restrictinheritedhandles::
|
||||||
|
Windows-only: override whether spawned processes inherit only standard
|
||||||
|
file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be
|
||||||
|
`auto`, `true` or `false`. Defaults to `auto`, which means `true` on
|
||||||
|
Windows 7 and later, and `false` on older Windows versions.
|
||||||
|
|
||||||
core.createObject::
|
core.createObject::
|
||||||
You can set this to 'link', in which case a hardlink followed by
|
You can set this to 'link', in which case a hardlink followed by
|
||||||
a delete of the source are used to make sure that object creation
|
a delete of the source are used to make sure that object creation
|
||||||
|
@ -577,7 +596,7 @@ the `GIT_NOTES_REF` environment variable. See linkgit:git-notes[1].
|
||||||
|
|
||||||
core.commitGraph::
|
core.commitGraph::
|
||||||
If true, then git will read the commit-graph file (if it exists)
|
If true, then git will read the commit-graph file (if it exists)
|
||||||
to parse the graph structure of commits. Defaults to false. See
|
to parse the graph structure of commits. Defaults to true. See
|
||||||
linkgit:git-commit-graph[1] for more information.
|
linkgit:git-commit-graph[1] for more information.
|
||||||
|
|
||||||
core.useReplaceRefs::
|
core.useReplaceRefs::
|
||||||
|
@ -591,8 +610,14 @@ core.multiPackIndex::
|
||||||
multi-pack-index design document].
|
multi-pack-index design document].
|
||||||
|
|
||||||
core.sparseCheckout::
|
core.sparseCheckout::
|
||||||
Enable "sparse checkout" feature. See section "Sparse checkout" in
|
Enable "sparse checkout" feature. See linkgit:git-sparse-checkout[1]
|
||||||
linkgit:git-read-tree[1] for more information.
|
for more information.
|
||||||
|
|
||||||
|
core.sparseCheckoutCone::
|
||||||
|
Enables the "cone mode" of the sparse checkout feature. When the
|
||||||
|
sparse-checkout file contains a limited set of patterns, then this
|
||||||
|
mode provides significant performance advantages. See
|
||||||
|
linkgit:git-sparse-checkout[1] for more information.
|
||||||
|
|
||||||
core.abbrev::
|
core.abbrev::
|
||||||
Set the length object names are abbreviated to. If
|
Set the length object names are abbreviated to. If
|
||||||
|
|
|
@ -189,7 +189,7 @@ diff.guitool::
|
||||||
include::../mergetools-diff.txt[]
|
include::../mergetools-diff.txt[]
|
||||||
|
|
||||||
diff.indentHeuristic::
|
diff.indentHeuristic::
|
||||||
Set this option to `true` to enable experimental heuristics
|
Set this option to `false` to disable the default heuristics
|
||||||
that shift diff hunk boundaries to make patches easier to read.
|
that shift diff hunk boundaries to make patches easier to read.
|
||||||
|
|
||||||
diff.algorithm::
|
diff.algorithm::
|
||||||
|
|
37
third_party/git/Documentation/config/feature.txt
vendored
Normal file
37
third_party/git/Documentation/config/feature.txt
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
feature.*::
|
||||||
|
The config settings that start with `feature.` modify the defaults of
|
||||||
|
a group of other config settings. These groups are created by the Git
|
||||||
|
developer community as recommended defaults and are subject to change.
|
||||||
|
In particular, new config options may be added with different defaults.
|
||||||
|
|
||||||
|
feature.experimental::
|
||||||
|
Enable config options that are new to Git, and are being considered for
|
||||||
|
future defaults. Config settings included here may be added or removed
|
||||||
|
with each release, including minor version updates. These settings may
|
||||||
|
have unintended interactions since they are so new. Please enable this
|
||||||
|
setting if you are interested in providing feedback on experimental
|
||||||
|
features. The new default values are:
|
||||||
|
+
|
||||||
|
* `pack.useSparse=true` uses a new algorithm when constructing a pack-file
|
||||||
|
which can improve `git push` performance in repos with many files.
|
||||||
|
+
|
||||||
|
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
|
||||||
|
skipping more commits at a time, reducing the number of round trips.
|
||||||
|
+
|
||||||
|
* `fetch.writeCommitGraph=true` writes a commit-graph after every `git fetch`
|
||||||
|
command that downloads a pack-file from a remote. Using the `--split` option,
|
||||||
|
most executions will create a very small commit-graph file on top of the
|
||||||
|
existing commit-graph file(s). Occasionally, these files will merge and the
|
||||||
|
write may take longer. Having an updated commit-graph file helps performance
|
||||||
|
of many Git commands, including `git merge-base`, `git push -f`, and
|
||||||
|
`git log --graph`.
|
||||||
|
|
||||||
|
feature.manyFiles::
|
||||||
|
Enable config options that optimize for repos with many files in the
|
||||||
|
working directory. With many files, commands such as `git status` and
|
||||||
|
`git checkout` may be slow and these new defaults improve performance:
|
||||||
|
+
|
||||||
|
* `index.version=4` enables path-prefix compression in the index.
|
||||||
|
+
|
||||||
|
* `core.untrackedCache=true` enables the untracked cache. This setting assumes
|
||||||
|
that mtime is working on your machine.
|
23
third_party/git/Documentation/config/fetch.txt
vendored
23
third_party/git/Documentation/config/fetch.txt
vendored
|
@ -59,7 +59,8 @@ fetch.negotiationAlgorithm::
|
||||||
effort to converge faster, but may result in a larger-than-necessary
|
effort to converge faster, but may result in a larger-than-necessary
|
||||||
packfile; The default is "default" which instructs Git to use the default algorithm
|
packfile; The default is "default" which instructs Git to use the default algorithm
|
||||||
that never skips commits (unless the server has acknowledged it or one
|
that never skips commits (unless the server has acknowledged it or one
|
||||||
of its descendants).
|
of its descendants). If `feature.experimental` is enabled, then this
|
||||||
|
setting defaults to "skipping".
|
||||||
Unknown values will cause 'git fetch' to error out.
|
Unknown values will cause 'git fetch' to error out.
|
||||||
+
|
+
|
||||||
See also the `--negotiation-tip` option for linkgit:git-fetch[1].
|
See also the `--negotiation-tip` option for linkgit:git-fetch[1].
|
||||||
|
@ -68,3 +69,23 @@ fetch.showForcedUpdates::
|
||||||
Set to false to enable `--no-show-forced-updates` in
|
Set to false to enable `--no-show-forced-updates` in
|
||||||
linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
|
linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
|
||||||
Defaults to true.
|
Defaults to true.
|
||||||
|
|
||||||
|
fetch.parallel::
|
||||||
|
Specifies the maximal number of fetch operations to be run in parallel
|
||||||
|
at a time (submodules, or remotes when the `--multiple` option of
|
||||||
|
linkgit:git-fetch[1] is in effect).
|
||||||
|
+
|
||||||
|
A value of 0 will give some reasonable default. If unset, it defaults to 1.
|
||||||
|
+
|
||||||
|
For submodules, this setting can be overridden using the `submodule.fetchJobs`
|
||||||
|
config setting.
|
||||||
|
|
||||||
|
fetch.writeCommitGraph::
|
||||||
|
Set to true to write a commit-graph after every `git fetch` command
|
||||||
|
that downloads a pack-file from a remote. Using the `--split` option,
|
||||||
|
most executions will create a very small commit-graph file on top of
|
||||||
|
the existing commit-graph file(s). Occasionally, these files will
|
||||||
|
merge and the write may take longer. Having an updated commit-graph
|
||||||
|
file helps performance of many Git commands, including `git merge-base`,
|
||||||
|
`git push -f`, and `git log --graph`. Defaults to false, unless
|
||||||
|
`feature.experimental` is true.
|
||||||
|
|
27
third_party/git/Documentation/config/format.txt
vendored
27
third_party/git/Documentation/config/format.txt
vendored
|
@ -36,6 +36,12 @@ format.subjectPrefix::
|
||||||
The default for format-patch is to output files with the '[PATCH]'
|
The default for format-patch is to output files with the '[PATCH]'
|
||||||
subject prefix. Use this variable to change that prefix.
|
subject prefix. Use this variable to change that prefix.
|
||||||
|
|
||||||
|
format.coverFromDescription::
|
||||||
|
The default mode for format-patch to determine which parts of
|
||||||
|
the cover letter will be populated using the branch's
|
||||||
|
description. See the `--cover-from-description` option in
|
||||||
|
linkgit:git-format-patch[1].
|
||||||
|
|
||||||
format.signature::
|
format.signature::
|
||||||
The default for format-patch is to output a signature containing
|
The default for format-patch is to output a signature containing
|
||||||
the Git version number. Use this variable to change that default.
|
the Git version number. Use this variable to change that default.
|
||||||
|
@ -77,10 +83,11 @@ format.coverLetter::
|
||||||
A boolean that controls whether to generate a cover-letter when
|
A boolean that controls whether to generate a cover-letter when
|
||||||
format-patch is invoked, but in addition can be set to "auto", to
|
format-patch is invoked, but in addition can be set to "auto", to
|
||||||
generate a cover-letter only when there's more than one patch.
|
generate a cover-letter only when there's more than one patch.
|
||||||
|
Default is false.
|
||||||
|
|
||||||
format.outputDirectory::
|
format.outputDirectory::
|
||||||
Set a custom directory to store the resulting files instead of the
|
Set a custom directory to store the resulting files instead of the
|
||||||
current working directory.
|
current working directory. All directory components will be created.
|
||||||
|
|
||||||
format.useAutoBase::
|
format.useAutoBase::
|
||||||
A boolean value which lets you enable the `--base=auto` option of
|
A boolean value which lets you enable the `--base=auto` option of
|
||||||
|
@ -99,4 +106,20 @@ If one wishes to use the ref `ref/notes/true`, please use that literal
|
||||||
instead.
|
instead.
|
||||||
+
|
+
|
||||||
This configuration can be specified multiple times in order to allow
|
This configuration can be specified multiple times in order to allow
|
||||||
multiple notes refs to be included.
|
multiple notes refs to be included. In that case, it will behave
|
||||||
|
similarly to multiple `--[no-]notes[=]` options passed in. That is, a
|
||||||
|
value of `true` will show the default notes, a value of `<ref>` will
|
||||||
|
also show notes from that notes ref and a value of `false` will negate
|
||||||
|
previous configurations and not show notes.
|
||||||
|
+
|
||||||
|
For example,
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
[format]
|
||||||
|
notes = true
|
||||||
|
notes = foo
|
||||||
|
notes = false
|
||||||
|
notes = bar
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
will only show notes from `refs/notes/bar`.
|
||||||
|
|
2
third_party/git/Documentation/config/gc.txt
vendored
2
third_party/git/Documentation/config/gc.txt
vendored
|
@ -63,7 +63,7 @@ gc.writeCommitGraph::
|
||||||
If true, then gc will rewrite the commit-graph file when
|
If true, then gc will rewrite the commit-graph file when
|
||||||
linkgit:git-gc[1] is run. When using `git gc --auto`
|
linkgit:git-gc[1] is run. When using `git gc --auto`
|
||||||
the commit-graph will be updated if housekeeping is
|
the commit-graph will be updated if housekeeping is
|
||||||
required. Default is false. See linkgit:git-commit-graph[1]
|
required. Default is true. See linkgit:git-commit-graph[1]
|
||||||
for details.
|
for details.
|
||||||
|
|
||||||
gc.logExpiry::
|
gc.logExpiry::
|
||||||
|
|
15
third_party/git/Documentation/config/gpg.txt
vendored
15
third_party/git/Documentation/config/gpg.txt
vendored
|
@ -18,3 +18,18 @@ gpg.<format>.program::
|
||||||
chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still
|
chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still
|
||||||
be used as a legacy synonym for `gpg.openpgp.program`. The default
|
be used as a legacy synonym for `gpg.openpgp.program`. The default
|
||||||
value for `gpg.x509.program` is "gpgsm".
|
value for `gpg.x509.program` is "gpgsm".
|
||||||
|
|
||||||
|
gpg.minTrustLevel::
|
||||||
|
Specifies a minimum trust level for signature verification. If
|
||||||
|
this option is unset, then signature verification for merge
|
||||||
|
operations require a key with at least `marginal` trust. Other
|
||||||
|
operations that perform signature verification require a key
|
||||||
|
with at least `undefined` trust. Setting this option overrides
|
||||||
|
the required trust-level for all operations. Supported values,
|
||||||
|
in increasing order of significance:
|
||||||
|
+
|
||||||
|
* `undefined`
|
||||||
|
* `never`
|
||||||
|
* `marginal`
|
||||||
|
* `fully`
|
||||||
|
* `ultimate`
|
||||||
|
|
12
third_party/git/Documentation/config/http.txt
vendored
12
third_party/git/Documentation/config/http.txt
vendored
|
@ -71,7 +71,7 @@ http.saveCookies::
|
||||||
http.version::
|
http.version::
|
||||||
Use the specified HTTP protocol version when communicating with a server.
|
Use the specified HTTP protocol version when communicating with a server.
|
||||||
If you want to force the default. The available and default version depend
|
If you want to force the default. The available and default version depend
|
||||||
on libcurl. Actually the possible values of
|
on libcurl. Currently the possible values of
|
||||||
this option are:
|
this option are:
|
||||||
|
|
||||||
- HTTP/2
|
- HTTP/2
|
||||||
|
@ -84,7 +84,7 @@ http.sslVersion::
|
||||||
particular configuration of the crypto library in use. Internally
|
particular configuration of the crypto library in use. Internally
|
||||||
this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl
|
this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl
|
||||||
documentation for more details on the format of this option and
|
documentation for more details on the format of this option and
|
||||||
for the ssl version supported. Actually the possible values of
|
for the ssl version supported. Currently the possible values of
|
||||||
this option are:
|
this option are:
|
||||||
|
|
||||||
- sslv2
|
- sslv2
|
||||||
|
@ -199,6 +199,14 @@ http.postBuffer::
|
||||||
Transfer-Encoding: chunked is used to avoid creating a
|
Transfer-Encoding: chunked is used to avoid creating a
|
||||||
massive pack file locally. Default is 1 MiB, which is
|
massive pack file locally. Default is 1 MiB, which is
|
||||||
sufficient for most requests.
|
sufficient for most requests.
|
||||||
|
+
|
||||||
|
Note that raising this limit is only effective for disabling chunked
|
||||||
|
transfer encoding and therefore should be used only where the remote
|
||||||
|
server or a proxy only supports HTTP/1.0 or is noncompliant with the
|
||||||
|
HTTP standard. Raising this is not, in general, an effective solution
|
||||||
|
for most push problems, but can increase memory consumption
|
||||||
|
significantly since the entire buffer is allocated even for small
|
||||||
|
pushes.
|
||||||
|
|
||||||
http.lowSpeedLimit, http.lowSpeedTime::
|
http.lowSpeedLimit, http.lowSpeedTime::
|
||||||
If the HTTP transfer speed is less than 'http.lowSpeedLimit'
|
If the HTTP transfer speed is less than 'http.lowSpeedLimit'
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue