Hello community,

here is the log from the commit of package fdupes for openSUSE:Factory checked 
in at 2012-10-27 13:22:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fdupes (Old)
 and      /work/SRC/openSUSE:Factory/.fdupes.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fdupes", Maintainer is "mvysko...@suse.com"

Changes:
--------
--- /work/SRC/openSUSE:Factory/fdupes/fdupes.changes    2012-03-28 
00:00:59.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.fdupes.new/fdupes.changes       2012-10-27 
13:22:49.000000000 +0200
@@ -1,0 +2,33 @@
+Tue Oct 16 11:44:08 UTC 2012 - mvysko...@suse.com
+
+- update to 1.5.0-PR2
+  * new "--summarize" option
+  * new  "--recurse:" selective recursion option
+  * new "--noprompt" option for totally automated deletion of
+  duplicate files.
+  * sorts duplicates (old to new) for consistent order when
+  listing or deleteing duplicate files.
+  * tests for early matching of files, which should help speed up
+  the matching process when large files are involved.
+  * warns whenever a file cannot be deleted.
+  * bugfixes (proper file closing, zero-length files, ...)
+- drop the fdupes-sort-output.diff (upstream uses mtime based)
+- rename and rebase fdupes-speedup.patch to 0008-speedup-the-compare.patch
+- rename and rebase fdupes-endianness.patch to
+  0009-glibc-endianness-check-in-md5.patch
+- add -p/--permissions switch so files with different permissions or uid/gid
+  are not considered as duplicates (bnc#784670)
+  * this mode is a default one for fdupes macro
+  0010-add-permissions-mode.patch
+- imported several fixes from Debian
+  * 0001-restore-pristine-code.patch - some common code fixes, partly obsoletes
+    speedup patch
+  * manual page fixes
+    0002-Added-to-escape-minus-signs-in-manpage-lintian-warni.patch
+    0003-Fix-a-typo-in-a-manpage-bts353789.patch
+    0005-add-summarize-to-manpage-bts481809.patch
+    0006-add-nohidden-support-bts511702.patch
+    0007-Disambiguate-the-options-recurse-and-recurse-bts5371.patch
+  * 0004-Large-file-support-for-2GB-files-bts447601.patch - large file support
+
+-------------------------------------------------------------------

Old:
----
  fdupes-1.40.tar.bz2
  fdupes-endianness.patch
  fdupes-sort-output.diff
  fdupes-speedup.patch
  fdupes.diff

New:
----
  0001-restore-pristine-code.patch
  0002-Added-to-escape-minus-signs-in-manpage-lintian-warni.patch
  0003-Fix-a-typo-in-a-manpage-bts353789.patch
  0004-Large-file-support-for-2GB-files-bts447601.patch
  0005-add-summarize-to-manpage-bts481809.patch
  0006-add-nohidden-support-bts511702.patch
  0007-Disambiguate-the-options-recurse-and-recurse-bts5371.patch
  0008-speedup-the-file-compare.patch
  0009-glibc-endianness-check-in-md5.patch
  0010-add-permissions-mode.patch
  fdupes-1.50-PR2.tar.gz
  fdupes-makefile.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fdupes.spec ++++++
--- /var/tmp/diff_new_pack.3HXKfm/_old  2012-10-27 13:22:51.000000000 +0200
+++ /var/tmp/diff_new_pack.3HXKfm/_new  2012-10-27 13:22:51.000000000 +0200
@@ -16,20 +16,40 @@
 #
 
 Name:           fdupes
-Url:            http://premium.caribe.net/~adrian2/fdupes.html
-Group:          Productivity/Archiving/Compression
+Version:        1.50
+Release:        0
 Summary:        Identifying or deleting duplicate files
-Version:        1.40
-Release:        111
+Url:            http://code.google.com/p/fdupes/
+Group:          Productivity/Archiving/Compression
 License:        MIT
-Source0:        %name-%{version}.tar.bz2
+Source0:        http://fdupes.googlecode.com/files/fdupes-1.50-PR2.tar.gz
 Source1:        macros.fdupes
-Patch0:         %name.diff
-Patch1:         fdupes-sort-output.diff
-#PATCH-FIX-OPENSUSE - bnc#406825
-Patch2:         fdupes-speedup.patch
-#PATCH-FIX-OPENSUSE - bnc#406825
-Patch3:         fdupes-endianness.patch
+#PATCH-FIX-SUSE: fix patch according distro's needs
+Patch0:         fdupes-makefile.patch
+# I'v imported all patches from Debian (Fedora and Gentoo has the subset only)
+# to git and added there as individual patches
+# TODO: export the git repo or upstream it
+#PATCH-FIX-DEBIAN: obsoletes partly the speedup patch
+Patch1:         0001-restore-pristine-code.patch
+#PATCH-FIX-DEBIAN: minor typo in man page
+Patch2:         0002-Added-to-escape-minus-signs-in-manpage-lintian-warni.patch
+#PATCH-FIX-DEBIAN: dtto
+Patch3:         0003-Fix-a-typo-in-a-manpage-bts353789.patch
+#PATCH-FIX-DEBIAN: support for large files
+Patch4:         0004-Large-file-support-for-2GB-files-bts447601.patch
+#PATCH-FIX-DEBIAN: manpage fix
+Patch5:         0005-add-summarize-to-manpage-bts481809.patch
+#PATCH-FIX-DEBIAN: dtto
+Patch6:         0006-add-nohidden-support-bts511702.patch
+#PATCH-FIX-DEBIAN: manpage fix
+Patch7:         0007-Disambiguate-the-options-recurse-and-recurse-bts5371.patch
+#PATCH-FIX-OPENSUSE: speedup the compare
+Patch8:         0008-speedup-the-file-compare.patch
+#PATCH-FIX-OPENSUSE: endianness check in md5.h
+Patch9:         0009-glibc-endianness-check-in-md5.patch
+#PATCH-FIX-OPENSUSE: -p/--permissions mode
+Patch10:        0010-add-permissions-mode.patch
+
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if 0%{?centos_version} || 0%{?rhel_version} || 0%{?fedora_version}
 BuildRequires:  which
@@ -40,11 +60,19 @@
 residing within specified directories
 
 %prep
-%setup -q
+%setup -q -n %name-%{version}-PR2
 %patch0
-%patch1
-%patch2 -p0 -b .speedup
-%patch3 -p1 -b .endianness
+
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
 
 %build
 echo -e "#!/bin/bash\n`which %__cc` \"\$@\"" >gcc
@@ -53,15 +81,15 @@
 make %{?_smp_mflags}
 
 %install
-install -D -m755 fdupes $RPM_BUILD_ROOT/usr/bin/fdupes
-install -D -m644 fdupes.1 $RPM_BUILD_ROOT/usr/share/man/man1/fdupes.1
-install -D -m644 %{SOURCE1} $RPM_BUILD_ROOT/etc/rpm/macros.fdupes
+install -D -m755 %{name} %{buildroot}%{_bindir}/%{name}
+install -D -m644 %{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1
+install -D -m644 %{SOURCE1} %{buildroot}%{_sysconfdir}/rpm/macros.%{name}
 
 %files
 %defattr(-, root, root)
 %doc CHANGES
-%{_prefix}/bin/fdupes
-%{_mandir}/*/*
-/etc/rpm
+%{_bindir}/%{name}
+%{_mandir}/man1/%{name}.1*
+%config %{_sysconfdir}/rpm/macros.%{name}
 
 %changelog

++++++ 0001-restore-pristine-code.patch ++++++
>From 1e8e84ee52397881558e083bcae4d243d319e811 Mon Sep 17 00:00:00 2001
From: Sandro Tosi <matrixh...@gmail.com>
Date: Fri, 12 Oct 2012 14:54:42 +0200
Subject: [PATCH 01/10] restore pristine code

speedup the file compare by reading larger buffers, comparing the
results of fread and so
---
 fdupes.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/fdupes.c b/fdupes.c
index 4b870b2..f16e4e0 100644
--- a/fdupes.c
+++ b/fdupes.c
@@ -492,7 +492,10 @@ file_t **checkmatch(filetree_t **root, filetree_t 
*checktree, file_t *file)
   else {
     if (checktree->file->crcpartial == NULL) {
       crcsignature = getcrcpartialsignature(checktree->file->d_name);
-      if (crcsignature == NULL) return NULL;
+      if (crcsignature == NULL) {
+        errormsg ("cannot read file %s\n", checktree->file->d_name);
+        return NULL;
+      }
 
       checktree->file->crcpartial = (char*) malloc(strlen(crcsignature)+1);
       if (checktree->file->crcpartial == NULL) {
@@ -504,7 +507,10 @@ file_t **checkmatch(filetree_t **root, filetree_t 
*checktree, file_t *file)
 
     if (file->crcpartial == NULL) {
       crcsignature = getcrcpartialsignature(file->d_name);
-      if (crcsignature == NULL) return NULL;
+      if (crcsignature == NULL) {
+        errormsg ("cannot read file %s\n", file->d_name);
+        return NULL;
+      }
 
       file->crcpartial = (char*) malloc(strlen(crcsignature)+1);
       if (file->crcpartial == NULL) {
@@ -577,8 +583,8 @@ file_t **checkmatch(filetree_t **root, filetree_t 
*checktree, file_t *file)
 
 int confirmmatch(FILE *file1, FILE *file2)
 {
-  unsigned char c1 = 0;
-  unsigned char c2 = 0;
+  unsigned char c1[CHUNK_SIZE];
+  unsigned char c2[CHUNK_SIZE];
   size_t r1;
   size_t r2;
   
@@ -586,14 +592,13 @@ int confirmmatch(FILE *file1, FILE *file2)
   fseek(file2, 0, SEEK_SET);
 
   do {
-    r1 = fread(&c1, sizeof(c1), 1, file1);
-    r2 = fread(&c2, sizeof(c2), 1, file2);
+    r1 = fread(c1, 1, sizeof(c1), file1);
+    r2 = fread(c2, 1, sizeof(c2), file2);
 
-    if (c1 != c2) return 0; /* file contents are different */
-  } while (r1 && r2);
+    if (r1 != r2) return 0; /* file lengths are different */
+    if (memcmp (c1, c2, r1)) return 0; /* file contents are different */
+  } while (r2);
   
-  if (r1 != r2) return 0; /* file lengths are different */
-
   return 1;
 }
 
-- 
1.7.11.5

++++++ 0002-Added-to-escape-minus-signs-in-manpage-lintian-warni.patch ++++++
>From 05157cf087829d18092c6906ac9a61b93f390059 Mon Sep 17 00:00:00 2001
From: Sandro Tosi <matrixh...@gmail.com>
Date: Fri, 12 Oct 2012 14:57:06 +0200
Subject: [PATCH 02/10] Added to escape minus signs in manpage (lintian
 warning)

---
 fdupes.1 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fdupes.1 b/fdupes.1
index 2102344..c0a02f0 100644
--- a/fdupes.1
+++ b/fdupes.1
@@ -53,7 +53,7 @@ prompt user for files to preserve, deleting all others (see
 below)
 .TP
 .B -N --noprompt
-when used together with --delete, preserve the first file in each
+when used together with \-\-delete, preserve the first file in each
 set of duplicates and delete the others without prompting the user 
 .TP
 .B -v --version
-- 
1.7.11.5

++++++ 0003-Fix-a-typo-in-a-manpage-bts353789.patch ++++++
>From 445205969c23e8c51e19456b3fcd1571b44c6e5c Mon Sep 17 00:00:00 2001
From: A Costa <agco...@gis.net>
Date: Fri, 12 Oct 2012 14:58:00 +0200
Subject: [PATCH 03/10] Fix a typo in a manpage (bts353789)

---
 fdupes.1 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fdupes.1 b/fdupes.1
index c0a02f0..71da2c4 100644
--- a/fdupes.1
+++ b/fdupes.1
@@ -84,7 +84,7 @@ If fdupes returns with an error message such as
 .B fdupes: error invoking md5sum
 it means the program has been compiled to use an external
 program to calculate MD5 signatures (otherwise, fdupes uses
-interal routines for this purpose), and an error has occurred
+internal routines for this purpose), and an error has occurred
 while attempting to execute it. If this is the case, the 
 specified program should be properly installed prior 
 to running fdupes.
-- 
1.7.11.5

++++++ 0004-Large-file-support-for-2GB-files-bts447601.patch ++++++
>From 9024d0c1bbbb323ae30b3b025705b076094e2c6c Mon Sep 17 00:00:00 2001
From: Andrew Vaughan <ajv-li...@netspace.net.au>
Date: Fri, 12 Oct 2012 15:00:30 +0200
Subject: [PATCH 04/10] Large file support for >2GB files (bts447601)

---
 Makefile | 2 +-
 fdupes.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 0c968a8..4d50924 100644
--- a/Makefile
+++ b/Makefile
@@ -74,7 +74,7 @@ MKDIR   = mkdir -p
 CC = gcc
 COMPILER_OPTIONS = -Wall -O -g
 
-CFLAGS= $(COMPILER_OPTIONS) -I. -DVERSION=\"$(VERSION)\" $(EXTERNAL_MD5) 
$(EXPERIMENTAL_RBTREE) $(OMIT_GETOPT_LONG)
+CFLAGS= $(COMPILER_OPTIONS) -I. -D_FILE_OFFSET_BITS=64 
-DVERSION=\"$(VERSION)\" $(EXTERNAL_MD5) $(EXPERIMENTAL_RBTREE) 
$(OMIT_GETOPT_LONG)
 
 INSTALL_PROGRAM = $(INSTALL) -c -m 0755
 INSTALL_DATA    = $(INSTALL) -c -m 0644
diff --git a/fdupes.c b/fdupes.c
index f16e4e0..4ecf51b 100644
--- a/fdupes.c
+++ b/fdupes.c
@@ -648,7 +648,7 @@ void printmatches(file_t *files)
   while (files != NULL) {
     if (files->hasdupes) {
       if (!ISFLAG(flags, F_OMITFIRST)) {
-       if (ISFLAG(flags, F_SHOWSIZE)) printf("%ld byte%seach:\n", files->size,
+       if (ISFLAG(flags, F_SHOWSIZE)) printf("%lld byte%seach:\n", files->size,
         (files->size != 1) ? "s " : " ");
        if (ISFLAG(flags, F_DSAMELINE)) escapefilename("\\ ", &files->d_name);
        printf("%s%c", files->d_name, ISFLAG(flags, F_DSAMELINE)?' ':'\n');
@@ -801,7 +801,7 @@ void deletefiles(file_t *files, int prompt)
       do {
        printf("Set %d of %d, preserve files [1 - %d, all]", 
           curgroup, groups, counter);
-       if (ISFLAG(flags, F_SHOWSIZE)) printf(" (%ld byte%seach)", files->size,
+       if (ISFLAG(flags, F_SHOWSIZE)) printf(" (%lld byte%seach)", files->size,
          (files->size != 1) ? "s " : " ");
        printf(": ");
        fflush(stdout);
-- 
1.7.11.5

++++++ 0005-add-summarize-to-manpage-bts481809.patch ++++++
>From 9b6800eb5bdcea2ceb0a2e44c4ea744c77656213 Mon Sep 17 00:00:00 2001
From: Sandro Tosi <matrixh...@gmail.com>
Date: Fri, 12 Oct 2012 15:01:35 +0200
Subject: [PATCH 05/10] add --summarize to manpage (bts481809)

---
 fdupes.1 | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fdupes.1 b/fdupes.1
index 71da2c4..f12945b 100644
--- a/fdupes.1
+++ b/fdupes.1
@@ -44,6 +44,9 @@ list each set of matches on a single line
 .B -S --size
 show size of duplicate files
 .TP
+.B -m --summarize
+summarize duplicate files information
+.TP
 .B -q --quiet
 hide progress indicator
 .TP
-- 
1.7.11.5

++++++ 0006-add-nohidden-support-bts511702.patch ++++++
>From 1e15ced9c10a04b6f4ae816ced687fd982760dbc Mon Sep 17 00:00:00 2001
From: maxy <m...@debian.org>
Date: Fri, 12 Oct 2012 15:02:49 +0200
Subject: [PATCH 06/10] add --nohidden support (bts511702)

---
 fdupes.1 |  3 +++
 fdupes.c | 21 ++++++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/fdupes.1 b/fdupes.1
index f12945b..5f7c526 100644
--- a/fdupes.1
+++ b/fdupes.1
@@ -38,6 +38,9 @@ exclude zero-length files from consideration
 .B -f --omitfirst
 omit the first file in each set of matches
 .TP
+.B -A --nohidden
+exclude hidden files from consideration
+.TP
 .B -1 --sameline
 list each set of matches on a single line
 .TP
diff --git a/fdupes.c b/fdupes.c
index 4ecf51b..fe540e6 100644
--- a/fdupes.c
+++ b/fdupes.c
@@ -31,6 +31,7 @@
 #endif
 #include <string.h>
 #include <errno.h>
+#include <libgen.h>
 
 #ifndef EXTERNAL_MD5
 #include "md5/md5.h"
@@ -51,6 +52,7 @@
 #define F_RECURSEAFTER      0x0200
 #define F_NOPROMPT          0x0400
 #define F_SUMMARIZEMATCHES  0x0800
+#define F_EXCLUDEHIDDEN     0x1000
 
 char *program_name;
 
@@ -240,6 +242,7 @@ int grokdir(char *dir, file_t **filelistp)
   struct stat linfo;
   static int progress = 0;
   static char indicator[] = "-\\|/";
+  char *fullname, *name;
 
   cd = opendir(dir);
 
@@ -285,6 +288,17 @@ int grokdir(char *dir, file_t **filelistp)
        strcat(newfile->d_name, "/");
       strcat(newfile->d_name, dirinfo->d_name);
       
+      if (ISFLAG(flags, F_EXCLUDEHIDDEN)) {
+       fullname = strdup(newfile->d_name);
+       name = basename(fullname);
+       if (name[0] == '.' && strcmp(name, ".") && strcmp(name, "..") ) {
+         free(newfile->d_name);
+         free(newfile);
+         continue;
+       }
+       free(fullname);
+      }
+
       if (filesize(newfile->d_name) == 0 && ISFLAG(flags, F_EXCLUDEEMPTY)) {
        free(newfile->d_name);
        free(newfile);
@@ -945,6 +959,7 @@ void help_text()
   printf("                  \tdisk area they are treated as non-duplicates; 
this\n"); 
   printf("                  \toption will change this behavior\n");
   printf(" -n --noempty     \texclude zero-length files from consideration\n");
+  printf(" -A --nohidden    \texclude hidden files from consideration\n");
   printf(" -f --omitfirst   \tomit the first file in each set of matches\n");
   printf(" -1 --sameline    \tlist each set of matches on a single line\n");
   printf(" -S --size        \tshow size of duplicate files\n");
@@ -996,6 +1011,7 @@ int main(int argc, char **argv) {
     { "hardlinks", 0, 0, 'H' },
     { "relink", 0, 0, 'l' },
     { "noempty", 0, 0, 'n' },
+    { "nohidden", 0, 0, 'A' },
     { "delete", 0, 0, 'd' },
     { "version", 0, 0, 'v' },
     { "help", 0, 0, 'h' },
@@ -1013,7 +1029,7 @@ int main(int argc, char **argv) {
 
   oldargv = cloneargs(argc, argv);
 
-  while ((opt = GETOPT(argc, argv, "frRq1Ss::HlndvhNm"
+  while ((opt = GETOPT(argc, argv, "frRq1Ss::HlnAdvhNm"
 #ifndef OMIT_GETOPT_LONG
           , long_options, NULL
 #endif
@@ -1046,6 +1062,9 @@ int main(int argc, char **argv) {
     case 'n':
       SETFLAG(flags, F_EXCLUDEEMPTY);
       break;
+    case 'A':
+      SETFLAG(flags, F_EXCLUDEHIDDEN);
+      break;
     case 'd':
       SETFLAG(flags, F_DELETEFILES);
       break;
-- 
1.7.11.5

++++++ 0007-Disambiguate-the-options-recurse-and-recurse-bts5371.patch ++++++
>From 299e999ba8ac1916797e4956ee774a46ef11851b Mon Sep 17 00:00:00 2001
From: Sandro Tosi <mo...@debian.org>
Date: Fri, 12 Oct 2012 15:06:16 +0200
Subject: [PATCH 07/10] Disambiguate the options '--recurse' and '--recurse:'
 (bts537138)

---
 fdupes.1 | 12 +++++++++++-
 fdupes.c |  3 ++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/fdupes.1 b/fdupes.1
index 5f7c526..9263adc 100644
--- a/fdupes.1
+++ b/fdupes.1
@@ -23,7 +23,8 @@ for every directory given follow subdirectories encountered 
within
 .TP
 .B -R --recurse:
 for each directory given after this option follow subdirectories
-encountered within
+encountered within (note the ':' at the end of option; see the
+Examples section below for further explanation)
 .TP
 .B -s --symlinks
 follow symlinked directories
@@ -85,6 +86,15 @@ or
 .B --sameline
 is specified, spaces and backslash characters  (\fB\e\fP) appearing
 in a filename are preceded by a backslash character.
+
+.SH EXAMPLES
+.TP
+.B fdupes a --recurse: b
+will follow subdirectories under b, but not those under a.
+.TP
+.B fdupes a --recurse b 
+will follow subdirectories under both a and b.
+
 .SH CAVEATS
 If fdupes returns with an error message such as
 .B fdupes: error invoking md5sum
diff --git a/fdupes.c b/fdupes.c
index fe540e6..1e9e620 100644
--- a/fdupes.c
+++ b/fdupes.c
@@ -953,7 +953,8 @@ void help_text()
   printf(" -r --recurse     \tfor every directory given follow 
subdirectories\n");
   printf("                  \tencountered within\n");
   printf(" -R --recurse:    \tfor each directory given after this option 
follow\n");
-  printf("                  \tsubdirectories encountered within\n");
+  printf("                  \tsubdirectories encountered within (note the ':' 
at\n");
+  printf("                  \tthe end of the option, manpage for more 
details)\n");
   printf(" -s --symlinks    \tfollow symlinks\n");
   printf(" -H --hardlinks   \tnormally, when two or more files point to the 
same\n");
   printf("                  \tdisk area they are treated as non-duplicates; 
this\n"); 
-- 
1.7.11.5

++++++ 0008-speedup-the-file-compare.patch ++++++
>From c2bd76bb103b3a5b873bee72fbacce6bbe58bbe2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bru...@rwth-aachen.de>
Date: Fri, 12 Oct 2012 15:20:53 +0200
Subject: [PATCH 08/10] speedup the file compare

Use aligned reads for md5 computation, saves another memcpy.

https://bugzilla.novell.com/show_bug.cgi?id=406825
---
 fdupes.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fdupes.c b/fdupes.c
index 1e9e620..678f31f 100644
--- a/fdupes.c
+++ b/fdupes.c
@@ -370,7 +370,7 @@ char *getcrcsignatureuntil(char *filename, off_t max_read)
   }
  
   while (fsize > 0) {
-    toread = (fsize % CHUNK_SIZE) ? (fsize % CHUNK_SIZE) : CHUNK_SIZE;
+    toread = (fsize >= CHUNK_SIZE) ? CHUNK_SIZE : fsize;
     if (fread(chunk, toread, 1, file) != 1) {
       errormsg("error reading from file %s\n", filename);
       fclose(file); // bugfix
@@ -606,8 +606,8 @@ int confirmmatch(FILE *file1, FILE *file2)
   fseek(file2, 0, SEEK_SET);
 
   do {
-    r1 = fread(c1, 1, sizeof(c1), file1);
-    r2 = fread(c2, 1, sizeof(c2), file2);
+    r1 = fread(c1, sizeof(unsigned char), sizeof(c1), file1);
+    r2 = fread(c2, sizeof(unsigned char), sizeof(c2), file2);
 
     if (r1 != r2) return 0; /* file lengths are different */
     if (memcmp (c1, c2, r1)) return 0; /* file contents are different */
-- 
1.7.11.5

++++++ 0009-glibc-endianness-check-in-md5.patch ++++++
>From 6b0f55c489ff78bd29d6d881fddf7abeabbed12f Mon Sep 17 00:00:00 2001
From: Michal Vyskocil <mvysko...@suse.cz>
Date: Fri, 12 Oct 2012 15:21:49 +0200
Subject: [PATCH 09/10] glibc endianness check in md5

https://bugzilla.novell.com/show_bug.cgi?id=406825
---
 md5/md5.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/md5/md5.c b/md5/md5.c
index 233ee2d..3ad899b 100644
--- a/md5/md5.c
+++ b/md5/md5.c
@@ -45,6 +45,15 @@
 #include "md5.h"
 #include <string.h>
 
+/* endianness check using glibc endian.h */
+#include <endian.h>
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define ARCH_IS_BIG_ENDIAN 1
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+# define ARCH_IS_BIG_ENDIAN 0
+#endif
+
 #ifdef TEST
 /*
  * Compile with -DTEST to create a self-contained executable test program.
-- 
1.7.11.5

++++++ 0010-add-permissions-mode.patch ++++++
>From 0cf7f38569e1c0ff65803342f63244f864d87141 Mon Sep 17 00:00:00 2001
From: Michal Vyskocil <mvysko...@suse.cz>
Date: Fri, 12 Oct 2012 15:24:16 +0200
Subject: [PATCH 10/10] add --permissions mode

With -p/--permissions mode enabled fdupes checks if the
uid/gid/secure-bits are same or not. In later case, files are not
considered as duplicates.

Requested-in: https://bugzilla.novell.com/show_bug.cgi?id=784670
---
 fdupes.1 |  3 +++
 fdupes.c | 25 ++++++++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/fdupes.1 b/fdupes.1
index 9263adc..e0516f1 100644
--- a/fdupes.1
+++ b/fdupes.1
@@ -63,6 +63,9 @@ below)
 when used together with \-\-delete, preserve the first file in each
 set of duplicates and delete the others without prompting the user 
 .TP
+.B -p --permissions
+don't consider files with different owner/group or permission bits as 
duplicates
+.TP
 .B -v --version
 display fdupes version
 .TP
diff --git a/fdupes.c b/fdupes.c
index 678f31f..b3275a9 100644
--- a/fdupes.c
+++ b/fdupes.c
@@ -53,6 +53,7 @@
 #define F_NOPROMPT          0x0400
 #define F_SUMMARIZEMATCHES  0x0800
 #define F_EXCLUDEHIDDEN     0x1000
+#define F_PERMISSIONS       0x2000
 
 char *program_name;
 
@@ -481,6 +482,19 @@ int registerfile(filetree_t **branch, file_t *file)
   return 1;
 }
 
+int same_permissions(char* name1, char* name2)
+{
+    struct stat s1, s2;
+
+    if (stat(name1, &s1) != 0) return -1;
+    if (stat(name2, &s2) != 0) return -1;
+
+    return (s1.st_mode == s2.st_mode &&
+            s1.st_uid == s2.st_uid &&
+            s1.st_gid == s2.st_gid);
+}
+
+
 file_t **checkmatch(filetree_t **root, filetree_t *checktree, file_t *file)
 {
   int cmpresult;
@@ -503,6 +517,10 @@ file_t **checkmatch(filetree_t **root, filetree_t 
*checktree, file_t *file)
     cmpresult = -1;
   else 
     if (fsize > checktree->file->size) cmpresult = 1;
+  else
+    if (ISFLAG(flags, F_PERMISSIONS) &&
+        !same_permissions(file->d_name, checktree->file->d_name))
+        cmpresult = -1;
   else {
     if (checktree->file->crcpartial == NULL) {
       crcsignature = getcrcpartialsignature(checktree->file->d_name);
@@ -976,6 +994,7 @@ void help_text()
   printf(" -N --noprompt    \ttogether with --delete, preserve the first file 
in\n");
   printf("                  \teach set of duplicates and delete the rest 
without\n");
   printf("                  \twithout prompting the user\n");
+  printf(" -p --permissions \tdon't consider files with different owner/group 
or permission bits as duplicates\n");
   printf(" -v --version     \tdisplay fdupes version\n");
   printf(" -h --help        \tdisplay this help message\n\n");
 #ifdef OMIT_GETOPT_LONG
@@ -1019,6 +1038,7 @@ int main(int argc, char **argv) {
     { "noprompt", 0, 0, 'N' },
     { "summarize", 0, 0, 'm'},
     { "summary", 0, 0, 'm' },
+    { "permissions", 0, 0, 'p' },
     { 0, 0, 0, 0 }
   };
 #define GETOPT getopt_long
@@ -1030,7 +1050,7 @@ int main(int argc, char **argv) {
 
   oldargv = cloneargs(argc, argv);
 
-  while ((opt = GETOPT(argc, argv, "frRq1Ss::HlnAdvhNm"
+  while ((opt = GETOPT(argc, argv, "frRq1Ss::HlnAdvhNmp"
 #ifndef OMIT_GETOPT_LONG
           , long_options, NULL
 #endif
@@ -1081,6 +1101,9 @@ int main(int argc, char **argv) {
     case 'm':
       SETFLAG(flags, F_SUMMARIZEMATCHES);
       break;
+    case 'p':
+      SETFLAG(flags, F_PERMISSIONS);
+      break;
 
     default:
       fprintf(stderr, "Try `fdupes --help' for more information.\n");
-- 
1.7.11.5

++++++ fdupes-makefile.patch ++++++
Index: Makefile
===================================================================
--- Makefile.orig       2002-05-31 09:31:45.000000000 +0200
+++ Makefile    2012-10-12 11:46:35.152408642 +0200
@@ -11,7 +11,7 @@
 # determination of the actual installation directories.
 # Suggested values are "/usr/local", "/usr", "/pkgs/fdupes-$(VERSION)"
 #
-PREFIX = /usr/local
+PREFIX = /usr
 
 #
 # Certain platforms do not support long options (command line options).
@@ -50,7 +50,7 @@
 # MAN_DIR indicates directory where the fdupes man page is to be 
 # installed. Suggested value is "$(PREFIX)/man/man1"
 #
-MAN_BASE_DIR = $(PREFIX)/man
+MAN_BASE_DIR = $(PREFIX)/share/man
 MAN_DIR = $(MAN_BASE_DIR)/man1
 MAN_EXT = 1
 
++++++ macros.fdupes ++++++
--- /var/tmp/diff_new_pack.3HXKfm/_old  2012-10-27 13:22:51.000000000 +0200
+++ /var/tmp/diff_new_pack.3HXKfm/_new  2012-10-27 13:22:51.000000000 +0200
@@ -3,7 +3,7 @@
  _target=""; \
  _symlinks=0; \
  %{-s:_symlinks=1;} \
- fdupes -q -n -r %1 | \
+ fdupes -q -p -n -r %1 | \
   while read _file; do \
     if test -z "$_target" ; then \
       _target="$_file"; \

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to