Skip to main content

verbs/merge/
relation.rs

1// SPDX-License-Identifier: Apache-2.0
2//! Merge relationship classification shared by preview and apply flows.
3
4use objects::object::StateId;
5
6#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7pub enum MergeRelationKind {
8    AlreadyUpToDate,
9    FastForward,
10    AlreadyIntegrated,
11    CleanApply,
12    Conflicted,
13}
14
15#[derive(Clone, Debug)]
16pub struct MergeRelation {
17    kind: MergeRelationKind,
18    merge_base_id: Option<StateId>,
19    conflict_count: usize,
20}
21
22impl MergeRelation {
23    pub fn new(
24        kind: MergeRelationKind,
25        _current_state_id: StateId,
26        _target_state_id: StateId,
27        merge_base_id: Option<StateId>,
28        conflict_count: usize,
29    ) -> Self {
30        Self {
31            kind,
32            merge_base_id,
33            conflict_count,
34        }
35    }
36
37    pub fn kind(&self) -> MergeRelationKind {
38        self.kind
39    }
40
41    pub fn merge_base_id(&self) -> Option<StateId> {
42        self.merge_base_id
43    }
44
45    pub fn conflict_count(&self) -> usize {
46        self.conflict_count
47    }
48
49    pub fn as_json_value(&self) -> &'static str {
50        match self.kind {
51            MergeRelationKind::AlreadyUpToDate => "already_up_to_date",
52            MergeRelationKind::FastForward => "fast_forward",
53            MergeRelationKind::AlreadyIntegrated => "already_integrated",
54            MergeRelationKind::CleanApply => "clean_apply",
55            MergeRelationKind::Conflicted => "path_conflicts",
56        }
57    }
58}