commit 5731b0ab242ae2a798fa9b0380d76f7fa7b9c927
parent a964a391d65fce7963a55c9964bbbe6a5520a2ff
Author: lumidify <nobody@lumidify.org>
Date:   Mon, 23 Mar 2020 15:56:26 +0100
Cleanup; switch to using system mv command
Diffstat:
| M | lumia.pl |  |  | 46 | +++++++++++++--------------------------------- | 
1 file changed, 13 insertions(+), 33 deletions(-)
diff --git a/lumia.pl b/lumia.pl
@@ -6,7 +6,6 @@
 # FIXME: handle rm, etc. on .lumidify* files
 # FIXME: ignore all except for a certain file/folder
 # FIXME: store modified date and checksum filed with changed date
-# FIXME: sha256 works with leading zeroes, maybe switch?
 # FIXME: allow different hash types
 # FIXME: don't write anything if cksum fails (will create malformed line)
 # FIXME: add option to just check dir structure or maybe check if everything exists
@@ -14,16 +13,10 @@
 
 use strict;
 use warnings;
-use File::Spec::Functions qw(catfile catdir splitpath splitdir abs2rel);
+use File::Spec::Functions qw(catfile abs2rel);
 use File::Basename qw(basename dirname);
-use File::Copy qw(move copy);
-use File::Path qw(remove_tree make_path);
+use File::Path qw(remove_tree);
 use String::ShellQuote;
-use Cwd qw(realpath);
-use POSIX qw(SIGINT);
-use Data::Dumper;
-use Scalar::Util qw(looks_like_number);
-use Getopt::Long;
 
 # the file used to store checksums for files
 my $CKSUM_FILE = ".lumidify_archive_cksums";
@@ -512,6 +505,7 @@ sub sort_by_dir {
 	return \%sorted_files;
 }
 
+# FIXME: handle different cases like move_files
 # copies the $src files to $dst and updates the checksums in $dst
 # $src: list of source paths
 # $dst: destination directory or file (in latter case only one src is allowed)
@@ -560,14 +554,7 @@ sub copy_files {
 	write_cksums $dst_dir, $dst_cksums, $files_touched, $dirs_touched;
 }
 
-# return whether the two paths are the same
-sub cmp_path {
-	my ($src, $dst) = @_;
-	my $src_real = realpath $src;
-	return defined $src_real && $src_real eq realpath $dst;
-}
-
-# move a file from $src to $dst, prompting for confirmation if $dst already exists
+# move a file (or directory) from $src to $dst, prompting for confirmation if $dst already exists;
 # automatically appends the basename of $src to $dst if $dst is a directory
 sub move_file {
 	my ($src, $dst) = @_;
@@ -575,15 +562,15 @@ sub move_file {
 		$dst .= "/" . basename($src);
 	}
 	if (-e $dst) {
-		warn "WARNING: \"$dst\" exists already. Do you want to replace it?";
+		print STDERR "WARNING: \"$dst\" exists already. Do you want to replace it? (y/n) ";
 		my $choice = <STDIN>;
 		chomp $choice;
 		if ($choice ne "y" && $choice ne "Y") {
-			return "Not moving \"$src\" to \"$dst\".";
+			warn "Not moving \"$src\" to \"$dst\"\n";
+			return 1;
 		}
 	}
-	move($src, $dst) or return "ERROR: can't move \"$src\" to \"$dst\": $!";
-	return 0;
+	return system("mv", $src, $dst);
 }
 
 # move all files/directories in $src_files from $src_dir to $dst_dir ($src_files
@@ -597,10 +584,6 @@ sub move_from_same_dir {
 	my $dirs_touched = 0;
 	foreach my $src_file (@$src_files) {
 		my $fullpath = "$src_dir/$src_file";
-		if (cmp_path($fullpath, $dst_dir)) {
-			warn "ERROR: can't move \"$fullpath\" into \"$dst_dir\" (same dir)\n";
-			next;
-		}
 		my $tmp_dirs_touched = 0;
 		my $tmp_files_touched = 0;
 		if (-d $fullpath) {
@@ -608,10 +591,9 @@ sub move_from_same_dir {
 		} else {
 			$tmp_files_touched = 1;
 		}
-		if (my $err = move_file($fullpath, $dst_dir)) {
-			warn "$err\n";
-			next;
-		}
+
+		next if move_file($fullpath, $dst_dir);
+
 		# need to be able to check if the path is a directory
 		# before actually moving it
 		$dirs_touched ||= $tmp_dirs_touched;
@@ -648,10 +630,8 @@ sub move_rename {
 		return if !defined $dst_cksums;
 	}
 
-	if (my $err = move_file($src, $dst)) {
-		warn  "$err\n";
-		return;
-	}
+	return if move_file($src, $dst);
+
 	my $files_touched = 0;
 	my $dirs_touched = 0;
 	if (-d $src) {