projects
/
dupemerge
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Replace progress reports with single-character markers
[dupemerge]
/
dm6
diff --git
a/dm6
b/dm6
index 35fda9cb6ff4ad093bbc968374256d6ea1bbdf21..a5d56a6545a59258d2742e7dcfcedd0a4be5d843 100755
(executable)
--- a/
dm6
+++ b/
dm6
@@
-48,19
+48,22
@@
USAGE
sub link_files {
my ($from, $to) = (@_);
sub link_files {
my ($from, $to) = (@_);
- print STDERR
"link '$from' '$to' ..."
;
+ print STDERR
'T'
;
my $inode_dir = $to;
my $inode_base = $to;
$inode_dir =~ s:[^/]*$::o;
$inode_base =~ s:^.*/::os;
my $tmp_to = File::Temp::tempnam($inode_dir, ".$inode_base.");
my $inode_dir = $to;
my $inode_base = $to;
$inode_dir =~ s:[^/]*$::o;
$inode_base =~ s:^.*/::os;
my $tmp_to = File::Temp::tempnam($inode_dir, ".$inode_base.");
+ print STDERR "\bL";
link($from, $tmp_to) or die "link: $from -> $tmp_to: $!";
link($from, $tmp_to) or die "link: $from -> $tmp_to: $!";
+ print STDERR "\bR";
unless (rename($tmp_to, $to)) {
my $saved_bang = $!;
unless (rename($tmp_to, $to)) {
my $saved_bang = $!;
+ print STDERR "\bU";
unlink($tmp_to) or warn "unlink: $tmp_to: $!"; # Try, possibly in vain, to clean up
die "rename: $tmp_to -> $from: $saved_bang";
}
unlink($tmp_to) or warn "unlink: $tmp_to: $!"; # Try, possibly in vain, to clean up
die "rename: $tmp_to -> $from: $saved_bang";
}
- print STDERR "\
n
";
+ print STDERR "\
b \b
";
}
my $link_dir = shift @ARGV;
}
my $link_dir = shift @ARGV;
@@
-79,7
+82,9
@@
sub prepare_parents {
my ($link_dir, $file) = @_;
my ($prefix, $suffix) = slash_prefix($file);
my $parent = "$link_dir/$prefix";
my ($link_dir, $file) = @_;
my ($prefix, $suffix) = slash_prefix($file);
my $parent = "$link_dir/$prefix";
- mkpath($parent, { verbose => 1 });
+ print STDERR 'm';
+ mkpath($parent, { verbose => 0 });
+ print STDERR "\b";
die "mkpath: $parent: $!" unless -d $parent;
return "$parent/$suffix";
}
die "mkpath: $parent: $!" unless -d $parent;
return "$parent/$suffix";
}
@@
-95,6
+100,7
@@
while (<STDIN>) {
chomp $file;
# Get file stat data
chomp $file;
# Get file stat data
+ print STDERR '.';
my $st = lstat($file);
die "lstat: $file: $!" unless $st;
my $st = lstat($file);
die "lstat: $file: $!" unless $st;
@@
-106,6
+112,7
@@
while (<STDIN>) {
# Check link to inode
my $inode_link = prepare_parents("$link_dir/inode", $st->ino);
# Check link to inode
my $inode_link = prepare_parents("$link_dir/inode", $st->ino);
+ print STDERR 'I';
my $inode_st = lstat($inode_link);
my $update_links;
if ($inode_st) {
my $inode_st = lstat($inode_link);
my $update_links;
if ($inode_st) {
@@
-121,26
+128,27
@@
while (<STDIN>) {
} else {
$update_links = 1;
}
} else {
$update_links = 1;
}
+ print STDERR "\b";
# If neither criteria for updating link is met, leave it as-is
next unless $update_links;
# Compute digest
# If neither criteria for updating link is met, leave it as-is
next unless $update_links;
# Compute digest
- print STDERR
"digest($file) = "
;
+ print STDERR
'd'
;
my $digest = digest($file);
my $digest = digest($file);
+ print STDERR "\b";
# Base64 uses /, we prefer _
$digest =~ y:/:_:;
# Base64 uses /, we prefer _
$digest =~ y:/:_:;
- print STDERR "$digest\n";
-
# Check link to digest
my $digest_link = prepare_parents("$link_dir/digest", $digest);
# Check link to digest
my $digest_link = prepare_parents("$link_dir/digest", $digest);
+ print STDERR 'D';
my $digest_st = lstat($digest_link);
if ($digest_st) {
my $digest_nlink = $digest_st->nlink;
if ($digest_nlink > 31990) {
my $digest_st = lstat($digest_link);
if ($digest_st) {
my $digest_nlink = $digest_st->nlink;
if ($digest_nlink > 31990) {
- print STDERR
"Removing '$digest_link' with $digest_nlink links\n"
;
+ print STDERR
'u'
;
unlink($digest_link) or die "unlink: $digest_link: $!";
undef $digest_st;
}
unlink($digest_link) or die "unlink: $digest_link: $!";
undef $digest_st;
}
@@
-148,11
+156,15
@@
while (<STDIN>) {
# If digest link exists, link it to file
if ($digest_st) {
# If digest link exists, link it to file
if ($digest_st) {
- print STDERR
"cmp '$digest_link' '$file' ..."
;
+ print STDERR
'c'
;
die "NOT identical!" if compare($digest_link, $file);
die "NOT identical!" if compare($digest_link, $file);
- print STDERR "\n";
+
+ # Old, replace input with old file
+ print STDERR '-';
link_files($digest_link, $file);
} else {
link_files($digest_link, $file);
} else {
+ # New, add input to digest
+ print STDERR '+';
link_files($file, $digest_link);
}
link_files($file, $digest_link);
}