fix: panic guards, dedup, and unsafe documentation
- diff.rs: graceful error instead of expect() on item ID in spawned thread - common.rs: lazy_static regex, avoid unwrap on regex captures - db.rs: ok_or_else guard on item.id in delete_item - list/get/info/export/client/list: use settings.meta_filter() helper - item_service.rs: expect() on meta lock instead of silent swallow - filter_plugin/mod.rs: extract parse_encoding_option() helper - main.rs: document unsafe libc::umask block with safety rationale
This commit is contained in:
@@ -21,6 +21,7 @@ use chrono::{DateTime, Utc};
|
||||
use clap::Command;
|
||||
use clap::error::ErrorKind;
|
||||
use comfy_table::{Attribute, Cell, ContentArrangement, Table};
|
||||
use lazy_static::lazy_static;
|
||||
use log::debug;
|
||||
use regex::Regex;
|
||||
use serde::{Deserialize, Serialize};
|
||||
@@ -56,38 +57,21 @@ pub enum OutputFormat {
|
||||
Yaml,
|
||||
}
|
||||
|
||||
/// Extracts metadata from KEEP_META_* environment variables.
|
||||
///
|
||||
/// Scans environment for variables prefixed with KEEP_META_ and extracts
|
||||
/// key-value pairs for initial item metadata. Ignores KEEP_META_PLUGINS.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// `HashMap<String, String>` - Metadata from environment variables, with keys in uppercase without prefix.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// None; silently ignores non-matching vars and PLUGINS.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```ignore
|
||||
/// use std::env;
|
||||
/// env::set_var("KEEP_META_COMMAND", "ls -la");
|
||||
/// let meta = keep::modes::common::get_meta_from_env();
|
||||
/// assert_eq!(meta.get("COMMAND"), Some(&"ls -la".to_string()));
|
||||
/// ```
|
||||
lazy_static! {
|
||||
static ref KEEP_META_RE: Regex = Regex::new(r"^KEEP_META_(.+)$").unwrap();
|
||||
}
|
||||
|
||||
pub fn get_meta_from_env() -> HashMap<String, String> {
|
||||
debug!("COMMON: Getting meta from KEEP_META_*");
|
||||
let re = Regex::new(r"^KEEP_META_(.+)$").unwrap();
|
||||
let mut meta_env: HashMap<String, String> = HashMap::new();
|
||||
for (key, value) in env::vars() {
|
||||
if let Some(meta_name_caps) = re.captures(key.as_str()) {
|
||||
let name = String::from(meta_name_caps.get(1).unwrap().as_str());
|
||||
// Ignore KEEP_META_PLUGINS
|
||||
if name != "PLUGINS" {
|
||||
debug!("COMMON: Found meta: {}={}", name.clone(), value.clone());
|
||||
meta_env.insert(name, value.clone());
|
||||
if let Some(meta_name_caps) = KEEP_META_RE.captures(key.as_str()) {
|
||||
let name = meta_name_caps.get(1).map(|m| m.as_str().to_string());
|
||||
if let Some(name) = name {
|
||||
if name != "PLUGINS" {
|
||||
debug!("COMMON: Found meta: {}={}", name, value);
|
||||
meta_env.insert(name, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user