tags 882872 patch
thanks

Greetings!

Thanks for maintaining moreutils! It's one of the packages I love most
in Debian!

I'm attaching a first stab a patch to add copying file support to
vidir (i.e., #882872) which is something I've wanted for a very long
time and just broke down and did today.

It's been quite a while since I've written Perl and I'm not 100% sure
that I've thought the logic through completely so as to avoid all
possible corner cases (e.g., related to every way one would swap
filenames and/or copy things repeatedly).

The way it works is much simpler than the model suggested in #568834,
(which, BTW, sounds very nice): If a line number shows up twice in the
vidir output—and if the two filenames associated with the lines
numbers—are different, the file gets copied. That's it. :)

Regards,
Mako


-- 
Benjamin Mako Hill
https://mako.cc/
--- /home/mako/bin/vidir	2021-04-02 16:48:20.646390946 -0700
+++ /usr/bin/vidir	2019-08-18 06:27:38.000000000 -0700
@@ -81,7 +81,6 @@
 use File::Path qw(make_path);
 use File::Spec;
 use File::Temp;
-use File::Copy;
 use Getopt::Long;
 
 my $error=0;
@@ -144,7 +143,6 @@
 	die "@editor exited nonzero, aborting\n";
 }
 
-my %finished_item;
 open (IN, $tmp->filename) || die "$0: cannot read ".$tmp->filename.": $!\n";
 while (<IN>) {
 	chomp;
@@ -152,24 +150,7 @@
 		my $num=int($1);
 		my $name=$2;
 		if (! exists $item{$num}) {
-			# copy files if a dupliate of a number we've already seen before
-			if (exists $finished_item{$num}) {
-				if ($name eq $finished_item{$num}) {
-					print STDERR "$0: cannot copy because source ($finished_item{$num}) and destination ($name) are the same\n";
-					delete $item{$num};
-				} elsif (-e $name || -l $name) {
-					print STDERR "$0: cannot copy because destination ($name) already exists\n";
-					delete $item{$num};
-				} elsif (! (-e $finished_item{$num} || -l $finished_item{$num})) {
-					print STDERR "$0: cannot copy because $finished_item{$num} does not exist\n";
-					delete $item{$num};
-				} elsif (! copy($finished_item{$num}, $name)) {
-					print STDERR "$0: failed to copy $finished_item{$num} to $name: $!\n";
-					$error=1;
-				}
-			} else {
-				die "$0: unknown item number $num\n";
-			}
+			die "$0: unknown item number $num\n";
 		}
 		elsif ($name ne $item{$num}) {
 			next unless length $name;
@@ -225,7 +206,6 @@
 				}
 			}
 		}
-		$finished_item{$num} = $name;
 		delete $item{$num};
 	}
 	elsif (/^\s*$/) {

Attachment: signature.asc
Description: PGP signature

Reply via email to