all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7
@ 2023-05-28 15:16 Janneke Nieuwenhuizen
  2023-05-30 15:25 ` Simon Tournier
  2024-01-31 20:08 ` Jonathan Brielmaier via Bug reports for GNU Guix
  0 siblings, 2 replies; 7+ messages in thread
From: Janneke Nieuwenhuizen @ 2023-05-28 15:16 UTC (permalink / raw)
  To: 63775

Hi!

Subject says it all:

--8<---------------cut here---------------start------------->8---
17:12:25 janneke@drakenpad:~/src/guix/master [env]
$ git fetch origin
17:12:56 janneke@drakenpad:~/src/guix/master [env]
$ git fetch origin --tags
17:13:04 janneke@drakenpad:~/src/guix/master [env]
$ git reset --hard origin/master
HEAD is now at 6192acf8b7 gnu: telegram-desktop: Update to 4.8.1
17:13:09 janneke@drakenpad:~/src/guix/master [env]
$ git describe
v1.3.0-38775-g6192acf8b7
--8<---------------cut here---------------end--------------->8---

(There was a question on IRC by cassio: "How do I upgrade to 1.4",
 but I don't see it in the channel logs yet).

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7
  2023-05-28 15:16 bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7 Janneke Nieuwenhuizen
@ 2023-05-30 15:25 ` Simon Tournier
  2023-06-08 13:58   ` Giovanni Biscuolo
  2024-01-31 20:08 ` Jonathan Brielmaier via Bug reports for GNU Guix
  1 sibling, 1 reply; 7+ messages in thread
From: Simon Tournier @ 2023-05-30 15:25 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen, 63775

Hi,

On dim., 28 mai 2023 at 17:16, Janneke Nieuwenhuizen <janneke@gnu.org> wrote:

> --8<---------------cut here---------------start------------->8---
> 17:12:25 janneke@drakenpad:~/src/guix/master [env]
> $ git fetch origin
> 17:12:56 janneke@drakenpad:~/src/guix/master [env]
> $ git fetch origin --tags
> 17:13:04 janneke@drakenpad:~/src/guix/master [env]
> $ git reset --hard origin/master
> HEAD is now at 6192acf8b7 gnu: telegram-desktop: Update to 4.8.1
> 17:13:09 janneke@drakenpad:~/src/guix/master [env]
> $ git describe
> v1.3.0-38775-g6192acf8b7
> --8<---------------cut here---------------end--------------->8---

Oh, that’s weird!

--8<---------------cut here---------------start------------->8---
$ git describe --debug
describe HEAD
No exact match on refs or tags, searching to describe
 annotated      38817 v1.3.0
 annotated      38831 v1.3.0rc2
 annotated      38870 v1.3.0rc1
 annotated      55660 base-for-issue-62196
 annotated      55806 v1.2.0
 annotated      55814 v1.2.0rc2
 annotated      55837 v1.2.0rc1
 annotated      55985 v1.4.0
 annotated      55998 v1.4.0rc2
 annotated      56031 v1.4.0rc1
traversed 56356 commits
more than 10 tags found; listed 10 most recent
gave up search at d62c9b2671be55ae0305bebfda17b595f33797f2
v1.3.0-38817-g76b7bc5392

$ git rev-list --count v1.3.0..HEAD
38817
--8<---------------cut here---------------end--------------->8---

The manual reads,

        SEARCH STRATEGY

        [...]

             If an exact match was not found, git describe will walk back
             through the commit history to locate an ancestor commit
             which has been tagged. The ancestor’s tag will be output
             along with an abbreviation of the input commit-ish’s
             SHA-1. If --first-parent was specified then the walk will
             only consider the first parent of each commit.

             If multiple tags were found during the walk then the tag
             which has the fewest commits different from the input
             commit-ish will be selected and output. Here fewest commits
             different is defined as the number of commits which would be
             shown by git log tag..input will be the smallest number of
             commits possible.

And then,

--8<---------------cut here---------------start------------->8---
$ git rev-list --count v1.4.0..HEAD
9980
--8<---------------cut here---------------end--------------->8---

Hum, why does “git describe” count 55985?  Well, it’s weird, for
instance, using my repository, the DAG looks like:

--8<---------------cut here---------------start------------->8---
$ git --no-pager log --all --graph --simplify-by-decoration --format="%h %d"
* 76b7bc5392  (HEAD -> master)
* 2b1b0a580d  (origin/master, origin/HEAD)
| * ecb19e3353  (origin/tex-team-next)
| * bb07562a89  (origin/tex-team)
|/  

[...]

* 45fd01ac5d  (tag: base-for-issue-62196)

[...]

| * d8abcffda5  (origin/wip-guile-ssh-0.16)
|/  
| * e81a75a7b2  (origin/wip-r)
|/  
* 989a3916dc  (origin/version-1.4.0)
* 8e2f32cee9  (tag: v1.4.0)  
* 7866294e32  (tag: v1.4.0rc2)
* 020184fd39  (tag: v1.4.0rc1)
| * 7966084069  (origin/wip-aarch64-bootstrap)

[...]

| * 8d84a9ee71  (origin/version-1.2.0)
| | * aa34d4d28d  (origin/version-1.3.0)
| |/  
|/|   
| | * 592101268f  (origin/wip-ppc)
| |/  
|/|   
* | a0178d34f5  (tag: v1.3.0)
* | 7a65beff0f  (tag: v1.3.0rc2)
* | 0d353b06ec  (tag: v1.3.0rc1)
|/  
| * fafad6b17c  (origin/wip-node-importer)
--8<---------------cut here---------------end--------------->8---

Therefore, I would be expecting that the tag ’base-for-issue-62196’
would be the output of “git describe”.


> (There was a question on IRC by cassio: "How do I upgrade to 1.4",
>  but I don't see it in the channel logs yet).

Well, about upgrading to 1.4, it depends from which Guix revision. :-)

Something like,

    guix pull --commit=8e2f32cee982d42a79e53fc1e9aa7b8ff0514714

should do the job.  And if not, the answer will depend on the current
Guix revision which requires an update.


Cheers,
simon




^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7
  2023-05-30 15:25 ` Simon Tournier
@ 2023-06-08 13:58   ` Giovanni Biscuolo
  0 siblings, 0 replies; 7+ messages in thread
From: Giovanni Biscuolo @ 2023-06-08 13:58 UTC (permalink / raw)
  To: Simon Tournier, Janneke Nieuwenhuizen, 63775

[-- Attachment #1: Type: text/plain, Size: 2040 bytes --]

Hi,

thank you Janneke for this report, I thought I had some problem with my
working dir

magit tells me I'm on "Tag:      v1.3.0 (39040)"

Simon Tournier <zimon.toutoune@gmail.com> writes:

[...]

> Oh, that’s weird!
>
> --8<---------------cut here---------------start------------->8---
> $ git describe --debug
> describe HEAD
> No exact match on refs or tags, searching to describe
>  annotated      38817 v1.3.0
>  annotated      38831 v1.3.0rc2
>  annotated      38870 v1.3.0rc1
>  annotated      55660 base-for-issue-62196
>  annotated      55806 v1.2.0
>  annotated      55814 v1.2.0rc2
>  annotated      55837 v1.2.0rc1
>  annotated      55985 v1.4.0
>  annotated      55998 v1.4.0rc2
>  annotated      56031 v1.4.0rc1
> traversed 56356 commits
> more than 10 tags found; listed 10 most recent
> gave up search at d62c9b2671be55ae0305bebfda17b595f33797f2
> v1.3.0-38817-g76b7bc5392
>
> $ git rev-list --count v1.3.0..HEAD
> 38817
> --8<---------------cut here---------------end--------------->8---

I have the very same (updated) results:

[...]

--8<---------------cut here---------------start------------->8---

  0 LC_ALL=C git describe --debug
describe HEAD
No exact match on refs or tags, searching to describe
 annotated      39040 v1.3.0
 annotated      39054 v1.3.0rc2
 annotated      39093 v1.3.0rc1
 annotated      55883 base-for-issue-62196
 annotated      56029 v1.2.0
 annotated      56037 v1.2.0rc2
 annotated      56060 v1.2.0rc1
 annotated      56208 v1.4.0
 annotated      56221 v1.4.0rc2
 annotated      56254 v1.4.0rc1
traversed 56579 commits
more than 10 tags found; listed 10 most recent
gave up search at d62c9b2671be55ae0305bebfda17b595f33797f2
v1.3.0-39040-g76b7c50645

--8<---------------cut here---------------end--------------->8---
(output from magit-process)

[...]

I'm not so expert in git, still trying to understand how to debug this
strange behaviuor

Happy hacking! Gio'

-- 
Giovanni Biscuolo

Xelera IT Infrastructures

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 849 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7
  2023-05-28 15:16 bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7 Janneke Nieuwenhuizen
  2023-05-30 15:25 ` Simon Tournier
@ 2024-01-31 20:08 ` Jonathan Brielmaier via Bug reports for GNU Guix
  2024-02-03 18:43   ` Giovanni Biscuolo
  1 sibling, 1 reply; 7+ messages in thread
From: Jonathan Brielmaier via Bug reports for GNU Guix @ 2024-01-31 20:08 UTC (permalink / raw)
  To: 63775

Hm, I'm hitting this bug while trying to work on the openSUSE package.
They offer a way to build RPM packages from the most recent master
commit, but it's get the wrong version (1.3.0 instead of 1.4.0) due to
this `git describe` result.

So in the end the package looks like `guix-1.3.0+git*.rpm` which is a
problem, because the normal Guix package is already `guix-1.4.0*.rpm`.
RPM then thinks the package is older...

~Jonathan




^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7
  2024-01-31 20:08 ` Jonathan Brielmaier via Bug reports for GNU Guix
@ 2024-02-03 18:43   ` Giovanni Biscuolo
  2024-02-05 11:08     ` consider "git describe"... harmful? (if misused) Giovanni Biscuolo
  2024-02-12  9:17     ` bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7 Simon Tournier
  0 siblings, 2 replies; 7+ messages in thread
From: Giovanni Biscuolo @ 2024-02-03 18:43 UTC (permalink / raw)
  To: Jonathan Brielmaier, 63775-close; +Cc: guix-devel, Simon Tournier

[-- Attachment #1: Type: text/plain, Size: 4262 bytes --]

Hi Jonathan,

I'm CC'ing guix-devel because I suspect many users who cloned/updated
the Guix repo are having the same results... and concerns.

This is a git bug, not an issue with our repo, and for this reason (I
hope) I'm closing this bug; please see below.

Jonathan Brielmaier via Bug reports for GNU Guix <bug-guix@gnu.org>
writes:

> Hm, I'm hitting this bug while trying to work on the openSUSE package.
> They offer a way to build RPM packages from the most recent master
> commit, but it's get the wrong version (1.3.0 instead of 1.4.0) due to
> this `git describe` result.

As pointed out by Simon last June the result of "git describe" is not
what users should get given the "Search strategy" documented in the
command manual: https://git-scm.com/docs/git-describe#_search_strategy:

--8<---------------cut here---------------start------------->8---

If multiple tags were found during the walk then the tag which has the
fewest commits different from the input commit-ish will be selected and
output. Here fewest commits different is defined as the number of
commits which would be shown by git log tag..input will be the smallest
number of commits possible.

--8<---------------cut here---------------end--------------->8---

The upstream bug report (and a reproducer) is this one:
«Subject: [BUG] `git describe` doesn't traverse the graph in topological
order»
https://lore.kernel.org/git/ZNffWAgldUZdpQcr@farprobe/

Another user also reported the issue and a reproducer:
https://public-inbox.org/git/PH0PR08MB773203CE3206B8DEFB172B2F94839@PH0PR08MB7732.namprd08.prod.outlook.com/

The "executive summary" is that "git describe" gets the count of "fewest
commits different from the input commit-ish" wrong (see anso previous
messages in this thread for details).

Anyway, even if this bug was solved, I'd warmly suggest NOT to base the
check for the latest stable Guix commit (usually tagged as v[0-9]*) on
the result of "git describe".

Today, if "guix describe" had no bugs, the correct result would be:
"base-for-issue-62196"... AFAIU :-)

This is a reproducer:

--8<---------------cut here---------------start------------->8---

$ git describe $(git rev-list --tags --max-count=1)
base-for-issue-62196

--8<---------------cut here---------------end--------------->8---

To get the value corresponding to the latest tagged version, we should
testrict the list of tags to the ones matching the "v[0-9]*" regexp:

--8<---------------cut here---------------start------------->8---

$ git describe $(git rev-list --tags="v[0-9]*" --max-count=1)
v1.4.0

--8<---------------cut here---------------end--------------->8---

To browse all the tags there is the "git tag" command, for example to
have the list and description of every Guix released version:

--8<---------------cut here---------------start------------->8---

$ git tag -l "v[0-9]*" --sort=-creatordate -n
v1.4.0          GNU Guix 1.4.0.
v1.4.0rc2       GNU Guix 1.4.0rc2.
v1.4.0rc1       GNU Guix 1.4.0rc1.
v1.3.0          GNU Guix 1.3.0.
v1.3.0rc2       GNU Guix 1.3.0rc2.
v1.3.0rc1       GNU Guix 1.3.0rc1.
v1.2.0          GNU Guix 1.2.0.
v1.2.0rc2       GNU Guix 1.2.0rc2.
v1.2.0rc1       GNU Guix 1.2.0rc1.
v1.1.0          GNU Guix 1.1.0.
v1.1.0rc2       GNU Guix 1.1.0rc2.
v1.1.0rc1       GNU Guix 1.1.0rc1.
v1.0.1          GNU Guix 1.0.1.
v1.0.0          GNU Guix 1.0.0.
v0.16.0         GNU Guix 0.16.0.
v0.15.0         GNU Guix 0.15.0.
v0.14.0         GNU Guix 0.14.0.
v0.13.0         GNU Guix 0.13.0.
v0.12.0         GNU Guix 0.12.0
v0.11.0         GNU Guix 0.11.0.
v0.10.0         GNU Guix 0.10.0.
v0.9.0          GNU Guix 0.9.0.
v0.8.3          GNU Guix 0.8.3.
v0.8.2          GNU Guix 0.8.2.
v0.8.1          GNU Guix 0.8.1.
v0.8            GNU Guix 0.8.
v0.7            GNU Guix 0.7.
v0.6            GNU Guix 0.6.
v0.5            GNU Guix 0.5.
v0.4            GNU Guix 0.4.
v0.3            GNU Guix 0.3.
v0.2            GNU Guix 0.2.
v0.1            GNU Guix 0.1.
v0.0            Guix 0.0, initial announcement.

--8<---------------cut here---------------end--------------->8---

HTH!

Happy hacking, Gio'

-- 
Giovanni Biscuolo

Xelera IT Infrastructures

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 849 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* consider "git describe"... harmful? (if misused)
  2024-02-03 18:43   ` Giovanni Biscuolo
@ 2024-02-05 11:08     ` Giovanni Biscuolo
  2024-02-12  9:17     ` bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7 Simon Tournier
  1 sibling, 0 replies; 7+ messages in thread
From: Giovanni Biscuolo @ 2024-02-05 11:08 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 4625 bytes --]

Hello developers,

Ipse dixit: a tag is a tag is a tag.

Sorry to stress on this but AFAIU "git describe" and it's variants is
(mis)used by some (many?) to obtain the last revision number of packages
got from a git tag on a repo, even in few upstream build config/scripts
(patched in Guix); here are just a few examples I've observed from
messages in this mailing list and our package definitions:

- https://yhetil.org/guix/7a759ffb-fca8-478d-a4aa-08e6b674da75@archlinux.org:
  `git describe --tags`, which is often used for --version output
  (especially in Go projects)

- https://yhetil.org/guix/87ediha5p0.wl-hako@ultrarare.space: I usually
  obtain the revision number from the output of 'git describe --tags', I
  think it's fine to use it when available.

- https://yhetil.org/guix/c93c18e5-8e01-45a0-b79f-05d72f6f8230@archlinux.org
  The output of `git describe --always --tags --dirty` was also embedded.

Some code/comments I got running "find . -type f -exec grep --color=auto
-nH --null -e "git describe" \{\} +" in "<guix-repo>/gnu/packages", in
Emacs:

- ./audio.scm:751: ;; Ardour expects this file to exist at build time.  The
                   revision is the output of git describe HEAD | sed
                   's/^[A-Za-z]*+//'

- ./build-tools.scm:589: (substitute* "src/tup/link.sh" (("`git
  describe`") ,version))
 
- ./linux.scm:7263: ;; the checkout lacks a .git directory, breaking ‘git
  describe’.
  
- ./axoloti.scm:500: ;; TODO: this is the output of: git describe --long
  --tags --dirty --always

IMHO "git describe" should never be used to obtain the last revision
for the reasons I explained in my previous message (see a quote below):
IF you get it right is ONLY by chance (probably it's most of the times),
not by **design**; executive summary:

1. "git describe [--tag]" have a bug and doesn't traverse the graph in
topological order; for the Guix git repo this means that now the last
"git describe" tell us something like "v1.3.0-53609-gc70c513317" (the
number of commits and the commit hash may vary depending on last "git
pull"), not something like...

2. is NOT guaranteed that the last tag reported by "git describe
[--tag]" (even if the above mentioned bug is resolved) is the one
corresponding to a released revision of the software, since tags (even
annotated one) can be added by repo committers for any reason they find
useful; i.e. the last tag commited gor the Guix repo is
base-for-issue-62196.  If and ONLY IF committers use a recognised
pattern for the tag - i.e. v<semver> - we can get the last (tagged)
revision from git (see below for alternative to "

Giovanni Biscuolo <g@xelera.eu> writes:

[...]

> The upstream bug report (and a reproducer) is this one:
> «Subject: [BUG] `git describe` doesn't traverse the graph in topological
> order»
> https://lore.kernel.org/git/ZNffWAgldUZdpQcr@farprobe/
>
> Another user also reported the issue and a reproducer:
> https://public-inbox.org/git/PH0PR08MB773203CE3206B8DEFB172B2F94839@PH0PR08MB7732.namprd08.prod.outlook.com/
>
> The "executive summary" is that "git describe" gets the count of "fewest
> commits different from the input commit-ish" wrong (see anso previous
> messages in this thread for details).
>
> Anyway, even if this bug was solved, I'd warmly suggest NOT to base the
> check for the latest stable Guix commit (usually tagged as v[0-9]*) on
> the result of "git describe".
>
> Today, if "guix describe"

I mean "git describe", sorry!

> had no bugs, the correct result would be:
> "base-for-issue-62196"... AFAIU :-)
>
> This is a reproducer:
>
> --8<---------------cut here---------------start------------->8---
>
> $ git describe $(git rev-list --tags --max-count=1)
> base-for-issue-62196
>
> --8<---------------cut here---------------end--------------->8---
>
> To get the value corresponding to the latest tagged version, we should
> testrict the list of tags to the ones matching the "v[0-9]*" regexp:
>
> --8<---------------cut here---------------start------------->8---
>
> $ git describe $(git rev-list --tags="v[0-9]*" --max-count=1)
> v1.4.0
>
> --8<---------------cut here---------------end--------------->8---

More efficient alternative:

--8<---------------cut here---------------start------------->8---

$ git tag --list 'v*' --sort=-creatordate | head -1
v1.4.0

--8<---------------cut here---------------end--------------->8---

[...]

Should we add some notes (a footnote?) in our Guix manual?

WDYT?

-- 
Giovanni Biscuolo

Xelera IT Infrastructures

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 849 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7
  2024-02-03 18:43   ` Giovanni Biscuolo
  2024-02-05 11:08     ` consider "git describe"... harmful? (if misused) Giovanni Biscuolo
@ 2024-02-12  9:17     ` Simon Tournier
  1 sibling, 0 replies; 7+ messages in thread
From: Simon Tournier @ 2024-02-12  9:17 UTC (permalink / raw)
  To: Giovanni Biscuolo, Jonathan Brielmaier, 63775-close; +Cc: guix-devel

Hi,

On sam., 03 févr. 2024 at 19:43, Giovanni Biscuolo <g@xelera.eu> wrote:

> This is a git bug, not an issue with our repo, and for this reason (I
> hope) I'm closing this bug; please see below.

Here the explanation of the bug of “git describe”:

    https://lore.kernel.org/git/20191008123156.GG11529@szeder.dev/
    
      $ git describe d1a251a1fa
      v2.23.0-135-gd1a251a1fa
      $ git log --oneline v2.23.0..d1a251a1fa | wc -l
      59

    Uh-oh, 59 != 135.

    This is happening because:

      - Git is too fast ;) and the committer date has a one second
        granularity, so scripts can easily create subsequent commits with
        the same committer date.  Case in point are the two subsequent
        merge commits f3c19f85c5 and 4a3ed2bec6 at the bottom of this
        simplified history snippet (kind of a hand-edited 'git log --graph
        --format="%h %cd %s"'):

        *   d1a251a1fa 2019-09-09 12:26:36 -0700 Merge branch 'en/checkout-mismerge-fix'
        |\
        * | ... a big chunk of history simplified away ...
        | * acb7da05ac 2019-08-16 09:58:00 -0700 checkout: remove duplicate code
        * | a5e4be2f68 2019-04-25 16:41:15 +0900 Merge branch 'ab/commit-graph-fixes'
        * | f3c19f85c5 2019-04-25 16:41:14 +0900 Merge branch 'ab/gc-reflog'
        |/
        *   4a3ed2bec6 2019-04-25 16:41:14 +0900 Merge branch 'nd/checkout-m'

      - 'git describe' implements its own history traversal: it iterates
        over all parents of a commit, adds any yet unseen parents to a
        commit list ordered by date, and then continues with the first,
        i.e. most recent commit from that list.  While doing so it uses
        several bits in 'commit->object.flags' to track reachability
        information from several candidate tags at once, and copies these
        flags from each commit to its parents; this is important to
        compute the correct number of additional commits.  Another
        important thing is the implementation detail that
        commit_list_insert_by_date() inserts a new commit after all other
        commits with the same date that are already in the list.


Thanks Giovanni for pointing this out.

Cheers,
simon


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-02-12 13:00 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-28 15:16 bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7 Janneke Nieuwenhuizen
2023-05-30 15:25 ` Simon Tournier
2023-06-08 13:58   ` Giovanni Biscuolo
2024-01-31 20:08 ` Jonathan Brielmaier via Bug reports for GNU Guix
2024-02-03 18:43   ` Giovanni Biscuolo
2024-02-05 11:08     ` consider "git describe"... harmful? (if misused) Giovanni Biscuolo
2024-02-12  9:17     ` bug#63775: git describe on current master says: v1.3.0-38775-g6192acf8b7 Simon Tournier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.