Converts interface metadata args and prepares the commit metadata object.
(
repository: Arc<RepositoryContext>,
state_staged: &Arc<State>,
branch: BranchId,
message: String,
keys: LoreArray<LoreString>,
values: LoreArray<LoreString>,
formats: Lor
| 930 | |
| 931 | /// Converts interface metadata args and prepares the commit metadata object. |
| 932 | async fn build_commit_metadata( |
| 933 | repository: Arc<RepositoryContext>, |
| 934 | state_staged: &Arc<State>, |
| 935 | branch: BranchId, |
| 936 | message: String, |
| 937 | keys: LoreArray<LoreString>, |
| 938 | values: LoreArray<LoreString>, |
| 939 | formats: LoreArray<LoreMetadataType>, |
| 940 | ) -> Result<Arc<Metadata>, CommitError> { |
| 941 | let metadata_keys = keys |
| 942 | .as_slice() |
| 943 | .iter() |
| 944 | .map(|k| String::from(k.as_str())) |
| 945 | .collect(); |
| 946 | let metadata_values = values |
| 947 | .as_slice() |
| 948 | .iter() |
| 949 | .map(|v| String::from(v.as_str())) |
| 950 | .collect(); |
| 951 | let metadata_formats = formats |
| 952 | .as_slice() |
| 953 | .iter() |
| 954 | .map(|format| match format { |
| 955 | LoreMetadataType::Binary => MetadataType::Binary, |
| 956 | LoreMetadataType::Numeric => MetadataType::Numeric, |
| 957 | LoreMetadataType::String => MetadataType::String, |
| 958 | }) |
| 959 | .collect(); |
| 960 | |
| 961 | let metadata_hash = state_staged.metadata_hash(); |
| 962 | let original_metadata = if metadata_hash.is_zero() { |
| 963 | Metadata::new() |
| 964 | } else { |
| 965 | Metadata::deserialize(repository.clone(), metadata_hash) |
| 966 | .await |
| 967 | .forward::<CommitError>("Failed to deserialize metadata")? |
| 968 | }; |
| 969 | |
| 970 | prepare_commit_metadata( |
| 971 | repository, |
| 972 | original_metadata, |
| 973 | branch, |
| 974 | message, |
| 975 | Some(metadata_keys), |
| 976 | Some(metadata_values), |
| 977 | Some(metadata_formats), |
| 978 | ) |
| 979 | .await |
| 980 | } |
| 981 | |
| 982 | /// Stores branch latest, deletes staged anchor, updates last sync if merge, |
| 983 | /// and emits the revision commit event. |
no test coverage detected