Skip to content

Commit 2193f70

Browse files
committed
update crate-status with planned features related to status
1 parent 995bc84 commit 2193f70

File tree

1 file changed

+140
-191
lines changed

1 file changed

+140
-191
lines changed

crate-status.md

Lines changed: 140 additions & 191 deletions
Original file line numberDiff line numberDiff line change
@@ -19,72 +19,151 @@ and itself relies on all `gix-*` crates. It's not meant for consumption, for app
1919
* [x] **estimate-hours** - estimate the time invested into a repository by evaluating commit dates.
2020
* Based on the [git-hours] algorithm.
2121
* See the [discussion][git-hours-discussion] for some performance data.
22-
* **the `gix` program** _(plumbing)_ - lower level commands for use in automation
23-
* **progress** - provide an overview of what works and what doesn't from the perspective of the git configuration.
24-
This is likely to change a lot over time depending on actual needs, but maybe useful for you to see
25-
if particular git-configuration is picked up and where it deviates.
26-
* **config** - list the complete git configuration in human-readable form and optionally filter sections by name.
27-
* **exclude**
28-
* [x] **query** - check if path specs are excluded via gits exclusion rules like `.gitignore`.
29-
* **verify** - validate a whole repository, for now only the object database.
30-
* **commit**
31-
* [x] **describe** - identify a commit by its closest tag in its past
32-
* **tree**
33-
* [x] **entries** - list tree entries for a single tree or recursively
34-
* [x] **info** - display tree statistics
35-
* **odb**
36-
* [x] **info** - display odb statistics
37-
* [x] **entries** - display all object ids in the object database
38-
* **mailmap**
39-
* [x] **entries** - display all entries of the aggregated mailmap git would use for substitution
40-
* **revision**
41-
* [x] **list** - list plain revision hashes from a starting point, similar to a very simple version of `git rev-list`.
42-
* [x] **explain** - show what would be done while parsing a revision specification like `HEAD~1`
43-
* [x] **resolve** - show which objects a revspec resolves to, similar to `git rev-parse` but faster and with much better error handling
44-
* [x] **previous-branches** - list all previously checked out branches, powered by the ref-log.
45-
* **remote**
46-
* [x] **refs** - list all references available on the remote based on the current remote configuration.
47-
* [x] **ref-map** - show how remote references relate to their local tracking branches as mapped by refspecs.
48-
* [x] **fetch** - fetch the current remote or the given one, optionally just as dry-run.
49-
* **clone**
50-
* [x] initialize a new **bare** repository and fetch all objects.
51-
* [x] initialize a new repository, fetch all objects and checkout the main worktree.
52-
* **credential**
53-
* [x] **fill/approve/reject** - The same as `git credential`, but implemented in Rust, calling helpers only when from trusted configuration.
54-
* **free** - no git repository necessary
55-
* **pack**
56-
* [x] [verify](https://asciinema.org/a/352942)
57-
* [x] [index verify](https://asciinema.org/a/352945) including each object sha1 and statistics
58-
* [x] [explode](https://asciinema.org/a/352951), useful for transforming packs into loose objects for inspection or restoration
59-
* [x] verify written objects (by reading them back from disk)
60-
* [x] [receive](https://asciinema.org/a/359321) - receive a whole pack produced by **pack-send** or _git-upload-pack_, useful for `clone` like operations.
61-
* [x] **create** - create a pack from given objects or tips of the commit graph.
62-
* [ ] **send** - create a pack and send it using the pack protocol to stdout, similar to 'git-upload-pack',
63-
for consumption by **pack-receive** or _git-receive-pack_
64-
- **multi-index**
65-
* [x] **info** - print information about the file
66-
* [x] **create** - create a multi-index from pack indices
67-
* [x] **verify** - check the file for consistency
68-
* [x] **entries** - list all entries of the file
69-
- **index**
70-
* [x] [create](https://asciinema.org/a/352941) - create an index file by streaming a pack file as done during clone
71-
* [x] support for thin packs (as needed for fetch/pull)
72-
* **commit-graph**
73-
* [x] **verify** - assure that a commit-graph is consistent
74-
* **mailmap**
75-
* [x] **verify** - check entries of a mailmap file for parse errors and display them
76-
* **index**
77-
* [x] **entries** - show detailed entry information for human or machine consumption (via JSON)
78-
* [x] **verify** - check the index for consistency
79-
* [x] **info** - display general information about the index itself, with detailed extension information by default
80-
* [x] detailed information about the TREE extension
81-
* [ ] …other extensions details aren't implemented yet
82-
* [x] **checkout-exclusive** - a predecessor of `git worktree`, providing flexible options to evaluate checkout performance from an index and/or an object database.
22+
* **the `gix` program** _(plumbing)_ - lower level commands for use during development
23+
- As its main purpose is to help running the latest improvements in the real world, it's self-documenting without
24+
duplicating its features here. Use `gix --help` to start discovery.
8325

8426
[skim]: https://github.com/lotabout/skim
8527
[git-hours]: https://github.com/kimmobrunfeldt/git-hours/blob/8aaeee237cb9d9028e7a2592a25ad8468b1f45e4/index.js#L114-L143
8628
[git-hours-discussion]: https://github.com/Byron/gitoxide/discussions/78
8729

30+
### gix
31+
32+
The top-level crate that acts as hub to all functionality provided by the `gix-*` plumbing crates.
33+
34+
* [x] utilities for applications to make long running operations interruptible gracefully and to support timeouts in servers.
35+
* [x] handle `core.repositoryFormatVersion` and extensions
36+
* [x] support for unicode-precomposition of command-line arguments (needs explicit use in parent application)
37+
* **Repository**
38+
* [x] discovery
39+
* [x] option to not cross file systems (default)
40+
* [x] handle git-common-dir
41+
* [x] support for `GIT_CEILING_DIRECTORIES` environment variable
42+
* [ ] handle other non-discovery modes and provide control over environment variable usage required in applications
43+
* [x] rev-parse
44+
* [x] rev-walk
45+
* [x] include tips
46+
* [ ] exclude commits
47+
* [x] instantiation
48+
* [x] access to refs and objects
49+
* **credentials**
50+
* [x] run `git credential` directly
51+
* [x] use credential helper configuration and to obtain credentials with `gix_credentials::helper::Cascade`
52+
* **config**
53+
* [ ] facilities to apply the [url-match](https://git-scm.com/docs/git-config#Documentation/git-config.txt-httplturlgt) algorithm and to
54+
[normalize urls](https://github.com/git/git/blob/be1a02a17ede4082a86dfbfee0f54f345e8b43ac/urlmatch.c#L109:L109) before comparison.
55+
* **traverse**
56+
* [x] commit graphs
57+
* [ ] make [git-notes](https://git-scm.com/docs/git-notes) accessible
58+
* [x] tree entries
59+
* **diffs/changes**
60+
* [x] tree with other tree
61+
* [ ] respect case-sensitivity of host filesystem.
62+
* [x] a way to access various diff related settings or use them
63+
* [ ] respect `diff.*.textconv`, `diff.*.cachetextconv` and external diff viewers with `diff.*.command`,
64+
[along with support for reading `diff` gitattributes](https://github.com/git/git/blob/73876f4861cd3d187a4682290ab75c9dccadbc56/Documentation/gitattributes.txt#L699:L699).
65+
* **rewrite tracking**
66+
* **deviation** - git keeps up to four candidates whereas we use the first-found candidate that matches the similarity percentage.
67+
This can lead to different sources being found. As such, we also don't consider the filename at all.
68+
* [ ] handle binary files correctly, and apply filters for that matter
69+
* [x] computation limit with observable reduction of precision when it is hit, for copies and renames separately
70+
* **by identity**
71+
* [x] renames (sym-links are only ever compared by identity)
72+
* [x] copies
73+
* **by similarity** - similarity factor controllable separately from renames
74+
* [x] renames
75+
* [x] copies
76+
* [x] 'find-copies-harder' - find copies with the source being the entire tree.
77+
* [ ] tree or index with working tree
78+
- [ ] rename tracking
79+
- [ ] submodule status (recursive)
80+
* [x] diffs between modified blobs with various algorithms
81+
* [ ] tree with index (via index-from-tree and index)
82+
- [ ] rename tracking
83+
- [ ] submodule status (recursive)
84+
* [x] initialize
85+
* [x] Proper configuration depending on platform (e.g. ignorecase, filemode, …)
86+
* **Id**
87+
* [x] short hashes with detection of ambiguity.
88+
* **Commit**
89+
* [x] `git describe` like functionality, with optional commit-graph acceleration
90+
* [x] create new commit from tree
91+
* **Objects**
92+
* [x] lookup
93+
* [x] peel to object kind
94+
* [ ] create [signed commits and tags](https://github.com/Byron/gitoxide/issues/12)
95+
* **trees**
96+
* [x] lookup path
97+
* **references**
98+
* [x] peel to end
99+
* [x] ref-log access
100+
* [x] remote name
101+
* [x] find remote itself
102+
- [ ] respect `branch.<name>.merge` in the returned remote.
103+
* **remotes**
104+
* [x] clone
105+
* [x] shallow
106+
* [ ] include-tags when shallow is used (needs separate fetch)
107+
* [ ] prune non-existing shallow commits
108+
* [ ] [bundles](https://git-scm.com/docs/git-bundle)
109+
* [x] fetch
110+
* [x] shallow (remains shallow, options to adjust shallow boundary)
111+
* [ ] a way to auto-explode small packs to avoid them to pile up
112+
* [x] 'ref-in-want'
113+
* [ ] 'wanted-ref'
114+
* [x] standard negotiation algorithms `consecutive`, `skipping` and `noop`.
115+
* [ ] push
116+
* [x] ls-refs
117+
* [x] ls-refs with ref-spec filter
118+
* [x] list, find by name
119+
* [x] create in memory
120+
* [ ] groups
121+
* [ ] [remote and branch files](https://github.com/git/git/blob/master/remote.c#L300)
122+
* [ ] execute hooks
123+
* **refs**
124+
* [ ] run transaction hooks and handle special repository states like quarantine
125+
* [ ] support for different backends like `files` and `reftable`
126+
* **main or linked worktree**
127+
* [ ] add files with `.gitignore` handling
128+
* [ ] checkout with conversions like clean + smudge as in `.gitattributes`
129+
* [ ] _diff_ index with working tree
130+
* [ ] sparse checkout support
131+
* [x] read per-worktree config if `extensions.worktreeConfig` is enabled.
132+
* **index**
133+
* [ ] tree from index
134+
* [x] index from tree
135+
* **worktrees**
136+
* [x] open a repository with worktrees
137+
* [x] read locked state
138+
* [ ] obtain 'prunable' information
139+
* [x] proper handling of worktree related refs
140+
* [x] create a byte stream and create archives for such a stream, including worktree filters and conversions
141+
* [ ] create, move, remove, and repair
142+
* [x] access exclude information
143+
* [x] access attribute information
144+
* [x] respect `core.worktree` configuration
145+
- **deviation**
146+
* The delicate interplay between `GIT_COMMON_DIR` and `GIT_WORK_TREE` isn't implemented.
147+
* **config**
148+
* [x] read the primitive types `boolean`, `integer`, `string`
149+
* [x] read and interpolate trusted paths
150+
* [x] low-level API for more elaborate access to all details of `git-config` files
151+
* [ ] a way to make changes to individual configuration files
152+
* [x] mailmap
153+
* [x] object replacements (`git replace`)
154+
* [x] read git configuration
155+
* [ ] merging
156+
* [ ] stashing
157+
* [ ] Use _Commit Graph_ to speed up certain queries
158+
* [ ] subtree
159+
* [ ] interactive rebase status/manipulation
160+
* **submodules**
161+
* [x] handle 'old' form for reading and detect old form
162+
* [x] list
163+
* [ ] edit
164+
* [ ] API documentation
165+
* [ ] Some examples
166+
88167
### gix-actor
89168
* [x] read and write a signature that uniquely identifies an actor within a git repository
90169
* [x] a way to parse `name <email>` tuples (instead of full signatures) to facilitate parsing
@@ -611,136 +690,6 @@ See its [README.md](https://github.com/Byron/gitoxide/blob/main/gix-lock/README.
611690
* [x] API documentation
612691
* [x] Some examples
613692

614-
### gix
615-
* [x] utilities for applications to make long running operations interruptible gracefully and to support timeouts in servers.
616-
* [x] handle `core.repositoryFormatVersion` and extensions
617-
* [x] support for unicode-precomposition of command-line arguments (needs explicit use in parent application)
618-
* **Repository**
619-
* [x] discovery
620-
* [x] option to not cross file systems (default)
621-
* [x] handle git-common-dir
622-
* [x] support for `GIT_CEILING_DIRECTORIES` environment variable
623-
* [ ] handle other non-discovery modes and provide control over environment variable usage required in applications
624-
* [x] rev-parse
625-
* [x] rev-walk
626-
* [x] include tips
627-
* [ ] exclude commits
628-
* [x] instantiation
629-
* [x] access to refs and objects
630-
* **credentials**
631-
* [x] run `git credential` directly
632-
* [x] use credential helper configuration and to obtain credentials with `gix_credentials::helper::Cascade`
633-
* **config**
634-
* [ ] facilities to apply the [url-match](https://git-scm.com/docs/git-config#Documentation/git-config.txt-httplturlgt) algorithm and to
635-
[normalize urls](https://github.com/git/git/blob/be1a02a17ede4082a86dfbfee0f54f345e8b43ac/urlmatch.c#L109:L109) before comparison.
636-
* **traverse**
637-
* [x] commit graphs
638-
* [ ] make [git-notes](https://git-scm.com/docs/git-notes) accessible
639-
* [x] tree entries
640-
* **diffs/changes**
641-
* [x] tree with other tree
642-
* [ ] respect case-sensitivity of host filesystem.
643-
* [x] a way to access various diff related settings or use them
644-
* [ ] respect `diff.*.textconv`, `diff.*.cachetextconv` and external diff viewers with `diff.*.command`,
645-
[along with support for reading `diff` gitattributes](https://github.com/git/git/blob/73876f4861cd3d187a4682290ab75c9dccadbc56/Documentation/gitattributes.txt#L699:L699).
646-
* **rewrite tracking**
647-
* **deviation** - git keeps up to four candidates whereas we use the first-found candidate that matches the similarity percentage.
648-
This can lead to different sources being found. As such, we also don't consider the filename at all.
649-
* [ ] handle binary files correctly, and apply filters for that matter
650-
* [x] computation limit with observable reduction of precision when it is hit, for copies and renames separately
651-
* **by identity**
652-
* [x] renames (sym-links are only ever compared by identity)
653-
* [x] copies
654-
* **by similarity** - similarity factor controllable separately from renames
655-
* [x] renames
656-
* [x] copies
657-
* [x] 'find-copies-harder' - find copies with the source being the entire tree.
658-
* [ ] tree or index with working tree
659-
* [x] diffs between modified blobs with various algorithms
660-
* [ ] tree with index
661-
* [x] initialize
662-
* [x] Proper configuration depending on platform (e.g. ignorecase, filemode, …)
663-
* **Id**
664-
* [x] short hashes with detection of ambiguity.
665-
* **Commit**
666-
* [x] `git describe` like functionality, with optional commit-graph acceleration
667-
* [x] create new commit from tree
668-
* **Objects**
669-
* [x] lookup
670-
* [x] peel to object kind
671-
* [ ] create [signed commits and tags](https://github.com/Byron/gitoxide/issues/12)
672-
* **trees**
673-
* [x] lookup path
674-
* **references**
675-
* [x] peel to end
676-
* [x] ref-log access
677-
* [x] remote name
678-
* [x] find remote itself
679-
- [ ] respect `branch.<name>.merge` in the returned remote.
680-
* **remotes**
681-
* [x] clone
682-
* [x] shallow
683-
* [ ] include-tags when shallow is used (needs separate fetch)
684-
* [ ] prune non-existing shallow commits
685-
* [ ] [bundles](https://git-scm.com/docs/git-bundle)
686-
* [x] fetch
687-
* [x] shallow (remains shallow, options to adjust shallow boundary)
688-
* [ ] a way to auto-explode small packs to avoid them to pile up
689-
* [x] 'ref-in-want'
690-
* [ ] 'wanted-ref'
691-
* [x] standard negotiation algorithms `consecutive`, `skipping` and `noop`.
692-
* [ ] push
693-
* [x] ls-refs
694-
* [x] ls-refs with ref-spec filter
695-
* [x] list, find by name
696-
* [x] create in memory
697-
* [ ] groups
698-
* [ ] [remote and branch files](https://github.com/git/git/blob/master/remote.c#L300)
699-
* [ ] execute hooks
700-
* **refs**
701-
* [ ] run transaction hooks and handle special repository states like quarantine
702-
* [ ] support for different backends like `files` and `reftable`
703-
* **main or linked worktree**
704-
* [ ] add files with `.gitignore` handling
705-
* [ ] checkout with conversions like clean + smudge as in `.gitattributes`
706-
* [ ] _diff_ index with working tree
707-
* [ ] sparse checkout support
708-
* [x] read per-worktree config if `extensions.worktreeConfig` is enabled.
709-
* **index**
710-
* [ ] tree from index
711-
* [x] index from tree
712-
* **worktrees**
713-
* [x] open a repository with worktrees
714-
* [x] read locked state
715-
* [ ] obtain 'prunable' information
716-
* [x] proper handling of worktree related refs
717-
* [x] create a byte stream and create archives for such a stream, including worktree filters and conversions
718-
* [ ] create, move, remove, and repair
719-
* [x] access exclude information
720-
* [x] access attribute information
721-
* [x] respect `core.worktree` configuration
722-
- **deviation**
723-
* The delicate interplay between `GIT_COMMON_DIR` and `GIT_WORK_TREE` isn't implemented.
724-
* **config**
725-
* [x] read the primitive types `boolean`, `integer`, `string`
726-
* [x] read and interpolate trusted paths
727-
* [x] low-level API for more elaborate access to all details of `git-config` files
728-
* [ ] a way to make changes to individual configuration files
729-
* [x] mailmap
730-
* [x] object replacements (`git replace`)
731-
* [x] read git configuration
732-
* [ ] merging
733-
* [ ] stashing
734-
* [ ] Use _Commit Graph_ to speed up certain queries
735-
* [ ] subtree
736-
* [ ] interactive rebase status/manipulation
737-
* **submodules**
738-
* [x] handle 'old' form for reading and detect old form
739-
* [x] list
740-
* [ ] edit
741-
* [ ] API documentation
742-
* [ ] Some examples
743-
744693
### gix-worktree-stream
745694

746695
* [x] encode git-tree as stream of bytes (with large file support and actual streaming)

0 commit comments

Comments
 (0)