Fast implementation of Git in pure Go

README: Structured features

runxiyu.tngl.sh 23a19abf dd027e1e

verified
+189 -150
+189 -150
README.md
··· 19 19 * Prioritize APIs for forges and other server-side uses first 20 20 * Aim for clear architecture then high performance 21 21 22 - ## Implemented 22 + ## Features 23 23 24 - * Parsing configs 25 - * Object ID and hash algorithms (SHA-256, SHA-1) 26 - * Object type enums 27 - * Blobs 28 - * Trees 29 - * Commits 30 - * Annotated tags 31 - * Object header parsing 32 - * Parsing objects 33 - * Serializing objects 34 - * Diffing lines via Myers 35 - * Diffing trees 36 - * Object storer interface 37 - * Reading loose objects 38 - * Applying deltas 39 - * `.idx` lookup 40 - * Reading packed objects 41 - * Object storer chain and mixer 42 - * Ref types (detached, symbolic) 43 - * Basic ref resolution 44 - * Tag ref peeling 45 - * Ref storer interface 46 - * Reading loose refs 47 - * Reading packed refs 48 - * Ref storer chain 49 - * Reachability iterators 50 - * Is-ancestor 51 - * Repository abstractions 52 - * Adler-32 optimizations 53 - * ZLIB pooling 54 - * Streaming `.pack`/`.idx` hash verifier 55 - * `.idx` and `.rev` writing 56 - * Pack ingestion 57 - * Un-thinning thin packs 58 - * Commit graph reading 59 - * Commit graph chain reading 60 - * Commit graph bloom filters 61 - * `pkt-line` 62 - * `side-band-64k` 63 - * Merge base 64 - * Quarantine areas 65 - * V0/V1 protocol 66 - * Protocol capabilities 67 - * Receiving 68 - * Hooks (functions, not files) 69 - 70 - ## Planned 71 - 72 - * Fetching 73 - * Verify pack 74 - * ls-tree 75 - * Digital signatures 76 - * Patience, histogram diffs 77 - * Three-way diffs 78 - * Init 79 - * Multi-pack indexes 80 - * Pack bitmaps 81 - * Multi-pack bitmaps 82 - * Delta base selection, e.g., islands 83 - * Compressing deltas 84 - * Writing packfiles 85 - * Writing thin packs 86 - * Protocol V2 87 - * Ref advertisement 88 - * Signed push 89 - * Pushing/sending 90 - * DEFLATE optimizations 91 - * Aggressive buffer pooling 92 - * Ref namespaces 93 - * Refname validation/normalization 94 - * Writing refs 95 - * Packing refs 96 - * Reflogs 97 - * Ref transactions 98 - * Fsck 99 - * reftable 100 - * Alternates 101 - * Object borrowing 102 - * Bundles 103 - * Bundle URI 104 - * Packfile URI 105 - * Submodules 106 - * Archive 107 - * Pathspec 108 - * Refspec 109 - * Revision syntax 110 - * Revision walking, log 111 - * Path-limited history 112 - * Revision walking ordering (e.g., topo, date) 113 - * grep 114 - * Word diff 115 - * Describe 116 - * Cherry pick 117 - * Revert 118 - * Promisors remotes 119 - * Shallow clones 120 - * Object filtering 121 - * Partial clones 122 - * Repacking 123 - * Pack maintenance, gc 124 - * Cruft packs 125 - * Expiration 126 - * Compression agility 127 - * Working trees 128 - * File modes 129 - * Working tree conversions (e.g., CRLF) 130 - * Common dir 131 - * Worktree management 132 - * Index 133 - * ls-files 134 - * LFS 135 - * add, rm, mv, clean 136 - * Index conflicts 137 - * Split index 138 - * Untracked cache 139 - * status 140 - * FS monitor 141 - * Other index extensions 142 - * reset, restore, switch, checkout 143 - * Pseudorefs 144 - * Merge 145 - * More merge strategies (recursive, ort, rename) 146 - * Conflict resolution 147 - * Pseudo-merge bitmaps 148 - * Checkout 149 - * Sparse checkout 150 - * Sparse index 151 - * Git attributes 152 - * Ignore rules 153 - * Notes 154 - * Stash 155 - * Blame (incl., incremental) 156 - * Annotate 157 - * Similarity detection 158 - * Rename/copy detection 159 - * Replace refs, grafts 160 - * Rebase 161 - * More rebase variants 162 - * Commit graph writing 163 - * Config includes 164 - * Writing configs 165 - * Rerere 166 - * Fast import/export 167 - * Diff apply 168 - * Patch-id 169 - * Range-diff 170 - * Filter branch 171 - * Mail map 172 - * format-patch, am 24 + * Configuration 25 + * [X] Parsing 26 + * [ ] Includes 27 + * [ ] Writing 28 + * [X] Object IDs 29 + * [X] SHA-256 30 + * [X] SHA-1 31 + * [X] Object model (incl., parse, serialize) 32 + * [X] Blobs 33 + * [X] Trees 34 + * [X] File mode definitions 35 + * [X] Entry insertion ordering 36 + * [X] Traversal 37 + * [ ] Pathspec 38 + * [X] Commits 39 + * [X] Annotated tags 40 + * [X] Stored objects 41 + * Further cryptography 42 + * [ ] OpenPGP signatures 43 + * [ ] SSH signatures 44 + * [X] Reading object stores 45 + * [X] Pluggable interface 46 + * [X] Chain lookup store 47 + * [X] Bundle store 48 + * [X] MRU lookup store 49 + * [X] Reading loose objects 50 + * [ ] Promisor remotes 51 + * [ ] Alternates 52 + * [X] Reading packed objects 53 + * [X] Pack index lookups 54 + * [X] Delta caching 55 + * [X] Delta application 56 + * [ ] Multi pack indexes 57 + * [ ] Writing objects 58 + * [X] Loose object writing 59 + * Misc bundle features 60 + * [ ] Writing bundles 61 + * Misc packfile features 62 + * [X] Writing pack indexes 63 + * [X] Writing reverse pack indexes 64 + * [ ] Writing packfiles 65 + * [ ] Writing thin packs 66 + * [ ] Compressing deltas 67 + * [ ] Delta islands 68 + * [ ] Pack verification 69 + * Compression 70 + * [ ] Plugabble compression algorithms 71 + * [X] ZLIB support 72 + * [ ] DEFLATE optimizations 73 + * [X] Adler-32 SIMD optimizations 74 + * [X] References 75 + * [X] Detached references 76 + * [X] Symbolic references 77 + * [X] Name verification/resolution 78 + * [X] Annotated tag ref peeling 79 + * [ ] Describe 80 + * [ ] Revision syntax 81 + * [ ] Namespaces 82 + * [ ] Repalce refs, grafts 83 + * [X] Reference stores 84 + * [X] Chain lookup store 85 + * [X] Files reference store 86 + * [X] Reading loose refs 87 + * [X] Reading packed refs 88 + * [X] Atomic writes 89 + * [X] Batched writes 90 + * [ ] Packing refs 91 + * [ ] Reflogs 92 + * [ ] Reftable 93 + * Reachability 94 + * [X] Have/wants walks 95 + * [X] Is ancestor 96 + * [X] Merge bases 97 + * [X] Commit graph 98 + * [X] Changed path bloom filters 99 + * [X] Chained graphs 100 + * [ ] Writing 101 + * [ ] Reachability bitmaps 102 + * [ ] For a single packfile 103 + * [ ] For Multi pack indexes 104 + * Misc repository 105 + * [X] Opening relevant stores 106 + * [ ] Creating repositories 107 + * [ ] Filter branch/repo 108 + * [ ] Fast import/export 109 + * [ ] Git notes 110 + * [ ] Git attributes 111 + * [ ] Pseudorefs 112 + * Integrity and maintainence 113 + * [ ] Fsck 114 + * [ ] Repacking 115 + * [ ] Garbage collection 116 + * [ ] Cruft packing 117 + * [ ] Expiration 118 + * [ ] Grep 119 + * [ ] Submodules 120 + * [ ] Worktrees 121 + * [ ] Archive 122 + * [ ] LFS 123 + * [ ] Revision log walk 124 + * [ ] Topological ordering 125 + * [ ] Date ordering 126 + * [ ] Path-limited 127 + * [ ] Diffing 128 + * [ ] Blame 129 + * [ ] Annotate 130 + * [X] Tree diffing 131 + * [ ] Similarity/rename/copy detection 132 + * [ ] Multi-way diffs 133 + * [ ] Patch-id 134 + * [ ] Range-diff 135 + * Blob diffing 136 + * [ ] Word diffs 137 + * [X] Myers 138 + * [ ] Patience 139 + * [ ] Histogram 140 + * [ ] Tree-way 141 + * Format patch 142 + * Apply/amend patch 143 + * Branch integration/rewrite/etc methods 144 + * [ ] Merge 145 + * [ ] Recursive 146 + * [ ] ORT 147 + * [ ] Rebase 148 + * [ ] Cherry pick 149 + * [ ] Revert 150 + * [ ] Rerere 151 + * Network protocols and related features 152 + * [X] pkt-line 153 + * [X] side-band-64k 154 + * [X] Ingesting packfiles 155 + * [X] Quarantine areas 156 + * [X] Un-thinning thin packs 157 + * Version 0, version 1 protocols 158 + * [X] Server side 159 + * [X] Reference advertisement 160 + * [X] Capability negotiation 161 + * [X] Receive 162 + * [ ] "Upload" 163 + * [ ] Client side 164 + * [ ] Send 165 + * [ ] Fetch 166 + * Version 2 protocol 167 + * [ ] Server side 168 + * [ ] "Upload" 169 + * [ ] Client side 170 + * [ ] Fetch 171 + * Protocol-independent logic 172 + * Common 173 + * [X] Progress meters 174 + * Client side 175 + * [ ] Refspec 176 + * [ ] Fetch 177 + * [ ] Partial clones 178 + * [ ] Object filtering 179 + * [ ] Bundle URI 180 + * [ ] Packfile URI 181 + * [ ] Shallow clones 182 + * [ ] Send 183 + * Server side 184 + * [ ] Upload 185 + * [ ] Object filtering 186 + * [X] Receive 187 + * [ ] Signed push 188 + * Hooks 189 + * Slots 190 + * [ ] After ref negotiation 191 + * [X] After object unpacking 192 + * Provided samples 193 + * [X] Chain 194 + * [X] Force push rejection 195 + * [ ] Working trees 196 + * [ ] Stashing 197 + * [ ] Ignore rules 198 + * [ ] Checkouts 199 + * [ ] Sparse checkouts 200 + * [ ] CR/LF conversions 201 + * [ ] File mode conversions 202 + * [ ] Indexes 203 + * [ ] Conflict resolution 204 + * [ ] Split index 205 + * [ ] Sparse index 206 + * [ ] Untracked cache 207 + * [ ] Status listing 208 + * [ ] Filesystem monitor 209 + * [ ] Worktree 210 + * [ ] Common directory 211 + * [ ] Worktree-specific references 173 212 174 213 ## Not planned 175 214