I'm not talking about the performance.
go-git is quite lacking for our need. It doesn't provide enough API, so we are depending on raw git cli in several places. TBH I think golang ecosystem is not suitable for this job. Besides, rust has quite mature ecosystem around cutting-edge VCSes like jujutsu or sapling. With mature ecosystem, we can try more advanced stuffs like custom syncing protocol tailored for our need or rich commit query api using jj revset language.
While go-git can also be good enough with some tweaks, I think it's clear that rust has better libraries here. Currently Knot is already working pretty well without any major issues, so rust rewrite might seem unnecessary and not that important. But what we would like to do in future can be easily done with rust crates. e.g. postgres based git storage.
Things that can be rewritten in rust:#
- entire knot implementation
- knotmirror implementation excluding the knotstream slurper which can be extracted as external relay-like service
Things that won't (maybe never) be rewritten in rust:#
- appview - we prefer go over rust here
- spindle - opposite case to knot. go has better ecosystem to manage CI system
This is not fixed idea, it's just a proposal for now and I am looking for thoughts.