Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prefer PWD environment variable over cwd if available to better support symbolic links #783

Merged
merged 1 commit into from
Mar 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions atuin-client/src/database.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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,
Expand Down
12 changes: 12 additions & 0 deletions atuin-common/src/utils.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::env;
use std::path::PathBuf;

use chrono::NaiveDate;
Expand Down Expand Up @@ -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 {
Expand Down
6 changes: 3 additions & 3 deletions src/command/client/history.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use std::{
time::Duration,
};

use atuin_common::utils;
use clap::Subcommand;
use eyre::Result;
use runtime_format::{FormatKey, FormatKeyError, ParsedFmt};
Expand Down Expand Up @@ -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
Comment on lines 183 to 184
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not believe this comment is worth keeping as utils::get_current_dir() returns an empty string if all else fails.

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);

Expand Down Expand Up @@ -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
};
Expand Down
7 changes: 2 additions & 5 deletions src/command/client/search.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use atuin_common::utils;
use chrono::Utc;
use clap::Parser;
use eyre::Result;
Expand Down Expand Up @@ -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
};
Expand Down