projects
/
dupemerge
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b369878
)
dm6: use Base64 encoding for inode numbers
author
Zygo Blaxell
<zblaxell@faye.furryterror.org>
Fri, 14 May 2010 16:39:36 +0000
(12:39 -0400)
committer
Zygo Blaxell
<zblaxell@faye.furryterror.org>
Fri, 14 May 2010 16:43:38 +0000
(12:43 -0400)
dm6
patch
|
blob
|
history
diff --git
a/dm6
b/dm6
index 44dcb9130318e4cad1c007a672f98fd5e6d88303..a25804b7ab927328fe8935b8a3c8795c2f4c4195 100755
(executable)
--- a/
dm6
+++ b/
dm6
@@
-7,6
+7,7
@@
use File::Compare;
use File::Path;
use File::Temp;
use File::stat;
use File::Path;
use File::Temp;
use File::stat;
+use MIME::Base64;
# Copyright (C) 2010 Zygo Blaxell <dm5@mailtoo.hungrycats.org>
# Copyright (C) 2010 Zygo Blaxell <dm5@mailtoo.hungrycats.org>
@@
-103,6
+104,22
@@
sub prepare_parents {
return "$parent/$suffix";
}
return "$parent/$suffix";
}
+sub name_quad {
+ my ($int64) = @_;
+ my $packed = pack('Q', $int64);
+ $packed =~ s/^\0+//os;
+ my $base64_packed = encode_base64($packed, '');
+ # Don't strip off the trailing padding since it makes the string
+ # so short we end up just putting it back on again.
+ # $base64_packed =~ s/=+$//os;
+ return $base64_packed;
+}
+
+sub name_ino {
+ my ($ino) = @_;
+ return name_quad($ino) . 'I';
+}
+
# ext3 cannot handle more than 32000 links to a file. Leave some headroom.
# Arguably this should be configurable, but the losses are miniscule and
# the coding for option support is not.
# ext3 cannot handle more than 32000 links to a file. Leave some headroom.
# Arguably this should be configurable, but the losses are miniscule and
# the coding for option support is not.
@@
-127,7
+144,7
@@
while (<STDIN>) {
next if ($st->nlink > $link_count_max);
# Check link to inode
next if ($st->nlink > $link_count_max);
# Check link to inode
- my $inode_link = prepare_parents($link_dir,
$st->ino . 'I'
);
+ my $inode_link = prepare_parents($link_dir,
name_ino($st->ino)
);
print STDERR 'I';
my $inode_st = lstat($inode_link);
my $update_links;
print STDERR 'I';
my $inode_st = lstat($inode_link);
my $update_links;
@@
-191,7
+208,7
@@
while (<STDIN>) {
}
# A link to the inode indicates we are done, so do it last
}
# A link to the inode indicates we are done, so do it last
- $inode_link = prepare_parents($link_dir,
"${keep_ino}I"
);
+ $inode_link = prepare_parents($link_dir,
name_ino($keep_ino)
);
print STDERR ' ';
link_files($digest_link, $inode_link);
print STDERR ' ';
link_files($digest_link, $inode_link);