Hello community,

here is the log from the commit of package fdupes for openSUSE:Factory checked 
in at 2014-12-29 00:29:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fdupes (Old)
 and      /work/SRC/openSUSE:Factory/.fdupes.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fdupes"

Changes:
--------
--- /work/SRC/openSUSE:Factory/fdupes/fdupes.changes    2014-12-10 
23:43:13.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.fdupes.new/fdupes.changes       2014-12-29 
00:29:42.000000000 +0100
@@ -1,0 +2,6 @@
+Sun Dec 21 19:58:41 UTC 2014 - bwiedem...@suse.com
+
+- add -L (--linkhard) option
+  add 50_bts284274_hardlinkreplace.dpatch
+
+-------------------------------------------------------------------

New:
----
  50_bts284274_hardlinkreplace.dpatch

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

Other differences:
------------------
++++++ fdupes.spec ++++++
--- /var/tmp/diff_new_pack.VHDc04/_old  2014-12-29 00:29:43.000000000 +0100
+++ /var/tmp/diff_new_pack.VHDc04/_new  2014-12-29 00:29:43.000000000 +0100
@@ -51,6 +51,8 @@
 Patch10:        0010-add-permissions-mode.patch
 #PATCH-FIX-OPENSUSE: -o/--order mode
 Patch11:        0011-add-an-option-to-sort-duplicate-files-by-name.patch
+#PATCH-FIX-DEBIAN: add -L/--linkhard
+Patch20:        50_bts284274_hardlinkreplace.dpatch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if 0%{?centos_version} || 0%{?rhel_version} || 0%{?fedora_version}
@@ -76,6 +78,7 @@
 %patch9 -p1
 %patch10 -p1
 %patch11 -p1
+%patch20 -p1
 
 %build
 echo -e "#!/bin/bash\n`which %__cc` \"\$@\"" >gcc

++++++ 50_bts284274_hardlinkreplace.dpatch ++++++
#! /bin/sh /usr/share/dpatch/dpatch-run
## 50_bts284274_hardlinkreplace.dpatch by  <j...@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Replace duplicate files with hardlinks

@DPATCH@
Index: fdupes-1.50-PR2/fdupes.c
===================================================================
--- fdupes-1.50-PR2.orig/fdupes.c
+++ fdupes-1.50-PR2/fdupes.c
@@ -54,6 +54,8 @@
 #define F_SUMMARIZEMATCHES  0x0800
 #define F_EXCLUDEHIDDEN     0x1000
 #define F_PERMISSIONS       0x2000
+#define F_HARDLINKFILES     0x4000
+#define F_DEBUGINFO         0x8000
 
 typedef enum {
   ORDER_TIME = 0,
@@ -904,6 +906,88 @@ void deletefiles(file_t *files, int prom
   free(preservestr);
 }
 
+void hardlinkfiles(file_t *files, int debug)
+{
+  int counter;
+  int groups = 0;
+  int curgroup = 0;
+  file_t *tmpfile;
+  file_t *curfile;
+  file_t **dupelist;
+  int max = 0;
+  int x = 0;
+
+  curfile = files;
+  
+  while (curfile) {
+    if (curfile->hasdupes) {
+      counter = 1;
+      groups++;
+
+      tmpfile = curfile->duplicates;
+      while (tmpfile) {
+       counter++;
+       tmpfile = tmpfile->duplicates;
+      }
+      
+      if (counter > max) max = counter;
+    }
+    
+    curfile = curfile->next;
+  }
+
+  max++;
+
+  dupelist = (file_t**) malloc(sizeof(file_t*) * max);
+
+  if (!dupelist) {
+    errormsg("out of memory\n");
+    exit(1);
+  }
+
+  while (files) {
+    if (files->hasdupes) {
+      curgroup++;
+      counter = 1;
+      dupelist[counter] = files;
+
+      if (debug) printf("[%d] %s\n", counter, files->d_name);
+
+      tmpfile = files->duplicates;
+
+      while (tmpfile) {
+       dupelist[++counter] = tmpfile;
+       if (debug) printf("[%d] %s\n", counter, tmpfile->d_name);
+       tmpfile = tmpfile->duplicates;
+      }
+
+      if (debug) printf("\n");
+
+      /* preserve only the first file */
+
+      printf("   [+] %s\n", dupelist[1]->d_name);
+      for (x = 2; x <= counter; x++) { 
+         if (unlink(dupelist[x]->d_name) == 0) {
+            if ( link(dupelist[1]->d_name, dupelist[x]->d_name) == 0 ) {
+                printf("   [h] %s\n", dupelist[x]->d_name);
+            } else {
+                printf("-- unable to create a hardlink for the file: %s\n", 
strerror(errno));
+                printf("   [!] %s ", dupelist[x]->d_name);
+            }
+         } else {
+           printf("   [!] %s ", dupelist[x]->d_name);
+           printf("-- unable to delete the file!\n");
+         }
+       }
+      printf("\n");
+    }
+    
+    files = files->next;
+  }
+
+  free(dupelist);
+}
+
 int sort_pairs_by_arrival(file_t *f1, file_t *f2)
 {
   if (f2->duplicates != 0)
@@ -1000,10 +1084,12 @@ void help_text()
   printf("                  \twith -s or --symlinks, or when specifying a\n");
   printf("                  \tparticular directory more than once; refer to 
the\n");
   printf("                  \tfdupes documentation for additional 
information\n");
-  //printf(" -l --relink      \t(description)\n");
+  printf(" -L --linkhard    \thardlink duplicate files to the first file 
in\n");
+  printf("                  \teach set of duplicates without prompting the 
user\n");
   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(" -D --debug       \tenable debugging information\n");
   printf(" -p --permissions \tdon't consider files with different owner/group 
or permission bits as duplicates\n");
   printf(" -o --order       \tselect sort order for output, linking and 
deleting. One of:\n");
   printf("    time          \torder by mtime (default)\n");
@@ -1044,12 +1130,14 @@ int main(int argc, char **argv) {
     { "symlinks", 0, 0, 's' },
     { "hardlinks", 0, 0, 'H' },
     { "relink", 0, 0, 'l' },
+    { "linkhard", 0, 0, 'L' },
     { "noempty", 0, 0, 'n' },
     { "nohidden", 0, 0, 'A' },
     { "delete", 0, 0, 'd' },
     { "version", 0, 0, 'v' },
     { "help", 0, 0, 'h' },
     { "noprompt", 0, 0, 'N' },
+    { "debug", 0, 0, 'D' },
     { "summarize", 0, 0, 'm'},
     { "summary", 0, 0, 'm' },
     { "permissions", 0, 0, 'p' },
@@ -1065,7 +1153,7 @@ int main(int argc, char **argv) {
 
   oldargv = cloneargs(argc, argv);
 
-  while ((opt = GETOPT(argc, argv, "frRq1SsHlndvhNmpo:"
+  while ((opt = GETOPT(argc, argv, "frRq1SsHlLndDvhNmpo:"
 #ifndef OMIT_GETOPT_LONG
           , long_options, NULL
 #endif
@@ -1104,6 +1192,12 @@ int main(int argc, char **argv) {
     case 'd':
       SETFLAG(flags, F_DELETEFILES);
       break;
+    case 'L':
+      SETFLAG(flags, F_HARDLINKFILES);
+      break;
+    case 'D':
+      SETFLAG(flags, F_DEBUGINFO);
+      break;
     case 'v':
       printf("fdupes %s\n", VERSION);
       exit(0);
@@ -1151,6 +1245,16 @@ int main(int argc, char **argv) {
     exit(1);
   }
 
+  if (ISFLAG(flags, F_HARDLINKFILES) && ISFLAG(flags, F_DELETEFILES)) {
+    errormsg("options --linkhard and --delete are not compatible\n");
+    exit(1);
+  }
+
+  if (ISFLAG(flags, F_HARDLINKFILES) && ISFLAG(flags, F_CONSIDERHARDLINKS)) {
+    errormsg("options --linkhard and --hardlinks are not compatible\n");
+    exit(1);
+  }
+
   if (ISFLAG(flags, F_RECURSEAFTER)) {
     firstrecurse = nonoptafter("--recurse:", argc, oldargv, argv, optind);
     
@@ -1237,12 +1341,23 @@ int main(int argc, char **argv) {
 
   else 
 
-    if (ISFLAG(flags, F_SUMMARIZEMATCHES))
-      summarizematches(files);
-      
-    else
+    if (ISFLAG(flags, F_HARDLINKFILES))
+
+        if (ISFLAG(flags, F_DEBUGINFO))
+            hardlinkfiles(files, 1);
+        else
+            hardlinkfiles(files, 0);
 
-      printmatches(files);
+    else {
+    
+        if (ISFLAG(flags, F_SUMMARIZEMATCHES))
+            summarizematches(files);
+
+        else
+
+            printmatches(files);
+
+    }
 
   while (files) {
     curfile = files->next;
Index: fdupes-1.50-PR2/fdupes.1
===================================================================
--- fdupes-1.50-PR2.orig/fdupes.1
+++ fdupes-1.50-PR2/fdupes.1
@@ -59,10 +59,17 @@ prompt user for files to preserve, delet
 .B CAVEATS
 below)
 .TP
+.B -L --hardlink
+replace all duplicate files with hardlinks to the
+first file in each set of duplicates
+.TP
 .B -N --noprompt
 when used together with \-\-delete, preserve the first file in each
 set of duplicates and delete the others without prompting the user 
 .TP
+.B -D --debug
+provide debugging information
+.TP
 .B -p --permissions
 don't consider files with different owner/group or permission bits as 
duplicates
 .TP
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to