index: convert ReadonlyIndex and MutableIndex methods to be fallible
#7830
+21
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
This is part of a series of changes to make most methods on index traits (i.e.
ChangeIdIndex,MutableIndex,ReadonlyIndex,Index) fallible. The changes will enable networked implementations of these traits, which can produce I/O errors during operation. See #7825 for more information.This is a follow-up to #7799 and #7823.
Changes
These two changes convert the necessary methods on
ReadonlyIndexandMutableIndexto be fallible:ReadonlyIndex::change_id_indexMutableIndex::change_id_indexMutableIndex::merge_inTwo things to note:
ReadonlyIndex::start_modificationto return aResultfor the reasons described in FR: Support distributed implementations of index traits #7825.MutableRepo::mergeto return aRepoLoaderErrorinstead of aBackendError, but we should verify that we think this makes sense. My line of thinking was as follows:IndexErrorfrommerge_inintoBackendError::Other.MutableRepo::mergeis only used in two contexts (cmd_op_revertandTransaction::merge_operation). In both situations we are loading two repos and then merging them, andTransaction::merge_operationis a caller that already returns aRepoLoaderError.ReadonlyRepohas a few methods that are already returningRepoLoaderError.EDIT: ended up dropping conversion of
change_id_index-- for any implementers looking to perform effects in this method, we can recommend they use interior mutation like they'll have to withstart_modification.Thanks!
Brian
Checklist
If applicable:
CHANGELOG.mdREADME.md,docs/,demos/)cli/src/config-schema.json)