diff options
author | Vincent Breitmoser <look@my.amazin.horse> | 2019-01-09 22:19:55 +0100 |
---|---|---|
committer | Vincent Breitmoser <look@my.amazin.horse> | 2019-01-09 22:23:55 +0100 |
commit | aba45db5b3f0b437958194c8bdf9f4b934c7ad91 (patch) | |
tree | 3d9b38a340307131f15c3592e6c501931121289f | |
parent | 180a393ff65ce96cfd235c1cf8858ca38c9d7b28 (diff) |
index: write indexing time to file
-rw-r--r-- | src/bin/khaleesi.rs | 2 | ||||
-rw-r--r-- | src/defaults.rs | 4 | ||||
-rw-r--r-- | src/index.rs | 8 | ||||
-rw-r--r-- | src/indextime.rs | 38 | ||||
-rw-r--r-- | src/lib.rs | 5 | ||||
-rw-r--r-- | src/testutils.rs | 15 |
6 files changed, 70 insertions, 2 deletions
diff --git a/src/bin/khaleesi.rs b/src/bin/khaleesi.rs index 098f831..7b34109 100644 --- a/src/bin/khaleesi.rs +++ b/src/bin/khaleesi.rs @@ -187,8 +187,8 @@ mod tests { extern crate assert_fs; extern crate predicates; - use self::assert_fs::TempDir; use self::assert_fs::prelude::*; + use self::assert_fs::TempDir; use super::*; diff --git a/src/defaults.rs b/src/defaults.rs index 95599fb..3071213 100644 --- a/src/defaults.rs +++ b/src/defaults.rs @@ -34,6 +34,10 @@ pub fn get_indexlockfile() -> PathBuf { [DATADIR, "index-lock"].iter().collect() } +pub fn get_indextimefile() -> PathBuf { + [DATADIR, "index-time"].iter().collect() +} + pub fn get_caldir() -> PathBuf { [DATADIR, CALDIR].iter().collect() } diff --git a/src/index.rs b/src/index.rs index 24c6952..f290f3d 100644 --- a/src/index.rs +++ b/src/index.rs @@ -2,10 +2,13 @@ use icalwrap::*; use std::collections::HashMap; use std::fs; use std::path::{Path,PathBuf}; -use utils::lock; use defaults::*; +use utils::lock; use utils::fileutil as utils; +use chrono::prelude::*; + +use indextime; fn add_buckets_for_calendar(buckets: &mut HashMap<String, Vec<String>>, cal: &IcalVCalendar) { use bucketable::Bucketable; @@ -35,6 +38,7 @@ pub fn index_dir(dir: &Path) { } let now = Instant::now(); + let start_time = Utc::now(); let ics_files = get_ics_files(dir); let buckets = read_buckets(ics_files); @@ -46,6 +50,8 @@ pub fn index_dir(dir: &Path) { }, Err(error) => error!("{}", error), } + + indextime::write_index_time(&start_time); } fn get_ics_files(dir: &Path) -> impl Iterator<Item = PathBuf> { diff --git a/src/indextime.rs b/src/indextime.rs new file mode 100644 index 0000000..388e154 --- /dev/null +++ b/src/indextime.rs @@ -0,0 +1,38 @@ +use std::fs; +use std::io::{Read,Write}; +use chrono::prelude::*; + +use defaults::*; + +pub fn write_index_time(index_time: &DateTime<Utc>) { + let mut timefile = fs::File::create(get_indextimefile()).unwrap(); + timefile.write(format!("{}\n", index_time.timestamp()).as_bytes()).unwrap(); +} + +pub fn get_index_time() -> Option<DateTime<Utc>> { + let mut timefile = fs::File::open(get_indextimefile()).ok()?; + let mut timestamp_str = String::new(); + timefile.read_to_string(&mut timestamp_str).ok()?; + let timestamp = timestamp_str.trim().parse::<i64>().ok()?; + Some(Utc.timestamp(timestamp, 0)) +} + +#[cfg(test)] +mod tests { + use super::*; + + use testutils; + use assert_fs::prelude::*; + + #[test] + fn test_write_read() { + let testdir = testutils::prepare_testdir("testdir"); + + let timestamp = Utc.ymd(1990,01,01).and_hms(1, 1, 0); + write_index_time(×tamp); + testdir.child(".khaleesi/index-time").assert("631155660\n"); + + let indextime = get_index_time(); + assert_eq!(Some(timestamp), indextime); + } +} @@ -7,6 +7,7 @@ pub mod defaults; pub mod edit; pub mod icalwrap; pub mod index; +pub mod indextime; pub mod list; pub mod modify; pub mod new; @@ -18,11 +19,15 @@ pub mod show; pub mod sort; pub mod unroll; pub mod utils; +#[cfg(test)] +pub mod testutils; #[cfg(test)] pub mod testdata; #[cfg(test)] extern crate tempfile; +#[cfg(test)] +extern crate assert_fs; extern crate chrono; extern crate fs2; diff --git a/src/testutils.rs b/src/testutils.rs new file mode 100644 index 0000000..1311dd1 --- /dev/null +++ b/src/testutils.rs @@ -0,0 +1,15 @@ +use assert_fs::prelude::*; +use assert_fs::TempDir; +use std::env; +use std::path::PathBuf; + +pub fn path_to(artifact: &str) -> PathBuf { + [env!("CARGO_MANIFEST_DIR"), "testdata", artifact].iter().collect() +} + +pub fn prepare_testdir(template: &str) -> TempDir { + let testdir = TempDir::new().unwrap(); + env::set_current_dir(testdir.path()).unwrap(); + testdir.child(".khaleesi/").copy_from(path_to(template), &["*"]).unwrap(); + testdir +} |