Windows compatibility

Windows can not have `:` in filenames which the RFC3339 datetime
format uses, so simply pass it through sanitize-filename as we already
depend on this.  We also need to adjust the tests for path separators.
This commit is contained in:
Floris Bruynooghe
2019-11-23 23:14:42 +01:00
parent 98f55bd8f5
commit ac48ada198
2 changed files with 8 additions and 6 deletions

View File

@@ -1,4 +1,5 @@
environment:
RUST_BACKTRACE: full
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017

View File

@@ -69,7 +69,7 @@ impl Logger {
fn open(logdir: &Path) -> Result<(String, fs::File), io::Error> {
let basename =
chrono::offset::Utc::now().to_rfc3339_opts(chrono::SecondsFormat::Secs, true);
let mut fname = format!("{}.log", &basename);
let mut fname = sanitize_filename::sanitize(format!("{}.log", &basename));
let mut counter = 0;
loop {
match std::fs::OpenOptions::new()
@@ -85,7 +85,8 @@ impl Logger {
return Err(e);
} else {
counter += 1;
fname = format!("{}.{}.log", &basename, counter);
fname =
sanitize_filename::sanitize(format!("{}-{}.log", &basename, counter));
continue;
}
}
@@ -224,7 +225,7 @@ mod tests {
assert!(lines[0].contains(format!("{:?}", std::thread::current().id()).as_str()));
assert!(lines[0]
.contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str()));
assert!(lines[0].contains("src/log.rs"));
assert!(lines[0].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR)));
assert!(lines[0].contains("deltachat::log::tests"));
assert!(lines[0].contains("foo"));
@@ -232,7 +233,7 @@ mod tests {
assert!(lines[1].contains(format!("{:?}", std::thread::current().id()).as_str()));
assert!(lines[1]
.contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str()));
assert!(lines[1].contains("src/log.rs"));
assert!(lines[1].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR)));
assert!(lines[1].contains("deltachat::log::tests"));
assert!(lines[1].contains("bar"));
@@ -240,7 +241,7 @@ mod tests {
assert!(lines[2].contains(format!("{:?}", std::thread::current().id()).as_str()));
assert!(lines[2]
.contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str()));
assert!(lines[2].contains("src/log.rs"));
assert!(lines[2].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR)));
assert!(lines[2].contains("deltachat::log::tests"));
assert!(lines[2].contains("baz"));
}
@@ -259,7 +260,7 @@ mod tests {
.unwrap();
logger.log(LogLevel::Info, callsite!(), "2nd msg").unwrap();
let fname1 = logger.logfile.clone();
assert!(fname1.ends_with(".1.log"));
assert!(fname1.ends_with("-1.log"));
assert_ne!(fname0, fname1);
let log0 = fs::read_to_string(logger.logdir.join(&fname0)).unwrap();
assert!(log0.contains("more than 5 bytes are written"));