M: Pass directory and basename to callback functions.

This commit is contained in:
Jens Luedicke
2013-03-10 19:32:42 +01:00
parent dcd092f5aa
commit 395907e53b
3 changed files with 36 additions and 16 deletions

View File

@@ -128,7 +128,6 @@ sub entryList {
sub walk { sub walk {
my ($self,$path) = @_; my ($self,$path) = @_;
my $currentDir = dirname($path); my $currentDir = dirname($path);
my $currentBasename = basename($path); my $currentBasename = basename($path);
my $currentPath = $path; my $currentPath = $path;
@@ -137,13 +136,13 @@ sub walk {
$self->{currentBasename} = $currentBasename; $self->{currentBasename} = $currentBasename;
$self->{currentPath} = $path; $self->{currentPath} = $path;
if ((my $r = $self->{onBeginWalk}->($path)) != SUCCESS) { if ((my $r = $self->{onBeginWalk}->($path,$currentDir,$currentBasename)) != SUCCESS) {
return $r; return $r;
} }
if (-l $path) { if (-l $path) {
if ((my $r = $self->{onLink}->($path)) != SUCCESS) { if ((my $r = $self->{onLink}->($path,$currentDir,$currentBasename)) != SUCCESS) {
return $r; return $r;
} }
@@ -158,7 +157,7 @@ sub walk {
$self->{count} = scalar @{$self->{entryList}}; $self->{count} = scalar @{$self->{entryList}};
++$self->{currentDepth}; ++$self->{currentDepth};
if ((my $r = $self->{onDirEnter}->($path)) != SUCCESS) { if ((my $r = $self->{onDirEnter}->($path,$currentDir,$currentBasename)) != SUCCESS) {
return $r; return $r;
} }
@@ -183,12 +182,12 @@ sub walk {
$self->{currentBasename} = $currentBasename; $self->{currentBasename} = $currentBasename;
$self->{currentPath} = $path; $self->{currentPath} = $path;
if ((my $r = $self->{onDirLeave}->($path)) != SUCCESS) { if ((my $r = $self->{onDirLeave}->($path,$currentDir,$currentBasename)) != SUCCESS) {
return $r; return $r;
} }
--$self->{currentDepth}; --$self->{currentDepth};
} else { } else {
if ((my $r = $self->{onFile}->($path)) != SUCCESS) { if ((my $r = $self->{onFile}->($path,$currentDir,$currentBasename)) != SUCCESS) {
return $r; return $r;
} }
} }

9
t/2.t
View File

@@ -14,11 +14,16 @@ foreach my $f qw(1.t 2.t 3.t 4.t) {
$dw->setDepth(1); $dw->setDepth(1);
$dw->onFile(sub { $dw->onFile(sub {
my ($path) = @_; my ($path,$dir,$basename) = @_;
ok(-e $path); ok(-e $path);
ok(-f $path); ok(-f $path);
ok(-d $dir);
is($dir, "t");
is($dw->currentDir(), "t");
is($dw->currentDir(), $dir);
is($dw->currentBasename(), $basename);
if ($dw->currentBasename() eq $f) { if (($dw->currentBasename() eq $f) and ($basename eq $f)) {
return 42; return 42;
} }

32
t/4.t
View File

@@ -18,10 +18,12 @@ foreach my $subdir (qw(dir1 dir2 dir3 dir4 dir5)) {
$dw = new File::DirWalk(); $dw = new File::DirWalk();
$dw->onBeginWalk(sub { $dw->onBeginWalk(sub {
my ($path) = @_; my ($path,$dir,$basename) = @_;
ok(-e $path); ok(-e $path);
is($dw->currentDir(), $dir);
is($dw->currentBasename(), $basename);
if ($dw->currentBasename() eq $subdir) { if (($dw->currentBasename() eq $subdir) and ($basename eq $subdir)) {
return 42; return 42;
} }
@@ -31,11 +33,14 @@ foreach my $subdir (qw(dir1 dir2 dir3 dir4 dir5)) {
$dw = new File::DirWalk(); $dw = new File::DirWalk();
$dw->onDirEnter(sub { $dw->onDirEnter(sub {
my ($path) = @_; my ($path,$dir,$basename) = @_;
ok(-e $path); ok(-e $path);
ok(-d $path); ok(-d $path);
ok(-d $dir);
is($dw->currentDir(), $dir);
is($dw->currentBasename(), $basename);
if ($dw->currentBasename() eq $subdir) { if (($dw->currentBasename() eq $subdir) and ($basename eq $subdir)) {
is( $dw->count(), 10 ); is( $dw->count(), 10 );
is( $dw->currentDepth(), 2 ); is( $dw->currentDepth(), 2 );
return 42; return 42;
@@ -47,11 +52,14 @@ foreach my $subdir (qw(dir1 dir2 dir3 dir4 dir5)) {
$dw = new File::DirWalk(); $dw = new File::DirWalk();
$dw->onDirLeave(sub { $dw->onDirLeave(sub {
my ($path) = @_; my ($path,$dir,$basename) = @_;
ok(-e $path); ok(-e $path);
ok(-d $path); ok(-d $path);
ok(-d $dir);
is($dw->currentDir(), $dir);
is($dw->currentBasename(), $basename);
if ($dw->currentBasename() eq $subdir) { if (($dw->currentBasename() eq $subdir) and ($basename eq $subdir)) {
is( $dw->count(), 10 ); is( $dw->count(), 10 );
is( $dw->currentDepth(), 2 ); is( $dw->currentDepth(), 2 );
return 42; return 42;
@@ -64,9 +72,14 @@ foreach my $subdir (qw(dir1 dir2 dir3 dir4 dir5)) {
$dw = new File::DirWalk(); $dw = new File::DirWalk();
$dw->onFile(sub { $dw->onFile(sub {
my ($path) = @_; my ($path,$dir,$basename) = @_;
ok(-e $path); ok(-e $path);
ok(-f $path); ok(-f $path);
ok(-d $dir);
is($dir, "t/tree/$subdir");
is($dw->currentDir(), "t/tree/$subdir");
is($dw->currentDir(), $dir);
is($dw->currentBasename(), $basename);
return SUCCESS; return SUCCESS;
}); });
@@ -77,9 +90,12 @@ foreach my $subdir (qw(dir1 dir2 dir3 dir4 dir5)) {
$files = 0; $files = 0;
$dw = new File::DirWalk(); $dw = new File::DirWalk();
$dw->onFile(sub { $dw->onFile(sub {
my ($path) = @_; my ($path,$dir,$basename) = @_;
ok(-e $path); ok(-e $path);
ok(-f $path); ok(-f $path);
ok(-d $dir);
is($dw->currentDir(), $dir);
is($dw->currentBasename(), $basename);
++$files; ++$files;
return SUCCESS; return SUCCESS;
}); });