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

Method list_stashes

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

List all stash views, sorted by creation time (newest first).

(&self, repo: &Repository)

Source from the content-addressed store, hash-verified

282
283 /// List all stash views, sorted by creation time (newest first).
284 fn list_stashes(&self, repo: &Repository) -> CliResult<Vec<StashEntry>> {
285 let views = repo.list_views().map_err(CliError::Repository)?;
286
287 let mut stashes: Vec<StashEntry> = views
288 .into_iter()
289 .filter(|name| name.starts_with(STASH_PREFIX))
290 .filter_map(|name| {
291 // Parse stash metadata from view info
292 let _info = repo.get_view_info(&name).ok()?;
293
294 // Extract source view and message from view name or metadata
295 // Format: stash/auto_{timestamp} or stash/{source}_{timestamp}_{message}
296 let parts: Vec<&str> = name
297 .trim_start_matches(STASH_PREFIX)
298 .splitn(3, '_')
299 .collect();
300
301 let (source_view, message, timestamp) = if parts.len() >= 2 {
302 let ts: i64 = parts.get(1).and_then(|s| s.parse().ok()).unwrap_or(0);
303 let src = if parts[0] == "auto" {
304 "unknown".to_string()
305 } else {
306 parts[0].to_string()
307 };
308 let msg = parts
309 .get(2)
310 .map(|s| s.to_string())
311 .unwrap_or_else(|| DEFAULT_STASH_MESSAGE.to_string());
312 (src, msg, ts)
313 } else {
314 ("unknown".to_string(), DEFAULT_STASH_MESSAGE.to_string(), 0)
315 };
316
317 let created_at =
318 DateTime::from_timestamp_millis(timestamp).unwrap_or_else(Utc::now);
319
320 Some(StashEntry {
321 index: 0, // Will be set after sorting
322 view_name: name,
323 source_view,
324 message,
325 created_at,
326 })
327 })
328 .collect();
329
330 // Sort by creation time, newest first
331 stashes.sort_by_key(|s| std::cmp::Reverse(s.created_at));
332
333 // Assign indices after sorting
334 for (i, stash) in stashes.iter_mut().enumerate() {
335 stash.index = i;
336 }
337
338 Ok(stashes)
339 }
340
341 /// Parse a stash reference (e.g., "stash@{0}", "0", or view name).

Callers 4

parse_stash_refMethod · 0.80
run_pushMethod · 0.80
run_listMethod · 0.80
run_clearMethod · 0.80

Calls 7

get_view_infoMethod · 0.80
iter_mutMethod · 0.80
getMethod · 0.65
list_viewsMethod · 0.45
into_iterMethod · 0.45
lenMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected