1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::Repository;
use posix_errors::PosixError;

/// # Errors
///
/// Returns an error when git reset --hard fails
#[inline]
pub fn reset_hard(repo: &Repository, sha: &str) -> Result<(), PosixError> {
    let mut cmd = repo.git();
    let out = cmd
        .args(&["reset", "--hard", "--quiet", sha])
        .output()
        .expect("Failed to execute git-reset(1)");

    if !out.status.success() {
        let message = String::from_utf8_lossy(&out.stderr).to_string();
        let code = out.status.code().unwrap_or(1);
        return Err(PosixError::new(code, message));
    }
    Ok(())
}