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

Method resolve_reference

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

Resolve the reference to a sequence number and entry.

(&self, repo: &Repository)

Source from the content-addressed store, hash-verified

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