aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@archive.org>2020-05-31 16:29:40 -0700
committerBryan Newbold <bnewbold@archive.org>2020-05-31 16:30:13 -0700
commit31f1d3d18566d1ae97daaedbd17132a11a7ab5aa (patch)
treeef0183f9888ce3d51cd4d3ef0fb74261afdd4cf8
parent661da10e73b9ec95a0411d1e54b999f6696c3152 (diff)
downloadaft-31f1d3d18566d1ae97daaedbd17132a11a7ab5aa.tar.gz
aft-31f1d3d18566d1ae97daaedbd17132a11a7ab5aa.zip
start aft-ls
-rw-r--r--Cargo.lock47
-rw-r--r--Cargo.toml1
-rw-r--r--src/bin/aft-ls.rs36
3 files changed, 84 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e998284..fef5899 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -7,6 +7,7 @@ dependencies = [
"anyhow",
"assert_cmd",
"atty",
+ "chrono",
"colored",
"serde_json",
"structopt",
@@ -44,12 +45,29 @@ dependencies = [
]
[[package]]
+name = "autocfg"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
+
+[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
+name = "chrono"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
+dependencies = [
+ "num-integer",
+ "num-traits",
+ "time",
+]
+
+[[package]]
name = "clap"
version = "2.33.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -120,6 +138,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
[[package]]
+name = "num-integer"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
name = "predicates"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -294,6 +331,16 @@ dependencies = [
]
[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
name = "treeline"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index e2937b8..a6d0c8c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,6 +12,7 @@ anyhow = "1.0"
colored = "1.9"
atty = "0.2"
tabwriter = { version = "1.2", features = ["ansi_formatting"] }
+chrono = "*"
[dev-dependencies]
assert_cmd = "1"
diff --git a/src/bin/aft-ls.rs b/src/bin/aft-ls.rs
new file mode 100644
index 0000000..3118c08
--- /dev/null
+++ b/src/bin/aft-ls.rs
@@ -0,0 +1,36 @@
+
+use std::{fs,env,path};
+use std::error::Error;
+use std::os::unix::fs::MetadataExt;
+
+fn main() -> Result<(), Box<dyn Error>> {
+
+ let args: Vec<String> = env::args().collect();
+ let dir = match args.len() {
+ 0 | 1 => path::Path::new("."),
+ _other => path::Path::new(&args[2]),
+ };
+
+ // header is basically a constant
+ print!("\x01");
+ println!("{}\x1D", ["file_name", "size", "mtime"].join("\x1E"));
+ println!("{}\x1D", ["string", "integer+bytes", "datetime"].join("\x1E"));
+ print!("\x02");
+
+ for entry in fs::read_dir(dir)? {
+ let entry = entry?;
+ let metadata = entry.metadata()?;
+ let filename: String = entry.file_name()
+ .into_string()
+ .or_else(|_| Err(format!("Invalid entry")))?;
+ let mtime = chrono::DateTime::<chrono::Utc>::from_utc(
+ chrono::NaiveDateTime::from_timestamp(metadata.mtime(), 0), chrono::Utc);
+ println!("{}\x1D",
+ [
+ filename,
+ metadata.size().to_string(),
+ mtime.to_rfc3339_opts(chrono::SecondsFormat::AutoSi, true),
+ ].join("\x1E"));
+ }
+ Ok(())
+}