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

Method parse_stash_ref

atomic-cli/src/commands/stash.rs:342–383  ·  view source on GitHub ↗

Parse a stash reference (e.g., "stash@{0}", "0", or view name).

(&self, repo: &Repository, reference: Option<&str>)

Source from the content-addressed store, hash-verified

340
341 /// Parse a stash reference (e.g., "stash@{0}", "0", or view name).
342 fn parse_stash_ref(&self, repo: &Repository, reference: Option<&str>) -> CliResult<StashEntry> {
343 let stashes = self.list_stashes(repo)?;
344
345 if stashes.is_empty() {
346 return Err(CliError::InvalidArgument {
347 message: "No stashes found".to_string(),
348 });
349 }
350
351 let reference = reference.unwrap_or("0");
352
353 // Try to parse as index
354 let index = if reference.starts_with("stash@{") && reference.ends_with('}') {
355 // Format: stash@{N}
356 reference[7..reference.len() - 1].parse::<usize>().ok()
357 } else {
358 // Try as plain number
359 reference.parse::<usize>().ok()
360 };
361
362 if let Some(idx) = index {
363 return stashes.into_iter().find(|s| s.index == idx).ok_or_else(|| {
364 CliError::InvalidArgument {
365 message: format!("stash@{{{}}} does not exist", idx),
366 }
367 });
368 }
369
370 // Try as view name
371 let full_name = if reference.starts_with(STASH_PREFIX) {
372 reference.to_string()
373 } else {
374 format!("{}{}", STASH_PREFIX, reference)
375 };
376
377 stashes
378 .into_iter()
379 .find(|s| s.view_name == full_name)
380 .ok_or_else(|| CliError::InvalidArgument {
381 message: format!("Stash '{}' not found", reference),
382 })
383 }
384
385 /// Execute stash push from another command (e.g., `view switch --stash`).
386 ///

Callers 4

run_popMethod · 0.80
run_applyMethod · 0.80
run_showMethod · 0.80
run_dropMethod · 0.80

Calls 4

list_stashesMethod · 0.80
is_emptyMethod · 0.45
lenMethod · 0.45
into_iterMethod · 0.45

Tested by

no test coverage detected