diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38a6b98 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/duperemove-0.11.tar.gz diff --git a/duperemove-use-system-xxhash.patch b/duperemove-use-system-xxhash.patch new file mode 100644 index 0000000..0298fa3 --- /dev/null +++ b/duperemove-use-system-xxhash.patch @@ -0,0 +1,77 @@ +diff -urb duperemove-0.11a/csum-xxhash.c duperemove-0.11b/csum-xxhash.c +--- duperemove-0.11a/csum-xxhash.c 2018-05-15 20:47:26.000000000 +0100 ++++ duperemove-0.11b/csum-xxhash.c 2018-09-10 11:11:17.768921930 +0100 +@@ -43,7 +43,7 @@ + } + + struct xxhash_running_checksum { +- XXH64_state_t td64; ++ XXH64_state_t *td64; + }; + DECLARE_RUNNING_CSUM_CAST_FUNCS(xxhash_running_checksum); + +@@ -51,7 +51,8 @@ + { + struct xxhash_running_checksum *c = + calloc(1, sizeof(struct xxhash_running_checksum)); +- XXH64_reset(&c->td64, 0); ++ c->td64 = XXH64_createState(); ++ XXH64_reset(c->td64, 0); + return priv_to_rc(c); + } + +@@ -59,7 +60,7 @@ + unsigned int len, unsigned char *buf) + { + struct xxhash_running_checksum *c = rc_to_priv(_c); +- XXH64_update(&c->td64, buf, len); ++ XXH64_update(c->td64, buf, len); + } + + static void xxhash_finish_running_checksum(struct running_checksum *_c, +@@ -68,7 +69,8 @@ + struct xxhash_running_checksum *c = rc_to_priv(_c); + unsigned long long *hash = (unsigned long long*)digest; + +- *hash = XXH64_digest(&c->td64); ++ *hash = XXH64_digest(c->td64); ++ XXH64_freeState(c->td64); + free(c); + } + +diff -urb duperemove-0.11a/Makefile duperemove-0.11b/Makefile +--- duperemove-0.11a/Makefile 2018-05-15 20:47:26.000000000 +0100 ++++ duperemove-0.11b/Makefile 2018-09-10 11:09:11.808519081 +0100 +@@ -8,13 +8,13 @@ + + HEADERS=csum.h hash-tree.h results-tree.h kernel.h list.h rbtree.h dedupe.h \ + btrfs-ioctl.h filerec.h btrfs-util.h debug.h util.h \ +- memstats.h file_scan.h find_dupes.h run_dedupe.h xxhash.h \ ++ memstats.h file_scan.h find_dupes.h run_dedupe.h \ + bswap.h dbfile.h interval_tree.h interval_tree_generic.h \ + rbtree_augmented.h list_sort.h stats.h + CFILES=duperemove.c hash-tree.c results-tree.c rbtree.c dedupe.c filerec.c \ + btrfs-util.c util.c memstats.c file_scan.c find_dupes.c run_dedupe.c \ + csum.c dbfile.c interval_tree.c list_sort.c stats.c debug.c +-hash_CFILES=csum-xxhash.c xxhash.c csum-murmur3.c ++hash_CFILES=csum-xxhash.c csum-murmur3.c + + CFILES += $(hash_CFILES) + +@@ -24,7 +24,7 @@ + + DIST_CFILES:=$(CFILES) $(hashstats_CFILES) $(btrfs_extent_same_CFILES) \ + $(csum_test_CFILES) +-DIST_SOURCES:=$(DIST_CFILES) $(HEADERS) LICENSE LICENSE.xxhash Makefile \ ++DIST_SOURCES:=$(DIST_CFILES) $(HEADERS) LICENSE Makefile \ + rbtree.txt README.md $(MANPAGES) SubmittingPatches docs/duperemove.html + DIST=duperemove-$(VER) + DIST_TARBALL=$(RELEASE).tar.gz +@@ -45,6 +45,7 @@ + glib_LIBS=$(shell pkg-config --libs glib-2.0) + sqlite_CFLAGS=$(shell pkg-config --cflags sqlite3) + sqlite_LIBS=$(shell pkg-config --libs sqlite3) ++hash_LIBS=-lxxhash + + ifdef DEBUG + DEBUG_FLAGS = -ggdb3 -fsanitize=address -fno-omit-frame-pointer \ diff --git a/duperemove.spec b/duperemove.spec new file mode 100644 index 0000000..3b9ea70 --- /dev/null +++ b/duperemove.spec @@ -0,0 +1,65 @@ +Name: duperemove +Version: 0.11 +Release: 2%{?dist} +Summary: Tools for deduping file systems +License: GPLv2 +URL: https://github.com/markfasheh/%{name} +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Patch1: duperemove-use-system-xxhash.patch +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(sqlite3) +BuildRequires: libgcrypt-devel +BuildRequires: xxhash-devel +BuildRequires: libatomic +BuildRequires: gcc + +%description +Duperemove is a simple tool for finding duplicated extents and +submitting them for deduplication. When given a list of files it will +hash their contents on a block by block basis and compare those hashes +to each other, finding and categorizing extents that match each other. + +When given the -d option, duperemove will submit those extents for +deduplication using the btrfs-extent-same ioctl. + +%prep +%autosetup +rm -f xxhash.c xxhash.h + +%build +%set_build_flags +%make_build + +%install +%make_install SBINDIR=%{_sbindir} MANDIR=%{_mandir} + +%files +%doc README.md +%license LICENSE +%{_mandir}/man8/btrfs-extent-same*.8* +%{_mandir}/man8/duperemove*.8* +%{_mandir}/man8/hashstats*.8* +%{_mandir}/man8/show-shared-extents*.8* +%{_sbindir}/btrfs-extent-same +%{_sbindir}/duperemove +%{_sbindir}/hashstats +%{_sbindir}/show-shared-extents + +%changelog +* Fri Oct 19 2018 Jonathan Dieter - 0.11-2 +- Add missing BR +- Fix build to use build flags + +* Sat Oct 13 2018 Jonathan Dieter - 0.11-1 +- Bump to 0.11 +- Unbundle xxhash + +* Fri Nov 13 2015 Francesco Frassinelli - 0.10-1 +- Version bump; license and minor packaging issues fixed + +* Thu Jul 30 2015 Francesco Frassinelli - 0.09.5-2 +- %%license macro added + +* Sun Jul 19 2015 Francesco Frassinelli - 0.09.5-1 +- Initial build + diff --git a/sources b/sources new file mode 100644 index 0000000..8166c05 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (duperemove-0.11.tar.gz) = b1bc2beb92223f9b46f8838e2f983ec763a9dff302f4202a34cc5e10591b985519f0464b6eba566c56872e671ba80583c7fdf4a232325086141d011384a286cf