mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-08 21:55:47 +00:00
conflicts: use an early return to reduce indentation
Thanks to @ilyagr for the suggestion.
This commit is contained in:
parent
f4499aa65e
commit
9907cccf37
1 changed files with 74 additions and 69 deletions
|
@ -464,77 +464,82 @@ pub fn update_conflict_from_content(
|
||||||
// further down.
|
// further down.
|
||||||
let mut removed_content = vec![vec![]; conflict.removes().len()];
|
let mut removed_content = vec![vec![]; conflict.removes().len()];
|
||||||
let mut added_content = vec![vec![]; conflict.adds().len()];
|
let mut added_content = vec![vec![]; conflict.adds().len()];
|
||||||
if let Some(hunks) = parse_conflict(content, conflict.removes().len(), conflict.adds().len()) {
|
// TODO: Change to let-else once our MSRV is above 1.65
|
||||||
for hunk in hunks {
|
let hunks = if let Some(hunks) =
|
||||||
match hunk {
|
parse_conflict(content, conflict.removes().len(), conflict.adds().len())
|
||||||
MergeHunk::Resolved(slice) => {
|
{
|
||||||
for buf in &mut removed_content {
|
hunks
|
||||||
buf.extend_from_slice(&slice);
|
|
||||||
}
|
|
||||||
for buf in &mut added_content {
|
|
||||||
buf.extend_from_slice(&slice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MergeHunk::Conflict(ConflictHunk { removes, adds }) => {
|
|
||||||
for (i, buf) in removes.iter().enumerate() {
|
|
||||||
removed_content[i].extend_from_slice(buf);
|
|
||||||
}
|
|
||||||
for (i, buf) in adds.iter().enumerate() {
|
|
||||||
added_content[i].extend_from_slice(buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Now write the new files contents we found by parsing the file
|
|
||||||
// with conflict markers. Update the Conflict object with the new
|
|
||||||
// FileIds.
|
|
||||||
for (i, buf) in removed_content.iter().enumerate() {
|
|
||||||
match &conflict.removes()[i] {
|
|
||||||
Some(TreeValue::File { id: _, executable }) => {
|
|
||||||
let file_id = store.write_file(path, &mut buf.as_slice())?;
|
|
||||||
let new_value = TreeValue::File {
|
|
||||||
id: file_id,
|
|
||||||
executable: *executable,
|
|
||||||
};
|
|
||||||
conflict.set_remove(i, Some(new_value));
|
|
||||||
}
|
|
||||||
None if buf.is_empty() => {
|
|
||||||
// The missing side of a conflict is still represented by
|
|
||||||
// the empty string we materialized it as => nothing to do
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
// The user edited a non-file side. This should never happen. We consider the
|
|
||||||
// conflict resolved for now.
|
|
||||||
return Ok(None);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i, buf) in added_content.iter().enumerate() {
|
|
||||||
match &conflict.adds()[i] {
|
|
||||||
Some(TreeValue::File { id: _, executable }) => {
|
|
||||||
let file_id = store.write_file(path, &mut buf.as_slice())?;
|
|
||||||
let new_value = TreeValue::File {
|
|
||||||
id: file_id,
|
|
||||||
executable: *executable,
|
|
||||||
};
|
|
||||||
conflict.set_add(i, Some(new_value));
|
|
||||||
}
|
|
||||||
None if buf.is_empty() => {
|
|
||||||
// The missing side of a conflict is still represented by
|
|
||||||
// the empty string we materialized it as => nothing to do
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
// The user edited a non-file side. This should never happen. We consider the
|
|
||||||
// conflict resolved for now.
|
|
||||||
return Ok(None);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let new_conflict_id = store.write_conflict(path, &conflict.to_backend_conflict())?;
|
|
||||||
Ok(Some(new_conflict_id))
|
|
||||||
} else {
|
} else {
|
||||||
Ok(None)
|
// Either there are no conflict markers of they don't have the expected arity
|
||||||
|
return Ok(None);
|
||||||
|
};
|
||||||
|
for hunk in hunks {
|
||||||
|
match hunk {
|
||||||
|
MergeHunk::Resolved(slice) => {
|
||||||
|
for buf in &mut removed_content {
|
||||||
|
buf.extend_from_slice(&slice);
|
||||||
|
}
|
||||||
|
for buf in &mut added_content {
|
||||||
|
buf.extend_from_slice(&slice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MergeHunk::Conflict(ConflictHunk { removes, adds }) => {
|
||||||
|
for (i, buf) in removes.iter().enumerate() {
|
||||||
|
removed_content[i].extend_from_slice(buf);
|
||||||
|
}
|
||||||
|
for (i, buf) in adds.iter().enumerate() {
|
||||||
|
added_content[i].extend_from_slice(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// Now write the new files contents we found by parsing the file
|
||||||
|
// with conflict markers. Update the Conflict object with the new
|
||||||
|
// FileIds.
|
||||||
|
for (i, buf) in removed_content.iter().enumerate() {
|
||||||
|
match &conflict.removes()[i] {
|
||||||
|
Some(TreeValue::File { id: _, executable }) => {
|
||||||
|
let file_id = store.write_file(path, &mut buf.as_slice())?;
|
||||||
|
let new_value = TreeValue::File {
|
||||||
|
id: file_id,
|
||||||
|
executable: *executable,
|
||||||
|
};
|
||||||
|
conflict.set_remove(i, Some(new_value));
|
||||||
|
}
|
||||||
|
None if buf.is_empty() => {
|
||||||
|
// The missing side of a conflict is still represented by
|
||||||
|
// the empty string we materialized it as => nothing to do
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
// The user edited a non-file side. This should never happen. We consider the
|
||||||
|
// conflict resolved for now.
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i, buf) in added_content.iter().enumerate() {
|
||||||
|
match &conflict.adds()[i] {
|
||||||
|
Some(TreeValue::File { id: _, executable }) => {
|
||||||
|
let file_id = store.write_file(path, &mut buf.as_slice())?;
|
||||||
|
let new_value = TreeValue::File {
|
||||||
|
id: file_id,
|
||||||
|
executable: *executable,
|
||||||
|
};
|
||||||
|
conflict.set_add(i, Some(new_value));
|
||||||
|
}
|
||||||
|
None if buf.is_empty() => {
|
||||||
|
// The missing side of a conflict is still represented by
|
||||||
|
// the empty string we materialized it as => nothing to do
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
// The user edited a non-file side. This should never happen. We consider the
|
||||||
|
// conflict resolved for now.
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let new_conflict_id = store.write_conflict(path, &conflict.to_backend_conflict())?;
|
||||||
|
Ok(Some(new_conflict_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
Loading…
Reference in a new issue