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

Method resolve_identifier

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

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(

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