diff options
author | Shaun Taheri <github@taheris.co.uk> | 2016-10-14 17:44:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-14 17:44:11 +0200 |
commit | 3a1c94b7b1c478c6116a8a88c534d3069895f56c (patch) | |
tree | 2314ecb92bb501329142ddb0a22841c9c2847960 | |
parent | fee9a85b4385507f33bd4bae381c64fbd70b57af (diff) | |
parent | 0eeef4917d84e6da1fa456225b8750badd11b5df (diff) | |
download | rvi_sota_client-3a1c94b7b1c478c6116a8a88c534d3069895f56c.tar.gz |
Merge pull request #131 from advancedtelematic/bugfix/pro-1576/rpm-sync
Run sync command after installing an RPM package
-rw-r--r-- | src/interpreter.rs | 4 | ||||
-rw-r--r-- | src/package_manager/rpm.rs | 9 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/interpreter.rs b/src/interpreter.rs index 4793b32..f122fc2 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -70,6 +70,7 @@ impl Interpreter<Event, Command> for EventInterpreter { match request.status { Status::Pending => ctx.send(Command::StartDownload(id)), + /* FIXME(PRO-1654): race condition due to prior in-progress operations Status::InFlight if self.pacman != PackageManager::Off => { if self.pacman.is_installed(&request.packageId) { let report = UpdateReport::single(id, UpdateResultCode::OK, "".to_string()); @@ -78,6 +79,7 @@ impl Interpreter<Event, Command> for EventInterpreter { ctx.send(Command::StartDownload(id)); } } + */ _ => () } @@ -290,7 +292,7 @@ impl<'t> GlobalInterpreter<'t> { #[cfg(test)] mod tests { use chan; - use chan::{Sender, Receiver, WaitGroup}; + use chan::{Sender, Receiver}; use std::thread; use super::*; diff --git a/src/package_manager/rpm.rs b/src/package_manager/rpm.rs index beab7dd..bdbfd31 100644 --- a/src/package_manager/rpm.rs +++ b/src/package_manager/rpm.rs @@ -27,13 +27,18 @@ pub fn installed_packages() -> Result<Vec<Package>, Error> { pub fn install_package(path: &str) -> Result<InstallOutcome, InstallOutcome> { let output = try!(Command::new("rpm").arg("-Uvh").arg("--force").arg(path) .output() - .map_err(|e| (UpdateResultCode::GENERAL_ERROR, format!("{:?}", e)))); + .map_err(|err| (UpdateResultCode::GENERAL_ERROR, format!("{:?}", err)))); let stdout = String::from_utf8_lossy(&output.stdout).into_owned(); let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); match output.status.code() { - Some(0) => Ok((UpdateResultCode::OK, stdout)), + Some(0) => { + let _ = Command::new("sync").status() + .map_err(|err| error!("couldn't run 'sync': {}", err)); + Ok((UpdateResultCode::OK, stdout)) + } + _ => { let out = format!("stdout: {}\nstderr: {}", stdout, stderr); if (&stderr).contains("already installed") { |