mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-20 03:20:08 +00:00
revset: group RevsetExpression constructors by resolved/user/generic
They'll become different in State types.
This commit is contained in:
parent
1372b39341
commit
78d68f98f5
1 changed files with 35 additions and 25 deletions
|
@ -238,6 +238,7 @@ pub enum RevsetExpression {
|
|||
Difference(Rc<Self>, Rc<Self>),
|
||||
}
|
||||
|
||||
// Leaf expression that never contains unresolved commit refs
|
||||
impl RevsetExpression {
|
||||
pub fn none() -> Rc<Self> {
|
||||
Rc::new(Self::None)
|
||||
|
@ -247,6 +248,34 @@ impl RevsetExpression {
|
|||
Rc::new(Self::All)
|
||||
}
|
||||
|
||||
pub fn visible_heads() -> Rc<Self> {
|
||||
Rc::new(Self::VisibleHeads)
|
||||
}
|
||||
|
||||
pub fn root() -> Rc<Self> {
|
||||
Rc::new(Self::Root)
|
||||
}
|
||||
|
||||
pub fn commit(commit_id: CommitId) -> Rc<Self> {
|
||||
Self::commits(vec![commit_id])
|
||||
}
|
||||
|
||||
pub fn commits(commit_ids: Vec<CommitId>) -> Rc<Self> {
|
||||
Rc::new(Self::Commits(commit_ids))
|
||||
}
|
||||
|
||||
pub fn filter(predicate: RevsetFilterPredicate) -> Rc<Self> {
|
||||
Rc::new(Self::Filter(predicate))
|
||||
}
|
||||
|
||||
/// Find any empty commits.
|
||||
pub fn is_empty() -> Rc<Self> {
|
||||
Self::filter(RevsetFilterPredicate::File(FilesetExpression::all())).negated()
|
||||
}
|
||||
}
|
||||
|
||||
// Leaf expression that represents unresolved commit refs
|
||||
impl RevsetExpression {
|
||||
pub fn working_copy(workspace_id: WorkspaceId) -> Rc<Self> {
|
||||
Rc::new(Self::CommitRef(RevsetCommitRef::WorkingCopy(workspace_id)))
|
||||
}
|
||||
|
@ -264,22 +293,6 @@ impl RevsetExpression {
|
|||
Rc::new(Self::CommitRef(commit_ref))
|
||||
}
|
||||
|
||||
pub fn commit(commit_id: CommitId) -> Rc<Self> {
|
||||
Self::commits(vec![commit_id])
|
||||
}
|
||||
|
||||
pub fn commits(commit_ids: Vec<CommitId>) -> Rc<Self> {
|
||||
Rc::new(Self::Commits(commit_ids))
|
||||
}
|
||||
|
||||
pub fn visible_heads() -> Rc<Self> {
|
||||
Rc::new(Self::VisibleHeads)
|
||||
}
|
||||
|
||||
pub fn root() -> Rc<Self> {
|
||||
Rc::new(Self::Root)
|
||||
}
|
||||
|
||||
pub fn bookmarks(pattern: StringPattern) -> Rc<Self> {
|
||||
Rc::new(Self::CommitRef(RevsetCommitRef::Bookmarks(pattern)))
|
||||
}
|
||||
|
@ -307,7 +320,10 @@ impl RevsetExpression {
|
|||
pub fn git_head() -> Rc<Self> {
|
||||
Rc::new(Self::CommitRef(RevsetCommitRef::GitHead))
|
||||
}
|
||||
}
|
||||
|
||||
// Compound expression
|
||||
impl RevsetExpression {
|
||||
pub fn latest(self: &Rc<Self>, count: usize) -> Rc<Self> {
|
||||
Rc::new(Self::Latest {
|
||||
candidates: self.clone(),
|
||||
|
@ -315,15 +331,6 @@ impl RevsetExpression {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn filter(predicate: RevsetFilterPredicate) -> Rc<Self> {
|
||||
Rc::new(Self::Filter(predicate))
|
||||
}
|
||||
|
||||
/// Find any empty commits.
|
||||
pub fn is_empty() -> Rc<Self> {
|
||||
Self::filter(RevsetFilterPredicate::File(FilesetExpression::all())).negated()
|
||||
}
|
||||
|
||||
/// Commits in `self` that don't have descendants in `self`.
|
||||
pub fn heads(self: &Rc<Self>) -> Rc<Self> {
|
||||
Rc::new(Self::Heads(self.clone()))
|
||||
|
@ -386,6 +393,7 @@ impl RevsetExpression {
|
|||
pub fn filtered(self: &Rc<Self>, predicate: RevsetFilterPredicate) -> Rc<Self> {
|
||||
self.intersection(&Self::filter(predicate))
|
||||
}
|
||||
|
||||
/// Commits that are descendants of `self` and ancestors of `heads`, both
|
||||
/// inclusive.
|
||||
pub fn dag_range_to(self: &Rc<Self>, heads: &Rc<Self>) -> Rc<Self> {
|
||||
|
@ -470,7 +478,9 @@ impl RevsetExpression {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl RevsetExpression {
|
||||
/// Returns symbol string if this expression is of that type.
|
||||
pub fn as_symbol(&self) -> Option<&str> {
|
||||
match self {
|
||||
|
|
Loading…
Reference in a new issue