Skip to content

Commit

Permalink
warn user if file extension is passed as file name
Browse files Browse the repository at this point in the history
example: .tar.gz is a file named .tar with extension .gz

this can be confusing because people might expect .tar.gz to be a
.tar.gz archive, but it's currently not
  • Loading branch information
marcospb19 committed Oct 11, 2022
1 parent f8e6075 commit f554e3c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
1 change: 0 additions & 1 deletion src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ impl Opts {
(true, true) => unreachable!(),
};

// TODO: change this to be just a single function call?
let file_visibility_policy = FileVisibilityPolicy::new()
.read_git_exclude(opts.gitignore)
.read_ignore(opts.gitignore)
Expand Down
22 changes: 12 additions & 10 deletions src/extension.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use std::{ffi::OsStr, fmt, path::Path};

use self::CompressionFormat::*;
use crate::warning;

/// A wrapper around `CompressionFormat` that allows combinations like `tgz`
#[derive(Debug, Clone, Eq)]
Expand Down Expand Up @@ -103,19 +104,20 @@ pub const SUPPORTED_EXTENSIONS: &[&str] = &[
"zst",
];

/// Extracts extensions from a path,
/// return both the remaining path and the list of extension objects
/// Extracts extensions from a path.
///
/// Returns both the remaining path and the list of extension objects
pub fn separate_known_extensions_from_name(mut path: &Path) -> (&Path, Vec<Extension>) {
// // TODO: check for file names with the name of an extension
// // TODO2: warn the user that currently .tar.gz is a .gz file named .tar
//
// let all = ["tar", "zip", "bz", "bz2", "gz", "xz", "lzma", "lz"];
// if path.file_name().is_some() && all.iter().any(|ext| path.file_name().unwrap() == *ext) {
// todo!("we found a extension in the path name instead, what to do with this???");
// }

let mut extensions = vec![];

if let Some(file_stem) = path.file_stem().and_then(OsStr::to_str) {
let file_stem = file_stem.trim_matches('.');

if SUPPORTED_EXTENSIONS.contains(&file_stem) {
warning!("Received a file with name '{file_stem}', but {file_stem} was expected as the extension.");
}
}

// While there is known extensions at the tail, grab them
while let Some(extension) = path.extension().and_then(OsStr::to_str) {
let formats: &[CompressionFormat] = match extension {
Expand Down

0 comments on commit f554e3c

Please sign in to comment.