Resolve the change identifier to a hash. # Arguments `repo` - The repository `id` - The parsed change identifier # Returns A tuple of (hash, optional sequence number).
(&self, repo: &Repository)
| 169 | /// |
| 170 | /// A tuple of (hash, optional sequence number). |
| 171 | fn resolve_identifier(&self, repo: &Repository) -> CliResult<(Hash, Option<u64>)> { |
| 172 | let id = ChangeIdentifier::parse(self.identifier.as_deref()) |
| 173 | .map_err(|e| CliError::InvalidArgument { message: e })?; |
| 174 | |
| 175 | let view_name = self.view.as_deref().unwrap_or_else(|| repo.current_view()); |
| 176 | |
| 177 | match id { |
| 178 | ChangeIdentifier::FullHash(hash) => { |
| 179 | // Verify the change exists |
| 180 | if !repo.has_change(&hash) { |
| 181 | return Err(CliError::ChangeNotFound { |
| 182 | hash: hash.to_base32(), |
| 183 | }); |
| 184 | } |
| 185 | |
| 186 | // Try to find sequence number |
| 187 | let seq = self.find_sequence_for_hash(repo, view_name, &hash)?; |
| 188 | Ok((hash, seq)) |
| 189 | } |
| 190 | |
| 191 | ChangeIdentifier::HashPrefix(prefix) => { |
| 192 | let (hash, seq) = self.resolve_hash_prefix(repo, view_name, &prefix)?; |
| 193 | Ok((hash, seq)) |
| 194 | } |
| 195 | |
| 196 | ChangeIdentifier::Sequence(seq) => { |
| 197 | let hash = self.resolve_sequence(repo, view_name, seq)?; |
| 198 | Ok((hash, Some(seq))) |
| 199 | } |
| 200 | |
| 201 | ChangeIdentifier::Latest => { |
| 202 | let (hash, seq) = self.get_latest_change(repo, view_name)?; |
| 203 | Ok((hash, Some(seq))) |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | /// Find the sequence number for a hash in the current view. |
| 209 | fn find_sequence_for_hash( |
no test coverage detected