pub struct Platform<'repo> {
pub repo: &'repo Repository,
/* private fields */
}Expand description
A platform to traverse the revision graph by adding starting points as well as points which shouldn’t be crossed,
returned by Repository::rev_walk().
Note that we automatically leverage the commitgraph data structure, but if you know that additional information like author or commit messages will be required of all commits traversed here, it should be better to avoid trying to load it by turning commit-graph support off. This certainly is a micro-optimization though.
Fields§
§repo: &'repo RepositoryThe owning repository.
Implementations§
Source§impl Platform<'_>
Create-time builder methods
impl Platform<'_>
Create-time builder methods
Sourcepub fn sorting(self, sorting: Sorting) -> Self
pub fn sorting(self, sorting: Sorting) -> Self
Set the sort mode for commits to the given value. The default is to order topologically breadth-first.
Sourcepub fn first_parent_only(self) -> Self
pub fn first_parent_only(self) -> Self
Only traverse the first parent of the commit graph.
Sourcepub fn use_commit_graph(self, toggle: impl Into<Option<bool>>) -> Self
pub fn use_commit_graph(self, toggle: impl Into<Option<bool>>) -> Self
Allow using the commitgraph, if present, if toggle is true, or disallow it with false. Set it to None to leave
control over this to the configuration of core.commitGraph (the default).
Errors when loading the graph lead to falling back to the object database, it’s treated as optional cache.
Sourcepub fn with_commit_graph(self, graph: Option<Graph>) -> Self
pub fn with_commit_graph(self, graph: Option<Graph>) -> Self
Set or unset the commit-graph to use for the iteration. This is useful if the caller wants to check if a commit-graph exists and refer different implementations depending on the outcome.
It interacts with use_commit_graph as one would expect, but it’s worth noting that if None,
with use_commit_graph being true, a graph will still be used for iteration.
To turn the commit-graph off, call use_commit_graph(false) instead.
Sourcepub fn with_boundary(
self,
ids: impl IntoIterator<Item = impl Into<ObjectId>>,
) -> Self
pub fn with_boundary( self, ids: impl IntoIterator<Item = impl Into<ObjectId>>, ) -> Self
Don’t cross the given ids (commits) during traversal.
Note that this forces the sorting to ByCommitTimeCutoff
configured with the oldest available commit time, ensuring that no commits older than the oldest of ids will be returned either.
Also note that commits that can’t be accessed or are missing are simply ignored for the purpose of obtaining the cutoff date.
A boundary is distinctly different from exclusive revspecs ^branch-to-not-list in Git log.
If this is not desired, set the sorting to something else right after this call.
Don’t cross the given tips (commits) during traversal or return them, and also don’t return any of their ancestors.
This allows achieving revspecs like ^branch-to-not-list, where the commit behind that name would be passed as ids.
In other words, each of the tips acts like a starting point for an iteration that will paint commits as unwanted, and
wanted commits cannot cross it.
The side effect of this is that commits can’t be returned immediately as one still has to wait and see if they may be unwanted later. This makes traversals with hidden commits more costly, with a chance to traverse all commits if the hidden and non-hidden commits are disjoint.
Source§impl<'repo> Platform<'repo>
Produce the iterator
impl<'repo> Platform<'repo>
Produce the iterator
Sourcepub fn selected(
self,
filter: impl FnMut(&oid) -> bool + 'repo,
) -> Result<Walk<'repo>, Error>
pub fn selected( self, filter: impl FnMut(&oid) -> bool + 'repo, ) -> Result<Walk<'repo>, Error>
For each commit, let filter return true if it and its parents should be included in the traversal, or false
if the traversal should exclude it and its ancestry entirely.
If filter is None, no pruning of the graph will be performed which is the default.
Sourcepub fn all(self) -> Result<Walk<'repo>, Error>
pub fn all(self) -> Result<Walk<'repo>, Error>
Return an iterator to traverse all commits reachable as configured by the Platform.
§Performance
It’s highly recommended to set an object cache on the parent repo
to greatly speed up performance if the returned id is supposed to be looked up right after.