summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun Taheri <github@taheris.co.uk>2016-10-14 17:44:11 +0200
committerGitHub <noreply@github.com>2016-10-14 17:44:11 +0200
commit3a1c94b7b1c478c6116a8a88c534d3069895f56c (patch)
tree2314ecb92bb501329142ddb0a22841c9c2847960
parentfee9a85b4385507f33bd4bae381c64fbd70b57af (diff)
parent0eeef4917d84e6da1fa456225b8750badd11b5df (diff)
downloadrvi_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.rs4
-rw-r--r--src/package_manager/rpm.rs9
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") {