shithub: furgit

Download patch

ref: 23a19abfa4e6fdc10aff7e22a67945e08a3d73c4
parent: dd027e1e5379019bfeffc48ff1274b5e05581ff3
author: Runxi Yu <me@runxiyu.org>
date: Sun Mar 8 13:52:54 EDT 2026

README: Structured features

--- a/README.md
+++ b/README.md
@@ -19,157 +19,196 @@
 * Prioritize APIs for forges and other server-side uses first
 * Aim for clear architecture then high performance
 
-## Implemented
+## Features
 
-* Parsing configs
-* Object ID and hash algorithms (SHA-256, SHA-1)
-* Object type enums
-* Blobs
-* Trees
-* Commits
-* Annotated tags
-* Object header parsing
-* Parsing objects
-* Serializing objects
-* Diffing lines via Myers
-* Diffing trees
-* Object storer interface
-* Reading loose objects
-* Applying deltas
-* `.idx` lookup
-* Reading packed objects
-* Object storer chain and mixer
-* Ref types (detached, symbolic)
-* Basic ref resolution
-* Tag ref peeling
-* Ref storer interface
-* Reading loose refs
-* Reading packed refs
-* Ref storer chain
-* Reachability iterators
-* Is-ancestor
-* Repository abstractions
-* Adler-32 optimizations
-* ZLIB pooling
-* Streaming `.pack`/`.idx` hash verifier
-* `.idx` and `.rev` writing
-* Pack ingestion
-* Un-thinning thin packs
-* Commit graph reading
-* Commit graph chain reading
-* Commit graph bloom filters
-* `pkt-line`
-* `side-band-64k`
-* Merge base
-* Quarantine areas
-* V0/V1 protocol
-* Protocol capabilities
-* Receiving
-* Hooks (functions, not files)
-
-## Planned
-
-* Fetching
-* Verify pack
-* ls-tree
-* Digital signatures
-* Patience, histogram diffs
-* Three-way diffs
-* Init
-* Multi-pack indexes
-* Pack bitmaps
-* Multi-pack bitmaps
-* Delta base selection, e.g., islands
-* Compressing deltas
-* Writing packfiles
-* Writing thin packs
-* Protocol V2
-* Ref advertisement
-* Signed push
-* Pushing/sending
-* DEFLATE optimizations
-* Aggressive buffer pooling
-* Ref namespaces
-* Refname validation/normalization
-* Writing refs
-* Packing refs
-* Reflogs
-* Ref transactions
-* Fsck
-* reftable
-* Alternates
-* Object borrowing
-* Bundles
-* Bundle URI
-* Packfile URI
-* Submodules
-* Archive
-* Pathspec
-* Refspec
-* Revision syntax
-* Revision walking, log
-* Path-limited history
-* Revision walking ordering (e.g., topo, date)
-* grep
-* Word diff
-* Describe
-* Cherry pick
-* Revert
-* Promisors remotes
-* Shallow clones
-* Object filtering
-* Partial clones
-* Repacking
-* Pack maintenance, gc
-* Cruft packs
-* Expiration
-* Compression agility
-* Working trees
-* File modes
-* Working tree conversions (e.g., CRLF)
-* Common dir
-* Worktree management
-* Index
-* ls-files
-* LFS
-* add, rm, mv, clean
-* Index conflicts
-* Split index
-* Untracked cache
-* status
-* FS monitor
-* Other index extensions
-* reset, restore, switch, checkout
-* Pseudorefs
-* Merge
-* More merge strategies (recursive, ort, rename)
-* Conflict resolution
-* Pseudo-merge bitmaps
-* Checkout
-* Sparse checkout
-* Sparse index
-* Git attributes
-* Ignore rules
-* Notes
-* Stash
-* Blame (incl., incremental)
-* Annotate
-* Similarity detection
-* Rename/copy detection
-* Replace refs, grafts
-* Rebase
-* More rebase variants
-* Commit graph writing
-* Config includes
-* Writing configs
-* Rerere
-* Fast import/export
-* Diff apply
-* Patch-id
-* Range-diff
-* Filter branch
-* Mail map
-* format-patch, am
+* 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
+    * [ ] 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
+  * [ ] Repalce 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 maintainence
+    * [ ] 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
 
 ## Not planned
 
--