shithub: furgit

Download patch

ref: 5942e587cdc1bf17211be5c2b8038662ce348402
parent: 31f6ea6809c04599e2016565eee0e8ae255331c3
author: Runxi Yu <runxiyu@umich.edu>
date: Mon Mar 30 17:02:15 EDT 2026

TODO: update

--- a/TODO
+++ b/TODO
@@ -27,7 +27,6 @@
 * Completely redo error handling.
 
 * Better status reporting, filling in more things in report-status-v2.
-* Design some way to pass commit graphs to hooks.
 * Maybe the Progress/Error writers should return error on creation
   instead of automatically discarding content?
 * Actually making signed-push work reasonably
@@ -34,26 +33,18 @@
 * Investigate fsck issues with receive-pack
 * Improve performance of delta resolution
 
-* Okay, I think this is a pretty big design issue between the object
-  store and network operations: Things are modular enough that implementing
-  this probably doesn't break many other things, so it's not too big of a deal,
-  but it's an architectural debt that we should concsider: we have nice
-  pluggable object stores, but network-related paths like ingest still take an
-  *os.Root to write their quarantines and final packs into. This is fine for
-  the normal repository that uses Git packfiles, but would obviously not work
-  if we add something like dynamic packs, or want to write to any other sort of
-  object store. Perhaps object stores should get a batch writing interface? But
-  any general purpose, non-pack-aware writing interface would probably perform
-  significantly worse than just natively teeing the network pack (since what we
-  get from the network are always literally packs) to an indexer and the
-  filesystem.  A possible design is to require implementations to implement
-  their own pack ingestion algorithm; but that would make it harder to have
-  alternative protocols in the future, however for now it seems like a valid
-  solution. When there is any sight of alternative, non-pack-based protocols in
-  the future, we should think of another way.
-  go-git handles it in their object stores but the way they
-  implement it is extremely complex and not fit for furgit
-  architecture.
+* Okay, I think this is still a real design issue, just at a different layer
+  now. receive-pack and the object stores are better than they were when pack
+  ingest still wanted raw roots, and we now have coordinated quarantines and a
+  dual store to represent the normal mix. However, that probably isn't the end
+  state either. In the usual repository layout, loose and packed objects are
+  really two parts of one files object storage, and dual may just be an
+  intermediate abstraction until files-backed storage gets a more integrated
+  API, including in particular, ingress/quarantine. We should preserve the
+  current separation for now, because it keeps the boundaries there, and is
+  much simpler than trying to prematurely fuse everything together, but if
+  receive-pack and hooks keep growing around dual then that is probably a sign
+  that the underlying files object storage wants a interface of its own.
 
 * Digital signature API
 * Revision-ish entry points like if you get main or v1.0 we should
--