diff --git a/__test__/utils.spec.mjs b/__test__/utils.spec.mjs index 10a7687..30f551d 100644 --- a/__test__/utils.spec.mjs +++ b/__test__/utils.spec.mjs @@ -146,7 +146,7 @@ test.skip("zip speed test", async (t) => { t.pass(); }); -test.skip("zip manifest test", async (t) => { +test("zip manifest test", async (t) => { const dropletHandler = new DropletHandler(); const manifest = JSON.parse( await new Promise((r, e) => @@ -161,6 +161,7 @@ test.skip("zip manifest test", async (t) => { ); for (const [filename, data] of Object.entries(manifest)) { + console.log(filename); let start = 0; for (const [chunkIndex, length] of data.lengths.entries()) { const hash = createHash("md5"); diff --git a/assets/generate.sh b/assets/generate.sh index a49f11d..52a43eb 100755 --- a/assets/generate.sh +++ b/assets/generate.sh @@ -1,4 +1,4 @@ # yes "droplet is awesome" | dd of=./setup.exe bs=1024 count=1000000 dd if=/dev/random of=./setup.exe bs=1024 count=1000000 -zip TheGame.zip setup.exe +zip TheGame.zip setup.exe "test file.txt" rm setup.exe \ No newline at end of file diff --git a/package.json b/package.json index 05a4eb2..bda848c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@drop-oss/droplet", - "version": "3.2.2", + "version": "3.3.0", "main": "index.js", "types": "index.d.ts", "napi": { diff --git a/src/version/backends.rs b/src/version/backends.rs index 89e17ca..12e1983 100644 --- a/src/version/backends.rs +++ b/src/version/backends.rs @@ -126,12 +126,15 @@ impl ZipVersionBackend { pub struct ZipFileWrapper { command: Child, - reader: BufReader + reader: BufReader, } impl ZipFileWrapper { pub fn new(mut command: Child) -> Self { - let stdout = command.stdout.take().expect("failed to access stdout of 7z"); + let stdout = command + .stdout + .take() + .expect("failed to access stdout of 7z"); let reader = BufReader::new(stdout); ZipFileWrapper { command, reader } } @@ -148,9 +151,9 @@ impl Read for ZipFileWrapper { } impl Drop for ZipFileWrapper { - fn drop(&mut self) { - self.command.wait().expect("failed to wait for 7z exit"); - } + fn drop(&mut self) { + self.command.wait().expect("failed to wait for 7z exit"); + } } impl VersionBackend for ZipVersionBackend { @@ -165,24 +168,28 @@ impl VersionBackend for ZipVersionBackend { )); } let raw_result = String::from_utf8(result.stdout)?; - let files = raw_result.split("\n").filter(|v| v.len() > 0).map(|v| v.split(" ").filter(|v| v.len() > 0)); + let files = raw_result + .split("\n") + .filter(|v| v.len() > 0) + .map(|v| v.split(" ").filter(|v| v.len() > 0)); let mut results = Vec::new(); for file in files { - let mut values = file.collect::>(); - values.reverse(); + let values = file.collect::>(); let mut iter = values.iter(); - let (name, compress, size, attrs) = ( - iter.next().expect("failed to fetch name"), - iter.next().expect("failed to read compressed size"), - iter.next().expect("failed to read file size"), - iter.next().expect("failed to fetch attrs") + let (date, time, attrs, size, compress, name) = ( + iter.next().expect("failed to read date"), + iter.next().expect("failed to read time"), + iter.next().expect("failed to read attrs"), + iter.next().expect("failed to read size"), + iter.next().expect("failed to read compress"), + iter.collect::>(), ); if attrs.starts_with("D") { continue; } results.push(VersionFile { - relative_filename: name.to_owned().to_owned(), + relative_filename: name.into_iter().map(|v| *v).fold(String::new(), |a, b| a + b + " ").trim_end().to_owned(), permission: 0o744, // owner r/w/x, everyone else, read size: size.parse().unwrap(), }); @@ -199,7 +206,10 @@ impl VersionBackend for ZipVersionBackend { ) -> anyhow::Result> { let mut read_command = Command::new("7z"); read_command.args(vec!["e", "-so", &self.path, &file.relative_filename]); - let output = read_command.stdout(Stdio::piped()).spawn().expect("failed to spawn 7z"); + let output = read_command + .stdout(Stdio::piped()) + .spawn() + .expect("failed to spawn 7z"); Ok(Box::new(ZipFileWrapper::new(output))) }