/[fuse_dbi]/trunk/DBI.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/DBI.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 47 by dpavlin, Tue Nov 23 23:54:58 2004 UTC revision 53 by dpavlin, Sun Nov 28 20:20:36 2004 UTC
# Line 12  use DBI; Line 12  use DBI;
12  use Carp;  use Carp;
13  use Data::Dumper;  use Data::Dumper;
14    
   
15  our $VERSION = '0.07';  our $VERSION = '0.07';
16    
17    # block size for this filesystem
18    use constant BLOCK => 1024;
19    
20  =head1 NAME  =head1 NAME
21    
22  Fuse::DBI - mount your database as filesystem and use it  Fuse::DBI - mount your database as filesystem and use it
# Line 132  sub mount { Line 134  sub mount {
134    
135          print Dumper($arg);          print Dumper($arg);
136    
137            unless ($self->fuse_module_loaded) {
138                    print STDERR "no fuse module loaded. Trying sudo modprobe fuse!\n";
139                    system "sudo modprobe fuse" || die "can't modprobe fuse using sudo!\n";
140            }
141    
142          carp "mount needs 'dsn' to connect to (e.g. dsn => 'DBI:Pg:dbname=test')" unless ($arg->{'dsn'});          carp "mount needs 'dsn' to connect to (e.g. dsn => 'DBI:Pg:dbname=test')" unless ($arg->{'dsn'});
143          carp "mount needs 'mount' as mountpoint" unless ($arg->{'mount'});          carp "mount needs 'mount' as mountpoint" unless ($arg->{'mount'});
144    
# Line 242  sub umount { Line 249  sub umount {
249          my $self = shift;          my $self = shift;
250    
251          if ($self->{'mount'} && $self->is_mounted) {          if ($self->{'mount'} && $self->is_mounted) {
252                  system "fusermount -u ".$self->{'mount'}." 2>&1 >/dev/null" || return 0;                  system "( fusermount -u ".$self->{'mount'}." 2>&1 ) >/dev/null";
253                    if ($self->is_mounted) {
254                            system "sudo umount ".$self->{'mount'} ||
255                            return 0;
256                    }
257                  return 1;                  return 1;
258          }          }
259    
# Line 290  sub fuse_module_loaded { Line 301  sub fuse_module_loaded {
301  }  }
302    
303  my %files;  my %files;
 my %dirs;  
304    
305  sub read_filenames {  sub read_filenames {
306          my $self = shift;          my $self = shift;
# Line 330  sub read_filenames { Line 340  sub read_filenames {
340                          # first, entry is assumed to be file                          # first, entry is assumed to be file
341                          if ($d) {                          if ($d) {
342                                  $files{$d} = {                                  $files{$d} = {
                                                 size => $dirs{$d}++,  
343                                                  mode => 0755,                                                  mode => 0755,
344                                                  type => 0040                                                  type => 0040
345                                  };                                  };
# Line 348  sub read_filenames { Line 357  sub read_filenames {
357                  }                  }
358          }          }
359    
360          print "found ",scalar(keys %files)-scalar(keys %dirs)," files, ",scalar(keys %dirs), " dirs\n";          print "found ",scalar(keys %files)," files\n";
361  }  }
362    
363    
# Line 364  sub e_getattr { Line 373  sub e_getattr {
373          $file =~ s,^/,,;          $file =~ s,^/,,;
374          $file = '.' unless length($file);          $file = '.' unless length($file);
375          return -ENOENT() unless exists($files{$file});          return -ENOENT() unless exists($files{$file});
376          my ($size) = $files{$file}{size} || 1;          my ($size) = $files{$file}{size} || BLOCK;
377          my ($dev, $ino, $rdev, $blocks, $gid, $uid, $nlink, $blksize) = (0,0,0,1,0,0,1,1024);          my ($dev, $ino, $rdev, $blocks, $gid, $uid, $nlink, $blksize) = (0,0,0,int(($size+BLOCK-1)/BLOCK),0,0,1,BLOCK);
378          my ($atime, $ctime, $mtime);          my ($atime, $ctime, $mtime);
379          $atime = $ctime = $mtime = $files{$file}{ctime} || $ctime_start;          $atime = $ctime = $mtime = $files{$file}{ctime} || $ctime_start;
380    
# Line 373  sub e_getattr { Line 382  sub e_getattr {
382    
383          # 2 possible types of return values:          # 2 possible types of return values:
384          #return -ENOENT(); # or any other error you care to          #return -ENOENT(); # or any other error you care to
385          #print(join(",",($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)),"\n");          #print "getattr($file) ",join(",",($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)),"\n";
386          return ($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks);          return ($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks);
387  }  }
388    
# Line 538  sub e_utime { Line 547  sub e_utime {
547          return 0;          return 0;
548  }  }
549    
550  sub e_statfs { return 255, 1, 1, 1, 1, 2 }  sub e_statfs {
551    
552            my $size = 0;
553            my $inodes = 0;
554    
555            foreach my $f (keys %files) {
556                    if ($f !~ /(^|\/)\.\.?$/) {
557                            $size += $files{$f}{size} || 0;
558                            $inodes++;
559                    }
560                    print "$inodes: $f [$size]\n";
561            }
562    
563            $size = int(($size+BLOCK-1)/BLOCK);
564    
565            my @ret = (255, $inodes, 1, $size, $size-1, BLOCK);
566    
567            #print "statfs: ",join(",",@ret),"\n";
568    
569            return @ret;
570    }
571    
572  sub e_unlink {  sub e_unlink {
573          my $file = filename_fixup(shift);          my $file = filename_fixup(shift);
574    
575          if (exists( $dirs{$file} )) {  #       if (exists( $dirs{$file} )) {
576                  print "unlink '$file' will re-read template names\n";  #               print "unlink '$file' will re-read template names\n";
577                  print Dumper($fuse_self);  #               print Dumper($fuse_self);
578                  $$fuse_self->{'read_filenames'}->();  #               $$fuse_self->{'read_filenames'}->();
579                  return 0;  #               return 0;
580          } elsif (exists( $files{$file} )) {          if (exists( $files{$file} )) {
581                  print "unlink '$file' will invalidate cache\n";                  print "unlink '$file' will invalidate cache\n";
582                  read_content($file,$files{$file}{id});                  read_content($file,$files{$file}{id});
583                  return 0;                  return 0;

Legend:
Removed from v.47  
changed lines
  Added in v.53

  ViewVC Help
Powered by ViewVC 1.1.26