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

Method resolve_identifier

atomic-cli/src/commands/change/command.rs:142–177  ·  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

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

Callers 1

runMethod · 0.80

Calls 8

parseFunction · 0.85
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