On 2023-09-08 19:08:05 +0200, Ludovic Courtès wrote: > Hello! > > Josselin Poiret 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.