Note that we handle both crates here as they are very much intertwined. git-index handles the data structure to accelerate operations in the git-worktree for actually manipulating the working copy.
Tasks for checkout
Reset
Out of scope
- hunk support (i.e.
git reset -p)
Tasks for add
Add files to the index.
- correctness
- index to tree
Tasks for commit
Tasks for fetch/clone
Tasks for status
The difference between an index and the work tree. Analysis TBD.
See this blog post for incredible details on how git does things, related to fs-monitor as well.
There is also an alternative implementation which provides a lot of details on how to be better.
Pascal Kuthe (@pascalkuthe) did a first analysis and concluded that most of the speedup came through congestion-free multi-threading and the usage of something like the untracked-cache. On Linux, it's possible to also speedup syscalls using more specific versions of it, but that should definitely be left as last resort for performance improvements.
Stages
Checkout Research
Follow Ups
- symlink wait for 1.0 release with additional fixes (see thread on MR)
- need to use
remove_symlink() from this crate, but can't use it for relative paths due to the filename check
Note that we handle both crates here as they are very much intertwined.
git-indexhandles the data structure to accelerate operations in thegit-worktreefor actually manipulating the working copy.Tasks for checkout
fclose()without performance loss due to silent and implicit close on drop.fs::Cache) and support for various sources. attributes for worktree-cache #818gix index entries -awith bare supportgix index entrieswith attributes listing #830git check-attrto have baselines against which to test our implementation.gix attributes query#846woring-tree-encoding. Viable crate is encoding_rsProbablyNo, actually, filters aren't applied to the files the control them.precomposeUnicodeon MacOS? Some path conversion for more compatibility, we should probably do that too. Out-scope if it belongs elsewhere. This means that all paths going intogitoxideneed to be turned into precomposed forms.clapcan be initialized from precomposed unicode OsStrings instead, a feature ultimately to be provided togixusers.gix-indextowards 1.0 #293Reset
gixreset withsoft/mixed/hard/merge/keepsemantics with pathspecs as well. Submodule support should be possible, too.gix-worktree-statereset to reset a working tree according to to an index, with pathspec support.Out of scope
git reset -p)Tasks for
addAdd files to the index.
git-pathspecTasks for
commitTasks for
fetch/cloneTasks for
statusThe difference between an index and the work tree. Analysis TBD.
See this blog post for incredible details on how git does things, related to fs-monitor as well.
There is also an alternative implementation which provides a lot of details on how to be better.
Pascal Kuthe (@pascalkuthe) did a first analysis and concluded that most of the speedup came through congestion-free multi-threading and the usage of something like the untracked-cache. On Linux, it's possible to also speedup syscalls using more specific versions of it, but that should definitely be left as last resort for performance improvements.
Stages
walkdirorsymlink_metadataper index entry? Note thatwalkdirdoesn't use ``file_size >= u32::MAXTREEextension to know the dir ids of all entries, which allows to reproduce the trees and see if they changed, and only if so we lookup the tree itself.untracked-cacheto be faster. Could be coming 'for free' if walkdir would be useddescribeCheckout Research
Follow Ups
remove_symlink()from this crate, but can't use it for relative paths due to the filename check