(
repository: Arc<RepositoryContext>,
metadata: Metadata,
branch: BranchId,
message: String,
keys: Option<Vec<String>>,
values: Option<Vec<String>>,
formats: Option<Vec<Met
| 2919 | } |
| 2920 | |
| 2921 | pub async fn prepare_commit_metadata( |
| 2922 | repository: Arc<RepositoryContext>, |
| 2923 | metadata: Metadata, |
| 2924 | branch: BranchId, |
| 2925 | message: String, |
| 2926 | keys: Option<Vec<String>>, |
| 2927 | values: Option<Vec<String>>, |
| 2928 | formats: Option<Vec<MetadataType>>, |
| 2929 | ) -> Result<Arc<Metadata>, CommitError> { |
| 2930 | let mut metadata = metadata; |
| 2931 | |
| 2932 | // Set metadata for revision, overwriting any existing value |
| 2933 | let commit_timestamp = util::time::timestamp(); |
| 2934 | let commit_user = execution_context().user_id().await; |
| 2935 | let commit_changelist = std::env::var("LORE_P4_CHANGELIST").unwrap_or_default(); |
| 2936 | |
| 2937 | metadata |
| 2938 | .set_branch(branch) |
| 2939 | .forward::<CommitError>("Failed setting revision metadata")?; |
| 2940 | metadata |
| 2941 | .set_u64(metadata::TIMESTAMP, commit_timestamp) |
| 2942 | .forward::<CommitError>("Failed setting revision metadata")?; |
| 2943 | metadata |
| 2944 | .set_string(metadata::MESSAGE, &message) |
| 2945 | .forward::<CommitError>("Failed setting revision metadata")?; |
| 2946 | // TODO: Extend this with UCS-Auth information |
| 2947 | if commit_user.is_empty() { |
| 2948 | // Authorship is required only when the active remote authenticates. |
| 2949 | let require_identity = match repository.remote().await { |
| 2950 | Ok(conn) => !conn.auth_url.is_empty(), |
| 2951 | Err(lore_transport::ProtocolError::NoRemote(_)) => false, |
| 2952 | Err(_) => true, |
| 2953 | }; |
| 2954 | if require_identity { |
| 2955 | return Err(MissingIdentity.into()); |
| 2956 | } |
| 2957 | } else { |
| 2958 | metadata |
| 2959 | .set_string(metadata::CREATED_BY, &commit_user) |
| 2960 | .forward::<CommitError>("Failed setting revision metadata")?; |
| 2961 | metadata |
| 2962 | .set_string(metadata::COMMITTED_BY, &commit_user) |
| 2963 | .forward::<CommitError>("Failed setting revision metadata")?; |
| 2964 | } |
| 2965 | // TODO: Move this to external metadata |
| 2966 | if !commit_changelist.is_empty() { |
| 2967 | metadata |
| 2968 | .set_string(metadata::P4_CHANGELIST, &commit_changelist) |
| 2969 | .forward::<CommitError>("Failed setting revision metadata")?; |
| 2970 | } |
| 2971 | |
| 2972 | if let (Some(keys), Some(values), Some(formats)) = (keys, values, formats) { |
| 2973 | // Set any additional metadata |
| 2974 | for index in 0..keys.len() { |
| 2975 | let key = &keys.as_slice()[index]; |
| 2976 | let value = &values.as_slice()[index]; |
| 2977 | let format = formats.as_slice()[index]; |
| 2978 | match format { |
no test coverage detected