aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--atuin-client/src/database.rs6
-rw-r--r--atuin-common/src/utils.rs12
-rw-r--r--src/command/client/history.rs6
-rw-r--r--src/command/client/search.rs7
4 files changed, 19 insertions, 12 deletions
diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs
index d19a0b74..3b579153 100644
--- a/atuin-client/src/database.rs
+++ b/atuin-client/src/database.rs
@@ -1,6 +1,7 @@
use std::{env, path::Path, str::FromStr};
use async_trait::async_trait;
+use atuin_common::utils;
use chrono::{prelude::*, Utc};
use fs_err as fs;
use itertools::Itertools;
@@ -31,10 +32,7 @@ pub fn current_context() -> Context {
std::process::exit(1);
};
let hostname = format!("{}:{}", whoami::hostname(), whoami::username());
- let cwd = match env::current_dir() {
- Ok(dir) => dir.display().to_string(),
- Err(_) => String::from(""),
- };
+ let cwd = utils::get_current_dir();
Context {
session,
diff --git a/atuin-common/src/utils.rs b/atuin-common/src/utils.rs
index d85b3b96..1d330390 100644
--- a/atuin-common/src/utils.rs
+++ b/atuin-common/src/utils.rs
@@ -1,3 +1,4 @@
+use std::env;
use std::path::PathBuf;
use chrono::NaiveDate;
@@ -36,6 +37,17 @@ pub fn data_dir() -> PathBuf {
data_dir.join("atuin")
}
+pub fn get_current_dir() -> String {
+ // Prefer PWD environment variable over cwd if available to better support symbolic links
+ match env::var("PWD") {
+ Ok(v) => v,
+ Err(_) => match env::current_dir() {
+ Ok(dir) => dir.display().to_string(),
+ Err(_) => String::from(""),
+ },
+ }
+}
+
pub fn get_days_from_month(year: i32, month: u32) -> i64 {
NaiveDate::from_ymd(
match month {
diff --git a/src/command/client/history.rs b/src/command/client/history.rs
index 7382eba6..8735123e 100644
--- a/src/command/client/history.rs
+++ b/src/command/client/history.rs
@@ -5,6 +5,7 @@ use std::{
time::Duration,
};
+use atuin_common::utils;
use clap::Subcommand;
use eyre::Result;
use runtime_format::{FormatKey, FormatKeyError, ParsedFmt};
@@ -181,8 +182,7 @@ impl Cmd {
// It's better for atuin to silently fail here and attempt to
// store whatever is ran, than to throw an error to the terminal
- let cwd = env::current_dir()
- .map_or_else(|_| String::new(), |dir| dir.display().to_string());
+ let cwd = utils::get_current_dir();
let h = History::new(chrono::Utc::now(), command, cwd, -1, -1, None, None);
@@ -240,7 +240,7 @@ impl Cmd {
None
};
let cwd = if *cwd {
- Some(env::current_dir()?.display().to_string())
+ Some(utils::get_current_dir())
} else {
None
};
diff --git a/src/command/client/search.rs b/src/command/client/search.rs
index 3098267a..8d0e1de4 100644
--- a/src/command/client/search.rs
+++ b/src/command/client/search.rs
@@ -1,3 +1,4 @@
+use atuin_common::utils;
use chrono::Utc;
use clap::Parser;
use eyre::Result;
@@ -137,11 +138,7 @@ async fn run_non_interactive(
db: &mut impl Database,
) -> Result<usize> {
let dir = if cwd.as_deref() == Some(".") {
- let current = std::env::current_dir()?;
- let current = current.as_os_str();
- let current = current.to_str().unwrap();
-
- Some(current.to_owned())
+ Some(utils::get_current_dir())
} else {
cwd
};