aboutsummaryrefslogtreecommitdiffstats
path: root/lib/LXRng/Repo/Plain/Directory.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/LXRng/Repo/Plain/Directory.pm')
-rw-r--r--lib/LXRng/Repo/Plain/Directory.pm45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/LXRng/Repo/Plain/Directory.pm b/lib/LXRng/Repo/Plain/Directory.pm
new file mode 100644
index 0000000..8d7e701
--- /dev/null
+++ b/lib/LXRng/Repo/Plain/Directory.pm
@@ -0,0 +1,45 @@
+package LXRng::Repo::Plain::Directory;
+
+use strict;
+
+use base qw(LXRng::Repo::Directory);
+
+sub new {
+ my ($class, $name, $path, $stat) = @_;
+
+ $name =~ s,(.)/*$,$1/,;
+ $path =~ s,/*$,/,;
+ return bless({name => $name, path => $path, stat => $stat}, $class);
+}
+
+sub time {
+ my ($self) = @_;
+
+ return $$self{'stat'}[9];
+}
+
+sub size {
+ my ($self) = @_;
+
+ return '';
+}
+
+sub contents {
+ my ($self) = @_;
+
+ my (@dirs, @files);
+ my ($dir, $node);
+ opendir($dir, $$self{'path'}) or die("Can't open ".$$self{'path'}.": $!");
+ while (defined($node = readdir($dir))) {
+ next if $node =~ /^\.|~$|\.orig$/;
+ next if $node eq 'CVS';
+
+ push(@files, LXRng::Repo::Plain::File->new($$self{'name'}.$node,
+ $$self{'path'}.$node));
+ }
+ closedir($dir);
+
+ return sort { ref($a) cmp ref($b) || $$a{'name'} cmp $$b{'name'} } @files;
+}
+
+1;