use super::BranchKind;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(super) enum Disposition {
Allow,
ForkAcross,
NamespaceFork,
MergeAcross,
NamespaceMerge,
}
#[derive(Clone, Copy, Debug)]
pub(super) struct MatrixCase {
pub(super) cell: &'static str,
pub(super) source_kind: BranchKind,
pub(super) destination_kind: BranchKind,
pub(super) source_lineage: Option<&'static str>,
pub(super) destination_lineage: Option<&'static str>,
pub(super) disposition: Disposition,
pub(super) synthetic_reason: Option<&'static str>,
}
pub(super) const FORK_CASES: [MatrixCase; 12] = [
MatrixCase {
cell: "F-W-W-S",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::Allow,
synthetic_reason: None,
},
MatrixCase {
cell: "F-W-W-D",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::ForkAcross,
synthetic_reason: Some(
"Work children inherit the Work parent lineage, so public derivation cannot select a different lineage",
),
},
MatrixCase {
cell: "F-W-W-L",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Work,
source_lineage: None,
destination_lineage: None,
disposition: Disposition::Allow,
synthetic_reason: None,
},
MatrixCase {
cell: "F-W-N-S",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::NamespaceFork,
synthetic_reason: None,
},
MatrixCase {
cell: "F-W-N-D",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::NamespaceFork,
synthetic_reason: None,
},
MatrixCase {
cell: "F-W-N-L",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Namespace,
source_lineage: None,
destination_lineage: Some("ns-b"),
disposition: Disposition::NamespaceFork,
synthetic_reason: None,
},
MatrixCase {
cell: "F-N-W-S",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::Allow,
synthetic_reason: None,
},
MatrixCase {
cell: "F-N-W-D",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::ForkAcross,
synthetic_reason: Some(
"Work children inherit the Namespace source name, so public derivation cannot select a different lineage",
),
},
MatrixCase {
cell: "F-N-W-L",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: None,
disposition: Disposition::ForkAcross,
synthetic_reason: Some(
"Work children inherit the Namespace source name, so public derivation cannot drop lineage to legacy None",
),
},
MatrixCase {
cell: "F-N-N-S",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::NamespaceFork,
synthetic_reason: None,
},
MatrixCase {
cell: "F-N-N-D",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::NamespaceFork,
synthetic_reason: None,
},
MatrixCase {
cell: "F-N-N-L",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-j2-source"),
destination_lineage: Some("ns-j2-destination"),
disposition: Disposition::NamespaceFork,
synthetic_reason: None,
},
];
pub(super) const MERGE_CASES: [MatrixCase; 12] = [
MatrixCase {
cell: "M-W-W-S",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::Allow,
synthetic_reason: None,
},
MatrixCase {
cell: "M-W-W-D",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::MergeAcross,
synthetic_reason: None,
},
MatrixCase {
cell: "M-W-W-L",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Work,
source_lineage: None,
destination_lineage: None,
disposition: Disposition::Allow,
synthetic_reason: None,
},
MatrixCase {
cell: "M-W-N-S",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::Allow,
synthetic_reason: None,
},
MatrixCase {
cell: "M-W-N-D",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::MergeAcross,
synthetic_reason: None,
},
MatrixCase {
cell: "M-W-N-L",
source_kind: BranchKind::Work,
destination_kind: BranchKind::Namespace,
source_lineage: None,
destination_lineage: Some("ns-b"),
disposition: Disposition::MergeAcross,
synthetic_reason: None,
},
MatrixCase {
cell: "M-N-W-S",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::NamespaceMerge,
synthetic_reason: None,
},
MatrixCase {
cell: "M-N-W-D",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::NamespaceMerge,
synthetic_reason: None,
},
MatrixCase {
cell: "M-N-W-L",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Work,
source_lineage: Some("ns-a"),
destination_lineage: None,
disposition: Disposition::NamespaceMerge,
synthetic_reason: None,
},
MatrixCase {
cell: "M-N-N-S",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-a"),
disposition: Disposition::NamespaceMerge,
synthetic_reason: None,
},
MatrixCase {
cell: "M-N-N-D",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-a"),
destination_lineage: Some("ns-b"),
disposition: Disposition::NamespaceMerge,
synthetic_reason: None,
},
MatrixCase {
cell: "M-N-N-L",
source_kind: BranchKind::Namespace,
destination_kind: BranchKind::Namespace,
source_lineage: Some("ns-j2-source"),
destination_lineage: Some("ns-j2-destination"),
disposition: Disposition::NamespaceMerge,
synthetic_reason: None,
},
];