[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#65720: Guile-Git-managed checkouts grow way too much
From: |
wolf |
Subject: |
bug#65720: Guile-Git-managed checkouts grow way too much |
Date: |
Mon, 11 Sep 2023 16:42:59 +0200 |
On 2023-09-08 19:08:05 +0200, Ludovic Courtès wrote:
> Hello!
>
> Josselin Poiret <dev@jpoiret.xyz> skribis:
>
> > Right, although I wouldn't necessarily say that the former doesn't have
> > a proper API, but rather that it has a Unix-oriented API. That leads to
> > performance issues on e.g. Windows but on Linux I'm not sure there's
> > much of a difference.
>
> [...]
>
> > We could consider replacing the guile-git dependency with another
> > library built directly on top of git-minimal, and have this be a
> > dependency of Guix. Not ideal though, and not really scalable either:
> > we can't just add every VCS as direct dependencies.
>
> I cannot imagine a viable implementation of things like ‘commit-closure’
> and ‘commit-relation’ from (guix git) done by shelling out to ‘git’.
I am sure I must be missing some part of the contract of the function, but at
least the commit-relation seems fairly straightforward:
(define (shelling-commit-relation old new)
(let ((h-old (oid->string (commit-id old)))
(h-new (oid->string (commit-id new))))
(cond ((eq? old new)
'self)
((zero? (git-C %repo "merge-base" "--is-ancestor" h-old h-new))
'ancestor)
((zero? (git-C %repo "merge-base" "--is-ancestor" h-new h-old))
'descendant)
(else
'unrelated))))
I would argue it is even somewhat more readable than the current implementation.
> I’m quite confident this would be slow
My version is ~2000x faster compared to (guix git):
Guix: 1048.620992ms
Git: 0.532143ms
Again, I am sure I must have miss something, either in the implementation or in
the measurements, because it is pretty hard to believe there is so much room for
improvement.
The full script I used is attached to this email.
> and brittle.
In general git plumbing command are design to have stable CLI interface in order
to be usable in scripting. So I am not sure where the brittleness would come
from.
>
> It looks like there’s no option other than carrying the two
> implementations.
Assuming I made no mistake (hard to believe), it is probably worth exploring the
feasibility of just shelling out to the git binary some more.
>
> ~~~
>
> Years ago, Andy Wingo sketched a plan for GNU hackers to implement Git
> in pure Scheme. That was on April 1st though, so people mistakenly
> assumed it was a joke and the project was never carried out.
>
> I digress, but I wonder: is there not even a viable Haskell or OCaml
> implementation of Git?
>
> Thanks,
> Ludo’.
>
W.
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
test.scm
Description: Text document
signature.asc
Description: PGP signature
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/03
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/04
- bug#65720: Guile-Git-managed checkouts grow way too much, Josselin Poiret, 2023/09/05
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/05
- bug#65720: Guile-Git-managed checkouts grow way too much, Josselin Poiret, 2023/09/06
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/08
- bug#65720: Guile-Git-managed checkouts grow way too much, Csepp, 2023/09/11
- bug#65720: Digression about Git implementations (was Re: bug#65720: Guile-Git-managed checkouts grow way too much), Simon Tournier, 2023/09/11
- bug#65720: Guile-Git-managed checkouts grow way too much,
wolf <=
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/13
- bug#65720: Guile-Git-managed checkouts grow way too much, Simon Tournier, 2023/09/13
- bug#65720: Guile-Git-managed checkouts grow way too much, Simon Tournier, 2023/09/06
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/08
- bug#65720: Guile-Git-managed checkouts grow way too much, Simon Tournier, 2023/09/09
- bug#65720: Guile-Git-managed checkouts grow way too much, Csepp, 2023/09/11
- bug#65720: Guile-Git-managed checkouts grow way too much, Ludovic Courtès, 2023/09/11
- bug#65720: Guile-Git-managed checkouts grow way too much, Simon Tournier, 2023/09/05
- bug#65720: Guile-Git-managed checkouts grow way too much, Jelle Licht, 2023/09/06