* Re: [PATCH] merge: --ff-one-only to apply FF if commit is one
From: Kristoffer Haugsbakk @ 2023-11-01 10:09 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Josh Soref, git, Ruslan Yakauleu, Taylor Blau
In-Reply-To: <xmqqa5ryxn8i.fsf@gitster.g>
On Wed, Nov 1, 2023, at 02:42, Junio C Hamano wrote:
> Strictly speaking, the log message on a merge commit serves two
> purposes, one is to summarize commit(s) on the side branch that gets
> merged with the merge, and as you said above, it is not needed when
> merging a topic with just one commit. But the other is to justify
> why the topic suits the objective of the line of history (which is
> needed even when merging a single commit topic---imagine a commit
> that is not incorrect per-se. It may or may not be suitable for the
> maintenance track, and a merge commit of such a commit into the
> track can explain if/how the commit being merged is maint-worthy).
Yes. If you have multiple release/maintenance branches which you need to
apply something to then you can’t use this .
>> The point at which you use such a merge feature is when you are already
>> happy with the pull request (or patch series or whatever else). And then
>> you (according to this strategy) prefer to avoid merge commits for
>> single-commit pull requests.
>
> But that argues against the "--ff-one-only" option, doesn't it?
>
> If you looked at the side branch before you decide to merge it, you
> know if the topic has only one commit (in which case you decide not
> to use "--no-ff"), or if the topic consists of multiple commits (in
> which case you decide to use "--no-ff"). And the only effect to
> have the "--ff-one-only" option is to allow you *not* to look at
> what is on the side branch.
No. The only effect is that you streamline the process of “decide not to
use `--no-ff`” since the strategy does it for you.
It would act like a small `git my-merge` alias. That is all.
--
Kristoffer Haugsbakk
^ permalink raw reply
* Re: facing issue in git in a perticuler directory
From: Bagas Sanjaya @ 2023-11-01 8:05 UTC (permalink / raw)
To: Injamul Hasan, brian m. carlson, Git Mailing List
In-Reply-To: <CAG4aqRyS2FxMwMgr6Vd_3vMEkFv+wCDq0h-QR4PHeN_2UeMtSg@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 765 bytes --]
On Wed, Nov 01, 2023 at 08:29:39AM +0600, Injamul Hasan wrote:
> so my E drive is my built in ssd drive which is my local drive and my
> storage type is NTFS.given in the ss below, there are only 2 folder nothing
> else and there is no cloud syncing service running yesterday this directory
> worked completely fine but now this same directory is giving me this kind
> of error .please have a look of the screenshot below .
>
Please don't top-post; reply inline with appropriate context instead.
From your screenshot, you have `Git-Practice` and `Python_Practice`
directories. Are these folders git repo? You can check that by
cd-ing into each dir and do `git status` there.
Thanks.
--
An old man doll... just what I always wanted! - Clara
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply
* Re: [PATCH] merge: --ff-one-only to apply FF if commit is one
From: Ruslan Yakauleu @ 2023-11-01 6:34 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <xmqqa5ryxn8i.fsf@gitster.g>
> And the only effect to have the "--ff-one-only" option is to allow
> you *not* to look at what is on the side branch.
Moreover, it allows not to forget choose the right way and allow use
a lot of external tools (GitExtensions for example) as not all in command
are console ninja
Currently, when complex features merged with --ff accidentally we have
to do in main branch something like
$ git reset ...
$ git checkout <some_old_commit_which_we_have_to_find>
$ git merge --no-ff <latest commit>
$ git push --force
And that's what I prefer to avoid
--
Ruslan
^ permalink raw reply
* Re: [PATCH v3 0/2] commit-graph: detect commits missing in ODB
From: Junio C Hamano @ 2023-11-01 5:01 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Taylor Blau, git, Karthik Nayak, Jeff King
In-Reply-To: <ZUHaLqslYFDahNkq@tanuki>
Patrick Steinhardt <ps@pks.im> writes:
>> In the meantime, here is a mechanically produced incremental I'll
>> tentatively queue. Hopefully I did not screw up while generating
>> it.
>>
>> Thanks.
>
> Ah, sorry, didn't notice it was in 'next' already. Anyway, the diff
> below looks good to me, thanks!
I changed my mind ;-) I'll kick out a few topics and rebuild 'next',
with your v3 patches.
Thanks.
^ permalink raw reply
* Re: [PATCH v2 1/2] sequencer: remove use of comment character
From: Junio C Hamano @ 2023-11-01 4:59 UTC (permalink / raw)
To: Tony Tung via GitGitGadget; +Cc: git, Elijah Newren, Tony Tung
In-Reply-To: <10598a56d64f5c2b4d8d05d7e7b09a18ef254f88.1698728953.git.gitgitgadget@gmail.com>
"Tony Tung via GitGitGadget" <gitgitgadget@gmail.com> writes:
> Subject: Re: [PATCH v2 1/2] sequencer: remove use of comment character
The patch does not seem to be doing that, though. It may have
removed '#' in "# Ref", but still uses comment_line_char, so it does
not remove use at all (and we do not want to, of course).
"use the core.commentchar consistently"
> From: Tony Tung <tonytung@merly.org>
>
> Instead of using the hardcoded `# `, use the
> user-defined comment_line_char. Adds a test
> to prevent regressions.
Overly short lines.
The readers cannot tell where in the output the hardcoded # appears
with the above description. I am guessing that it is in comments in
the sequencer/todo file that mark commits that are at the tip of
branches that are checked out, but there may be more specific
circumstances in which the comment is used, like "when rebase -i is
used with the --update-refs option", if so that also need to be told
to the readers.
Describe the condition well enough so that readers can easily see
the defect the patch attempts to fix.
> - strbuf_addf(ctx->buf, "# Ref %s checked out at '%s'\n",
> - decoration->name, path);
> + strbuf_commented_addf(ctx->buf, comment_line_char,
> + "Ref %s checked out at '%s'\n",
> + decoration->name, path);
OK.
^ permalink raw reply
* Re: [PATCH v3 0/2] commit-graph: detect commits missing in ODB
From: Patrick Steinhardt @ 2023-11-01 4:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Taylor Blau, git, Karthik Nayak, Jeff King
In-Reply-To: <xmqq34xqxm5u.fsf@gitster.g>
[-- Attachment #1: Type: text/plain, Size: 5402 bytes --]
On Wed, Nov 01, 2023 at 11:06:05AM +0900, Junio C Hamano wrote:
> Junio C Hamano <gitster@pobox.com> writes:
>
> >> Thanks, the range-diff here looks exactly as expected. Thanks for
> >> working on this, this version LGTM.
> >
> > OK, I'd like a version as incremental to v2 (since it already is in
> > 'next') that results in the same tree state as v3 then.
> >
> > Thanks for working on it, and reviewing it.
>
> In the meantime, here is a mechanically produced incremental I'll
> tentatively queue. Hopefully I did not screw up while generating
> it.
>
> Thanks.
Ah, sorry, didn't notice it was in 'next' already. Anyway, the diff
below looks good to me, thanks!
Patrick
> --- >8 ---
> From: Patrick Steinhardt <ps@pks.im>
> Date: Tue, 31 Oct 2023 08:16:09 +0100
> Subject: [PATCH] commit-graph: clarify GIT_COMMIT_GRAPH_PARANOIA documentation
>
> In response to reviews of the previous round that has already hit
> 'next', clarify the help text for GIT_COMMIT_GRAPH_PARANOIA and
> rename object_paranoia variable to commit_graph_paranoia for
> consistency.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> Documentation/git.txt | 15 ++++++++-------
> commit-graph.c | 8 ++++----
> commit.c | 8 ++++----
> t/t5318-commit-graph.sh | 2 +-
> 4 files changed, 17 insertions(+), 16 deletions(-)
>
> diff --git a/Documentation/git.txt b/Documentation/git.txt
> index 22c2b537aa..3bac24cf8a 100644
> --- a/Documentation/git.txt
> +++ b/Documentation/git.txt
> @@ -912,13 +912,14 @@ for full details.
> useful when trying to salvage data from a corrupted repository.
>
> `GIT_COMMIT_GRAPH_PARANOIA`::
> - If this Boolean environment variable is set to false, ignore the
> - case where commits exist in the commit graph but not in the
> - object database. Normally, Git will check whether commits loaded
> - from the commit graph exist in the object database to avoid
> - issues with stale commit graphs, but this check comes with a
> - performance penalty. The default is `1` (i.e., be paranoid about
> - stale commits in the commit graph).
> + When loading a commit object from the commit-graph, Git performs an
> + existence check on the object in the object database. This is done to
> + avoid issues with stale commit-graphs that contain references to
> + already-deleted commits, but comes with a performance penalty.
> ++
> +The default is "true", which enables the aforementioned behavior.
> +Setting this to "false" disables the existence check. This can lead to
> +a performance improvement at the cost of consistency.
>
> `GIT_ALLOW_PROTOCOL`::
> If set to a colon-separated list of protocols, behave as if
> diff --git a/commit-graph.c b/commit-graph.c
> index 376f59af73..b37fdcb214 100644
> --- a/commit-graph.c
> +++ b/commit-graph.c
> @@ -907,18 +907,18 @@ int repo_find_commit_pos_in_graph(struct repository *r, struct commit *c,
>
> struct commit *lookup_commit_in_graph(struct repository *repo, const struct object_id *id)
> {
> - static int object_paranoia = -1;
> + static int commit_graph_paranoia = -1;
> struct commit *commit;
> uint32_t pos;
>
> - if (object_paranoia == -1)
> - object_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
> + if (commit_graph_paranoia == -1)
> + commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
>
> if (!prepare_commit_graph(repo))
> return NULL;
> if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos))
> return NULL;
> - if (object_paranoia && !has_object(repo, id, 0))
> + if (commit_graph_paranoia && !has_object(repo, id, 0))
> return NULL;
>
> commit = lookup_commit(repo, id);
> diff --git a/commit.c b/commit.c
> index 7399e90212..8405d7c3fc 100644
> --- a/commit.c
> +++ b/commit.c
> @@ -574,12 +574,12 @@ int repo_parse_commit_internal(struct repository *r,
> if (item->object.parsed)
> return 0;
> if (use_commit_graph && parse_commit_in_graph(r, item)) {
> - static int object_paranoia = -1;
> + static int commit_graph_paranoia = -1;
>
> - if (object_paranoia == -1)
> - object_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
> + if (commit_graph_paranoia == -1)
> + commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
>
> - if (object_paranoia && !has_object(r, &item->object.oid, 0)) {
> + if (commit_graph_paranoia && !has_object(r, &item->object.oid, 0)) {
> unparse_commit(r, &item->object.oid);
> return quiet_on_missing ? -1 :
> error(_("commit %s exists in commit-graph but not in the object database"),
> diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
> index 55e3c7ec78..2c62b91ef9 100755
> --- a/t/t5318-commit-graph.sh
> +++ b/t/t5318-commit-graph.sh
> @@ -847,7 +847,7 @@ test_expect_success 'stale commit cannot be parsed when traversing graph' '
> test_commit C &&
> git commit-graph write --reachable &&
>
> - # Corrupt the repository by deleting the intermittent commit
> + # Corrupt the repository by deleting the intermediate commit
> # object. Commands should notice that this object is absent and
> # thus that the repository is corrupt even if the commit graph
> # exists.
> --
> 2.42.0-530-g692be87cbb
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply
* Re: [PATCH v2 4/4] strbuf: move env-using functions to environment.c
From: Junio C Hamano @ 2023-11-01 4:37 UTC (permalink / raw)
To: Jonathan Tan; +Cc: git, Dragan Simic, Phillip Wood
In-Reply-To: <4097385820973b30a78f2e45741444a3f6eee98d.1698791220.git.jonathantanmy@google.com>
Jonathan Tan <jonathantanmy@google.com> writes:
> diff --git a/environment.h b/environment.h
> index e5351c9dd9..f801dbe36e 100644
> --- a/environment.h
> +++ b/environment.h
> @@ -229,4 +229,18 @@ extern const char *excludes_file;
> */
> int print_sha1_ellipsis(void);
>
> +/**
> + * Add a formatted string prepended by a comment character and a
> + * blank to the buffer.
> + */
> +__attribute__((format (printf, 2, 3)))
> +void strbuf_commented_addf(struct strbuf *sb, const char *fmt, ...);
> +
> +/**
> + * Add a NUL-terminated string to the buffer. Each line will be prepended
> + * by a comment character and a blank.
> + */
> +void strbuf_add_commented_lines(struct strbuf *out,
> + const char *buf, size_t size);
> +
What's your plans for globals kept in ident.c for example?
The reason why I ask is because I do not quite see how making the
use of the global comment-line-char variable hidden like this patch
does would help your libification effort. There are many settings
that are reasonably expected to be used by many places, and if you
want to avoid them, it appears to me that your only way forward
after applying this patch would be to recreate the implementation
the public git has in environment.[ch] in your version of Git.
You'd have to do something similar for what is in ident.c for the
same reason.
The relative size of the logic necessary to split the original
into lines and prefix the comment prefix character (which is much
larger) and the idea that there is a system wide setting of what the
comment prefix character should be (which is miniscule) makes me
wonder if this is going in the right direction.
Thanks.
^ permalink raw reply
* Re: [PATCH v2 3/4] strbuf: make add_lines() public
From: Junio C Hamano @ 2023-11-01 4:14 UTC (permalink / raw)
To: Jonathan Tan; +Cc: git, Dragan Simic, Phillip Wood
In-Reply-To: <283f502acb68910cb43d6077eef99d6345aaea4b.1698791220.git.jonathantanmy@google.com>
Jonathan Tan <jonathantanmy@google.com> writes:
> -static void add_lines(struct strbuf *out,
> - const char *prefix1,
> - const char *prefix2,
> - const char *buf, size_t size)
> +void strbuf_add_lines_varied_prefix(struct strbuf *sb,
> + const char *default_prefix,
> + const char *tab_nl_prefix,
> + const char *buf, size_t size)
> {
> while (size) {
> const char *prefix;
> const char *next = memchr(buf, '\n', size);
> next = next ? (next + 1) : (buf + size);
>
> - prefix = ((prefix2 && (buf[0] == '\n' || buf[0] == '\t'))
> - ? prefix2 : prefix1);
> - strbuf_addstr(out, prefix);
> - strbuf_add(out, buf, next - buf);
> + prefix = (buf[0] == '\n' || buf[0] == '\t')
> + ? tab_nl_prefix : default_prefix;
> + strbuf_addstr(sb, prefix);
> + strbuf_add(sb, buf, next - buf);
The original allowed callers to pass NULL for the second prefix when
they want to use the same prefix, even for commenting out an empty
line or a line that begins with a tab. The new one does not allow
the callers to do so. As long as updating the existing callers are
done carefully, the difference would not matter, but would it help
new callers in the future to rid the usability feature like this
patch does while performing a refactoring? The loss of feature is
not even documented, by the way.
While "tab_nl" sound a bit more specific than "2", I am not sure if
we made it better. It does not make it clear why it makes sense to
(and it is necessary to) special case HT and LF. A developer who is
writing a new caller would not know why there are two prefixes
supported, or why the function is named "varied prefix", with these
names.
Giving a name that explains the reason might help the readability.
I've been thinking what the best name for this function would be but
not successfully.
It may be that we shouldn't take two prefixes in the first place.
The ONLY case callers want to pass prefix2 that is different from
prefix1 is when prefix1 ends with a space, and prefix2 is identical
to prefix1 without the trailing space. The reason they use such a
pair of prefixes is to avoid leaving a trailing whitespace (when
buf[0] == '\n') or having a space before tab (when buf[0] == '\t')
on the generated lines.
So eventually we may want to have something like this as the final
interface given to the public callers, simply because ...
strbuf_add_lines_as_comments(struct strbuf *sb,
const char *comment_prefix,
const char *buf, size_t size)
{
while (size) {
const char *next = memchr(buf, '\n', size);
next = next ? (next + 1) : (buf + size);
strbuf_addstr(sb, comment_prefix);
/* avoid trailing-whitespace and space-before-tab */
if (buf[0] != '\n' && buf[0] != '\t')
strbuf_addch(sb, ' ');
strbuf_add(sb, buf, next - buf);
... loop control ...
}
... strbuf completion ...
}
... there is no need for totally unrelated two prefix variants. And
both the function name and the parameter name would be a bit easier
to understand than your version (and far easier than the original).
The function is about commenting out all the lines in buf with the
comment prefix, and most of the time we add a space between the
comment character and the commented out text, but in some cases we
do not want to add the space.
But as I said already, I'd prefer to see a patch that claims to be a
refactoring to do as little as necessary. Giving it a name better
than add_lines() is inevitable, because you are making it extern.
But I'd prefer to see the parameter naems and the function body left
untouched and kept the same as the original. It should be left to a
separate step to improve the interface and the implementation.
Thanks.
^ permalink raw reply
* Re: [PATCH v2 1/1] merge-file: add an option to process object IDs
From: Junio C Hamano @ 2023-11-01 3:44 UTC (permalink / raw)
To: brian m. carlson
Cc: Martin Ågren, git, Elijah Newren, Phillip Wood,
Eric Sunshine, Taylor Blau
In-Reply-To: <ZUGASkMgoAbe7RjR@tapette.crustytoothpaste.net>
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
> This seems reasonable. Junio, do you want to sneak this in and fix the
> commit message above, or do you want me to do a v3?
As it hasn't hit 'next' on my end, I'd prefer to see a version I can
blindly apply without having to care all the details of what was
discussed. Thanks.
^ permalink raw reply
* Re: [PATCH v2 5/5] ci: add support for GitLab CI
From: Junio C Hamano @ 2023-11-01 3:33 UTC (permalink / raw)
To: Jeff King; +Cc: phillip.wood, Oswald Buddenhagen, Patrick Steinhardt, git
In-Reply-To: <20231031193629.GB875658@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
> So it's possible that avoiding "export var=val" is mostly superstition,
Thanks for digging up the old thread. I would not be surprised if
it was already superstition back in the days.
> 2. We won't really know if there is a odd-ball shell that rejects it
> unless we make a change and wait for a while to see if anybody
> screams. The existing ones in ci/ show that it is not a problem for
> the platforms where we run CI, but I suspect the scripts in t/ see
> a wider audience.
We could start with a single weather balloon use in t/ somewhere to
see if anybody screams. It would be a good place to start if we
want to get rid of this particular superstition.
^ permalink raw reply
* Re: [PATCH v4 0/8] ci: add GitLab CI definition
From: Junio C Hamano @ 2023-11-01 3:22 UTC (permalink / raw)
To: Victoria Dye
Cc: Patrick Steinhardt, git, Taylor Blau, Phillip Wood,
Oswald Buddenhagen
In-Reply-To: <8e4d111f-3982-4989-90b5-08377fe9c5fd@github.com>
Victoria Dye <vdye@github.com> writes:
> As for adding the GitLab-specific stuff, I'm not opposed to having it in the
> main tree. For one, there doesn't seem to be a clean way to "move it into
> `contrib/`" - '.gitlab-ci.yml' must be at the root of the project [2], and
> moving the $GITLAB_CI conditions out of the 'ci/*.sh' files into dedicated
> scripts would likely result in a lot of duplicated code (which doesn't solve
> the maintenance burden issue this series intends to address).
>
> More generally, there are lots of open source projects that include CI
> configurations across different forges, _especially_ those that are
> officially mirrored across a bunch of them. As long as there are
> contributors with a vested interest in keeping the GitLab CI definition
> stable (and your cover letter indicates that there are), and the GitLab
> stuff doesn't negatively impact any other CI configurations, I think it
> warrants the same treatment as e.g. GitHub CI.
Thanks for expressing this so clearly. I do prefer to add this as
the first class citizen (more generally, I do not want to add new
things to contrib/ at this point) if we are going to use it.
^ permalink raw reply
* Re: [PATCH v4 5/8] ci: unify setup of some environment variables
From: Junio C Hamano @ 2023-11-01 3:14 UTC (permalink / raw)
To: Patrick Steinhardt, Victoria Dye
Cc: git, Taylor Blau, Phillip Wood, Oswald Buddenhagen
In-Reply-To: <31ebe4c9-84aa-4d42-9aeb-712e2a6cece3@github.com>
Victoria Dye <vdye@github.com> writes:
>> +MAKEFLAGS="$MAKEFLAGS --jobs=10"
>> +GIT_PROVE_OPTS="--timer --jobs 10 --state=failed,slow,save"
>> +
>> +GIT_TEST_OPTS="$GIT_TEST_OPTS --verbose-log -x"
>> +if test windows = "$CI_OS_NAME"
>
> Based on the deleted lines above, I think this would need to be:
>
> if test windows = "$CI_OS_NAME" || test windows_nt = "$CI_OS_NAME"
>
> I believe these settings are required on all Windows builds, though, so you could
> instead match on the first 7 characters of $CI_OS_NAME:
>
> if test windows = "$(echo "$CI_OS_NAME" | cut -c1-7)"
>
> (full disclosure: I'm not 100% confident in the correctness of that shell syntax)
>> +then
>> + GIT_TEST_OPTS="$GIT_TEST_OPTS --no-chain-lint --no-bin-wrappers"
>> +fi
Either
case "$CI_OS_NAME" in
windows*)
GIT_TEST_OPTS=...
esac
or if we want to be more selective, for documentation purposes
especially when it is unlikely for us to gain the third variant of
windows build:
case ... in
windows | windows_nt)
GIT_TEST_OPTS=...
esac
>> +
>> +export GIT_TEST_OPTS
>> +export GIT_PROVE_OPTS
>> +
>> good_trees_file="$cache_dir/good-trees"
>>
>> mkdir -p "$cache_dir"
^ permalink raw reply
* Re: facing issue in git in a perticuler directory
From: Injamul Hasan @ 2023-11-01 2:29 UTC (permalink / raw)
To: brian m. carlson, Injamul Hasan, git
In-Reply-To: <ZUGDuyEao7wWCu0i@tapette.crustytoothpaste.net>
[-- Attachment #1.1: Type: text/plain, Size: 1166 bytes --]
so my E drive is my built in ssd drive which is my local drive and my
storage type is NTFS.given in the ss below, there are only 2 folder nothing
else and there is no cloud syncing service running yesterday this directory
worked completely fine but now this same directory is giving me this kind
of error .please have a look of the screenshot below .
On Wed, 1 Nov 2023 at 04:46, brian m. carlson <sandals@crustytoothpaste.net>
wrote:
> On 2023-10-31 at 20:21:08, Injamul Hasan wrote:
> > hello i'm facing this error in my e drive but when i try anything in
> other
> > drive it works properly .do you have any solution?
>
> What kind of disk is your E drive? Is it built-in or external, is it
> local or remote, is it NTFS, FAT, FATX, or something else, and is it
> synced in any way with a cloud syncing service (e.g., DropBox,
> OneDrive)?
>
> If you are syncing it with a cloud syncing service, you should stop
> doing that, since it can cause problems like this and it very frequently
> causes corruption. The recommendation is to use a regular file system
> with normal OS semantics.
> --
> brian m. carlson (he/him or they/them)
> Toronto, Ontario, CA
>
[-- Attachment #1.2: Type: text/html, Size: 1516 bytes --]
[-- Attachment #2: Screenshot 2023-11-01 082327.png --]
[-- Type: image/png, Size: 56294 bytes --]
[-- Attachment #3: Screenshot 2023-11-01 082756.png --]
[-- Type: image/png, Size: 37562 bytes --]
^ permalink raw reply
* Re: [PATCH v3 0/2] commit-graph: detect commits missing in ODB
From: Junio C Hamano @ 2023-11-01 2:06 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Taylor Blau, git, Karthik Nayak, Jeff King
In-Reply-To: <xmqqh6m6z6pe.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
>> Thanks, the range-diff here looks exactly as expected. Thanks for
>> working on this, this version LGTM.
>
> OK, I'd like a version as incremental to v2 (since it already is in
> 'next') that results in the same tree state as v3 then.
>
> Thanks for working on it, and reviewing it.
In the meantime, here is a mechanically produced incremental I'll
tentatively queue. Hopefully I did not screw up while generating
it.
Thanks.
--- >8 ---
From: Patrick Steinhardt <ps@pks.im>
Date: Tue, 31 Oct 2023 08:16:09 +0100
Subject: [PATCH] commit-graph: clarify GIT_COMMIT_GRAPH_PARANOIA documentation
In response to reviews of the previous round that has already hit
'next', clarify the help text for GIT_COMMIT_GRAPH_PARANOIA and
rename object_paranoia variable to commit_graph_paranoia for
consistency.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/git.txt | 15 ++++++++-------
commit-graph.c | 8 ++++----
commit.c | 8 ++++----
t/t5318-commit-graph.sh | 2 +-
4 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 22c2b537aa..3bac24cf8a 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -912,13 +912,14 @@ for full details.
useful when trying to salvage data from a corrupted repository.
`GIT_COMMIT_GRAPH_PARANOIA`::
- If this Boolean environment variable is set to false, ignore the
- case where commits exist in the commit graph but not in the
- object database. Normally, Git will check whether commits loaded
- from the commit graph exist in the object database to avoid
- issues with stale commit graphs, but this check comes with a
- performance penalty. The default is `1` (i.e., be paranoid about
- stale commits in the commit graph).
+ When loading a commit object from the commit-graph, Git performs an
+ existence check on the object in the object database. This is done to
+ avoid issues with stale commit-graphs that contain references to
+ already-deleted commits, but comes with a performance penalty.
++
+The default is "true", which enables the aforementioned behavior.
+Setting this to "false" disables the existence check. This can lead to
+a performance improvement at the cost of consistency.
`GIT_ALLOW_PROTOCOL`::
If set to a colon-separated list of protocols, behave as if
diff --git a/commit-graph.c b/commit-graph.c
index 376f59af73..b37fdcb214 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -907,18 +907,18 @@ int repo_find_commit_pos_in_graph(struct repository *r, struct commit *c,
struct commit *lookup_commit_in_graph(struct repository *repo, const struct object_id *id)
{
- static int object_paranoia = -1;
+ static int commit_graph_paranoia = -1;
struct commit *commit;
uint32_t pos;
- if (object_paranoia == -1)
- object_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
+ if (commit_graph_paranoia == -1)
+ commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
if (!prepare_commit_graph(repo))
return NULL;
if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos))
return NULL;
- if (object_paranoia && !has_object(repo, id, 0))
+ if (commit_graph_paranoia && !has_object(repo, id, 0))
return NULL;
commit = lookup_commit(repo, id);
diff --git a/commit.c b/commit.c
index 7399e90212..8405d7c3fc 100644
--- a/commit.c
+++ b/commit.c
@@ -574,12 +574,12 @@ int repo_parse_commit_internal(struct repository *r,
if (item->object.parsed)
return 0;
if (use_commit_graph && parse_commit_in_graph(r, item)) {
- static int object_paranoia = -1;
+ static int commit_graph_paranoia = -1;
- if (object_paranoia == -1)
- object_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
+ if (commit_graph_paranoia == -1)
+ commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 1);
- if (object_paranoia && !has_object(r, &item->object.oid, 0)) {
+ if (commit_graph_paranoia && !has_object(r, &item->object.oid, 0)) {
unparse_commit(r, &item->object.oid);
return quiet_on_missing ? -1 :
error(_("commit %s exists in commit-graph but not in the object database"),
diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index 55e3c7ec78..2c62b91ef9 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -847,7 +847,7 @@ test_expect_success 'stale commit cannot be parsed when traversing graph' '
test_commit C &&
git commit-graph write --reachable &&
- # Corrupt the repository by deleting the intermittent commit
+ # Corrupt the repository by deleting the intermediate commit
# object. Commands should notice that this object is absent and
# thus that the repository is corrupt even if the commit graph
# exists.
--
2.42.0-530-g692be87cbb
^ permalink raw reply related
* Re: [PATCH] merge: --ff-one-only to apply FF if commit is one
From: Junio C Hamano @ 2023-11-01 1:42 UTC (permalink / raw)
To: Kristoffer Haugsbakk; +Cc: Josh Soref, git, Ruslan Yakauleu, Taylor Blau
In-Reply-To: <cb166ed4-b8b5-4120-b546-e878445573b6@app.fastmail.com>
"Kristoffer Haugsbakk" <code@khaugsbakk.name> writes:
> I think it’s about the `--first-parent` view. Then you get a one-commit
> view of each pull request that was merged. For a merge commit it serves as
> a summary of multiple commits. And a merge commit of one commit would
> serve as a summary of one commit. So in that case you remove that extra
> level of indirection.
Yeah, I understand that position very well. After all, I was heavily
involved in the introduction of the first-parent view to the system
at around 0053e902 (git-log --first-parent: show only the first
parent log, 2007-03-13). Soon after that, d66424c4 (git-merge: add
--ff and --no-ff options, 2007-09-24) added --no-ff to make it easier
to maintain the first-parent worldview.
Strictly speaking, the log message on a merge commit serves two
purposes, one is to summarize commit(s) on the side branch that gets
merged with the merge, and as you said above, it is not needed when
merging a topic with just one commit. But the other is to justify
why the topic suits the objective of the line of history (which is
needed even when merging a single commit topic---imagine a commit
that is not incorrect per-se. It may or may not be suitable for the
maintenance track, and a merge commit of such a commit into the
track can explain if/how the commit being merged is maint-worthy).
A project that does not need the latter can do without a "--no-ff"
merge of a single commit topic.
> But the pull request is already given: it either has one commit or
> several. And you can for sure look at it and either argue that it should
> be reduced (squashed) to one commit or maybe expanded (split out) into
> several commits.
>
> The point at which you use such a merge feature is when you are already
> happy with the pull request (or patch series or whatever else). And then
> you (according to this strategy) prefer to avoid merge commits for
> single-commit pull requests.
But that argues against the "--ff-one-only" option, doesn't it?
If you looked at the side branch before you decide to merge it, you
know if the topic has only one commit (in which case you decide not
to use "--no-ff"), or if the topic consists of multiple commits (in
which case you decide to use "--no-ff"). And the only effect to
have the "--ff-one-only" option is to allow you *not* to look at
what is on the side branch.
Thanks.
^ permalink raw reply
* Re: [PATCH v2 0/2] sequencer: remove use of hardcoded comment char
From: Elijah Newren @ 2023-11-01 0:21 UTC (permalink / raw)
To: phillip.wood; +Cc: Tony Tung via GitGitGadget, git, Tony Tung
In-Reply-To: <f59f75cd-1991-456a-9ea6-638b39711bf1@gmail.com>
On Tue, Oct 31, 2023 at 4:18 AM Phillip Wood <phillip.wood123@gmail.com> wrote:
>
> Hi Elijah
>
> On 31/10/2023 06:55, Elijah Newren wrote:
> > Hi,
> >
> > On Mon, Oct 30, 2023 at 10:09 PM Tony Tung via GitGitGadget
> > <gitgitgadget@gmail.com> wrote:
> >>
> >> Instead of using the hardcoded # , use the user-defined comment_line_char.
> >> Adds a test to prevent regressions.
> >>
> >> Tony Tung (2):
> >> sequencer: remove use of comment character
> >> sequencer: fix remaining hardcoded comment char
> >
> > The second commit message seems to suggest that the two commits should
> > just be squashed; there's no explicit or even implicit reason provided
> > for why the two small patches are logically independent. After
> > reading them carefully, and digging through the particular changes
> > being made and what part of the code they touch, I think I can guess
> > at a potential reason, but I feel like I'm crossing into the territory
> > of mind reading trying to articulate that reason. (Besides, my
> > rationale would argue that the two patches should be split
> > differently.) Perhaps a comment could be added, to either the second
> > commit message or the cover letter, to explain that better?
> >
> > More importantly, though, I think the second commit message is
> > actually wrong. Before and after applying this series:
> >
> > $ git grep -c -e '".*#' -e "'#'" -- sequencer.c
> > sequencer.c:16
> >
> > $ b4 am c9f4ff34dbdb7ba221e4203bb6551b80948dc71d.1698728953.git.gitgitgadget@gmail.com
> > $ git am ./v2_20231031_gitgitgadget_sequencer_remove_use_of_hardcoded_comment_char.mbx
> >
> > $ git grep -c -e '".*#' -e "'#'" -- sequencer.c
> > sequencer.c:12
>
> As far as I can see those remaining instances are all to do with the '#'
> that separates a merge subject line from its parents. I don't think we
> need to complicate things anymore by respecting core.commentchar there
> as the '#' is not denoting a commented line, it is being used as an
> intra-line separator instead.
Ah, that might be jogging my memory slightly. I had a patch to put a
comment before the one-line commit summaries in the TODO list
(https://github.com/git/git/commit/f1ae608477e010b96557d6fc87eed9f3f39b905e).
I think I at some point noticed comment_line_char, and went to switch
to it, probably also switching the mid-line comment char for merges,
and then noticed the potential for breakage due to the manual parsing
of those.
Anyway, I trust your analysis, but I believe some of that analysis
belongs in the relevant commit messages if we push forward with these
changes.
> > Granted, four of those lines are code comments, but that still leaves
> > 8 hard coded references to '#' in the code at the end (i.e. the
> > majority are still left), meaning your second patch doesn't do what
> > its subject line claims.
> >
> > And, most important of all is still the first patch. As I stated
> > elsewhere in this thread (at
> > CABPp-BFY7m_g+sT131_Ubxqo5FsHGKOPMng7=90_0-+xCS9NEQ@mail.gmail.com):
> >
> > """
> > I think supporting comment_line_char for the TODO file provides no
> > value, and I think the easier fix would be undoing the uses of
> > comment_line_char relative to the TODO file (perhaps also leaving
> > in-code comments to the effect that comment_line_char just doesn't
> > apply to the TODO file).
>
> I agree that I don't see much point in respecting core.commentchar in
> the TODO file as unlike a commit message a legitimate non-commented line
> will never begin with '#'. Unfortunately I think we're committed to
> respecting it - see 180bad3d10f (rebase -i: respect core.commentchar,
> 2013-02-11)
Thanks for digging up the old commit and the explicit mention of the
TODO file. Kind of disappointing. While I can't imagine anything
that would actually break by reverting this, it's not worth it at this
point.
> > [...]
> > I feel quite differently about patches that make COMMIT_EDITMSG
> > handling use comment_line_char more consistently since that code
> > simply writes the file without re-parsing it; although fixing
> > everything would be best, even fixing some of them to use
> > comment_line_char would be welcome. I think the first two hunks of
> > your second patch happen to fall into this category, so if those were
> > split out, then I'd say those are good partial solutions.
>
> I think splitting the changes so that we have one patch that fixes the
> TODO file generation and another that fixes the commit message
> generation for fixup commands would be best.
That would seem more logical to me.
^ permalink raw reply
* Re: [PATCH v2 0/2] sequencer: remove use of hardcoded comment char
From: Junio C Hamano @ 2023-11-01 0:16 UTC (permalink / raw)
To: Phillip Wood; +Cc: Elijah Newren, Tony Tung via GitGitGadget, git, Tony Tung
In-Reply-To: <f59f75cd-1991-456a-9ea6-638b39711bf1@gmail.com>
Phillip Wood <phillip.wood123@gmail.com> writes:
> As far as I can see those remaining instances are all to do with the
> '#' that separates a merge subject line from its parents. I don't
> think we need to complicate things anymore by respecting
> core.commentchar there as the '#' is not denoting a commented line, it
> is being used as an intra-line separator instead.
It is unfortunate that the format of the file needs an intra-line
separator in the first place, but I tend to agree with you that the
comment-line-char would be a terrible fit there. '#' or any
replacement character at the beginning of a line is easy to spot as
a signal that the line in its entirety is commented out, but it is
much harder to eyeball-spot a single punctuation character in the
middle of a line. If we do not have to look for a different
character depending on the comment-line-char setting, it would make
the system (slightly) easier to use.
> I agree that I don't see much point in respecting core.commentchar in
> the TODO file as unlike a commit message a legitimate non-commented
> line will never begin with '#'. Unfortunately I think we're committed
> to respecting it - see 180bad3d10f (rebase -i: respect
> core.commentchar, 2013-02-11)
Yeah, the ship has long sailed.
> I think splitting the changes so that we have one patch that fixes the
> TODO file generation and another that fixes the commit message
> generation for fixup commands would be best.
Yes, it would be great.
Thanks.
^ permalink raw reply
* Re: [PATCH 0/5] ci: add GitLab CI definition
From: Junio C Hamano @ 2023-11-01 0:15 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Taylor Blau, git
In-Reply-To: <ZUCw1B6oQaDWKx3O@tanuki>
Patrick Steinhardt <ps@pks.im> writes:
>> So I have some hesitation about trying to mirror this rather complicated
>> set of build rules in another CI environment. My primary concern would
>> be that the two might fall out of sync and a series that is green on
>> GitHub would be red on GitLab, or vice-versa. Importantly, this can
>> happen even without changes to the build definitions, since (AFAICT)
>> both forges distribute new images automatically, so the set of packages
>> installed in GitHub may not exactly match what's in GitLab (and
>> vice-versa).
>
> Yup, that's a valid concern.
Is it?
I rather naïvely think different set of build options and tools
running the tests would mean we gain wider test coverage. Even with
the current setup that relies on whatever GitHub offers, we already
see "this version passes all tests except for the job on macOS" and
"the version that was passing yesterday is not broken today---perhas
the image of the test environment has been updated and we need to
adjust to it" every once in a while.
> As mentioned, this patch series does not have the intent to make
> GitLab CI a second authoritative CI platform. GitHub Actions
> should remain the source of truth of whether a pipeline passes or
> not.
I am not sure I follow. Often we take a version that happened to
have failed Actions tests when we know the reason of the failure
has nothing to do with the new code. From time to time people help
to make CI tests less flakey, but flakes are expected.
> Most importantly, I do not want to require the maintainer
> to now watch both pipelines on GitHub and GitLab.
I don't even make tests by GitHub Actions force me to do anything,
so there is no worry here.
> This might be another indicator that the pipeline should rather be
> in "contrib/", so that people don't start to treat it as
> authoritative.
Let me step back and as more basic questions.
- What do you mean by "authoritative"? For an authoritative CI
test, contributors whose changes do not pass it should take it as
a sign that their changes need more work? If so, isn't it a
natural expectation and a good thing? Unless you expect the CI
tests to be extra flakey, that is.
- Are there reasons why you do not trust the CI tests at GitLab
more than those run at GitHub?
> Last but not least, I actually think that having multiple supported CI
> platforms also has the benefit that people can more readily set it up
> for themselves. In theory, this has the potential to broaden the set of
> people willing to contribute to our `ci/` scripts, which would in the
> end also benefit GitHub Actions.
Yes, assuming that we can do so without much cutting and pasting but
with a clear sharing of the infrastructure code, and the multiple
supported CI environments are not too flakey, I am with this rather
naïve worldview that the more we have the merrier we would be.
> I understand your points, and especially the point about not having a
> second authoritative CI platform. I'm very much on the same page as you
> are here, and would be happy to move the definitions to "contrib/" if
> you want me to.
>
> But I think we should also see the potential benefit of having a second
> CI platform, as it enables a more diverse set of people to contribute.
> which can ultimately end up benefitting our CI infra for both GitHub
> Actions and GitLab CI.
I do *not* want to add new things, if we were to use them ourselves,
to "contrib/". We have passed that stage long time ago that keeping
everything in my tree gives wider exposure and foster cooperation.
Thanks.
^ permalink raw reply
* Re: [PATCH v3 0/2] commit-graph: detect commits missing in ODB
From: Junio C Hamano @ 2023-10-31 23:57 UTC (permalink / raw)
To: Taylor Blau; +Cc: Patrick Steinhardt, git, Karthik Nayak, Jeff King
In-Reply-To: <ZUFSqRYXhwsWC+EA@nand.local>
Taylor Blau <me@ttaylorr.com> writes:
> On Tue, Oct 31, 2023 at 08:16:09AM +0100, Patrick Steinhardt wrote:
>> Patrick Steinhardt (2):
>> commit-graph: introduce envvar to disable commit existence checks
>> commit: detect commits that exist in commit-graph but not in the ODB
>>
>> Documentation/git.txt | 10 +++++++++
>> commit-graph.c | 6 +++++-
>> commit-graph.h | 6 ++++++
>> commit.c | 16 +++++++++++++-
>> t/t5318-commit-graph.sh | 48 +++++++++++++++++++++++++++++++++++++++++
>> 5 files changed, 84 insertions(+), 2 deletions(-)
>>
>> Range-diff against v2:
>
> Thanks, the range-diff here looks exactly as expected. Thanks for
> working on this, this version LGTM.
OK, I'd like a version as incremental to v2 (since it already is in
'next') that results in the same tree state as v3 then.
Thanks for working on it, and reviewing it.
^ permalink raw reply
* Re: [PATCH v3 0/2] commit-graph: detect commits missing in ODB
From: Junio C Hamano @ 2023-10-31 23:55 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git, Karthik Nayak, Taylor Blau, Jeff King
In-Reply-To: <cover.1698736363.git.ps@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
> Hi,
>
> this is version 3 of my patch series to more readily detect commits
> parsed from the commit graph which are missing in the object database.
>
> Changes compared to v2:
>
> - Rewrote the help text for `GIT_COMMIT_GRAPH_PARANOIA` to be more
> accessible.
>
> - Renamed the `object_paranoia` variable to `commit_graph_paranoia`.
>
> - Fixed a typo.
>
> Thanks!
>
> Patrick
>
> Patrick Steinhardt (2):
> commit-graph: introduce envvar to disable commit existence checks
> commit: detect commits that exist in commit-graph but not in the ODB
Yikes, isn't this already in 'next'???
^ permalink raw reply
* Re: [RFC PATCH 2/3] strbuf_commented_addf(): drop the comment_line_char parameter
From: Junio C Hamano @ 2023-10-31 23:54 UTC (permalink / raw)
To: Jonathan Tan; +Cc: git, Phillip Wood, Dragan Simic
In-Reply-To: <20231031222400.2048688-1-jonathantanmy@google.com>
Jonathan Tan <jonathantanmy@google.com> writes:
> Junio C Hamano <gitster@pobox.com> writes:
>> This moving of the helper function does not belong to the "fix
>> commented_addf() not to take the comment_line_char" step.
>>
>> The series should be restructured to have the two patches from me
>> first, and then your moving some stuff to environment.c, probably.
>
> This means that #include "environment.h" will be added and then removed
> in the same series,
I do prefer it that way, because that is exactly what we are doing.
First we fix the duplicated parameter in the API by relying on the
global, and then we move things around to hide the dependence on the
global.
Thanks.
^ permalink raw reply
* Re: [PATCH] chore: fix typo in .clang-format comment
From: Junio C Hamano @ 2023-10-31 23:40 UTC (permalink / raw)
To: Taylor Blau; +Cc: Aditya Neelamraju via GitGitGadget, git, Aditya Neelamraju
In-Reply-To: <ZUFQzFcgGdJsPJ8G@nand.local>
Taylor Blau <me@ttaylorr.com> writes:
>> As a comment for a new contributor, it is a bit unhelpful not to
>> suggest what the "subject area" string we would use if we were
>> working on this patch, I think.
>
> Good suggestion. I would have suggested "clang-format", which is
> exactly Aditya ended up choosing, anyway. Thanks, Aditya!
Thanks. I was being lazy when I said the above ;-)
Teaching how to fish instead of giving fish, the way I would have
done is
$ git log --no-merges --stat --full-diff .clang-format
and inspect what they use. The ones that used "clang-format:" are
indeed very similar in spirit to what this one does, I would say.
Thanks.
^ permalink raw reply
* Re: [bug] 2.39.0: error in help for ls-remote
From: Jeremy Hetzler @ 2023-10-31 23:06 UTC (permalink / raw)
To: Jeff King; +Cc: git
In-Reply-To: <20231031190959.GA875658@coredump.intra.peff.net>
On Tue, Oct 31, 2023 at 3:10 PM Jeff King <peff@peff.net> wrote:
>
> It does work as documented with an argument, like:
>
> git ls-remote -h <remote>
>
> Yes, this is somewhat weird, but is a balance between consistency and
> backwards compatibility. See:
>
> https://lore.kernel.org/git/YU4QxcORBBR01iV8@coredump.intra.peff.net/
>
> as a starting point for past discussions.
>
> The manpage (or "--help") describes the behavior correctly; it may be
> that the "-h" output could do so as well, but it's sometimes hard to
> communicate such subtleties in such a terse format. So there may be room
> for a patch to make things more clear there, but I think it may be
> difficult to do well.
>
> -Peff
I see.
I would still find it clearer if there were a fuller explanation in
the "-h" output, but it's not a big deal. At least I'm not the only
one who's been confused :)
Thanks,
Jeremy
^ permalink raw reply
* Re: [PATCH v2 0/1] Object ID support for git merge-file
From: Junio C Hamano @ 2023-10-31 23:06 UTC (permalink / raw)
To: Phillip Wood
Cc: brian m. carlson, git, Elijah Newren, Eric Sunshine, Taylor Blau
In-Reply-To: <6a8f3a6c-c3b0-4aff-ab36-be980ec6bbe0@gmail.com>
Phillip Wood <phillip.wood123@gmail.com> writes:
> Hi brian
>
> Thanks for the re-roll, this version looks good to me
>
> Phillip
Yup, competently done.
I briefly thought about suggesting --blob-id instead of --object-id
simply because you'd never want to feed it trees and commits, but
the error message from read_mmblob() the users would get mentions
'blob' to signal that non-blob objects are unwelcome, so the name of
the optionwould be OK as-is.
Queued. Let's mark it for 'next'. Thanks.
^ permalink raw reply
* Re: facing issue in git in a perticuler directory
From: brian m. carlson @ 2023-10-31 22:46 UTC (permalink / raw)
To: Injamul Hasan; +Cc: git
In-Reply-To: <CAG4aqRxyY+xeWVc+StqsE3AVp6O2ghFhtW9iHBUFfq+hCiTWEQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 711 bytes --]
On 2023-10-31 at 20:21:08, Injamul Hasan wrote:
> hello i'm facing this error in my e drive but when i try anything in other
> drive it works properly .do you have any solution?
What kind of disk is your E drive? Is it built-in or external, is it
local or remote, is it NTFS, FAT, FATX, or something else, and is it
synced in any way with a cloud syncing service (e.g., DropBox,
OneDrive)?
If you are syncing it with a cloud syncing service, you should stop
doing that, since it can cause problems like this and it very frequently
causes corruption. The recommendation is to use a regular file system
with normal OS semantics.
--
brian m. carlson (he/him or they/them)
Toronto, Ontario, CA
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
^ 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