in focus/util/src/git/model.rs [299:414]
fn try_from(value: (State, Disposition, Disposition)) -> Result<Self, Self::Error> {
let (state, x, y) = value;
match (state, x, y) {
(
State::Regular,
Disposition::Unmodified,
Disposition::Added | Disposition::Modified | Disposition::Deleted,
) => Ok(DispositionInterpretation::NotUpdated),
(
State::Regular,
Disposition::Modified,
Disposition::Unmodified
| Disposition::Modified
| Disposition::FileTypeChanged
| Disposition::Deleted,
) => Ok(DispositionInterpretation::UpdatedInIndex),
(
State::Regular,
Disposition::FileTypeChanged,
Disposition::Unmodified
| Disposition::Modified
| Disposition::FileTypeChanged
| Disposition::Deleted,
) => Ok(DispositionInterpretation::TypeChangedInIndex),
(
State::Regular,
Disposition::Added,
Disposition::Unmodified
| Disposition::Modified
| Disposition::FileTypeChanged
| Disposition::Deleted,
) => Ok(DispositionInterpretation::AddedToIndex),
(State::Regular, Disposition::Deleted, _) => {
Ok(DispositionInterpretation::DeletedFromIndex)
}
(
State::Regular,
Disposition::Renamed,
Disposition::Unmodified
| Disposition::Modified
| Disposition::FileTypeChanged
| Disposition::Deleted,
) => Ok(DispositionInterpretation::RenamedInIndex),
(
State::Regular,
Disposition::Copied,
Disposition::Unmodified
| Disposition::Modified
| Disposition::FileTypeChanged
| Disposition::Deleted,
) => Ok(DispositionInterpretation::CopiedInIndex),
// (
// State::Regular,
// Disposition::Modified
// | Disposition::FileTypeChanged
// | Disposition::Added
// | Disposition::Renamed
// | Disposition::Copied,
// Disposition::Unmodified,
// ) =>
// /* TODO: Figure out why this pattern is not matched */
// {
// Ok(DispositionInterpretation::IndexAndWorkingTreeMatches)
// }
(State::Regular, _, Disposition::Modified) => {
Ok(DispositionInterpretation::WorkTreeChangedSinceIndex)
}
(State::Regular, _, Disposition::FileTypeChanged) => {
Ok(DispositionInterpretation::TypeChangedInWorkTreeSinceIndex)
}
(State::Regular, _, Disposition::Deleted) => {
Ok(DispositionInterpretation::DeletedInWorkTree)
}
(State::Regular, Disposition::Unmodified, Disposition::Renamed) => {
Ok(DispositionInterpretation::RenamedInWorkTree)
}
(State::Regular, Disposition::Unmodified, Disposition::Copied) => {
Ok(DispositionInterpretation::CopiedInWorkTree)
}
(State::Unmerged, Disposition::Deleted, Disposition::Deleted) => {
Ok(DispositionInterpretation::UnmergedBothDeleted)
}
(State::Unmerged, Disposition::Added, Disposition::UpdatedButUnmerged) => {
Ok(DispositionInterpretation::UnmergedAddedByUs)
}
(State::Unmerged, Disposition::UpdatedButUnmerged, Disposition::Deleted) => {
Ok(DispositionInterpretation::UnmergedDeletedByThem)
}
(State::Unmerged, Disposition::UpdatedButUnmerged, Disposition::Added) => {
Ok(DispositionInterpretation::UnmergedAddedByThem)
}
(State::Unmerged, Disposition::Deleted, Disposition::UpdatedButUnmerged) => {
Ok(DispositionInterpretation::UnmergedDeletedByUs)
}
(State::Unmerged, Disposition::Added, Disposition::Added) => {
Ok(DispositionInterpretation::UnmergedBothAdded)
}
(State::Unmerged, Disposition::UpdatedButUnmerged, Disposition::UpdatedButUnmerged) => {
Ok(DispositionInterpretation::UnmergedBothModified)
}
(_, Disposition::Untracked, Disposition::Untracked) => {
Ok(DispositionInterpretation::Untracked)
}
(_, Disposition::Ignored, Disposition::Ignored) => {
Ok(DispositionInterpretation::Ignored)
}
_ => Err(anyhow::anyhow!(
"Unsupported disposition combination (state={:?}, X='{:?}', Y='{:?}'",
&state,
x,
y
)),
}
}