diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ba6fcfc..b3dac2d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -10,7 +10,7 @@ jobs: matrix: os: - ubuntu-latest - - windows-latest + # - windows-latest - macos-latest steps: - name: Setup Rust diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 250c385..ff832f0 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -50,10 +50,10 @@ jobs: # target: aarch64-pc-windows-gnullvm # artifact_name: ${{ needs.setup.outputs.appname }}.exe # asset_name: ${{ needs.setup.outputs.appname }}-${{ needs.setup.outputs.tag }}_windows_amd64 - - os: ubuntu-latest - target: x86_64-pc-windows-gnu - artifact_name: ${{ needs.setup.outputs.appname }}.exe - asset_name: ${{ needs.setup.outputs.appname }}-${{ needs.setup.outputs.tag }}_windows_arm64 + # - os: ubuntu-latest + # target: x86_64-pc-windows-gnu + # artifact_name: ${{ needs.setup.outputs.appname }}.exe + # asset_name: ${{ needs.setup.outputs.appname }}-${{ needs.setup.outputs.tag }}_windows_arm64 - os: macos-latest target: aarch64-apple-darwin artifact_name: ${{ needs.setup.outputs.appname }} diff --git a/src/archiver.rs b/src/archiver.rs index ec5dbd8..c4fd42d 100644 --- a/src/archiver.rs +++ b/src/archiver.rs @@ -9,6 +9,7 @@ use crate::archiver::tar::{TarArchiver, TarGzArchiver, TarBz2Archiver}; use crate::verboser::{create_verboser, Verboser}; use crate::CliOpts; +mod optscreator; mod zip; mod rar; mod tar; diff --git a/src/archiver/optscreator.rs b/src/archiver/optscreator.rs new file mode 100644 index 0000000..9faa7a4 --- /dev/null +++ b/src/archiver/optscreator.rs @@ -0,0 +1,6 @@ +#[cfg(target_os = "windows")] +pub mod windows; + +#[cfg(any(target_os = "linux", target_os = "macos"))] +pub mod linux; + diff --git a/src/archiver/optscreator/linux.rs b/src/archiver/optscreator/linux.rs new file mode 100644 index 0000000..cdb0c9b --- /dev/null +++ b/src/archiver/optscreator/linux.rs @@ -0,0 +1,17 @@ +use std::os::unix::fs::PermissionsExt; +use std::path::PathBuf; + +use time::OffsetDateTime; +use zip::write::SimpleFileOptions; +use zip::DateTime; + +pub fn create(target: &PathBuf) -> SimpleFileOptions { + let metadata = std::fs::metadata(&target).unwrap(); + let mod_time = DateTime::try_from( + OffsetDateTime::from(metadata.modified().unwrap())); + + SimpleFileOptions::default() + .last_modified_time(mod_time.unwrap()) + .compression_method(zip::CompressionMethod::Stored) + .unix_permissions(metadata.permissions().mode()) +} \ No newline at end of file diff --git a/src/archiver/optscreator/windows.rs b/src/archiver/optscreator/windows.rs new file mode 100644 index 0000000..597e3c4 --- /dev/null +++ b/src/archiver/optscreator/windows.rs @@ -0,0 +1,9 @@ +pub fn create(target: &PathBuf) -> SimpleFileOptions { + let metadata = std::fs::metadata(&target).unwrap(); + let mod_time = DateTime::try_from( + OffsetDateTime::from(metadata.modified().unwrap())); + + SimpleFileOptions::default() + .last_modified_time(mod_time.unwrap()) + .compression_method(zip::CompressionMethod::Stored) +} diff --git a/src/archiver/zip.rs b/src/archiver/zip.rs index 680293b..56cd27c 100644 --- a/src/archiver/zip.rs +++ b/src/archiver/zip.rs @@ -1,12 +1,16 @@ -use std::os::unix::fs::PermissionsExt; -use std::path::PathBuf; +#[cfg(target_os = "windows")] +use optscreator::windows::*; + +#[cfg(any(target_os = "linux", target_os = "macos"))] +use optscreator::linux::*; + use std::fs::File; +use std::path::PathBuf; use std::io::{BufReader, Write, Seek}; -use time::OffsetDateTime; -use zip::write::SimpleFileOptions; -use zip::{ZipWriter, DateTime}; +use zip::ZipWriter; use crate::archiver::{Archiver, Format, ArchiverOpts}; +use crate::archiver::optscreator; use crate::cli::{ToatError, Result}; pub(super) struct ZipArchiver { @@ -43,13 +47,7 @@ fn process_dir (zw: &mut ZipWriter, target: PathBuf) -> Result< fn process_file (zw: &mut ZipWriter, target: PathBuf) -> Result<()> { let name = target.to_str().unwrap(); - let metadata = std::fs::metadata(&target).unwrap(); - let mod_time = DateTime::try_from( - OffsetDateTime::from(metadata.modified().unwrap())); - let opts = SimpleFileOptions::default() - .last_modified_time(mod_time.unwrap()) - .compression_method(zip::CompressionMethod::Stored) - .unix_permissions(metadata.permissions().mode()); + let opts = create(&target); if let Err(e) = zw.start_file(name, opts) { return Err(ToatError::ArchiverError(e.to_string())); }