diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e8373e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/remove_dir_all-0.3.0.crate diff --git a/0001-Make-API-the-same-on-all-platforms-simplify-Linux-co.patch b/0001-Make-API-the-same-on-all-platforms-simplify-Linux-co.patch new file mode 100644 index 0000000..66d31ac --- /dev/null +++ b/0001-Make-API-the-same-on-all-platforms-simplify-Linux-co.patch @@ -0,0 +1,58 @@ +From a52b3a1206ca8ff387e3931d6b35b7b194d11617 Mon Sep 17 00:00:00 2001 +From: Rolf Karp +Date: Sun, 19 Nov 2017 10:29:29 +0100 +Subject: [PATCH] Make API the same on all platforms, simplify Linux + compilation (#3) + +* Generalize API for Windows to make it the same for all platforms + +* Avoid compiling Windows dependencies on Linux, fix warning +--- + src/fs.rs | 5 +++-- + src/lib.rs | 2 ++ + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/fs.rs b/src/fs.rs +index b9eeaf1..852191a 100644 +--- a/src/fs.rs ++++ b/src/fs.rs +@@ -25,7 +25,7 @@ struct RmdirContext<'a> { + /// remove_dir_all("./temp/").unwrap(); + /// } + /// ``` +-pub fn remove_dir_all(path: &Path) -> io::Result<()> { ++pub fn remove_dir_all>(path: P) -> io::Result<()> { + // On Windows it is not enough to just recursively remove the contents of a + // directory and then the directory itself. Deleting does not happen + // instantaneously, but is scheduled. +@@ -69,6 +69,7 @@ pub fn remove_dir_all(path: &Path) -> io::Result<()> { + + // Open the path once to get the canonical path, file type and attributes. + let (path, metadata) = { ++ let path = path.as_ref(); + let mut opts = OpenOptions::new(); + opts.access_mode(FILE_READ_ATTRIBUTES); + opts.custom_flags(FILE_FLAG_BACKUP_SEMANTICS | +@@ -158,7 +159,7 @@ fn rename(file: &File, new: &Path, replace: bool) -> io::Result<()> { + unsafe { + // Thanks to alignment guarantees on Windows this works + // (8 for 32-bit and 16 for 64-bit) +- let mut info = data.as_mut_ptr() as *mut FILE_RENAME_INFO; ++ let info = data.as_mut_ptr() as *mut FILE_RENAME_INFO; + // The type of ReplaceIfExists is BOOL, but it actually expects a + // BOOLEAN. This means true is -1, not c::TRUE. + (*info).ReplaceIfExists = if replace { -1 } else { FALSE }; +diff --git a/src/lib.rs b/src/lib.rs +index 606fb39..67b0548 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -1,4 +1,6 @@ ++#[cfg(windows)] + extern crate winapi; ++#[cfg(windows)] + extern crate kernel32 as kernel; + + #[cfg(windows)] +-- +2.16.1 + diff --git a/remove_dir_all-0.3.0-fix-metadata.diff b/remove_dir_all-0.3.0-fix-metadata.diff new file mode 100644 index 0000000..c187e37 --- /dev/null +++ b/remove_dir_all-0.3.0-fix-metadata.diff @@ -0,0 +1,11 @@ +--- remove_dir_all-0.3.0/Cargo.toml 1970-01-01T01:00:00+01:00 ++++ remove_dir_all-0.3.0/Cargo.toml 2018-01-31T14:47:15.521765+01:00 +@@ -21,8 +21,3 @@ + categories = ["filesystem"] + license = "MIT/Apache-2.0" + repository = "https://github.com/Aaronepower/remove_dir_all.git" +-[dependencies.winapi] +-version = "0.2" +- +-[dependencies.kernel32-sys] +-version = "0.2" diff --git a/rust-remove_dir_all.spec b/rust-remove_dir_all.spec new file mode 100644 index 0000000..23ad0a2 --- /dev/null +++ b/rust-remove_dir_all.spec @@ -0,0 +1,59 @@ +# Generated by rust2rpm +%bcond_without check +%global debug_package %{nil} + +%global crate remove_dir_all + +Name: rust-%{crate} +Version: 0.3.0 +Release: 1%{?dist} +Summary: Safe, reliable implementation of remove_dir_all + +License: MIT or ASL 2.0 +URL: https://crates.io/crates/remove_dir_all +Source0: https://crates.io/api/v1/crates/%{crate}/%{version}/download#/%{crate}-%{version}.crate +# Initial patched metadata +# * No windows +Patch0: remove_dir_all-0.3.0-fix-metadata.diff +# https://github.com/Aaronepower/remove_dir_all/commit/a52b3a1206ca8ff387e3931d6b35b7b194d11617 +Patch0001: 0001-Make-API-the-same-on-all-platforms-simplify-Linux-co.patch + +ExclusiveArch: %{rust_arches} + +BuildRequires: rust-packaging + +%description +%{summary}. + +%package devel +Summary: %{summary} +BuildArch: noarch + +%description devel +A safe, reliable implementation of remove_dir_all for Windows. + +This package contains library source intended for building other packages +which use %{crate} from crates.io. + +%prep +%autosetup -n %{crate}-%{version} -p1 +%cargo_prep + +%build +%cargo_build + +%install +%cargo_install + +%if %{with check} +%check +%cargo_test +%endif + +%files devel +%license LICENCE-MIT LICENCE-APACHE +%{cargo_registry}/%{crate}-%{version}/ + +%changelog +* Wed Jan 31 2018 Igor Gnatenko - 0.3.0-1 +- Initial package diff --git a/sources b/sources new file mode 100644 index 0000000..afc9a37 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (remove_dir_all-0.3.0.crate) = e486ccf7016cb8298409f5a4cf71d0b15e3c660ba20df49a7bcb597ff01d93906131c74a9e71aca93b586ab04c054f750867bc1a26115451bdd16d0cc1af3c65