equal
deleted
inserted
replaced
2 |
2 |
3 use 5.010; |
3 use 5.010; |
4 use strict; |
4 use strict; |
5 use warnings; |
5 use warnings; |
6 use autodie qw(:all); |
6 use autodie qw(:all); |
7 |
7 use Getopt::Long; |
8 use Fuse; |
8 use Fuse; |
9 |
9 |
10 my $src = shift // die "need source directory\n"; |
10 my $opt_debug = 0; |
11 my $mp = shift // die "need mountpoint\n"; |
11 |
|
12 GetOptions("debug!" => \$opt_debug) |
|
13 and @ARGV == 2 |
|
14 or die "Bad Usage\n"; |
|
15 |
|
16 my $src = shift; |
|
17 my $mp = shift; |
12 |
18 |
13 $fs::DATA = "$src/data"; |
19 $fs::DATA = "$src/data"; |
14 $fs::IDX = "$src/idx"; |
20 $fs::IDX = "$src/idx"; |
15 |
21 |
16 Fuse::main(mountpoint => $mp, |
22 Fuse::main(mountpoint => $mp, |
17 debug => 0, |
23 debug => $opt_debug, |
18 getattr => "fs::getattr", |
24 getattr => "fs::getattr", |
19 getdir => "fs::getdir", |
25 getdir => "fs::getdir", |
20 open => "fs::openfile", |
26 open => "fs::openfile", |
21 read => "fs::readbuffer", |
27 read => "fs::readbuffer", |
22 write => "fs::writebuffer", |
28 write => "fs::writebuffer", |
32 our ($ROOT, $DATA, $IDX); |
38 our ($ROOT, $DATA, $IDX); |
33 my %FILE; |
39 my %FILE; |
34 my %CACHE; |
40 my %CACHE; |
35 |
41 |
36 sub getattr { |
42 sub getattr { |
37 my $path = $IDX . shift; |
43 my $path = $IDX . shift; |
38 return stat $path if $path eq "$IDX/"; |
44 return stat $path if -d $path; |
39 # rest are the idx |
45 # rest are the idx |
40 my @attr = stat $path or return -(ENOENT); |
46 my @attr = stat $path or return -(ENOENT); |
41 my %meta = _get_meta($path); |
47 my %meta = _get_meta($path); |
42 $attr[7] = $meta{devsize}; |
48 use Data::Dumper; |
43 $attr[9] = $meta{timestamp}; |
49 warn Dumper \%meta; |
44 $attr[2] &= ~0222; # r/o |
50 $attr[7] = $meta{devsize}; |
45 return @attr; |
51 $attr[9] = $meta{timestamp}; |
|
52 $attr[2] &= ~0222; # r/o |
|
53 warn Dumper \@attr; |
|
54 return @attr; |
46 } |
55 } |
47 |
56 |
48 sub getdir { |
57 sub getdir { |
49 my $path = $IDX . shift; |
58 my $path = $IDX . shift; |
50 opendir(my $dh, $path) or return 0; |
59 opendir(my $dh, $path) or return 0; |