* Re: [PATCH v2 1/5] log: Move show_blob_object() to log.c
From: Maarten Bosmans @ 2024-02-20 11:40 UTC (permalink / raw)
To: Jeff King; +Cc: Junio C Hamano, git
In-Reply-To: <20240220015928.GB2713741@coredump.intra.peff.net>
Op di 20 feb 2024 om 02:59 schreef Jeff King <peff@peff.net>:
> All that said, I'm not sure based on our previous discussion why we
> can't just call stream_blob_to_fd(). Looking at show_blob_object(), most
> of the logic is about recording the tree-context of the given name and
> using it for textconv. But since we know we are feeding a bare oid,
> that would never kick in. So I don't know if there's any value in
> sharing this function more widely in the first place.
Indeed. My original analysis of what `git show` does when invoked by
`git notes show` led to the conclusion that the only thing worthwhile
to keep is the `setup_pager()` call. Thanks for confirming this.
I'll reroll in a couple of days with the V1 approach back.
Maarten
^ permalink raw reply
* Re: [PATCH 0/5] promise: introduce promises to track success or error
From: Patrick Steinhardt @ 2024-02-20 12:19 UTC (permalink / raw)
To: phillip.wood
Cc: Jeff King, Philip Peterson via GitGitGadget, git,
Johannes Schindelin, Emily Shaffer, Philip Peterson
In-Reply-To: <70a81f5a-32d8-4517-83ea-8019be5f97d5@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2193 bytes --]
On Tue, Feb 20, 2024 at 10:53:06AM +0000, Phillip Wood wrote:
> Hi Peff
>
> On 20/02/2024 02:57, Jeff King wrote:
> > On Mon, Feb 19, 2024 at 02:25:29PM +0000, Phillip Wood wrote:
> >
> > > I'm sure this has been discussed in the past but I didn't manage to turn
> > > anything up with a quick search of the archive on lore.kernel.org.
> >
> > There's some discussion in this sub-thread:
> >
> > https://lore.kernel.org/git/20171103191309.sth4zjokgcupvk2e@sigill.intra.peff.net/
> >
> > that also references this earlier thread:
> >
> > https://lore.kernel.org/git/20160927191955.mympqgylrxhkp24n@sigill.intra.peff.net/
>
> Thanks for digging up those links
>
> > I still think this is a reasonable way to go. At one point I had a
> > proof-of-concept conversion of some of the ref code, but I don't think I
> > have it any more.
>
> Ah, that's interesting - the ref transaction functions already take a struct
> strbuf to populate with an error message so maybe that would be a simple
> place to start with a conversion to an error struct.
I would certainly welcome such a change. It might make sense to wait a
bit until the reftable dust has settled, but once that code has landed
I'd be quite happy to see improvements to our error handling.
While we're already at it throwing ideas around, I also have to wonder
whether this would be a long-term solution towards computer-friendly
errors. One of the problems we quite frequently hit in Gitaly is that we
are forced to parse error messages in order to figure out why exactly
something has failed. Needless to say, this is quite fragile and also
feels very wrong.
Now if we had a more structured way to pass errors around this might
also enable us to convey more meaning to the caller of Git commands. In
a hypothetical world where all errors were using an explicit error type,
then this error type could eventually become richer and contain more
information that is relevant to the calling script. And if such rich
error information was available, then it would not be that far fetched
to ask Git to emit errors in a computer-parsable format like for example
JSON.
Patrick
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply
* Re: [PATCH] Revert "Declare both git-switch and git-restore experimental"
From: Martin @ 2024-02-20 13:34 UTC (permalink / raw)
Cc: git
In-Reply-To: <3523e325-98bf-4d2d-847b-28e5c4a85ec5@app.fastmail.com>
On 20/02/2024 10:36, Kristoffer Haugsbakk wrote:
> On Tue, Feb 20, 2024, at 10:29, Matthieu Baerts (NGI0) wrote:
>> This reverts commit 4e43b7ff1ea4b6f16b93a432b6718e9ab38749bd.
>> Version 2.44 is approaching, almost 5 years after the introduction of
>> these two commands, it then looks safe to remove this experimental
>> status.
> Is this only based on the amount of time passed? Has there been any
> relevant discussions on the mailing list that discuss how mature these
> commands are and if they should be changed (with presumably a “no” to
> the question about being changed)?
>
Isn't the absence over such a long time of such a discussion in itself a
statement?
If there had been need for a discussion, would it not have happened by now?
Unless, it is assumed that no one is using it, nor has wanted to use it
(but has been deterred by the experimental state).
Has *every* other additions always had a "relevant" discussion, or would
feature in the past have been accepted if no one objected?
Furthermore, if something is functional (I am using it, I can attest it
works), and if it had no breaking changes over a very long time, then
making/keeping it experimental forever => would that not create a "boy
who cried wolf" effect? More and more people will use it. If it gets
incompatible broken the outcry will be there. And the documentation as
experimental will not lessen that outcry.
On the other hand I have been part of one discussion touching that topic
=> However this wasn't about: should switch/restore exist at all. It was
about if individual options to those commands had been assigned the
optimal choice of letter. In that case "-c" for "create", which for
users of "git branch" is associated with "copy".
If that is the case, it would be enough to move the experimental to
those particular options. And have discussions on those options, rather
than the overall existence/naming of switch/restore?
About the "-c": create vs copy:
> The |-c| and |-C| options have the exact same semantics as |-m| and
> |-M|, except instead of the branch being renamed, it will be copied to
> a new name, along with its config and reflog.
"copy" is basically creating a new branch "to a new name" with a copy of
certain metadata (config, reflog).
The flaw here is in "git branch" which by default list branches, but if
give a name (and no option to specify an action) "git branch foo" will
change its action to "create".
Anyway, the discussion on "-c" for copy in "switch" is only relevant if
there had been a discussion if this is across all git users a common
enough action, so it requires a shortcut outside of "git branch". And if
it does, and given that copy can't be done without creation, then should
"copy" not be an option that in "git switch" should be given together
with "create"? e.g. git switch -c newname -X oldbranch
[commit-startpoint]" where X is the option that says "copy metadata
from" (if it wasn't the worst idea ever, a 2nd "-c" would come to mind.
-a "assign" -o "Origin" -r "reflog" -s "source" -w "with" ... though
many of them may have potential to conflict too.
^ permalink raw reply
* [PATCH] rebase: make warning less passive aggressive
From: Harmen Stoppels via GitGitGadget @ 2024-02-20 15:23 UTC (permalink / raw)
To: git; +Cc: Harmen Stoppels, Harmen Stoppels
From: Harmen Stoppels <me@harmenstoppels.nl>
When you run `git rebase --continue` when no rebase is in progress, git
outputs `fatal: no rebase in progress?` which is not a question but a
statement. This commit makes it appear as a statement.
Signed-off-by: Harmen Stoppels <me@harmenstoppels.nl>
---
rebase: make warning less passive aggressive
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1669%2Fhaampie%2Ffix%2Fpassive-agressive-message-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1669/haampie/fix/passive-agressive-message-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1669
builtin/rebase.c | 2 +-
po/bg.po | 2 +-
po/ca.po | 2 +-
po/de.po | 2 +-
po/el.po | 2 +-
po/es.po | 2 +-
po/fr.po | 2 +-
po/id.po | 2 +-
po/it.po | 2 +-
po/ko.po | 2 +-
po/pl.po | 2 +-
po/pt_PT.po | 2 +-
po/ru.po | 2 +-
po/sv.po | 2 +-
po/tr.po | 2 +-
po/uk.po | 2 +-
po/vi.po | 2 +-
po/zh_CN.po | 2 +-
po/zh_TW.po | 2 +-
19 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 5b086f651a6..415783c4a21 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1254,7 +1254,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
die(_("options '%s' and '%s' cannot be used together"), "--root", "--fork-point");
if (options.action != ACTION_NONE && !in_progress)
- die(_("No rebase in progress?"));
+ die(_("No rebase in progress"));
if (options.action == ACTION_EDIT_TODO && !is_merge(&options))
die(_("The --edit-todo action can only be used during "
diff --git a/po/bg.po b/po/bg.po
index 6b95addef41..e54a2abf94a 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -10782,7 +10782,7 @@ msgstr ""
"„preserve“.\n"
"Тази стойност вече не се поддържа, заменете я с „merges“."
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Изглежда в момента не тече пребазиране"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/ca.po b/po/ca.po
index bcb4da80fb9..2bcda556147 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -10390,7 +10390,7 @@ msgstr ""
"Nota: la configuració «pull.rebase» també podria estar establerta a\n"
"+-«preserve», que ja no s'admet; utilitzeu «merge» en el seu lloc"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "No hi ha un «rebase» en curs?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/de.po b/po/de.po
index 37d6c809983..7ea1dd5b1a0 100644
--- a/po/de.po
+++ b/po/de.po
@@ -10522,7 +10522,7 @@ msgstr ""
"'preserve' gesetzt, was nicht länger unterstützt wird; nutzen Sie\n"
"stattdessen 'merges'"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Kein Rebase im Gange?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/el.po b/po/el.po
index 703f46d0c7c..d68d2542a4f 100644
--- a/po/el.po
+++ b/po/el.po
@@ -15726,7 +15726,7 @@ msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr ""
#: builtin/rebase.c:1208 git-legacy-rebase.sh:406
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr ""
#: builtin/rebase.c:1212 git-legacy-rebase.sh:417
diff --git a/po/es.po b/po/es.po
index 1ff5ff3911d..55fb9e0c81d 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10109,7 +10109,7 @@ msgstr ""
"configurada a 'preserve', el cual ya no es soportado; usa 'merges' en\n"
"su lugar"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "¿No hay rebase en progreso?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/fr.po b/po/fr.po
index 736a90f6bb6..cae2b1dd12b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10495,7 +10495,7 @@ msgstr ""
"Note : votre configuration `pull.rebase` peut aussi être 'preserve',\n"
"qui n'est plus géré ; utilisez 'merges' à la place"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Pas de rebasage en cours ?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/id.po b/po/id.po
index 3e8b212b617..966ebb9a269 100644
--- a/po/id.po
+++ b/po/id.po
@@ -12843,7 +12843,7 @@ msgstr ""
"yang tidak lagi didukung; gunakan 'merges' sebagai gantinya"
#: builtin/rebase.c
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Tidak ada pendasaran ulang yang sedang berjalan?"
#: builtin/rebase.c
diff --git a/po/it.po b/po/it.po
index c31560834d8..1b1ca2d2990 100644
--- a/po/it.po
+++ b/po/it.po
@@ -19666,7 +19666,7 @@ msgid "cannot combine '--root' with '--fork-point'"
msgstr "impossibile combinare '--root' con '--fork-point'"
#: builtin/rebase.c:1495
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Nessun rebase in corso?"
#: builtin/rebase.c:1499
diff --git a/po/ko.po b/po/ko.po
index 5d190e52380..783d5c5e8ad 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -16245,7 +16245,7 @@ msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr "'git am'이 진행 중인 것처럼 보입니다. 리베이스할 수 없습니다."
#: git-rebase.sh:403
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "리베이스가 진행 중이지 않습니다"
#: git-rebase.sh:414
diff --git a/po/pl.po b/po/pl.po
index 0ec127e14cc..5f361d558ba 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -20449,7 +20449,7 @@ msgid "cannot combine '--root' with '--fork-point'"
msgstr "„--root” i „--fork-point” się wykluczają"
#: builtin/rebase.c:1202
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Nie trwa żadne przestawianie?"
#: builtin/rebase.c:1206
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 32142531bbd..6adae673fd3 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -20608,7 +20608,7 @@ msgid "--preserve-merges was replaced by --rebase-merges"
msgstr ""
#: builtin/rebase.c:1230
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Algum rebase em curso?"
#: builtin/rebase.c:1234
diff --git a/po/ru.po b/po/ru.po
index 3e56eb546ea..ebcd6dded70 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9986,7 +9986,7 @@ msgid ""
"which is no longer supported; use 'merges' instead"
msgstr ""
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Нет перемещения в процессе?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/sv.po b/po/sv.po
index 786c2f749e7..d11bd0fc59c 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -10153,7 +10153,7 @@ msgstr ""
"Observera: Din inställning för ”pull.rebase” kan också vara satt till\n"
"”preserve”, som inte längre stöds; använd ”merges” istället"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Ingen ombasering pågår?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/tr.po b/po/tr.po
index 19d6661bbe6..d568956c686 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -10278,7 +10278,7 @@ msgstr ""
"Not: `pull.rebase` yapılandırmanız, artık desteklenmeyen'\n"
"'preserve' olarak ayarlı olabilir; yerine 'merges' kullanın"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Sürmekte olan bir yeniden temellendirme yok"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/uk.po b/po/uk.po
index 0507e387bab..cd09d641817 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -10341,7 +10341,7 @@ msgstr ""
"значення \"preserve\",\n"
"який більше не підтримується; натомість використовуйте \"merges\""
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Перебазування не відбувається?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/vi.po b/po/vi.po
index d673745ac5b..869fb735c83 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9963,7 +9963,7 @@ msgstr ""
"'preserve',\n"
"cái mà giờ không còn được hỗ trợ nữa; dùng 'merges' để thay thế"
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "Không có tiến trình rebase nào phải không?"
msgid "The --edit-todo action can only be used during interactive rebase."
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 39efaf1012a..60ca9ffb2cb 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -12723,7 +12723,7 @@ msgstr ""
"取而代之请使用 'merges'"
#: builtin/rebase.c
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "没有正在进行的变基?"
#: builtin/rebase.c
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 312dd128a41..5794e3f36fc 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -12603,7 +12603,7 @@ msgstr ""
"請改用 “merges”"
#: builtin/rebase.c
-msgid "No rebase in progress?"
+msgid "No rebase in progress"
msgstr "沒有正在進行的重定基底?"
#: builtin/rebase.c
base-commit: 96c8a0712e569dd2812bf4fb5e72113caf326500
--
gitgitgadget
^ permalink raw reply related
* Re: [PATCH] Revert "Declare both git-switch and git-restore experimental"
From: Kristoffer Haugsbakk @ 2024-02-20 16:20 UTC (permalink / raw)
To: Martin
Cc: Nguyễn Thái Ngọc Duy, Junio C Hamano, git,
Matthieu Baerts (NGI0)
In-Reply-To: <dfaed16c-5e24-4dfb-8afd-b703134e5ada@mfriebe.de>
On Tue, Feb 20, 2024, at 14:32, Martin wrote:
> On 20/02/2024 10:36, Kristoffer Haugsbakk wrote:
>> On Tue, Feb 20, 2024, at 10:29, Matthieu Baerts (NGI0) wrote:
>>
>>> This reverts commit 4e43b7ff1ea4b6f16b93a432b6718e9ab38749bd.
>>> Version 2.44 is approaching, almost 5 years after the introduction of
>>> these two commands, it then looks safe to remove this experimental
>>> status.
>>>
>> Is this only based on the amount of time passed? Has there been any
>> relevant discussions on the mailing list that discuss how mature these
>> commands are and if they should be changed (with presumably a “no” to
>> the question about being changed)?
>>
>>
>
> Isn't the absence over such a long time of such a discussion in itself a statement?
> If there had been need for a discussion, would it not have happened by now?
I don’t know if there has been an absence of it. That’s why I asked.
--
Kristoffer Haugsbakk
^ permalink raw reply
* Re: [PATCH 0/5] promise: introduce promises to track success or error
From: Junio C Hamano @ 2024-02-20 16:20 UTC (permalink / raw)
To: Patrick Steinhardt
Cc: phillip.wood, Jeff King, Philip Peterson via GitGitGadget, git,
Johannes Schindelin, Emily Shaffer, Philip Peterson
In-Reply-To: <ZdSYxF3Hd6Zqt3Wd@tanuki>
Patrick Steinhardt <ps@pks.im> writes:
> While we're already at it throwing ideas around, I also have to wonder
> whether this would be a long-term solution towards computer-friendly
> errors. One of the problems we quite frequently hit in Gitaly is that we
> are forced to parse error messages in order to figure out why exactly
> something has failed. Needless to say, this is quite fragile and also
> feels very wrong.
>
> Now if we had a more structured way to pass errors around this might
> also enable us to convey more meaning to the caller of Git commands. In
> a hypothetical world where all errors were using an explicit error type,
> then this error type could eventually become richer and contain more
> information that is relevant to the calling script. And if such rich
> error information was available, then it would not be that far fetched
> to ask Git to emit errors in a computer-parsable format like for example
> JSON.
I do not know about the "JSON-parseable" part, but a structured
error message, or even just a set of error codes that can be
recorded in an index, might already be a great improvement.
^ permalink raw reply
* Re: [PATCH] documentation: send-email: use camel case consistently
From: Junio C Hamano @ 2024-02-20 16:22 UTC (permalink / raw)
To: Dragan Simic; +Cc: git
In-Reply-To: <33abb630c1d089e39ff48f04e586b1c0@manjaro.org>
Dragan Simic <dsimic@manjaro.org> writes:
> Though, "CC" should remain written as "Cc", because it's the way email
> headers are capitalized, which "Cc" refers to.
E-mail headers are case insensitive, though. See above ;-).
^ permalink raw reply
* Re: [PATCH] documentation: send-email: use camel case consistently
From: Dragan Simic @ 2024-02-20 16:29 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <xmqqo7cbt8a0.fsf@gitster.g>
On 2024-02-20 17:22, Junio C Hamano wrote:
> Dragan Simic <dsimic@manjaro.org> writes:
>
>> Though, "CC" should remain written as "Cc", because it's the way email
>> headers are capitalized, which "Cc" refers to.
>
> E-mail headers are case insensitive, though. See above ;-).
I've never ever seen anyone referring to email headers as "TO", "CC" or
"BCC". It's always referred to as "To", "Cc" and "Bcc".
Moreover, RFC2076 [1] refers to them as "To", "cc" and "bcc". This
makes it debatable whether "Cc" and "Bcc" are formally the right forms
to use in regular conversations, but also makes it clear they aren't
to be treated as abbreviations.
[1] https://datatracker.ietf.org/doc/html/rfc2076
^ permalink raw reply
* Re: [PATCH] documentation: send-email: use camel case consistently
From: Dragan Simic @ 2024-02-20 16:50 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <9d0022ba5666223af94bbf450909b1ba@manjaro.org>
On 2024-02-20 17:29, Dragan Simic wrote:
> On 2024-02-20 17:22, Junio C Hamano wrote:
>> Dragan Simic <dsimic@manjaro.org> writes:
>>
>>> Though, "CC" should remain written as "Cc", because it's the way
>>> email
>>> headers are capitalized, which "Cc" refers to.
>>
>> E-mail headers are case insensitive, though. See above ;-).
>
> I've never ever seen anyone referring to email headers as "TO", "CC" or
> "BCC". It's always referred to as "To", "Cc" and "Bcc".
>
> Moreover, RFC2076 [1] refers to them as "To", "cc" and "bcc". This
> makes it debatable whether "Cc" and "Bcc" are formally the right forms
> to use in regular conversations, but also makes it clear they aren't
> to be treated as abbreviations.
>
> [1] https://datatracker.ietf.org/doc/html/rfc2076
Here are a few more interesting links:
- https://en.wikipedia.org/wiki/Carbon_copy
- https://bugzilla.mozilla.org/show_bug.cgi?id=212059
- https://bugzilla.mozilla.org/show_bug.cgi?id=50826
Thus, "cc" stems from the old age of literal carbon copies, and "bcc"
was
seemingly coined when email took over. Technically, "CC" and "BCC" (or
"cc" and "bcc") _are_ abbreviations, but the slightly incorrect "Cc" and
"Bcc" forms simply became widespread and took over.
If you insist on using "CC", I'd be fine with that, but frankly, I think
that would actually be confusing to the users.
^ permalink raw reply
* [ANNOUNCE] Git v2.44.0-rc2
From: Junio C Hamano @ 2024-02-20 17:09 UTC (permalink / raw)
To: git; +Cc: Linux Kernel, git-packagers
A release candidate Git v2.44.0-rc2 is now available for testing at
the usual places. It is comprised of 502 non-merge commits since
v2.43.0, contributed by 85 people, 34 of which are new faces [*].
I was planning to do without -rc2 and directly go to the final
release, but there was a last-minute regression discovered, whose
fix is included in this (hopefully) final release candidate.
The tarballs are found at:
https://www.kernel.org/pub/software/scm/git/testing/
The following public repositories all have a copy of the
'v2.44.0-rc2' tag and the 'master' branch that the tag points at:
url = https://git.kernel.org/pub/scm/git/git
url = https://kernel.googlesource.com/pub/scm/git/git
url = git://repo.or.cz/alt-git.git
url = https://github.com/gitster/git
New contributors whose contributions weren't in v2.43.0 are as follows.
Welcome to the Git development community!
Achu Luma, Antonin Delpeuch, Benjamin Lehmann, Britton Leo Kerin,
Carlos Andrés Ramírez Cataño, Chandra Pratap, Ghanshyam
Thakkar, Illia Bobyr, James Touton, Janik Haag, Joanna Wang,
Josh Brobst, Julian Prein, Justin Tobler, Kyle Lippincott,
lumynou5, Maarten van der Schrieck, Marcel Krause, Marcelo
Roberto Jimenez, Michael Lohmann, moti sd, Nikolay Borisov,
Nikolay Edigaryev, Ondrej Pohorelsky, Sam Delmerico, Sergey
Kosukhin, Shreyansh Paliwal, Sören Krecker, Stan Hu, Tamino
Bauknecht, Wilfred Hughes, Willem Verstraeten, Xiaoguang WANG,
and Zach FettersMoore.
Returning contributors who helped this release are as follows.
Thanks for your continued support.
Alexander Shopov, Andy Koppe, Arkadii Yakovets, Arthur Chan,
Bagas Sanjaya, Calvin Wan, Carlo Marcelo Arenas Belón, Christian
Couder, Dragan Simic, Elijah Newren, Emir SARI, Eric Sunshine,
Glen Choo, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,
Jeff King, Jiang Xin, Johannes Schindelin, John Cai, Jonathan
Tan, Jordi Mas, Josh Soref, Josh Steadmon, Josip Sokcevic, Junio
C Hamano, Kate Golovanova, Konstantin Ryabitsev, Kristoffer
Haugsbakk, Linus Arver, Matthias Aßhauer, M Hickford, Orgad
Shaneh, Oswald Buddenhagen, Patrick Steinhardt, Peter Krefting,
Philippe Blain, Phillip Wood, Ralf Thielow, Randall S. Becker,
René Scharfe, Rubén Justo, Simon Ser, SZEDER Gábor, Taylor
Blau, Teng Long, Todd Zullinger, Toon Claes, Vegard Nossum,
Victoria Dye, and Yi-Jyun Pan.
[*] We are counting not just the authorship contribution but issue
reporting, mentoring, helping and reviewing that are recorded in
the commit trailers.
----------------------------------------------------------------
Git v2.44 Release Notes (draft)
===============================
Backward Compatibility Notes
* "git checkout -B <branch>" used to allow switching to a branch that
is in use on another worktree, but this was by mistake. The users
need to use "--ignore-other-worktrees" option.
UI, Workflows & Features
* "git add" and "git stash" learned to support the ":(attr:...)"
magic pathspec.
* "git rebase --autosquash" is now enabled for non-interactive rebase,
but it is still incompatible with the apply backend.
* Introduce "git replay", a tool meant on the server side without
working tree to recreate a history.
* "git merge-file" learned to take the "--diff-algorithm" option to
use algorithm different from the default "myers" diff.
* Command line completion (in contrib/) learned to complete path
arguments to the "add/set" subcommands of "git sparse-checkout"
better.
* "git checkout -B <branch> [<start-point>]" allowed a branch that is
in use in another worktree to be updated and checked out, which
might be a bit unexpected. The rule has been tightened, which is a
breaking change. "--ignore-other-worktrees" option is required to
unbreak you, if you are used to the current behaviour that "-B"
overrides the safety.
* The builtin_objectmode attribute is populated for each path
without adding anything in .gitattributes files, which would be
useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
to limit to executables.
* "git fetch" learned to pay attention to "fetch.all" configuration
variable, which pretends as if "--all" was passed from the command
line when no remote parameter was given.
* In addition to (rather cryptic) Security Identifiers, show username
and domain in the error message when we barf on mismatch between
the Git directory and the current user on Windows.
* The error message given when "git branch -d branch" fails due to
commits unique to the branch has been split into an error and a new
conditional advice message.
* When given an existing but unreadable file as a configuration file,
gitweb behaved as if the file did not exist at all, but now it
errors out. This is a change that may break backward compatibility.
* When $HOME/.gitconfig is missing but XDG config file is available, we
should write into the latter, not former. "git gc" and "git
maintenance" wrote into a wrong "global config" file, which have
been corrected.
* Define "special ref" as a very narrow set that consists of
FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
be classified as such are actually just pseudorefs.
* All conditional "advice" messages show how to turn them off, which
becomes repetitive. Setting advice.* configuration explicitly on
now omits the instruction part.
* The "disable repository discovery of a bare repository" check,
triggered by setting safe.bareRepository configuration variable to
'explicit', has been loosened to exclude the ".git/" directory inside
a non-bare repository from the check. So you can do "cd .git &&
git cmd" to run a Git command that works on a bare repository without
explicitly specifying $GIT_DIR now.
* The completion script (in contrib/) learned more options that can
be used with "git log".
* The labels on conflict markers for the common ancestor, our version,
and the other version are available to custom 3-way merge driver
via %S, %X, and %Y placeholders.
* The write codepath for the reftable data learned to honor
core.fsync configuration.
* The "--fsck-objects" option of "git index-pack" now can take the
optional parameter to tweak severity of different fsck errors.
* The wincred credential backend has been taught to support oauth
refresh token the same way as credential-cache and
credential-libsecret backends.
* Command line completion support (in contrib/) has been
updated for "git bisect".
* "git branch" and friends learned to use the formatted text as
sorting key, not the underlying timestamp value, when the --sort
option is used with author or committer timestamp with a format
specifier (e.g., "--sort=creatordate:format:%H:%M:%S").
* The command line completion script (in contrib/) learned to
complete configuration variable names better.
Performance, Internal Implementation, Development Support etc.
* Process to add some form of low-level unit tests has started.
* Add support for GitLab CI.
* "git for-each-ref --no-sort" still sorted the refs alphabetically
which paid non-trivial cost. It has been redefined to show output
in an unspecified order, to allow certain optimizations to take
advantage of.
* Simplify API implementation to delete references by eliminating
duplication.
* Subject approxidate() and show_date() machinery to OSS-Fuzz.
* A new helper to let us pretend that we called lstat() when we know
our cache_entry is up-to-date via fsmonitor.
* The optimization based on fsmonitor in the "diff --cached"
codepath is resurrected with the "fake-lstat" introduced earlier.
* Test balloon to use C99 "bool" type from <stdbool.h> has been
added.
* "git clone" has been prepared to allow cloning a repository with
non-default hash function into a repository that uses the reftable
backend.
* Streaming spans of packfile data used to be done only from a
single, primary, pack in a repository with multiple packfiles. It
has been extended to allow reuse from other packfiles, too.
* Comment updates to help developers not to attempt to modify
messages from plumbing commands that must stay constant.
It might make sense to reassess the plumbing needs every few years,
but that should be done as a separate effort.
* Move test-ctype helper to the unit-test framework.
* Instead of manually creating refs/ hierarchy on disk upon a
creation of a secondary worktree, which is only usable via the
files backend, use the refs API to populate it.
* CI for GitLab learned to drive macOS jobs.
* A few tests to "git commit -o <pathspec>" and "git commit -i
<pathspec>" has been added.
* Tests on ref API are moved around to prepare for reftable.
* The Makefile often had to say "-L$(path) -R$(path)" that repeats
the path to the same library directory for link time and runtime.
A Makefile template is used to reduce such repetition.
* The priority queue test has been migrated to the unit testing
framework.
* Setting `feature.experimental` opts the user into multi-pack reuse
experiment
* Squelch node.js 16 deprecation warnings from GitHub Actions CI
by updating actions/github-script and actions/checkout that use
node.js 20.
* The mechanism to report the filename in the source code, used by
the unit-test machinery, assumed that the compiler expanded __FILE__
to the path to the source given to the $(CC), but some compilers
give full path, breaking the output. This has been corrected.
Fixes since v2.43
-----------------
* The way CI testing used "prove" could lead to running the test
suite twice needlessly, which has been corrected.
* Update ref-related tests.
* "git format-patch --encode-email-headers" ignored the option when
preparing the cover letter, which has been corrected.
* Newer versions of Getopt::Long started giving warnings against our
(ab)use of it in "git send-email". Bump the minimum version
requirement for Perl to 5.8.1 (from September 2002) to allow
simplifying our implementation.
* Earlier we stopped relying on commit-graph that (still) records
information about commits that are lost from the object store,
which has negative performance implications. The default has been
flipped to disable this pessimization.
* Stale URLs have been updated to their current counterparts (or
archive.org) and HTTP links are replaced with working HTTPS links.
* trace2 streams used to record the URLs that potentially embed
authentication material, which has been corrected.
* The sample pre-commit hook that tries to catch introduction of new
paths that use potentially non-portable characters did not notice
an existing path getting renamed to such a problematic path, when
rename detection was enabled.
* The command line parser for the "log" family of commands was too
loose when parsing certain numbers, e.g., silently ignoring the
extra 'q' in "git log -n 1q" without complaining, which has been
tightened up.
* "git $cmd --end-of-options --rev -- --path" for some $cmd failed
to interpret "--rev" as a rev, and "--path" as a path. This was
fixed for many programs like "reset" and "checkout".
* "git bisect reset" has been taught to clean up state files and refs
even when BISECT_START file is gone.
* Some codepaths did not correctly parse configuration variables
specified with valueless "true", which has been corrected.
* Code clean-up for sanity checking of command line options for "git
show-ref".
* The code to parse the From e-mail header has been updated to avoid
recursion.
* "git fetch --atomic" issued an unnecessary empty error message,
which has been corrected.
* Command line completion script (in contrib/) learned to work better
with the reftable backend.
* "git status" is taught to show both the branch being bisected and
being rebased when both are in effect at the same time.
* "git archive --list extra garbage" silently ignored excess command
line parameters, which has been corrected.
* "git sparse-checkout set" added default patterns even when the
patterns are being fed from the standard input, which has been
corrected.
* "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
not handle "--end-of-options" correctly after a recent update.
* Unlike other environment variables that took the usual
true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
which has been corrected.
* Clearing in-core repository (happens during e.g., "git fetch
--recurse-submodules" with commit graph enabled) made in-core
commit object in an inconsistent state by discarding the necessary
data from commit-graph too early, which has been corrected.
* Update to a new feature recently added, "git show-ref --exists".
* oss-fuzz tests are built and run in CI.
(merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).
* Rename detection logic ignored the final line of a file if it is an
incomplete line.
* GitHub CI update.
(merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).
* "git diff --no-rename A B" did not disable rename detection but did
not trigger an error from the command line parser.
* "git archive --remote=<remote>" learned to talk over the smart
http (aka stateless) transport.
(merge 176cd68634 jx/remote-archive-over-smart-http later to maint).
* Fetching via protocol v0 over Smart HTTP transport sometimes failed
to correctly auto-follow tags.
(merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).
* The documentation for the --exclude-per-directory option marked it
as deprecated, which confused readers into thinking there may be a
plan to remove it in the future, which was not our intention.
(merge 0009542cab jc/ls-files-doc-update later to maint).
* "git diff --no-index file1 file2" segfaulted while invoking the
external diff driver, which has been corrected.
* Rewrite //-comments to /* comments */ in files whose comments
prevalently use the latter.
* Cirrus CI jobs started breaking because we specified version of
FreeBSD that is no longer available, which has been corrected.
(merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).
* A caller called index_file_exists() that takes a string expressed
as <ptr, length> with a wrong length, which has been corrected.
(merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).
* A failed "git tag -s" did not necessarily result in an error
depending on the crypto backend, which has been corrected.
* "git stash" sometimes was silent even when it failed due to
unwritable index file, which has been corrected.
* "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD",
which has been corrected.
* Recent conversion to allow more than 0/1 in GIT_FLUSH broke the
mechanism by flipping what yes/no means by mistake, which has been
corrected.
* The sequencer machinery does not use the ref API and instead
records names of certain objects it needs for its correct operation
in temporary files, which makes these objects susceptible to loss
by garbage collection. These temporary files have been added as
starting points for reachability analysis to fix this.
(merge bc7f5db896 pw/gc-during-rebase later to maint).
* "git cherry-pick" invoked during "git rebase -i" session lost
the authorship information, which has been corrected.
(merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint).
* The code paths that call repo_read_object_file() have been
tightened to react to errors.
(merge 568459bf5e js/check-null-from-read-object-file later to maint).
* Other code cleanup, docfix, build fix, etc.
(merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
(merge 9cce3be2df bk/bisect-doc-fix later to maint).
(merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
(merge 3cb4384683 jc/t0091-with-unknown-git later to maint).
(merge 020456cb74 rs/receive-pack-remove-find-header later to maint).
(merge bc47139f4f la/trailer-cleanups later to maint).
----------------------------------------------------------------
Changes since v2.43.0 are as follows:
Achu Luma (2):
unit-tests: rewrite t/helper/test-ctype.c as a unit test
t2400: avoid losing exit status to pipes
Alexander Shopov (1):
l10n: bg.po: Updated Bulgarian translation (5610t)
Andy Koppe (3):
rebase: fully ignore rebase.autoSquash without -i
rebase: support --autosquash without -i
rebase: rewrite --(no-)autosquash documentation
Antonin Delpeuch (2):
merge-file: add --diff-algorithm option
merge-ll: expose revision names to custom drivers
Arkadii Yakovets (3):
l10n: uk: v2.44 localization update
l10n: uk: v2.44 update (round 2)
l10n: uk: v2.44 update (round 3)
Arthur Chan (1):
fuzz: add new oss-fuzz fuzzer for date.c / date.h
Bagas Sanjaya (1):
l10n: po-id for 2.44 (round 1)
Britton Leo Kerin (9):
doc: use singular form of repeatable path arg
doc: refer to pathspec instead of path
completion: tests: always use 'master' for default initial branch name
completion: bisect: complete bad, new, old, and help subcommands
completion: bisect: complete custom terms and related options
completion: bisect: complete missing --first-parent and - -no-checkout options
completion: new function __git_complete_log_opts
completion: bisect: complete log opts for visualize subcommand
completion: bisect: recognize but do not complete view subcommand
Carlo Marcelo Arenas Belón (1):
ci: update FreeBSD cirrus job
Chandra Pratap (4):
sideband.c: remove redundant 'NEEDSWORK' tag
write-or-die: make GIT_FLUSH a Boolean environment variable
t4129: prevent loss of exit code due to the use of pipes
tests: move t0009-prio-queue.sh to the new unit testing framework
Elijah Newren (32):
t6429: remove switching aspects of fast-rebase
replay: introduce new builtin
replay: start using parse_options API
replay: die() instead of failing assert()
replay: introduce pick_regular_commit()
replay: change rev walking options
replay: add an important FIXME comment about gpg signing
replay: remove progress and info output
replay: remove HEAD related sanity check
replay: make it a minimal server side command
replay: use standard revision ranges
replay: add --advance or 'cherry-pick' mode
replay: add --contained to rebase contained branches
replay: stop assuming replayed branches do not diverge
completion: squelch stray errors in sparse-checkout completion
completion: fix logic for determining whether cone mode is active
completion: avoid misleading completions in cone mode
completion: avoid user confusion in non-cone mode
treewide: remove unnecessary includes from header files
treewide: remove unnecessary includes in source files
archive.h: remove unnecessary include
blame.h: remove unnecessary includes
fsmonitor--daemon.h: remove unnecessary includes
http.h: remove unnecessary include
line-log.h: remove unnecessary include
pkt-line.h: remove unnecessary include
submodule-config.h: remove unnecessary include
trace2/tr2_tls.h: remove unnecessary include
treewide: add direct includes currently only pulled in transitively
treewide: remove unnecessary includes in source files
sparse-checkout: be consistent with end of options markers
diffcore-delta: avoid ignoring final 'line' of file
Emir SARI (1):
l10n: tr: Update Turkish translations for 2.44
Eric Sunshine (1):
git-add.txt: add missing short option -A to synopsis
Ghanshyam Thakkar (4):
t7501: add tests for --include and --only
t7501: add tests for --amend --signoff
t0024: avoid losing exit status to pipes
t0024: style fix
Illia Bobyr (1):
rebase: clarify --reschedule-failed-exec default
James Touton (1):
git-p4: use raw string literals for regular expressions
Jean-Noël Avila (3):
doc: enforce dashes in placeholders
doc: enforce placeholders in documentation
l10n: fr.po: v2.44.0 round 3
Jeff Hostetler (4):
trace2: fix signature of trace2_def_param() macro
t0211: test URL redacting in PERF format
t0212: test URL redacting in EVENT format
sparse-index: pass string length to index_file_exists()
Jeff King (39):
commit-graph: handle overflow in chunk_size checks
midx: check consistency of fanout table
commit-graph: drop redundant call to "lite" verification
commit-graph: clarify missing-chunk error messages
commit-graph: abort as soon as we see a bogus chunk
commit-graph: use fanout value for graph size
commit-graph: check order while reading fanout chunk
commit-graph: drop verify_commit_graph_lite()
commit-graph: mark chunk error messages for translation
parse-options: decouple "--end-of-options" and "--"
bisect: always clean on reset
config: handle NULL value when parsing non-bools
setup: handle NULL value when parsing extensions
trace2: handle NULL values in tr2_sysenv config callback
help: handle NULL value for alias.* config
submodule: handle NULL value when parsing submodule.*.branch
trailer: handle NULL value when parsing trailer-specific config
fsck: handle NULL value when parsing message config
config: reject bogus values for core.checkstat
git_xmerge_config(): prefer error() to die()
imap-send: don't use git_die_config() inside callback
config: use config_error_nonbool() instead of custom messages
diff: give more detailed messages for bogus diff.* config
config: use git_config_string() for core.checkRoundTripEncoding
push: drop confusing configset/callback redundancy
gpg-interface: drop pointless config_error_nonbool() checks
sequencer: simplify away extra git_config_string() call
mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair()
t5100: make rfc822 comment test more careful
mailinfo: avoid recursion when unquoting From headers
t1006: add tests for %(objectsize:disk)
commit-graph: retain commit slab when closing NULL commit_graph
index-pack: spawn threads atomically
transport-helper: re-examine object dir after fetching
diff: handle NULL meta-info when spawning external diff
Makefile: use mkdir_p_parent_template for UNIT_TEST_BIN
Makefile: remove UNIT_TEST_BIN directory with "make clean"
t/Makefile: get UNIT_TESTS list from C sources
trailer: fix comment/cut-line regression with opts->no_divider
Jiang Xin (14):
t5574: test porcelain output of atomic fetch
fetch: no redundant error message for atomic fetch
test-pkt-line: add option parser for unpack-sideband
pkt-line: memorize sideband fragment in reader
pkt-line: do not chomp newlines for sideband messages
transport-helper: no connection restriction in connect_helper
remote-curl: supports git-upload-archive service
transport-helper: protocol v2 supports upload-archive
http-backend: new rpc-service for git-upload-archive
transport-helper: call do_take_over() in connect_helper
transport-helper: call do_take_over() in process_connect
diff: mark param1 and param2 as placeholders
l10n: ci: remove unused param for add-pr-comment@v2
l10n: ci: disable cache for setup-go to suppress warnings
Joanna Wang (2):
attr: enable attr pathspec magic for git-add and git-stash
attr: add builtin objectmode values support
Johannes Schindelin (15):
artifacts-tar: when including `.dll` files, don't forget the unit-tests
cmake: fix typo in variable name
cmake: also build unit tests
cmake: use test names instead of full paths
unit-tests: do not mistake `.pdb` files for being executable
cmake: handle also unit tests
unit-tests: do show relative file paths
ci: avoid running the test suite _twice_
packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration
trace2: redact passwords from https:// URLs by default
win32: special-case `ENOSPC` when writing to a pipe
Always check the return value of `repo_read_object_file()`
l10n: bump Actions versions in l10n.yml
ci: bump remaining outdated Actions versions
ci(linux32): add a note about Actions that must not be updated
John Cai (15):
t3210: move to t0601
remove REFFILES prerequisite for some tests in t1405 and t2017
t1414: convert test to use Git commands instead of writing refs manually
t1404: move reffiles specific tests to t0600
t1405: move reffiles specific tests to t0601
t1406: move reffiles specific tests to t0600
t1410: move reffiles specific tests to t0600
t1415: move reffiles specific tests to t0601
t1503: move reffiles specific tests to t0600
t3903: make drop stash test ref backend agnostic
t4202: move reffiles specific tests to t0600
t5312: move reffiles specific tests to t0601
reftable: honor core.fsync
index-pack: test and document --strict=<msg-id>=<severity>...
index-pack: --fsck-objects to take an optional argument for fsck msgs
Jordi Mas (1):
l10n: Update Catalan translation
Josh Brobst (1):
builtin/reflog.c: fix dry-run option short name
Josh Soref (13):
doc: update links to current pages
doc: switch links to https
doc: update links for andre-simon.de
doc: refer to internet archive
CodingGuidelines: move period inside parentheses
CodingGuidelines: write punctuation marks
SubmittingPatches: drop ref to "What's in git.git"
SubmittingPatches: discourage new trailers
SubmittingPatches: update extra tags list
SubmittingPatches: provide tag naming advice
SubmittingPatches: clarify GitHub visual
SubmittingPatches: clarify GitHub artifact format
SubmittingPatches: hyphenate non-ASCII
Josh Steadmon (4):
unit tests: add a project plan document
ci: run unit tests in CI
fuzz: fix fuzz test build rules
ci: build and run minimal fuzzers in GitHub CI
Julian Prein (1):
hooks--pre-commit: detect non-ASCII when renaming
Junio C Hamano (57):
cache: add fake_lstat()
diff-lib: fix check_removed() when fsmonitor is active
checkout: refactor die_if_checked_out() caller
orphan/unborn: add to the glossary and use them consistently
orphan/unborn: fix use of 'orphan' in end-user facing messages
revision: parse integer arguments to --max-count, --skip, etc., more carefully
Start the 2.44 cycle
checkout: forbid "-B <branch>" from touching a branch used elsewhere
git.txt: HEAD is not that special
git-bisect.txt: BISECT_HEAD is not that special
refs.h: HEAD is not that special
docs: AUTO_MERGE is not that special
docs: MERGE_AUTOSTASH is not that special
doc: format.notes specify a ref under refs/notes/ hierarchy
The second batch
remote.h: retire CAS_OPT_NAME
The third batch
archive: "--list" does not take further options
sparse-checkout: use default patterns for 'set' only !stdin
The fourth batch
The fifth batch
The sixth batch
messages: mark some strings with "up-to-date" not to touch
The seventh batch
The eighth batch
The ninth batch
Docs: majordomo@vger.kernel.org has been decomissioned
CoC: whitespace fix
ls-files: avoid the verb "deprecate" for individual options
The tenth batch
builtin/worktree: comment style fixes
merge-ort.c: comment style fix
reftable/pq_test: comment style fix
The eleventh batch
t0091: allow test in a repository without tags
The twelfth batch
Makefile: reduce repetitive library paths
Makefile: simplify output of the libpath_template
The thirteenth batch
GitHub Actions: update to checkout@v4
GitHub Actions: update to github-script@v7
t/Makefile: say the default target upfront
The fourteenth batch
tag: fix sign_buffer() call to create a signed tag
bisect: document "terms" subcommand more fully
bisect: document command line arguments for "bisect start"
ssh signing: signal an error with a negative return value
The fifteenth batch
Git 2.43.1
Git 2.44-rc0
unit-tests: do show relative file paths on non-Windows, too
A few more topics before -rc1
write-or-die: fix the polarity of GIT_FLUSH environment variable
A few more fixes before -rc1
Git 2.43.2
Hopefully the last batch of fixes before 2.44 final
Git 2.44-rc2
Justin Tobler (2):
t1401: remove lockfile creation
t5541: remove lockfile creation
Kristoffer Haugsbakk (5):
config: format newlines
config: rename global config function
config: factor out global config file retrieval
maintenance: use XDG config if it exists
config: add back code comment
Kyle Lippincott (1):
setup: allow cwd=.git w/ bareRepository=explicit
Linus Arver (4):
commit: ignore_non_trailer computes number of bytes to ignore
trailer: find the end of the log message
trailer: use offsets for trailer_start/trailer_end
strvec: use correct member name in comments
M Hickford (1):
credential/wincred: store oauth_refresh_token
Maarten van der Schrieck (1):
Documentation: fix statement about rebase.instructionFormat
Marcel Krause (1):
doc: make the gitfile syntax easier to discover
Marcelo Roberto Jimenez (1):
gitweb: die when a configuration file cannot be read
Michael Lohmann (2):
Documentation/git-merge.txt: fix reference to synopsis
Documentation/git-merge.txt: use backticks for command wrapping
Nikolay Borisov (1):
rebase: fix documentation about used shell in -x
Nikolay Edigaryev (1):
rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer
Patrick Steinhardt (139):
t: allow skipping expected object ID in `ref-store update-ref`
t: convert tests to not write references via the filesystem
t: convert tests to not access symrefs via the filesystem
t: convert tests to not access reflog via the filesystem
t1450: convert tests to remove worktrees via git-worktree(1)
t4207: delete replace references via git-update-ref(1)
t7300: assert exact states of repo
t7900: assert the absence of refs via git-for-each-ref(1)
t: mark several tests that assume the files backend with REFFILES
ci: reorder definitions for grouping functions
ci: make grouping setup more generic
ci: group installation of Docker dependencies
ci: split out logic to set up failed test artifacts
ci: unify setup of some environment variables
ci: squelch warnings when testing with unusable Git repo
ci: install test dependencies for linux-musl
ci: add support for GitLab CI
t/lib-httpd: dynamically detect httpd and modules path
t/lib-httpd: stop using legacy crypt(3) for authentication
t9164: fix inability to find basename(1) in Subversion hooks
global: convert trivial usages of `test <expr> -a/-o <expr>`
contrib/subtree: stop using `-o` to test for number of args
contrib/subtree: convert subtree type check to use case statement
Makefile: stop using `test -o` when unlinking duplicate executables
t5510: ensure that the packed-refs file needs locking
refs/files: use transactions to delete references
refs: deduplicate code to delete references
refs: remove `delete_refs` callback from backends
commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default
t0410: mark tests to require the reffiles backend
t1400: split up generic reflog tests from the reffile-specific ones
t1401: stop treating FETCH_HEAD as real reference
t1410: use test-tool to create empty reflog
t1417: make `reflog --updateref` tests backend agnostic
t3310: stop checking for reference existence via `test -f`
t4013: simplify magic parsing and drop "failure"
t5401: speed up creation of many branches
t5551: stop writing packed-refs directly
t6301: write invalid object ID via `test-tool ref-store`
reftable: wrap EXPECT macros in do/while
reftable: handle interrupted reads
reftable: handle interrupted writes
reftable/stack: verify that `reftable_stack_add()` uses auto-compaction
reftable/stack: perform auto-compaction with transactional interface
reftable/stack: reuse buffers when reloading stack
reftable/stack: fix stale lock when dying
reftable/stack: fix use of unseeded randomness
reftable/merged: reuse buffer to compute record keys
reftable/block: introduce macro to initialize `struct block_iter`
reftable/block: reuse buffer to compute record keys
setup: extract function to create the refdb
setup: allow skipping creation of the refdb
remote-curl: rediscover repository when fetching refs
builtin/clone: fix bundle URIs with mismatching object formats
builtin/clone: set up sparse checkout later
builtin/clone: skip reading HEAD when retrieving remote
builtin/clone: create the refdb with the correct object format
wt-status: read HEAD and ORIG_HEAD via the refdb
refs: propagate errno when reading special refs fails
refs: complete list of special refs
bisect: consistently write BISECT_EXPECTED_REV via the refdb
tests: adjust whitespace in chainlint expectations
t: introduce DEFAULT_REPO_FORMAT prereq
worktree: skip reading HEAD when repairing worktrees
refs: refactor logic to look up storage backends
setup: start tracking ref storage format
setup: set repository's formats on init
setup: introduce "extensions.refStorage" extension
setup: introduce GIT_DEFAULT_REF_FORMAT envvar
t: introduce GIT_TEST_DEFAULT_REF_FORMAT envvar
builtin/rev-parse: introduce `--show-ref-format` flag
builtin/init: introduce `--ref-format=` value flag
builtin/clone: introduce `--ref-format=` value flag
t9500: write "extensions.refstorage" into config
reftable/stack: do not overwrite errors when compacting
reftable/stack: do not auto-compact twice in `reftable_stack_add()`
reftable/writer: fix index corruption when writing multiple indices
reftable/record: constify some parts of the interface
reftable/record: store "val1" hashes as static arrays
reftable/record: store "val2" hashes as static arrays
reftable/merged: really reuse buffers to compute record keys
reftable/merged: transfer ownership of records when iterating
git-prompt: stop manually parsing HEAD with unknown ref formats
ci: add job performing static analysis on GitLab CI
refs: prepare `refs_init_db()` for initializing worktree refs
setup: move creation of "refs/" into the files backend
refs/files: skip creation of "refs/{heads,tags}" for worktrees
builtin/worktree: move setup of commondir file earlier
worktree: expose interface to look up worktree by name
builtin/worktree: create refdb via ref backend
reftable/stack: refactor stack reloading to have common exit path
reftable/stack: refactor reloading to use file descriptor
reftable/stack: use stat info to avoid re-reading stack list
reftable/blocksource: refactor code to match our coding style
reftable/blocksource: use mmap to read tables
git-p4: stop reaching into the refdb
commit-graph: fix memory leak when not writing graph
completion: discover repo path in `__git_pseudoref_exists ()`
t9902: verify that completion does not print anything
completion: improve existence check for pseudo-refs
completion: silence pseudoref existence check
completion: treat dangling symrefs as existing pseudorefs
t7527: decrease likelihood of racing with fsmonitor daemon
Makefile: detect new Homebrew location for ARM-based Macs
ci: handle TEST_OUTPUT_DIRECTORY when printing test failures
ci: make p4 setup on macOS more robust
ci: add macOS jobs to GitLab CI
reftable/stack: unconditionally reload stack after commit
reftable/stack: fix race in up-to-date check
sequencer: clean up pseudo refs with REF_NO_DEREF
sequencer: delete REBASE_HEAD in correct repo when picking commits
refs: convert AUTO_MERGE to become a normal pseudo-ref
sequencer: introduce functions to handle autostashes via refs
refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
refs: redefine special refs
Documentation: add "special refs" to the glossary
reftable/stack: adjust permissions of compacted tables
t1300: make tests more robust with non-default ref backends
t1301: mark test for `core.sharedRepository` as reffiles specific
t1302: make tests more robust with new extensions
t1419: mark test suite as files-backend specific
t5526: break test submodule differently
t: mark tests regarding git-pack-refs(1) to be backend specific
reftable/stack: fsync "tables.list" during compaction
reftable/reader: be more careful about errors in indexed seeks
reftable/writer: use correct type to iterate through index entries
reftable/writer: simplify writing index records
reftable/writer: fix writing multi-level indices
reftable: document reading and writing indices
builtin/stash: report failure to write to index
reftable: introduce macros to grow arrays
reftable: introduce macros to allocate arrays
reftable/stack: fix parameter validation when compacting range
reftable/stack: index segments with `size_t`
reftable/stack: use `size_t` to track stack slices during compaction
reftable/stack: use `size_t` to track stack length
reftable/merged: refactor seeking of records
reftable/merged: refactor initialization of iterators
reftable/record: improve semantics when initializing records
Peter Krefting (1):
l10n: sv.po: Update Swedish translation
Philippe Blain (11):
completion: complete missing rev-list options
completion: complete --patch-with-raw
completion: complete --encoding
completion: complete missing 'git log' options
ci(github): also skip logs of broken test cases
imap-send: add missing "strbuf.h" include under NO_CURL
.github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs
completion: add space after config variable names also in Bash 3
completion: complete 'submodule.*' config variables
completion: add and use __git_compute_first_level_config_vars_for_section
completion: add and use __git_compute_second_level_config_vars_for_section
Phillip Wood (4):
unit tests: add TAP unit test framework
show-ref --verify: accept pseudorefs
t1400: use show-ref to check pseudorefs
prune: mark rebase autostash and orig-head as reachable
Ralf Thielow (1):
l10n: Update German translation
René Scharfe (21):
column: release strbuf and string_list after use
i18n: factorize even more 'incompatible options' messages
push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror
repack: use die_for_incompatible_opt3() for -A/-k/--cruft
revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
clean: factorize incompatibility message
worktree: standardize incompatibility messages
worktree: simplify incompatibility message for --orphan and commit-ish
show-ref: use die_for_incompatible_opt3()
t6300: avoid hard-coding object sizes
git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
rebase: use strvec_pushf() for format-patch revisions
fast-import: use mem_pool_calloc()
mem-pool: fix big allocations
mem-pool: simplify alignment calculation
t1006: prefer shell loop to awk for packed object sizes
parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
parse-options: simplify positivation handling
receive-pack: use find_commit_header() in check_cert_push_options()
receive-pack: use find_commit_header() in check_nonce()
Rubén Justo (10):
status: fix branch shown when not only bisecting
branch: clarify <oldbranch> term
advice: sort the advice related lists
advice: fix an unexpected leading space
branch: make the advice to force-deleting a conditional one
advice: allow disabling the automatic hint in advise_if_enabled()
t5332: mark as leak-free
t6113: mark as leak-free
test-lib: check for TEST_PASSES_SANITIZE_LEAK
t0080: mark as leak-free
Sam Delmerico (1):
push: region_leave trace for negotiate_using_fetch
Shreyansh Paliwal (1):
test-lib-functions.sh: fix test_grep fail message wording
Simon Ser (1):
format-patch: fix ignored encode_email_headers for cover letter
Stan Hu (2):
completion: refactor existence checks for pseudorefs
completion: support pseudoref existence checks for reftables
Sören Krecker (1):
mingw: give more details about unsafe directory's ownership
Tamino Bauknecht (1):
fetch: add new config option fetch.all
Taylor Blau (29):
pack-objects: free packing_data in more places
pack-bitmap-write: deep-clear the `bb_commit` slab
pack-bitmap: plug leak in find_objects()
midx: factor out `fill_pack_info()`
midx: implement `BTMP` chunk
midx: implement `midx_locate_pack()`
pack-bitmap: pass `bitmapped_pack` struct to pack-reuse functions
ewah: implement `bitmap_is_empty()`
pack-bitmap: simplify `reuse_partial_packfile_from_bitmap()` signature
pack-bitmap: return multiple packs via `reuse_partial_packfile_from_bitmap()`
pack-objects: parameterize pack-reuse routines over a single pack
pack-objects: keep track of `pack_start` for each reuse pack
pack-objects: pass `bitmapped_pack`'s to pack-reuse functions
pack-objects: prepare `write_reused_pack()` for multi-pack reuse
pack-objects: prepare `write_reused_pack_verbatim()` for multi-pack reuse
pack-objects: include number of packs reused in output
git-compat-util.h: implement checked size_t to uint32_t conversion
midx: implement `midx_preferred_pack()`
pack-revindex: factor out `midx_key_to_pack_pos()` helper
pack-revindex: implement `midx_pair_to_pack_pos()`
pack-bitmap: prepare to mark objects from multiple packs for reuse
pack-objects: add tracing for various packfile metrics
t/test-lib-functions.sh: implement `test_trace2_data` helper
pack-objects: allow setting `pack.allowPackReuse` to "single"
pack-bitmap: enable reuse from all bitmapped packs
t/perf: add performance tests for multi-pack reuse
pack-bitmap: drop unused `reuse_objects`
t5332-multi-pack-reuse.sh: extract pack-objects helper functions
pack-objects: enable multi-pack reuse via `feature.experimental`
Teng Long (1):
l10n: zh_CN: for git 2.44 rounds
Todd Zullinger (3):
perl: bump the required Perl version to 5.8.1 from 5.8.0
send-email: avoid duplicate specification warnings
RelNotes: minor typo fixes in 2.44.0 draft
Toon Claes (1):
builtin/show-ref: treat directory as non-existing in --exists
Vegard Nossum (1):
sequencer: unset GIT_CHERRY_PICK_HELP for 'exec' commands
Victoria Dye (15):
ref-filter.c: really don't sort when using --no-sort
ref-filter.h: add max_count and omit_empty to ref_format
ref-filter.h: move contains caches into filter
ref-filter.h: add functions for filter/format & format-only
ref-filter.c: rename 'ref_filter_handler()' to 'filter_one()'
ref-filter.c: refactor to create common helper functions
ref-filter.c: filter & format refs in the same callback
for-each-ref: clean up documentation of --format
ref-filter.c: use peeled tag for '*' format fields
t/perf: add perf tests for for-each-ref
submodule-config.h: move check_submodule_url
test-submodule: remove command line handling for check-name
t7450: test submodule urls
submodule-config.c: strengthen URL fsck check
ref-filter.c: sort formatted dates by byte value
Yi-Jyun Pan (1):
l10n: zh_TW: Git 2.44
Zach FettersMoore (1):
subtree: fix split processing with multiple subtrees present
^ permalink raw reply
* Re: [PATCH v2 0/7] reflog: introduce subcommand to list reflogs
From: Junio C Hamano @ 2024-02-20 17:22 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git
In-Reply-To: <cover.1708418805.git.ps@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
> struct dir_iterator_level {
> DIR *dir;
> +
> ++ /*
> ++ * The directory entries of the current level. This list will only be
> ++ * populated when the iterator is ordered. In that case, `dir` will be
> ++ * set to `NULL`.
> ++ */
> + struct string_list entries;
> + size_t entries_idx;
Reads well. Nice.
> ++static int next_directory_entry(DIR *dir, const char *path,
> ++ struct dirent **out)
> ++{
> ++ struct dirent *de;
> ++
> ++repeat:
> ++ errno = 0;
> ++ de = readdir(dir);
> ++ if (!de) {
> ++ if (errno) {
> ++ warning_errno("error reading directory '%s'",
> ++ path);
> ++ return -1;
> ++ }
> ++
> ++ return 1;
> ++ }
> ++
> ++ if (is_dot_or_dotdot(de->d_name))
> ++ goto repeat;
> ++
> ++ *out = de;
> ++ return 0;
> ++}
Very nice to encapsulate the common readdir() loop into this helper.
> 3: e4e4fac05c ! 3: 32b24a3d4b refs/files: sort reflogs returned by the reflog iterator
> @@ refs/files-backend.c: static struct ref_iterator *reflog_iterator_begin(struct r
> iter->dir_iterator = diter;
> iter->ref_store = ref_store;
> strbuf_release(&sb);
> +@@ refs/files-backend.c: static struct ref_iterator *files_reflog_iterator_begin(struct ref_store *ref_st
> + return reflog_iterator_begin(ref_store, refs->gitcommondir);
> + } else {
> + return merge_ref_iterator_begin(
> +- 0, reflog_iterator_begin(ref_store, refs->base.gitdir),
> ++ 1, reflog_iterator_begin(ref_store, refs->base.gitdir),
> + reflog_iterator_begin(ref_store, refs->gitcommondir),
> + reflog_iterator_select, refs);
> + }
This hunk is new. Is there a downside to force merged iterators to
always be sorted? The ones that are combined are all sorted so it
is natural to force sorting like this code does? It might deserve
explaining, and would certainly help future readers who runs "blame"
on this code to figure out what made us think always sorting is a
good direction forward.
> -: ---------- > 4: 4254f23fd4 refs: always treat iterators as ordered
This one is new, and deserves a separate review.
> 4: be512ef268 ! 5: 240334df6c refs: drop unused params from the reflog iterator callback
> @@ refs/reftable-backend.c: static int reftable_reflog_iterator_advance(struct ref_
> }
> @@ refs/reftable-backend.c: static struct reftable_reflog_iterator *reflog_iterator_for_stack(struct reftabl
> iter = xcalloc(1, sizeof(*iter));
> - base_ref_iterator_init(&iter->base, &reftable_reflog_iterator_vtable, 1);
> + base_ref_iterator_init(&iter->base, &reftable_reflog_iterator_vtable);
> iter->refs = refs;
> - iter->base.oid = &iter->oid;
>
> 5: a7459b9483 = 6: 7928661318 refs: stop resolving ref corresponding to reflogs
> 6: cddb2de939 = 7: d7b9cff4c3 builtin/reflog: introduce subcommand to list reflogs
Looking good from a cursory read.
Thanks for a quick reroll.
^ permalink raw reply
* Re: [PATCH] rebase: make warning less passive aggressive
From: Junio C Hamano @ 2024-02-20 17:29 UTC (permalink / raw)
To: Harmen Stoppels via GitGitGadget; +Cc: git, Harmen Stoppels
In-Reply-To: <pull.1669.git.1708442603395.gitgitgadget@gmail.com>
"Harmen Stoppels via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Harmen Stoppels <me@harmenstoppels.nl>
>
> When you run `git rebase --continue` when no rebase is in progress, git
> outputs `fatal: no rebase in progress?` which is not a question but a
> statement. This commit makes it appear as a statement.
"This commit makes it appear" -> "Make it appear" (see
SubmittingPatches).
> builtin/rebase.c | 2 +-
This change is very good, but a commit that touches code should not
touch po/ localizations in this project. They are updated to match
the code change by respective language teams.
> po/bg.po | 2 +-
> po/ca.po | 2 +-
> po/de.po | 2 +-
> po/el.po | 2 +-
> po/es.po | 2 +-
> po/fr.po | 2 +-
> po/id.po | 2 +-
> po/it.po | 2 +-
> po/ko.po | 2 +-
> po/pl.po | 2 +-
> po/pt_PT.po | 2 +-
> po/ru.po | 2 +-
> po/sv.po | 2 +-
> po/tr.po | 2 +-
> po/uk.po | 2 +-
> po/vi.po | 2 +-
> po/zh_CN.po | 2 +-
> po/zh_TW.po | 2 +-
> 19 files changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 5b086f651a6..415783c4a21 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -1254,7 +1254,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> die(_("options '%s' and '%s' cannot be used together"), "--root", "--fork-point");
>
> if (options.action != ACTION_NONE && !in_progress)
> - die(_("No rebase in progress?"));
> + die(_("No rebase in progress"));
>
> if (options.action == ACTION_EDIT_TODO && !is_merge(&options))
> die(_("The --edit-todo action can only be used during "
Interestingly this change does not break any test in t/ directory,
which means we have a gap in test coverage. It should not be any
part of this patch, but we may want to add a test to exercise this
codepath (#leftoverbits).
Thanks.
^ permalink raw reply
* Re: [PATCH 02/12] name-hash: add index_dir_exists2()
From: Jeff Hostetler @ 2024-02-20 17:38 UTC (permalink / raw)
To: Junio C Hamano, Jeff Hostetler via GitGitGadget; +Cc: git, Jeff Hostetler
In-Reply-To: <xmqqeddg2g7j.fsf@gitster.g>
On 2/13/24 4:43 PM, Junio C Hamano wrote:
> "Jeff Hostetler via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> From: Jeff Hostetler <jeffhostetler@github.com>
>>
>> Create a new version of index_dir_exists() to return the canonical
>> spelling of the matched directory prefix.
>>
>> The existing index_dir_exists() returns a boolean to indicate if
>> there is a case-insensitive match in the directory name-hash, but
>> it doesn't tell the caller the exact spelling of that match.
>>
>> The new version also copies the matched spelling to a provided strbuf.
>> This lets the caller, for example, then call index_name_pos() with the
>> correct case to search the cache-entry array for the real insertion
>> position.
>>
>> Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
>> ---
>> name-hash.c | 16 ++++++++++++++++
>> name-hash.h | 2 ++
>> 2 files changed, 18 insertions(+)
>>
>> diff --git a/name-hash.c b/name-hash.c
>> index 251f036eef6..d735c81acb3 100644
>> --- a/name-hash.c
>> +++ b/name-hash.c
>> @@ -694,6 +694,22 @@ int index_dir_exists(struct index_state *istate, const char *name, int namelen)
>> dir = find_dir_entry(istate, name, namelen);
>> return dir && dir->nr;
>> }
>> +int index_dir_exists2(struct index_state *istate, const char *name, int namelen,
>> + struct strbuf *canonical_path)
>> +{
>> + struct dir_entry *dir;
>> +
>> + strbuf_init(canonical_path, namelen+1);
>> +
>> + lazy_init_name_hash(istate);
>> + expand_to_path(istate, name, namelen, 0);
>> + dir = find_dir_entry(istate, name, namelen);
>> +
>> + if (dir && dir->nr)
>> + strbuf_add(canonical_path, dir->name, dir->namelen);
>> +
>> + return dir && dir->nr;
>> +}
>>
>> void adjust_dirname_case(struct index_state *istate, char *name)
>
> Missing inter-function blank line, before the new function.
>
> I wonder if we can avoid such repetition---the body of
> index_dir_exists() is 100% shared with this new function.
>
> Isn't it extremely unusual to receive "struct strbuf *" and call
> strbuf_init() on it? It means that the caller is expected to have a
> strbuf and pass a pointer to it, but also it is expected to leave
> the strbuf uninitialized.
>
> I'd understand if it calls strbuf_reset(), but it may not even be
> necessary, if we make it responsibility of the caller to pass a
> valid strbuf to be appended into.
>
> int index_dir_find(struct index_state *istate,
> const char *name, int namelen,
> struct strbuf *canonical_path)
> {
> struct dir_entry *dir;
>
> lazy_init_name_hash(istate);
> expand_to_path(istate, name, namelen, 0);
> dir = find_dir_entry(istate, name, namelen);
>
> if (canonical_path && dir && dir->nr) {
> // strbuf_reset(canonical_path); ???
> strbuf_add(canonical_path, dir->name, dir->namelen);
> }
> return dir && dir->nr;
> }
>
> Then we can do
>
> #define index_dir_exists(i, n, l) index_dir_find((i), (n), (l), NULL)
>
> in the header for existing callers.
>
I'm always a little hesitant to change the signature of an existing
function and chasing all of the callers in the middle of another
task. It can sometimes be distracting to reviewers.
I like your macro approach here. I'll do that in the next version.
Thanks
Jeff
^ permalink raw reply
* Re: [PATCH 01/12] sparse-index: pass string length to index_file_exists()
From: Jeff Hostetler @ 2024-02-20 17:34 UTC (permalink / raw)
To: Junio C Hamano, Jeff Hostetler via GitGitGadget; +Cc: git, Jeff Hostetler
In-Reply-To: <xmqqzfw410j8.fsf@gitster.g>
On 2/13/24 5:07 PM, Junio C Hamano wrote:
> "Jeff Hostetler via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> From: Jeff Hostetler <jeffhostetler@github.com>
>>
>> The call to index_file_exists() in the loop in expand_to_path() passes
>> the wrong string length. Let's fix that.
>>
>> The loop in expand_to_path() searches the name-hash for each
>> sub-directory prefix in the provided pathname. That is, by searching
>> for "dir1/" then "dir1/dir2/" then "dir1/dir2/dir3/" and so on until
>> it finds a cache-entry representing a sparse directory.
>>
>> The code creates "strbuf path_mutable" to contain the working pathname
>> and modifies the buffer in-place by temporarily replacing the character
>> following each successive "/" with NUL for the duration of the call to
>> index_file_exists().
>>
>> It does not update the strbuf.len during this substitution.
>>
>> Pass the patched length of the prefix path instead.
>>
>> Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
>> ---
>
> This looked familiar, and it turns out that
>
> https://lore.kernel.org/git/pull.1649.git.1706897095273.gitgitgadget@gmail.com/
>
> has already been merged to 'master'.
>
>
Great, thanks! I'll drop from the next version.
^ permalink raw reply
* What's cooking in git.git (Feb 2024, #07; Tue, 20)
From: Junio C Hamano @ 2024-02-20 17:44 UTC (permalink / raw)
To: git
Here are the topics that have been cooking in my tree. Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release). Commits prefixed with '-' are only in 'seen', and
aren't considered "accepted" at all and may be annotated with an URL
to a message that raises issues but they are no means exhaustive. A
topic without enough support may be discarded after a long period of
no activity (of course they can be resubmit when new interests
arise).
Git 2.44-rc2 has been tagged to fix a regression discovered the last
minute. The final release is postponed until later this week.
Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors. Some
repositories have only a subset of branches.
With maint, master, next, seen, todo:
git://git.kernel.org/pub/scm/git/git.git/
git://repo.or.cz/alt-git.git/
https://kernel.googlesource.com/pub/scm/git/git/
https://github.com/git/git/
https://gitlab.com/git-vcs/git/
With all the integration branches and topics broken out:
https://github.com/gitster/git/
Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):
git://git.kernel.org/pub/scm/git/git-htmldocs.git/
https://github.com/gitster/git-htmldocs.git/
Release tarballs are available at:
https://www.kernel.org/pub/software/scm/git/
--------------------------------------------------
[Graduated to 'master']
* la/trailer-cleanups (2024-02-19) 1 commit
- trailer: fix comment/cut-line regression with opts->no_divider
Fix to an already-graduated topic.
source: <20240220010936.GA1793660@coredump.intra.peff.net>
--------------------------------------------------
[New Topics]
* as/option-names-in-messages (2024-02-16) 5 commits
- revision.c: trivial fix to message
- builtin/clone.c: trivial fix of message
- builtin/remote.c: trivial fix of error message
- transport-helper.c: trivial fix of error message
- rebase: trivial fix of error message
Error message updates.
Expecting a reroll.
source: <20240216101647.28837-1-ash@kambanaria.org>
* bb/completion-no-grep-into-awk (2024-02-16) 1 commit
(merged to 'next' on 2024-02-19 at 8373f95424)
+ completion: use awk for filtering the config entries
Some parts of command line completion script (in contrib/) have
been micro-optimized.
Will cook in 'next'.
source: <20240216171046.927552-1-dev+git@drbeat.li>
* jb/doc-interactive-singlekey-do-not-need-perl (2024-02-19) 1 commit
(merged to 'next' on 2024-02-19 at 9eda75497d)
+ doc: remove outdated information about interactive.singleKey
Doc clean-up.
Will cook in 'next'.
source: <20240218030327.40453-1-julio.bacel@gmail.com>
* jk/t0303-clean (2024-02-19) 2 commits
(merged to 'next' on 2024-02-19 at f57b65215f)
+ t0303: check that helper_test_clean removes all credentials
+ Merge branch 'ba/credential-test-clean-fix' into jk/t0303-clean
(this branch uses ba/credential-test-clean-fix.)
Test clean-up.
Will cook in 'next'.
source: <20240217045814.GA539459@coredump.intra.peff.net>
* km/mergetool-vimdiff-layout-fallback (2024-02-19) 1 commit
(merged to 'next' on 2024-02-19 at bf7f086f05)
+ mergetools: vimdiff: use correct tool's name when reading mergetool config
Variants of vimdiff learned to honor mergetool.<variant>.layout settings.
Will cook in 'next'.
source: <20240217162718.21272-1-kipras@kipras.org>
* mh/libsecret-empty-password-fix (2024-02-19) 1 commit
(merged to 'next' on 2024-02-19 at b2e17695ca)
+ libsecret: retrieve empty password
Credential helper based on libsecret (in contrib/) has been updated.
Will cook in 'next'.
source: <pull.1676.v2.git.git.1708375258296.gitgitgadget@gmail.com>
* ps/reflog-list (2024-02-19) 7 commits
(merged to 'next' on 2024-02-19 at 6c491b5079)
+ builtin/reflog: introduce subcommand to list reflogs
+ refs: stop resolving ref corresponding to reflogs
+ refs: drop unused params from the reflog iterator callback
+ refs/files: sort reflogs returned by the reflog iterator
+ dir-iterator: support iteration in sorted order
+ dir-iterator: pass name to `prepare_next_entry_data()` directly
+ Merge branch 'ps/reftable-backend' into ps/reflog-list
(this branch uses ps/reftable-backend.)
"git reflog" learned a "list" subcommand that enumerates known reflogs.
Will cook in 'next'.
source: <cover.1708353264.git.ps@pks.im>
--------------------------------------------------
[Cooking]
* jh/fsmonitor-icase-corner-case-fix (2024-02-14) 11 commits
- t7527: update case-insenstive fsmonitor test
- fsmonitor: refactor bit invalidation in refresh callback
- fsmonitor: support case-insensitive non-directory events
- fsmonitor: refactor non-directory callback
- fsmonitor: support case-insensitive directory events
- fsmonitor: refactor untracked-cache invalidation
- fsmonitor: clarify handling of directory events in callback
- fsmonitor: refactor refresh callback for non-directory events
- fsmonitor: refactor refresh callback on directory events
- t7527: add case-insensitve test for FSMonitor
- name-hash: add index_dir_exists2()
FSMonitor client code was confused when FSEvents were given in a
different case on a case-insensitive filesystem, which has been
corrected.
Needs review.
source: <pull.1662.git.1707857541.gitgitgadget@gmail.com>
* mh/credential-oauth-refresh-token-with-osxkeychain (2024-02-14) 1 commit
- credential/osxkeychain: store new attributes
OAuth refresh tokens and password expiry timestamps are now stored
in the osxkeychain backend , just the way libsecret and wincred
backends of the credential subsystem do.
Needs testing.
cf. <CAGJzqsmSzMqEG1OU9dH6CORV6=L7qUAFNJSmi41Lqrajf9mSew@mail.gmail.com>
source: <pull.1663.git.1707860618119.gitgitgadget@gmail.com>
* ps/reftable-iteration-perf-part2 (2024-02-14) 13 commits
- reftable: allow inlining of a few functions
- reftable/record: decode keys in place
- reftable/record: reuse refname when copying
- reftable/record: reuse refname when decoding
- reftable/merged: avoid duplicate pqueue emptiness check
- reftable/merged: circumvent pqueue with single subiter
- reftable/merged: handle subiter cleanup on close only
- reftable/merged: remove unnecessary null check for subiters
- reftable/merged: make subiters own their records
- reftable/merged: advance subiter on subsequent iteration
- reftable/merged: make `merged_iter` structure private
- reftable/pq: use `size_t` to track iterator index
- Merge branch 'ps/reftable-iteration-perf' into ps/reftable-iteration-perf-part2
(this branch uses ps/reftable-iteration-perf.)
The code to iterate over refs with the reftable backend has seen
some optimization.
Needs review.
source: <cover.1707895758.git.ps@pks.im>
* cp/t9146-use-test-path-helpers (2024-02-14) 1 commit
- t9146: replace test -d/-e/-f with appropriate test_path_is_* function
Test script clean-up.
source: <pull.1661.v3.git.1707933048210.gitgitgadget@gmail.com>
* rj/tag-column-fix (2024-02-14) 1 commit
(merged to 'next' on 2024-02-19 at 9aa52b4ffb)
+ tag: error when git-column fails
"git tag --column" failed to check the exit status of its "git
column" invocation, which has been corrected.
Will cook in 'next'.
source: <59df085d-0de8-45b1-9b8b-c69e91e56a1f@gmail.com>
* jc/am-whitespace-doc (2024-02-14) 1 commit
(merged to 'next' on 2024-02-19 at 492f0f9174)
+ doc: add shortcut to "am --whitespace=<action>"
"git am --help" now tells readers what actions are available in
"git am --whitespace=<action>", in addition to saying that the
option is passed through to the underlying "git apply".
Will cook in 'next'.
source: <xmqqplwyvqby.fsf@gitster.g>
* ba/credential-test-clean-fix (2024-02-15) 1 commit
(merged to 'next' on 2024-02-19 at 290708b10a)
+ t/lib-credential: clean additional credential
(this branch is used by jk/t0303-clean.)
Test clean-up.
Will cook in 'next'.
source: <pull.1664.git.1707959036807.gitgitgadget@gmail.com>
* js/cmake-with-test-tool (2024-02-15) 1 commit
- cmake: let `test-tool` run the unit tests, too
(this branch uses js/unit-test-suite-runner.)
"test-tool" is now built in CMake build to also run the unit tests.
May want to roll it into the base topic.
source: <cover.1706921262.git.steadmon@google.com>
* ps/ref-tests-update-even-more (2024-02-15) 7 commits
(merged to 'next' on 2024-02-15 at 064b2b4089)
+ t7003: ensure filter-branch prunes reflogs with the reftable backend
+ t2011: exercise D/F conflicts with HEAD with the reftable backend
+ t1405: remove unneeded cleanup step
+ t1404: make D/F conflict tests compatible with reftable backend
+ t1400: exercise reflog with gaps with reftable backend
+ t0410: convert tests to use DEFAULT_REPO_FORMAT prereq
+ t: move tests exercising the "files" backend
More tests that are marked as "ref-files only" have been updated to
improve test coverage of reftable backend.
Will cook in 'next'.
source: <cover.1707985173.git.ps@pks.im>
* rs/use-xstrncmpz (2024-02-12) 1 commit
(merged to 'next' on 2024-02-12 at 37e5f0fc14)
+ use xstrncmpz()
Code clean-up.
Will cook in 'next'.
source: <954b75d0-1504-4f57-b34e-e770a4b7b3ea@web.de>
* kn/for-all-refs (2024-02-12) 6 commits
- for-each-ref: add new option to include root refs
- ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR'
- refs: introduce `refs_for_each_include_root_refs()`
- refs: extract out `loose_fill_ref_dir_regular_file()`
- refs: introduce `is_pseudoref()` and `is_headref()`
- Merge branch 'ps/reftable-backend' into kn/for-all-refs
(this branch uses ps/reftable-backend.)
"git for-each-ref" filters its output with prefixes given from the
command line, but it did not honor an empty string to mean "pass
everything", which has been corrected.
Will merge to 'next'?
source: <20240211183923.131278-1-karthik.188@gmail.com>
* kh/column-reject-negative-padding (2024-02-13) 2 commits
(merged to 'next' on 2024-02-14 at c30c08e495)
+ column: guard against negative padding
+ column: disallow negative padding
"git column" has been taught to reject negative padding value, as
it would lead to nonsense behaviour including division by zero.
Will cook in 'next'.
source: <cover.1707839454.git.code@khaugsbakk.name>
* jc/no-lazy-fetch (2024-02-16) 3 commits
- git: extend --no-lazy-fetch to work across subprocesses
- git: document GIT_NO_REPLACE_OBJECTS environment variable
(merged to 'next' on 2024-02-13 at 7c7136e547)
+ git: --no-lazy-fetch option
"git --no-lazy-fetch cmd" allows to run "cmd" while disabling lazy
fetching of objects from the promisor remote, which may be handy
for debugging.
source: <xmqq1q9mmtpw.fsf@gitster.g>
source: <xmqqv86pslos.fsf@gitster.g>
* jc/t9210-lazy-fix (2024-02-08) 1 commit
(merged to 'next' on 2024-02-13 at fb61ca2fba)
+ t9210: do not rely on lazy fetching to fail
(this branch is used by cc/rev-list-allow-missing-tips.)
Adjust use of "rev-list --missing" in an existing tests so that it
does not depend on a buggy failure mode.
Will cook in 'next'.
source: <xmqq7cjemttr.fsf@gitster.g>
* gt/at-is-synonym-for-head-in-add-patch (2024-02-13) 2 commits
(merged to 'next' on 2024-02-14 at cd901555d6)
+ add -p tests: remove PERL prerequisites
+ add-patch: classify '@' as a synonym for 'HEAD'
Teach "git checkout -p" and friends that "@" is a synonym for
"HEAD".
Will cook in 'next'.
source: <20240211202035.7196-2-shyamthakkar001@gmail.com>
* js/unit-test-suite-runner (2024-02-03) 7 commits
- t/Makefile: run unit tests alongside shell tests
- unit tests: add rule for running with test-tool
- test-tool run-command testsuite: support unit tests
- test-tool run-command testsuite: remove hardcoded filter
- test-tool run-command testsuite: get shell from env
- t0080: turn t-basic unit test into a helper
- Merge branch 'jk/unit-tests-buildfix' into js/unit-test-suite-runner
(this branch is used by js/cmake-with-test-tool.)
The "test-tool" has been taught to run testsuite tests in parallel,
bypassing the need to use the "prove" tool.
Expecting a reroll.
cf. <20240207225802.GA538110@coredump.intra.peff.net>
source: <cover.1706921262.git.steadmon@google.com>
* ps/reftable-backend (2024-02-07) 3 commits
(merged to 'next' on 2024-02-08 at ba1c4c52bb)
+ refs/reftable: fix leak when copying reflog fails
(merged to 'next' on 2024-02-07 at 1115200acb)
+ ci: add jobs to test with the reftable backend
+ refs: introduce reftable backend
(this branch is used by kn/for-all-refs and ps/reflog-list.)
Integrate the reftable code into the refs framework as a backend.
Will cook in 'next'.
source: <cover.1707288261.git.ps@pks.im>
* cc/rev-list-allow-missing-tips (2024-02-14) 4 commits
- rev-list: allow missing tips with --missing=[print|allow*]
- t6022: fix 'test' style and 'even though' typo
- oidset: refactor oidset_insert_from_set()
- revision: clarify a 'return NULL' in get_reference()
(this branch uses jc/t9210-lazy-fix.)
"git rev-list --missing=print" have learned to optionally take
"--allow-missing-tips", which allows the objects at the starting
points to be missing.
Will merge to 'next'?
source: <20240214142513.4002639-1-christian.couder@gmail.com>
* ps/reftable-iteration-perf (2024-02-12) 7 commits
(merged to 'next' on 2024-02-12 at 6abaf58383)
+ reftable/reader: add comments to `table_iter_next()`
+ reftable/record: don't try to reallocate ref record name
+ reftable/block: swap buffers instead of copying
+ reftable/pq: allocation-less comparison of entry keys
+ reftable/merged: skip comparison for records of the same subiter
+ reftable/merged: allocation-less dropping of shadowed records
+ reftable/record: introduce function to compare records by key
(this branch is used by ps/reftable-iteration-perf-part2.)
The code to iterate over refs with the reftable backend has seen
some optimization.
Will cook in 'next'.
source: <cover.1707726654.git.ps@pks.im>
* js/merge-tree-3-trees (2024-02-07) 6 commits
- cache-tree: avoid an unnecessary check
- Always check `parse_tree*()`'s return value
- t4301: verify that merge-tree fails on missing blob objects
- merge-ort: do check `parse_tree()`'s return value
- merge-tree: fail with a non-zero exit code on missing tree objects
(merged to 'next' on 2024-01-30 at 0c77b04e59)
+ merge-tree: accept 3 trees as arguments
"git merge-tree" has learned that the three trees involved in the
3-way merge only need to be trees, not necessarily commits.
Expecting a reroll.
cf. <CAPig+cSs8MFkLasTULh7tybrFm7SwaT+JeR7HnXjh+-agCHYMw@mail.gmail.com>
cf. <CAPig+cSJz3U+vT==NhX5hcrTjsCggnAzhzQOvZcSXbcEGuYaKQ@mail.gmail.com>
source: <pull.1647.v2.git.1706474063109.gitgitgadget@gmail.com>
source: <pull.1651.v2.git.1707324461.gitgitgadget@gmail.com>
* rj/complete-reflog (2024-01-26) 4 commits
- completion: reflog show <log-options>
- completion: reflog with implicit "show"
- completion: introduce __git_find_subcommand
- completion: introduce __gitcomp_subcommand
The command line completion script (in contrib/) learned to
complete "git reflog" better.
Needs review.
source: <98daf977-dbad-4d3b-a293-6a769895088f@gmail.com>
* ml/log-merge-with-cherry-pick-and-other-pseudo-heads (2024-02-12) 2 commits
- revision: implement `git log --merge` also for rebase/cherry-pick/revert
- revision: ensure MERGE_HEAD is a ref in prepare_show_merge
"git log --merge" learned to pay attention to CHERRY_PICK_HEAD and
other kinds of *_HEAD pseudorefs.
Expecting a reroll.
cf. <790a3f11-5a8c-42f2-7a35-f2900c0299b4@gmail.com>
cf. <8384d1dc-b6c4-b853-9bf6-3d7ccee86d12@gmail.com>
source: <20240210-ml-log-merge-with-cherry-pick-and-other-pseudo-heads-v4-0-3bc9e62808f4@gmail.com>
* bk/complete-dirname-for-am-and-format-patch (2024-01-12) 1 commit
- completion: dir-type optargs for am, format-patch
Command line completion support (in contrib/) has been
updated for a few commands to complete directory names where a
directory name is expected.
Expecting a reroll.
cf. <40c3a824-a961-490b-94d4-4eb23c8f713d@gmail.com>
source: <d37781c3-6af2-409b-95a8-660a9b92d20b@smtp-relay.sendinblue.com>
* bk/complete-send-email (2024-01-12) 1 commit
- completion: don't complete revs when --no-format-patch
Command line completion support (in contrib/) has been taught to
avoid offering revision names as candidates to "git send-email" when
the command is used to send pre-generated files.
Needs review.
cf. <xmqq4jej6i1b.fsf@gitster.g>
source: <a718b5ee-afb0-44bd-a299-3208fac43506@smtp-relay.sendinblue.com>
* la/trailer-api (2024-02-16) 9 commits
- format_trailers_from_commit(): indirectly call trailer_info_get()
- format_trailer_info(): move "fast path" to caller
- format_trailers(): use strbuf instead of FILE
- trailer_info_get(): reorder parameters
- trailer: start preparing for formatting unification
- trailer: move interpret_trailers() to interpret-trailers.c
- trailer: prepare to expose functions as part of API
- shortlog: add test for de-duplicating folded trailers
- trailer: free trailer_info _after_ all related usage
Code clean-up.
source: <pull.1632.v5.git.1708124950.gitgitgadget@gmail.com>
* cp/apply-core-filemode (2023-12-26) 3 commits
(merged to 'next' on 2024-02-07 at 089a3fbb86)
+ apply: code simplification
+ apply: correctly reverse patch's pre- and post-image mode bits
+ apply: ignore working tree filemode when !core.filemode
"git apply" on a filesystem without filemode support have learned
to take a hint from what is in the index for the path, even when
not working with the "--index" or "--cached" option, when checking
the executable bit match what is required by the preimage in the
patch.
Will cook in 'next'.
cf. <xmqqzfwb53a9.fsf@gitster.g>
source: <20231226233218.472054-1-gitster@pobox.com>
* tb/path-filter-fix (2024-01-31) 16 commits
- bloom: introduce `deinit_bloom_filters()`
- commit-graph: reuse existing Bloom filters where possible
- object.h: fix mis-aligned flag bits table
- commit-graph: new Bloom filter version that fixes murmur3
- commit-graph: unconditionally load Bloom filters
- bloom: prepare to discard incompatible Bloom filters
- bloom: annotate filters with hash version
- repo-settings: introduce commitgraph.changedPathsVersion
- t4216: test changed path filters with high bit paths
- t/helper/test-read-graph: implement `bloom-filters` mode
- bloom.h: make `load_bloom_filter_from_graph()` public
- t/helper/test-read-graph.c: extract `dump_graph_info()`
- gitformat-commit-graph: describe version 2 of BDAT
- commit-graph: ensure Bloom filters are read with consistent settings
- revision.c: consult Bloom filters for root commits
- t/t4216-log-bloom.sh: harden `test_bloom_filters_not_used()`
The Bloom filter used for path limited history traversal was broken
on systems whose "char" is unsigned; update the implementation and
bump the format version to 2.
Waiting for a final ack?
cf. <ZcFjkfbsBfk7JQIH@nand.local>
source: <cover.1706741516.git.me@ttaylorr.com>
* eb/hash-transition (2023-10-02) 30 commits
- t1016-compatObjectFormat: add tests to verify the conversion between objects
- t1006: test oid compatibility with cat-file
- t1006: rename sha1 to oid
- test-lib: compute the compatibility hash so tests may use it
- builtin/ls-tree: let the oid determine the output algorithm
- object-file: handle compat objects in check_object_signature
- tree-walk: init_tree_desc take an oid to get the hash algorithm
- builtin/cat-file: let the oid determine the output algorithm
- rev-parse: add an --output-object-format parameter
- repository: implement extensions.compatObjectFormat
- object-file: update object_info_extended to reencode objects
- object-file-convert: convert commits that embed signed tags
- object-file-convert: convert commit objects when writing
- object-file-convert: don't leak when converting tag objects
- object-file-convert: convert tag objects when writing
- object-file-convert: add a function to convert trees between algorithms
- object: factor out parse_mode out of fast-import and tree-walk into in object.h
- cache: add a function to read an OID of a specific algorithm
- tag: sign both hashes
- commit: export add_header_signature to support handling signatures on tags
- commit: convert mergetag before computing the signature of a commit
- commit: write commits for both hashes
- object-file: add a compat_oid_in parameter to write_object_file_flags
- object-file: update the loose object map when writing loose objects
- loose: compatibilty short name support
- loose: add a mapping between SHA-1 and SHA-256 for loose objects
- repository: add a compatibility hash algorithm
- object-names: support input of oids in any supported hash
- oid-array: teach oid-array to handle multiple kinds of oids
- object-file-convert: stubs for converting from one object format to another
Teach a repository to work with both SHA-1 and SHA-256 hash algorithms.
Will merge to and cook in 'next'?
cf. <xmqqv86z5359.fsf@gitster.g>
source: <878r8l929e.fsf@gmail.froward.int.ebiederm.org>
* jc/rerere-cleanup (2023-08-25) 4 commits
- rerere: modernize use of empty strbuf
- rerere: try_merge() should use LL_MERGE_ERROR when it means an error
- rerere: fix comment on handle_file() helper
- rerere: simplify check_one_conflict() helper function
Code clean-up.
Not ready to be reviewed yet.
source: <20230824205456.1231371-1-gitster@pobox.com>
^ permalink raw reply
* Re: [PATCH] builtin/stash: configs keepIndex, includeUntracked
From: Junio C Hamano @ 2024-02-20 17:47 UTC (permalink / raw)
To: Phillip Wood; +Cc: Ricardo C, phillip.wood, git
In-Reply-To: <78a8733b-c74a-4017-8905-d29b2e05adb1@gmail.com>
Phillip Wood <phillip.wood123@gmail.com> writes:
> That's a good idea but I think it would be better to test that "git
> stash create" is not affected by the config as we don't want to change
> the behavior of its behavior.
Yup. Making sure "stash create" stays the same is a very good
thing. Thanks for suggesting it.
Regardling the need to have an escape hatch that is well publicized
long before a potentially harmful switch can safely happen, one way
out might be to
- Declare "git stash create" is a plumbing, but the rest is
considered Porcelain. Publicize it well and wait for the word to
spread out. Folks who are in favor of adding these configuration
variables to the system may need to do some legwork, spreading
the word around at stackoverflow and various other venues,
scouring public repositories at GitHub and other hosting sites
and studying third-party uses of "git stash" that should be
replaced with "git stash create" followed by "git update-ref",
and raising issues to notify the owners of such projects, etc.
- Add breaking configuration variables after a few years.
We cannot do the usual "start warning when we detect problematic use
without changing the current behaviour, wait, and then switch" dance
in this case, unfortunately, because we lack a good way to detect a
"problematic use". We cannot tell a direct use of "git stash" via
the command prompt (which may want to honor the configuration) from
an IDE running "git stash" reacting to the "[Stash Now]" UI element
(which might want to honor the configuration) and from a third-party
tool that acts like "rebase --autostash" that wants to save away all
local changes to clear the slate to do its thing (which we should
definitely not interfare). If we could do so reliably, then we
wouldn't be having this discussion---we'd be using the same logic as
we would use to tell when to warn and instead of warning, just silently
refraining to honor the configuration variables.
An eve easier way out of course is not to do these variables, of course.
FWIW, I can see how permanently enabling "include untracked" may be
OK in a workflow, but I cannot see the utility of permanently
enabling "keepindex" at all. Sometimes I'd want to clear the slate
so that I can try building and testing what I added to the index and
that is why I want to use the option. But a lot of other times, I
want to clear the slate to go back to the very pristine state that
is equal to the HEAD. As the need to switch between the two modes
happens quite often, the way to defeat configured stash.keepindex
takes quite many keystrokes, and in general I think the regular
stashing happens far more often than keepindex stashing, I'd find
that using shorthand "-k" on the command line occasionally without
having this configuration variable would be what people would end up
using anyway.
And there is always "[alias] stk = stash -k" available ;-)
^ permalink raw reply
* Re: [PATCH] Revert "Declare both git-switch and git-restore experimental"
From: Junio C Hamano @ 2024-02-20 18:04 UTC (permalink / raw)
To: Kristoffer Haugsbakk
Cc: Matthieu Baerts (NGI0), Nguyễn Thái Ngọc Duy,
git
In-Reply-To: <920a0f61-d30b-49f1-87b3-fb947cb3c33d@app.fastmail.com>
"Kristoffer Haugsbakk" <code@khaugsbakk.name> writes:
> The only reason why I ask is because I was vaguely aware of some
> discussions (don’t know how long ago) where someone was skeptical about
> changing one of the two experimental commands, and then someone else in
> turn expressed some frustration about this concern since they are after
> all marked experimental. And the context was some UI/UX problems with
> the command.
There was a discussion to further make "switch" deviate from
"checkout" by taking advantage of its experimental status [*1*], for
example.
Being marked as "EXPERIMENTAL" allows us to redefine the behaviour
in a way that would break existing users, like changing what the
"-c" option means completely (so that folks who are used to say
"switch -c blah" will be surprised next time they type that command,
but they cannot complain). Once you remove the label, you no longer
have such a freedom to even imagine departing from the existing
behaviour (I wrote essentially the same thing before [*2*]). Are we
ready to paint us into such a corner yet? Is "switch/restore" perfect
and do not need departing changes anymore?
[References]
*1* https://lore.kernel.org/git/211021.86wnm6l1ip.gmgdl@evledraar.gmail.com/
*2* https://lore.kernel.org/git/xmqqzg6eocmi.fsf@gitster.g/
^ permalink raw reply
* New Construction Project
From: jeffreyclassicestimation @ 2024-02-20 18:06 UTC (permalink / raw)
To: git
Hi,
I hope you are doing well.
We provide estimation & quantities takeoff services. We are providing 98-100 percent accuracy in our estimates and take-offs. Please tell us if you need any estimating services regarding your projects.
Send over the plans and mention the exact scope of work and shortly we will get back with a proposal on which our charges and turnaround time will be mentioned
You may ask for sample estimates and take-offs. Thanks.
Regards
Jeffrey
Marketing Manager
classic estimation
^ permalink raw reply
* Re: [PATCH 02/12] reftable/merged: make `merged_iter` structure private
From: Justin Tobler @ 2024-02-20 18:15 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git
In-Reply-To: <be807e7650e2b11e5d6f7dd84ca1c549408f678a.1707895758.git.ps@pks.im>
On 24/02/14 08:45AM, Patrick Steinhardt wrote:
> The `merged_iter` structure is not used anywhere outside of "merged.c",
> but is declared in its header. Move it into the code file so that it is
> clear that its implementation details are never exposed to anything.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> reftable/merged.c | 9 +++++++++
> reftable/merged.h | 9 ---------
> 2 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/reftable/merged.c b/reftable/merged.c
> index 1aa6cd31b7..12ebd732e8 100644
> --- a/reftable/merged.c
> +++ b/reftable/merged.c
> @@ -17,6 +17,15 @@ license that can be found in the LICENSE file or at
> #include "reftable-error.h"
> #include "system.h"
>
suggestion: I think it would be nice to document a little about the
merge iterator here at a high-level. Maybe just to explain that this
allows iteration over multiple tables as if it were a single table.
> +struct merged_iter {
> + struct reftable_iterator *stack;
> + uint32_t hash_id;
> + size_t stack_len;
> + uint8_t typ;
> + int suppress_deletions;
> + struct merged_iter_pqueue pq;
> +};
> +
> static int merged_iter_init(struct merged_iter *mi)
> {
> for (size_t i = 0; i < mi->stack_len; i++) {
> diff --git a/reftable/merged.h b/reftable/merged.h
> index 7d9f95d27e..288ad66656 100644
> --- a/reftable/merged.h
> +++ b/reftable/merged.h
> @@ -24,15 +24,6 @@ struct reftable_merged_table {
> uint64_t max;
> };
>
Since we are removing `merge_iter` from the header here, I think we can
also remove the `#include "pg.h"`.
> -struct merged_iter {
> - struct reftable_iterator *stack;
> - uint32_t hash_id;
> - size_t stack_len;
> - uint8_t typ;
> - int suppress_deletions;
> - struct merged_iter_pqueue pq;
> -};
> -
> void merged_table_release(struct reftable_merged_table *mt);
>
> #endif
> --
> 2.43.GIT
>
^ permalink raw reply
* Re: [PATCH] branch: rework the descriptions of rename and copy operations
From: Junio C Hamano @ 2024-02-20 18:24 UTC (permalink / raw)
To: Dragan Simic; +Cc: Rubén Justo, git
In-Reply-To: <35738a93f5cbace5b3235ce614b7afbf@manjaro.org>
Dragan Simic <dsimic@manjaro.org> writes:
>> My advice would be to stick to <old> vs <new> that contrasts well.
>
> I appreciate the directness and honesty. How about using "<oldbranch>"
> and "<newbranch>" instead, which, although more wordy, would be more
> consistent with "<branch>" that's used in a number of other places?
I have slight aversion to non-words like "oldbranch" (not
"old-branch"), but not that much.
Quite honestly, in a document whose primary topic is "branch", I
doubt that repeating "branch" all over the place would be the
consistency we should be aiming for in the first place, when it is
clear from the context that we are talking about branches.
The updates we are making to Documentation/git-branch.txt that (1)
slims wordy description of different modes in the DESCRIPTION
section, (2) make option description of "-m" mention what
argument(s) the option takes, and (3) rmove standalone <newbranch>
and <oldbranch> description are all about making the necessary piece
of information easier to find in one place (namely, the option
description where "-m [<one branch name>] [<the other branch name>]"
is described) without having to jump around all over in the
documentation, so in that sense, I would think the way to go is to
aim for brevity that takes advantage of the local context.
^ permalink raw reply
* Re: [PATCH 03/12] reftable/merged: advance subiter on subsequent iteration
From: Justin Tobler @ 2024-02-20 18:25 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git
In-Reply-To: <38d45995662ba92f4b985b82deac298446274511.1707895758.git.ps@pks.im>
On 24/02/14 08:45AM, Patrick Steinhardt wrote:
> When advancing the merged iterator, we pop the top-most entry from its
s/top-most/topmost
> priority queue and then advance the sub-iterator that the entry belongs
> to, adding the result as a new entry. This is quite sensible in the case
> where the merged iterator is used to actual iterate through records. But
s/actual/actually
> the merged iterator is also used when we look up a single record, only,
> so advancing the sub-iterator is wasted effort because we would never
> even look at the result.
>
> Instead of immediately advancing the sub-iterator, we can also defer
> this to the next iteration of the merged iterator by storing the
> intent-to-advance. This results in a small speedup when reading many
> records. The following benchmark creates 10000 refs, which will also end
> up with many ref lookups:
>
> Benchmark 1: update-ref: create many refs (revision = HEAD~)
> Time (mean ± σ): 337.2 ms ± 7.3 ms [User: 200.1 ms, System: 136.9 ms]
> Range (min … max): 329.3 ms … 373.2 ms 100 runs
>
> Benchmark 2: update-ref: create many refs (revision = HEAD)
> Time (mean ± σ): 332.5 ms ± 5.9 ms [User: 197.2 ms, System: 135.1 ms]
> Range (min … max): 327.6 ms … 359.8 ms 100 runs
>
> Summary
> update-ref: create many refs (revision = HEAD) ran
> 1.01 ± 0.03 times faster than update-ref: create many refs (revision = HEAD~)
>
> While this speedup alone isn't really worth it, this refactoring will
> also allow two additional optimizations in subsequent patches. First, it
> will allow us to special-case when there is only a single sub-iter left
> to circumvent the priority queue altogether. And second, it makes it
> easier to avoid copying records to the caller.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> reftable/merged.c | 26 ++++++++++++--------------
> 1 file changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/reftable/merged.c b/reftable/merged.c
> index 12ebd732e8..9b1ccfff00 100644
> --- a/reftable/merged.c
> +++ b/reftable/merged.c
> @@ -19,11 +19,12 @@ license that can be found in the LICENSE file or at
>
> struct merged_iter {
> struct reftable_iterator *stack;
> + struct merged_iter_pqueue pq;
> uint32_t hash_id;
> size_t stack_len;
> uint8_t typ;
> int suppress_deletions;
> - struct merged_iter_pqueue pq;
> + ssize_t advance_index;
> };
>
> static int merged_iter_init(struct merged_iter *mi)
> @@ -96,13 +97,17 @@ static int merged_iter_next_entry(struct merged_iter *mi,
> struct pq_entry entry = { 0 };
> int err = 0;
>
> + if (mi->advance_index >= 0) {
> + err = merged_iter_advance_subiter(mi, mi->advance_index);
> + if (err < 0)
> + return err;
> + mi->advance_index = -1;
> + }
> +
Without additional context, it isn't immediately clear to me why the
sub-iterator is condionally advanced at the beginning. Maybe a comment
could be added to explain as done in the commit message to help with
clarity?
> if (merged_iter_pqueue_is_empty(mi->pq))
> return 1;
>
> entry = merged_iter_pqueue_remove(&mi->pq);
> - err = merged_iter_advance_subiter(mi, entry.index);
> - if (err < 0)
> - return err;
>
> /*
> One can also use reftable as datacenter-local storage, where the ref
> @@ -116,14 +121,6 @@ static int merged_iter_next_entry(struct merged_iter *mi,
> struct pq_entry top = merged_iter_pqueue_top(mi->pq);
> int cmp;
>
> - /*
> - * When the next entry comes from the same queue as the current
> - * entry then it must by definition be larger. This avoids a
> - * comparison in the most common case.
> - */
> - if (top.index == entry.index)
> - break;
> -
I'm not quite sure I follow by the above check is removed as part of
this change. Would you mind clarifying?
-Justin
^ permalink raw reply
* Re: [PATCH] documentation: send-email: use camel case consistently
From: Junio C Hamano @ 2024-02-20 18:29 UTC (permalink / raw)
To: Dragan Simic; +Cc: git
In-Reply-To: <a766ba7eb27f663eee34214714f6076d@manjaro.org>
Dragan Simic <dsimic@manjaro.org> writes:
> If you insist on using "CC", I'd be fine with that, but frankly, I think
> that would actually be confusing to the users.
I do not insist; my job is to just reject what is not correct.
In this particular case, I do not think Cc is outright wrong; it
is near the borderline, but I do not know which side of that line it
sits.
I gave you one possible rule to decide what to capitalize (namely,
acronyms are spelled in all caps and that is how we capitalize
http.proxySSLCert and imap.preformattedHTML) and if we adopt that
rule, then sendemail.supressCc would be incorrect, simply because
carbon-copy should be spelled CC.
You need to give an alternative criteria that is easy to understand
for future developers and follow, and explain your choice in the
proposed commit log message: "We spell acronyms in all caps like
HTML and SSL, but in the case of carbon-copy, we spell it as Cc
because ...".
You need to fill that "..." is in your proposed log message to
explain the choice you made in your patch text. More importantly,
it is to help future developers so that they can easily follow the
same rule to spell the variable names they invented in a way
consistent with the rule you followed in this patch.
Thanks.
^ permalink raw reply
* Re: [PATCH] Revert "Declare both git-switch and git-restore experimental"
From: Matthieu Baerts @ 2024-02-20 18:39 UTC (permalink / raw)
To: Junio C Hamano, Kristoffer Haugsbakk
Cc: Nguyễn Thái Ngọc Duy, git
In-Reply-To: <xmqqzfvvovva.fsf@gitster.g>
Hi Junio,
Thank you for your reply!
On 20/02/2024 7:04 pm, Junio C Hamano wrote:
> "Kristoffer Haugsbakk" <code@khaugsbakk.name> writes:
>
>> The only reason why I ask is because I was vaguely aware of some
>> discussions (don’t know how long ago) where someone was skeptical about
>> changing one of the two experimental commands, and then someone else in
>> turn expressed some frustration about this concern since they are after
>> all marked experimental. And the context was some UI/UX problems with
>> the command.
>
> There was a discussion to further make "switch" deviate from
> "checkout" by taking advantage of its experimental status [*1*], for
> example.
I appreciate the references, thank you! It is interesting to note
changes have been proposed a few years ago, but none have been applied.
> Being marked as "EXPERIMENTAL" allows us to redefine the behaviour
> in a way that would break existing users, like changing what the
> "-c" option means completely (so that folks who are used to say
> "switch -c blah" will be surprised next time they type that command,
> but they cannot complain).
Personally, I think I would complain, and go back to git-checkout :-)
> Once you remove the label, you no longer
> have such a freedom to even imagine departing from the existing
> behaviour (I wrote essentially the same thing before [*2*]). Are we
> ready to paint us into such a corner yet?
I'm not involved in this project, but I think after a few versions /
years, it is hard to still keep this experimental status. I understand
it is tempting to keep it, but I think it is now too late. Despite the
now old label, you probably already no longer have such freedom to
radically change their behaviours, no?
> Is "switch/restore" perfect
> and do not need departing changes anymore?
To me, they don't need departing changes. If they are still experimental
after 5 years, it is hard to recommend them :)
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
^ permalink raw reply
* Re: [PATCH 04/12] fsmonitor: refactor refresh callback on directory events
From: Jeff Hostetler @ 2024-02-20 18:54 UTC (permalink / raw)
To: Patrick Steinhardt, Jeff Hostetler via GitGitGadget; +Cc: git, Jeff Hostetler
In-Reply-To: <Zc3aGSbEIFVClRd_@tanuki>
On 2/15/24 4:32 AM, Patrick Steinhardt wrote:
> On Tue, Feb 13, 2024 at 08:52:13PM +0000, Jeff Hostetler via GitGitGadget wrote:
>> From: Jeff Hostetler <jeffhostetler@github.com>
>>
>> Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
>> ---
>> fsmonitor.c | 52 ++++++++++++++++++++++++++++++----------------------
>> 1 file changed, 30 insertions(+), 22 deletions(-)
>>
>> diff --git a/fsmonitor.c b/fsmonitor.c
>> index f670c509378..b1ef01bf3cd 100644
>> --- a/fsmonitor.c
>> +++ b/fsmonitor.c
>> @@ -183,6 +183,35 @@ static int query_fsmonitor_hook(struct repository *r,
>> return result;
>> }
>>
>> +static void fsmonitor_refresh_callback_slash(
>> + struct index_state *istate, const char *name, int len, int pos)
>
> `len` should be `size_t` as it tracks the length of the name. This is
> a preexisting issue already because `fsmonitor_refresh_callback()`
> assigns `int len = strlen(name)`, which is wrong.
>
>> +{
>> + int i;
>
> `i` is used to iterate through `istate->cache_nr`, which is an `unsigned
> int` and not an `int`. I really wish we would compile the Git code base
> with `-Wconversion`, but that's a rather big undertaking.
>
> Anyway, none of these issues are new as you merely move the code into a
> new function.
>
> Patrick
>
Yeah, the int types are bit of a mess, but I'd like to defer that to
another series.
There are several things going on here as you point out.
(1) 'int len' for the length of a pathname buffer. This could be fixed,
but the odds of Git correctly working with a >2Gb pathname doesn't make
this urgent.
(2) 'int i' is signed, but should be unsigned -- but elsewhere in this
function we use 'int pos' which an index on the same array and has
double duty as the suggested insertion point when negative. So we can
fix the type of 'i', but that just sets us up to hide errors with 'pos',
since they'd have different types. Also, since it is really unlikely
for Git to work with >2G cache-entries, I think this one can wait too.
I don't mean to be confrontational, but I think these changes should
wait until another series that is focused on just those types of issues.
Jeff
^ permalink raw reply
* Re: [PATCH 06/12] fsmonitor: clarify handling of directory events in callback
From: Jeff Hostetler @ 2024-02-20 18:56 UTC (permalink / raw)
To: Junio C Hamano, Jeff Hostetler via GitGitGadget; +Cc: git, Jeff Hostetler
In-Reply-To: <xmqqil2rzdvo.fsf@gitster.g>
On 2/14/24 2:47 AM, Junio C Hamano wrote:
> "Jeff Hostetler via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> From: Jeff Hostetler <jeffhostetler@github.com>
>>
>> Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
>> ---
>> fsmonitor.c | 47 +++++++++++++++++++++++++++++++++--------------
>> 1 file changed, 33 insertions(+), 14 deletions(-)
>>
>> diff --git a/fsmonitor.c b/fsmonitor.c
>> index 614270fa5e8..754fe20cfd0 100644
>> --- a/fsmonitor.c
>> +++ b/fsmonitor.c
>> @@ -219,24 +219,40 @@ static void fsmonitor_refresh_callback_unqualified(
>> }
>> }
>>
>> -static void fsmonitor_refresh_callback_slash(
...
>> +static int fsmonitor_refresh_callback_slash(
>> struct index_state *istate, const char *name, int len, int pos)
>> {
>
> This was split out a few patches ago, and the caller of course
> ignored the return value (void), but now it turns an integer, and
> this change is without a corresponding update to the caller, which
> leaves readers puzzled.
>
> Perhaps a future patch either updates the existing caller or adds a
> new caller that utilize the returned value, but then at least the
> proposed commit message for this step should hint how it helps the
> caller(s) we will see in the future steps if this function returns
> the number of entries invalidated, iow, how the caller is expected
> to use the returned value from here, no?
>
> Alternatively, this step can limit itself to what the commit title
> claims to do---to clarify what the helper does with enhanced in-code
> comments. Then a future step that updates the caller to care about
> the return value can have both the changes to this callee as well as
> the caller---which may make it easier to see how the returned info
> helps the caller. I dunno which is more reasonable.
>
I'll split this into 2 commits. One for the refactor and one for
the new return value.
Jeff
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox