Skip to content

Commit f1bbdcd

Browse files
committed
update crate-status with planned features related to status
1 parent c5a7e66 commit f1bbdcd

File tree

1 file changed

+142
-193
lines changed

1 file changed

+142
-193
lines changed

crate-status.md

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

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

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

0 commit comments

Comments
 (0)