Back to Gitoxide

25 08

etc/reports/25-08.md

0.53.04.5 KB
Original Source

This month feels like one of these summer months when not much has been happening, again, at least I didn't get to contribute more than basic maintenance.

GitButler - Core Engine Rewrite

Just to be able to report something, let me share some of my GitButler work again. The last time this came up I changed the way GB sees the world by making it based on a Graph data structure.

And now that this works and informs what the user sees in the app. What's new is that it is also used to mutate the repository, for instance by creating references.

All new code is heavily tested, something that is significantly easier now and more visual, so most cases can be validated in advance. And there are many more of them now given that GB is able to also work outside its own confined workspace now.

This is a long-winded way of saying that GB will be a general purpose Git client, and one that is more convenient than anything we know today.

Community

Improved Windows Compatibility

Eliah has been hard at work to wrap up a PR which improves handling of Git related paths on Windows, with 10 devils hiding in the details for sure. And I am so glad for him being on the project, this is the kind of work I simply couldn't do.

75% Faster Precomposed-Unicode Handling

Thanks to the author of starship, David Knaack, gitoxide is now up to 75% faster when precomposing unicode paths upon ingestion. And all that was done effectively by a two-line change, switching over to a specialised function rather than implementing it by hand. This would also have the potential to speedup various algorithms that see a lot of paths, like the directory walk done in Git status, so the effects of this will be measurable everywhere.

Better Submodule Status compatibility

Another one by David is the added support for diff.ignoreSubmodules, so gix status will now take that global override into consideration as well. Thanks to starship gitoxide really gets to run in many, many configurations, and gets polished along the way. Neat!

Improved loose file refs compatibility

Did you know that the long-stable and mature gix-ref crate wrote slightly incompatible loose references? I didn't either, until a contribution finally added the missing newline character at the end of the hash. Thanks for contributing, Umar!

Better date parsing

The gix-date::parse() function is the 'parse anything' kind of affair that is useful for specifying dates, and even though it's still way less flexible than what Git can do, it was too flexible as ultimately, it could interpret any leading number as unix timestamp. This is, of course, not desirable when passing 2015 Mar 8th to it.

Thanks to the author of Stacked Git (a tool I use myself every day), Peter Grayson, this is now a thing of the past as this function now calls out to a custom-made stricter version of the gix-date::parse_header() function.

It's interesting to know that more bugs are probably hidden in parse_header() as that means it will still happily consider 2025 Mar as unix timestamp. Due to may strange commits out there, it has to be flexible, but maybe not quite that much? Who dares to touch that, I wonder, given the unknown set of possible inputs that should only fail if Git would fail.

Improved Commit Parsing

The real world always has surprises for you, especially if you are a parser. Thanks to Johannes Schindelin, and a living legend, commits now handle empty multi-line headers correctly, so more commits can be parsed and round-trip that previously couldn't. Thank you!

Better text-conv handling

When launching text conversions when creating diffs, gitoxide will now correctly launch these programs through a shell, always, which is what Git does and thus needed for compatibility. Without that, it might not have found certain bundled programs for execution. This shell of course means "Git shell", but that's a common thing to do (on Windows), to be able to do anything correctly.

The advent of AI

gitoxide is feeling the impact of AI tooling, such as agents and IDE integrations that allow for the generation of copious amounts of code. The adequate response is still unclear to me, and I have tried auto-reviewing with Copilot and even proactively launching Copilot to attempt resolving entire issues itself (-> it doesn't work).

Gix in Cargo

There was no progress in Cargo.

Cheers Sebastian

PS: The latest timesheets can be found here (2025).