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)
| 144 | /// |
| 145 | /// A tuple of (hash, optional sequence number). |
| 146 | fn resolve_identifier(&self, repo: &Repository) -> CliResult<(Hash, Option<u64>)> { |
| 147 | let id = ChangeIdentifier::parse(self.identifier.as_deref()) |
| 148 | .map_err(|e| CliError::InvalidArgument { message: e })?; |
| 149 | |
| 150 | let view_name = self.view.as_deref().unwrap_or_else(|| repo.current_view()); |
| 151 | |
| 152 | match id { |
| 153 | ChangeIdentifier::FullHash(hash) => { |
| 154 | // Verify the change exists |
| 155 | if !repo.has_change(&hash) { |
| 156 | return Err(CliError::ChangeNotFound { |
| 157 | hash: hash.to_base32(), |
| 158 | }); |
| 159 | } |
| 160 | |
| 161 | // Try to find sequence number |
| 162 | let seq = self.find_sequence_for_hash(repo, view_name, &hash)?; |
| 163 | Ok((hash, seq)) |
| 164 | } |
| 165 | |
| 166 | ChangeIdentifier::HashPrefix(prefix) => { |
| 167 | let (hash, seq) = self.resolve_hash_prefix(repo, view_name, &prefix)?; |
| 168 | Ok((hash, seq)) |
| 169 | } |
| 170 | |
| 171 | ChangeIdentifier::Sequence(seq) => { |
| 172 | let hash = self.resolve_sequence(repo, view_name, seq)?; |
| 173 | Ok((hash, Some(seq))) |
| 174 | } |
| 175 | |
| 176 | ChangeIdentifier::Latest => { |
| 177 | let (hash, seq) = self.get_latest_change(repo, view_name)?; |
| 178 | Ok((hash, Some(seq))) |
| 179 | } |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | /// Find the sequence number for a hash in the current view. |
| 184 | fn find_sequence_for_hash( |
no test coverage detected