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

Method resolve_reference

atomic-cli/src/commands/revise.rs:286–326  ·  view source on GitHub ↗

Resolve the reference to a sequence number and entry.

(&self, repo: &Repository)

Source from the content-addressed store, hash-verified

284
285 /// Resolve the reference to a sequence number and entry.
286 fn resolve_reference(&self, repo: &Repository) -> CliResult<(u64, HistoryEntry)> {
287 let change_ref = self.parse_reference();
288
289 // Get current view info
290 let stack_name = repo.current_view();
291 let stack_info = repo
292 .get_view_info(stack_name)
293 .map_err(CliError::Repository)?;
294
295 if stack_info.change_count == 0 {
296 return Err(CliError::Internal(anyhow::anyhow!(
297 "Cannot revise: view '{}' is empty",
298 stack_info.name
299 )));
300 }
301
302 // Resolve reference to sequence number
303 let sequence = match &change_ref {
304 ChangeRef::Last | ChangeRef::Relative(_) => change_ref
305 .resolve(stack_info.change_count)
306 .map_err(|e| CliError::Internal(anyhow::anyhow!("{}", e)))?,
307 ChangeRef::Hash(hash_str) => {
308 // Find the change by hash prefix
309 self.find_by_hash(repo, hash_str)?
310 }
311 };
312
313 // Get the history entry at that sequence using log
314 let history = repo
315 .log(HistoryOptions::default())
316 .map_err(CliError::Repository)?;
317
318 let entry = history
319 .into_iter()
320 .find(|e| e.sequence == sequence)
321 .ok_or_else(|| {
322 CliError::Internal(anyhow::anyhow!("Change at sequence {} not found", sequence))
323 })?;
324
325 Ok((sequence, entry))
326 }
327
328 /// Find a change by hash prefix.
329 fn find_by_hash(&self, repo: &Repository, hash_str: &str) -> CliResult<u64> {

Callers 1

runMethod · 0.80

Calls 7

parse_referenceMethod · 0.80
current_viewMethod · 0.80
get_view_infoMethod · 0.80
logMethod · 0.80
resolveMethod · 0.45
find_by_hashMethod · 0.45
into_iterMethod · 0.45

Tested by

no test coverage detected