From 11901068490bae0384255af1e56d120515a4d1ba Mon Sep 17 00:00:00 2001 From: Cole Helbling Date: Fri, 27 Mar 2020 14:56:48 -0700 Subject: [PATCH] Implement _ZO_EXCLUDE_DIRS _ZO_EXCLUDE_DIRS is a list of paths (separated by colons, `:`, on Unix-based systems, and semicolons, `;`, on Windows) that should be excluded from the database. Example: _ZO_EXCLUDE_DIRS="$HOME:$HOME/something/super/secret:$HOME/caused/by/background/cds" --- src/config.rs | 8 ++++++++ src/subcommand/add.rs | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/config.rs b/src/config.rs index cdde196..39a8ceb 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,7 @@ use crate::types::Rank; use anyhow::{bail, Context, Result}; + use std::env; use std::fs; use std::path::PathBuf; @@ -25,6 +26,13 @@ pub fn zo_data() -> Result { Ok(path) } +pub fn zo_exclude_dirs() -> Vec { + match env::var_os("_ZO_EXCLUDE_DIRS") { + Some(dirs_osstr) => env::split_paths(&dirs_osstr).collect(), + None => Vec::new(), + } +} + pub fn zo_maxage() -> Result { match env::var_os("_ZO_MAXAGE") { Some(maxage_osstr) => match maxage_osstr.to_str() { diff --git a/src/subcommand/add.rs b/src/subcommand/add.rs index 71550ee..c3c4b22 100644 --- a/src/subcommand/add.rs +++ b/src/subcommand/add.rs @@ -2,13 +2,15 @@ use crate::config; use crate::util; use anyhow::{Context, Result}; -use std::env; use structopt::StructOpt; +use std::env; +use std::path::PathBuf; + #[derive(Debug, StructOpt)] #[structopt(about = "Add a new directory or increment its rank")] pub struct Add { - path: Option, + path: Option, } impl Add { @@ -16,14 +18,17 @@ impl Add { let mut db = util::get_db()?; let now = util::get_current_time()?; let maxage = config::zo_maxage()?; + let excluded_dirs = config::zo_exclude_dirs(); - match &self.path { - Some(path) => db.add(path, maxage, now), - None => { - let current_dir = - env::current_dir().context("unable to fetch current directory")?; - db.add(current_dir, maxage, now) - } + let path = match &self.path { + Some(path) => path.clone(), + None => env::current_dir().context("unable to fetch current directory")?, + }; + + if excluded_dirs.contains(&path) { + return Ok(()); } + + db.add(path, maxage, now) } }