Skip to main content

wip_git/commands/
show.rs

1use crate::git;
2use crate::metadata::WipMetadata;
3use crate::ref_name;
4
5pub struct ShowResult {
6    pub name: String,
7    pub metadata: WipMetadata,
8    pub diff: String,
9}
10
11pub fn run(name: String, remote: String) -> Result<ShowResult, String> {
12    let user = ref_name::user()?;
13    let name = ref_name::resolve_name(Some(name))?;
14    let wip_ref = ref_name::wip_ref(&name, &user);
15
16    // Fetch the ref
17    git::git(&["fetch", &remote, &wip_ref])?;
18
19    // Show metadata from commit message
20    let msg = git::git_stdout(&["log", "-1", "--format=%B", "FETCH_HEAD"])?;
21    let metadata = WipMetadata::from_commit_message(&msg);
22
23    // Show the diff (compare commit to its parent)
24    let diff = git::git_stdout(&["diff", "FETCH_HEAD~1..FETCH_HEAD"])?;
25
26    Ok(ShowResult {
27        name,
28        metadata,
29        diff,
30    })
31}