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

Method resolve_reference

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

Resolve the reference to a sequence number and entry.

(&self, repo: &Repository)

Source from the content-addressed store, hash-verified

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