pub use fehler::{throw, throws};
pub use structopt::StructOpt;
pub use thirtyfour_sync as t4;
+use nix::unistd::LinkatFlags;
pub use void::Void;
pub use t4::WebDriverCommands;
pub trait AlwaysContext<T,E> {
fn always_context(self, msg: &'static str) -> anyhow::Result<T>;
+ fn just_warn(self, msg: &'static str) -> Option<T>;
}
impl<T,E> AlwaysContext<T,E> for Result<T,E>
if x.is_ok() { eprintln!("completed {}.", msg) };
x
}
+ fn just_warn(self, msg: &'static str) -> Option<T> {
+ match self {
+ Ok(x) => Some(x),
+ e@ Err(_) => {
+ eprintln!("warning: {:#}", e.context(msg).err().unwrap());
+ None
+ },
+ }
+ }
}
#[derive(Debug,Clone)]
impl Drop for FinalInfoCollection {
fn drop(&mut self) {
- match (||{
- fs::copy("Xvfb_screen0","final-auto.xwd")
- .context("copy")?;
-
- let mut cmd = Command::new("xwd");
- cmd.args("-root \
- -silent \
- -out final-xwd.xwd".split(' '));
- let s = cmd
- .spawn().context("spawn")?
- .wait().context("wait")?;
- if !s.success() {
- throw!(anyhow!("failed, waitstatus={}", &s));
- }
- Ok::<_,AE>(())
- })() {
- Ok(()) => eprintln!("taken screenshot"),
- Err(e) => eprintln!("screenshot failed: {:#?}", &e),
- }
+ nix::unistd::linkat(None, "Xvfb_screen0",
+ None, "Xvfb_keep.xwd",
+ LinkatFlags::NoSymlinkFollow)
+ .just_warn("preserve Xvfb screen");
}
}