shithub: furgit

Download patch

ref: ad25bb029ae430ffadfe6afd86bab4eed33a9a76
parent: e3835d89257e42b212483a2dda1aa8046070fb5a
author: Runxi Yu <runxiyu@umich.edu>
date: Tue Mar 24 05:03:13 EDT 2026

ROADMAP: Split from README

--- a/README.md
+++ b/README.md
@@ -94,220 +94,6 @@
     `commitquery` over the existing and quarantined object stores. Some hooks
     are provided.
 
-## Features
-
-* Configuration
-  * [X] Parsing
-  * [ ] Includes
-  * [ ] Writing
-* [X] Object IDs
-  * [X] SHA-256
-  * [X] SHA-1
-* [X] Object model (incl., parse, serialize)
-  * [X] Blobs
-  * [X] Trees
-    * [X] File mode definitions
-    * [X] Entry insertion ordering
-    * [X] Traversal
-    * [ ] Pathspec
-  * [X] Commits
-  * [X] Annotated tags
-  * [X] Stored objects
-* Further cryptography
-  * [ ] OpenPGP signatures
-  * [ ] SSH signatures
-* [X] Reading object stores
-  * [X] Pluggable interface
-  * [X] Chain lookup store
-  * [X] Bundle store
-  * [X] MRU lookup store
-  * [X] Reading loose objects
-  * [ ] Promisor remotes
-  * [ ] Alternates
-  * [X] Reading packed objects
-    * [X] Pack index lookups
-    * [X] Delta caching
-    * [X] Delta application
-    * [ ] Pack-wide bloom filters
-    * [ ] Multi pack indexes
-* [ ] Writing objects
-  * [X] Loose object writing
-* Misc bundle features
-  * [ ] Writing bundles
-* Misc packfile features
-  * [X] Writing pack indexes
-  * [X] Writing reverse pack indexes
-  * [ ] Writing packfiles
-    * [ ] Writing thin packs
-    * [ ] Compressing deltas
-      * [ ] Delta islands
-  * [ ] Pack verification
-* Compression
-  * [ ] Plugabble compression algorithms
-  * [X] ZLIB support
-  * [ ] DEFLATE optimizations
-  * [X] Adler-32 SIMD optimizations
-* [X] References
-  * [X] Detached references
-  * [X] Symbolic references
-  * [X] Name verification/resolution
-  * [X] Annotated tag ref peeling
-  * [ ] Describe
-  * [ ] Revision syntax
-  * [ ] Namespaces
-  * [ ] Replace refs, grafts
-* [X] Reference stores
-  * [X] Chain lookup store
-  * [X] Files reference store
-    * [X] Reading loose refs
-    * [X] Reading packed refs
-    * [X] Atomic writes
-    * [X] Batched writes
-    * [ ] Packing refs
-    * [ ] Reflogs
-  * [ ] Reftable
-* Reachability
-  * [X] Have/wants walks
-  * [X] Is ancestor
-  * [X] Merge bases
-  * [X] Commit graph
-    * [X] Changed path bloom filters
-    * [X] Chained graphs
-    * [ ] Writing
-  * [ ] Reachability bitmaps
-    * [ ] For a single packfile
-    * [ ] For Multi pack indexes
-* Misc repository
-  * [X] Opening relevant stores
-  * [ ] Creating repositories
-  * [ ] Filter branch/repo
-  * [ ] Fast import/export
-  * [ ] Git notes
-  * [ ] Git attributes
-  * [ ] Pseudorefs
-  * Integrity and maintenance
-    * [ ] Fsck
-    * [ ] Repacking
-    * [ ] Garbage collection
-    * [ ] Cruft packing
-    * [ ] Expiration
-  * [ ] Grep
-  * [ ] Submodules
-  * [ ] Worktrees
-  * [ ] Archive
-  * [ ] LFS
-  * [ ] Revision log walk
-    * [ ] Topological ordering
-    * [ ] Date ordering
-    * [ ] Path-limited
-* [ ] Diffing
-  * [ ] Blame
-  * [ ] Annotate
-  * [X] Tree diffing
-    * [ ] Similarity/rename/copy detection
-  * [ ] Multi-way diffs
-  * [ ] Patch-id
-  * [ ] Range-diff
-  * Blob diffing
-    * [ ] Word diffs
-    * [X] Myers
-    * [ ] Patience
-    * [ ] Histogram
-    * [ ] Tree-way
-  * [ ] Format patch
-  * [ ] Apply/amend patch
-* Branch integration/rewrite/etc methods
-  * [ ] Merge
-    * [ ] Recursive
-    * [ ] ORT
-  * [ ] Rebase
-  * [ ] Cherry pick
-  * [ ] Revert
-  * [ ] Rerere
-* Network protocols and related features
-  * [X] pkt-line
-  * [X] side-band-64k
-  * [X] Ingesting packfiles
-    * [X] Quarantine areas
-    * [X] Un-thinning thin packs
-  * Version 0, version 1 protocols
-    * [X] Server side
-      * [X] Reference advertisement
-      * [X] Capability negotiation
-      * [X] Receive
-      * [ ] "Upload"
-    * [ ] Client side
-      * [ ] Send
-      * [ ] Fetch
-  * Version 2 protocol
-    * [ ] Server side
-      * [ ] "Upload"
-    * [ ] Client side
-      * [ ] Fetch
-  * Protocol-independent logic
-    * Common
-      * [X] Progress meters
-    * Client side
-      * [ ] Refspec
-      * [ ] Fetch
-        * [ ] Partial clones
-          * [ ] Object filtering
-        * [ ] Bundle URI
-        * [ ] Packfile URI
-        * [ ] Shallow clones
-      * [ ] Send
-    * Server side
-      * [ ] Upload
-        * [ ] Object filtering
-      * [X] Receive
-        * [ ] Signed push
-        * Hooks
-          * Slots
-            * [ ] After ref negotiation
-            * [X] After object unpacking
-          * Provided samples
-            * [X] Chain
-            * [X] Force push rejection
-* [ ] Working trees
-  * [ ] Stashing
-  * [ ] Ignore rules
-  * [ ] Checkouts
-    * [ ] Sparse checkouts
-    * [ ] CR/LF conversions
-    * [ ] File mode conversions
-  * [ ] Indexes
-    * [ ] Conflict resolution
-    * [ ] Split index
-    * [ ] Sparse index
-    * [ ] Untracked cache
-  * [ ] Status listing
-  * [ ] Filesystem monitor
-  * [ ] Worktree
-    * [ ] Common directory
-    * [ ] Worktree-specific references
-* Research
-  * [ ] Dynamic packfiles
-    * [ ] Compaction; page-sized hole punching
-    * [ ] Dynamic indexing
-      * [ ] Linear/extendible/spiral hashing
-    * [ ] Dynamic reachability bitmaps
-
-## Not planned
-
-* CLI tools
-* Clone
-* Anything reasonably considered "porcelain"
-* Credential helper
-* Transports
-* Auth
-* Remote management
-* Bisect
-* Any use of env vars
-* Repository discovery walking
-
-I might make a second project that supports these.
-Furgit will probably not, and will remain sans-IO.
-
 ## Benchmarks
 
 * See [gitbench](https://git.sr.ht/~runxiyu/gitbench).
--- /dev/null
+++ b/ROADMAP.md
@@ -1,0 +1,211 @@
+# Roadmap
+
+* Configuration
+  * [X] Parsing
+  * [ ] Includes
+  * [ ] Writing
+* [X] Object IDs
+  * [X] SHA-256
+  * [X] SHA-1
+* [X] Object model (incl., parse, serialize)
+  * [X] Blobs
+  * [X] Trees
+    * [X] File mode definitions
+    * [X] Entry insertion ordering
+    * [X] Traversal
+    * [ ] Pathspec
+  * [X] Commits
+  * [X] Annotated tags
+  * [X] Stored objects
+* Further cryptography
+  * [ ] OpenPGP signatures
+  * [ ] SSH signatures
+* [X] Reading object stores
+  * [X] Pluggable interface
+  * [X] Chain lookup store
+  * [X] Bundle store
+  * [X] MRU lookup store
+  * [X] Reading loose objects
+  * [ ] Promisor remotes
+  * [ ] Alternates
+  * [X] Reading packed objects
+    * [X] Pack index lookups
+    * [X] Delta caching
+    * [X] Delta application
+    * [ ] Pack-wide bloom filters
+    * [ ] Multi pack indexes
+* [ ] Writing objects
+  * [X] Loose object writing
+* Misc bundle features
+  * [ ] Writing bundles
+* Misc packfile features
+  * [X] Writing pack indexes
+  * [X] Writing reverse pack indexes
+  * [ ] Writing packfiles
+    * [ ] Writing thin packs
+    * [ ] Compressing deltas
+      * [ ] Delta islands
+  * [ ] Pack verification
+* Compression
+  * [ ] Plugabble compression algorithms
+  * [X] ZLIB support
+  * [ ] DEFLATE optimizations
+  * [X] Adler-32 SIMD optimizations
+* [X] References
+  * [X] Detached references
+  * [X] Symbolic references
+  * [X] Name verification/resolution
+  * [X] Annotated tag ref peeling
+  * [ ] Describe
+  * [ ] Revision syntax
+  * [ ] Namespaces
+  * [ ] Replace refs, grafts
+* [X] Reference stores
+  * [X] Chain lookup store
+  * [X] Files reference store
+    * [X] Reading loose refs
+    * [X] Reading packed refs
+    * [X] Atomic writes
+    * [X] Batched writes
+    * [ ] Packing refs
+    * [ ] Reflogs
+  * [ ] Reftable
+* Reachability
+  * [X] Have/wants walks
+  * [X] Is ancestor
+  * [X] Merge bases
+  * [X] Commit graph
+    * [X] Changed path bloom filters
+    * [X] Chained graphs
+    * [ ] Writing
+  * [ ] Reachability bitmaps
+    * [ ] For a single packfile
+    * [ ] For Multi pack indexes
+* Misc repository
+  * [X] Opening relevant stores
+  * [ ] Creating repositories
+  * [ ] Filter branch/repo
+  * [ ] Fast import/export
+  * [ ] Git notes
+  * [ ] Git attributes
+  * [ ] Pseudorefs
+  * Integrity and maintenance
+    * [ ] Fsck
+    * [ ] Repacking
+    * [ ] Garbage collection
+    * [ ] Cruft packing
+    * [ ] Expiration
+  * [ ] Grep
+  * [ ] Submodules
+  * [ ] Worktrees
+  * [ ] Archive
+  * [ ] LFS
+  * [ ] Revision log walk
+    * [ ] Topological ordering
+    * [ ] Date ordering
+    * [ ] Path-limited
+* [ ] Diffing
+  * [ ] Blame
+  * [ ] Annotate
+  * [X] Tree diffing
+    * [ ] Similarity/rename/copy detection
+  * [ ] Multi-way diffs
+  * [ ] Patch-id
+  * [ ] Range-diff
+  * Blob diffing
+    * [ ] Word diffs
+    * [X] Myers
+    * [ ] Patience
+    * [ ] Histogram
+    * [ ] Tree-way
+  * [ ] Format patch
+  * [ ] Apply/amend patch
+* Branch integration/rewrite/etc methods
+  * [ ] Merge
+    * [ ] Recursive
+    * [ ] ORT
+  * [ ] Rebase
+  * [ ] Cherry pick
+  * [ ] Revert
+  * [ ] Rerere
+* Network protocols and related features
+  * [X] pkt-line
+  * [X] side-band-64k
+  * [X] Ingesting packfiles
+    * [X] Quarantine areas
+    * [X] Un-thinning thin packs
+  * Version 0, version 1 protocols
+    * [X] Server side
+      * [X] Reference advertisement
+      * [X] Capability negotiation
+      * [X] Receive
+      * [ ] "Upload"
+    * [ ] Client side
+      * [ ] Send
+      * [ ] Fetch
+  * Version 2 protocol
+    * [ ] Server side
+      * [ ] "Upload"
+    * [ ] Client side
+      * [ ] Fetch
+  * Protocol-independent logic
+    * Common
+      * [X] Progress meters
+    * Client side
+      * [ ] Refspec
+      * [ ] Fetch
+        * [ ] Partial clones
+          * [ ] Object filtering
+        * [ ] Bundle URI
+        * [ ] Packfile URI
+        * [ ] Shallow clones
+      * [ ] Send
+    * Server side
+      * [ ] Upload
+        * [ ] Object filtering
+      * [X] Receive
+        * [ ] Signed push
+        * Hooks
+          * Slots
+            * [ ] After ref negotiation
+            * [X] After object unpacking
+          * Provided samples
+            * [X] Chain
+            * [X] Force push rejection
+* [ ] Working trees
+  * [ ] Stashing
+  * [ ] Ignore rules
+  * [ ] Checkouts
+    * [ ] Sparse checkouts
+    * [ ] CR/LF conversions
+    * [ ] File mode conversions
+  * [ ] Indexes
+    * [ ] Conflict resolution
+    * [ ] Split index
+    * [ ] Sparse index
+    * [ ] Untracked cache
+  * [ ] Status listing
+  * [ ] Filesystem monitor
+  * [ ] Worktree
+    * [ ] Common directory
+    * [ ] Worktree-specific references
+* Research
+  * [ ] Dynamic packfiles
+    * [ ] Compaction; page-sized hole punching
+    * [ ] Dynamic indexing
+      * [ ] Linear/extendible/spiral hashing
+    * [ ] Dynamic reachability bitmaps
+
+## Not planned
+
+* CLI tools
+* Clone
+* Anything reasonably considered "porcelain"
+* Credential helper
+* Transports
+* Auth
+* Remote management
+* Bisect
+* Any use of env vars
+* Repository discovery walking
+
--