[June]: Easy-applications, reproducible pack generation and refs-writing groundwork #133
Byron
announced in
Progress Update
Replies: 1 comment 3 replies
-
@Byron on the timesheet what does category of business mean? apologies if it is defined somewhere. Just point it to me if you can or clarify here. |
Beta Was this translation helpful? Give feedback.
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Meet the
git-repository
crateIt may be considered the last big piece in the puzzle as it represents the missing layer between the individual low-level
git-*
crates and thegitoxide-core
crate that implements all functionality of the CLI. Hence it is now used bygitoxide-core
to create demand to maintain and improve it. The latter serves as test-bed to see how applications would usegit-repository
with the goal to movegitoxide-core
code intogit-repository
once its usefulness is sufficiently clear so that one daygitoxide-core
is nothing more than a set of user facing tools with all plumbing being implemented ingit-repository
instead.git-repository
is made for applications, providing a higher-level convenience layer to combine all the plumbing crates into a coherent whole. In order to be usable for everyone it makes no sacrifices related to performance sometimes leading to a more complex call signature than other implementations likegit2
.For that reason it's planned to provide an
easy
version of all interfaces which make decent choices for the user to increase usability while removing the possibility for certain optimizations as tunables are preconfigured. This is the API that ultimately will be used by the next generation ofGitPython
, a python frontend forgitoxide
'sgit-repository
crate.An async version of
gixp pack-receive
The work on the async client for fetch operations is completed to the point where
gixp pack-receive
can now be built using an async implementation. It serves more as a show-case on how blocking and async portions of the code can co-exists and how they differ.Valuable insights where gained on how async-IO code will interoperate with the blocking
git-repository
and how all that integrates with cancellation.Reproducible pack creation
The biggest shortcoming of generated packs not being reproducible is now fixed at the cost of being able to count objects in single-threaded mode only. However, as this is a tuneable applications who don't need reproducibility can count with multiple threads to boost performance as before.
Both the counting and the compression phase now gather statistics to provide valuable insights into the improvements made by the next iteration. There it should become possible to stop copying existing packed entries into memory just to write them, and to be able to re-use existing delta-objects too. The latter will have a major impact to the size of the produced packs. For example, cloning the kernel pack currently produces 45GB as deltas are recompressed, while in future the pack will only be 1.3GB and come at nearly no additional cost.
Signal-handling improvements to support
git-tempfile
andgit-lock
On the way towards process-safe and race-aware implementations of writing git references as needed during the fetch/clone operation it's necessary to implement lock files the git way. This led to major improvements and greater usability of the way signals and interrupts are handled to the point where the current system will work for CLIs as well as servers which can have perfect control over what to do when application signals arrive along with fine-grained interrupt control for each running application. The latter will soon allow integrating an async server with blocking operations on the git-repository that are cancellable, for example to respond to timeouts.
With
git-lock
being out of the way the next step involves implementing transaction logic for writing loose refs, ref-logs and eventually packed refs.The bigger picture
All work drives towards supporting a complete client implementation to fully support fetches with negotiation as well as clones in an async fashion. This is likely going to be followed up with an async implementation of the server side of this, and the continuous pack generation work will be very useful for this.
From time to time I plan to 'take off' a day or two to scratch itches of my own by implementing small user facing utilities based on
git-repository
.Cheers,
Sebastian
PS: The latest timesheets can be found here.
Beta Was this translation helpful? Give feedback.
All reactions