MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / resolve_identifier

Method resolve_identifier

atomic-cli/src/commands/change/command.rs:171–206  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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(

Callers 1

runMethod · 0.80

Calls 7

current_viewMethod · 0.80
resolve_hash_prefixMethod · 0.80
resolve_sequenceMethod · 0.80
get_latest_changeMethod · 0.80
has_changeMethod · 0.45
to_base32Method · 0.45

Tested by

no test coverage detected