@@ -10,7 +10,7 @@ my $size_kb = ( -s $archive ) / 1024;
10
10
my $drive = ' b' ;
11
11
12
12
my $actions = {
13
- list => " mdir -f -i \' $archive \' " ,
13
+ list => " mdir -s - f -i \' $archive \' " ,
14
14
copyout => " mcopy -m -n -o -p -i \' $archive \' " ,
15
15
copyin => " mcopy -m -n -o -p -i \' $archive \' " ,
16
16
rm => " mdel -i \' $archive \' " ,
@@ -20,7 +20,8 @@ my $actions = {
20
20
test => " logger \' $archive \' "
21
21
};
22
22
23
- my $regex_list = qr " ^(\S +)\s +(\S *)\s +(\S +)\s +(\d {4})-(\d {2})-(\d {2})\s +(\d {1,2}):(\d {1,2})(?:\s *)(\S +)*\s *$ " ;
23
+ my $regex_dir = qr " (?<=^Directory for ::/)(.*)$ " ;
24
+ my $regex_list = qr " ^(\S +)\s +(\S *)\s +(\S +)\s +(\d {4})-(\d {2})-(\d {2})\s +(\d {1,2}):(\d {1,2})\s\s ?(.*)$ " ;
24
25
25
26
sub print_debug {
26
27
print " @_ \n " if exists $ENV {DEBUG };
@@ -55,40 +56,48 @@ sub default_handler {
55
56
elsif ( $cmd eq ' copyout' ) {
56
57
$args [0] = " ::$args [0]" ;
57
58
}
58
- my $output = run_cmd " $actions ->{ $cmd } @args " ;
59
+ my $input = run_cmd " $actions ->{ $cmd } @args " ;
59
60
if ( $cmd eq ' list' ) {
61
+ my $output = {};
60
62
my $exec = check_mtools( run )
61
- ? ' rwxr-xr-x'
62
- : ' rw-r--r--' ;
63
- foreach ( @{ $output } ) {
63
+ ? ' -rwxr-xr-x'
64
+ : ' -rw-r--r--' ;
65
+ my $dir ;
66
+ foreach ( @{ $input } ) {
64
67
chomp ;
65
68
next if / ^$ / ;
69
+ if ( / $regex_dir / ) {
70
+ $dir = " $1 " ;
71
+ next ;
72
+ }
66
73
if ( my ( $name , $ext , $size , $year , $mon , $day , $hours , $mins , $longname ) = $_ =~ / $regex_list / ) {
67
- print_debug " list: name = $name , ext = $ext , size = $size , year = $year , mon = $mon , day = $day , hours = $hours , mins = $mins , longname = $longname " ;
74
+ print_debug " list: dir = $dir , name = $name , ext = $ext , size = $size , year = $year , mon = $mon , day = $day , hours = $hours , mins = $mins , longname = $longname ; " ;
68
75
next if ( $name eq ' .' || $name eq ' ..' );
69
- my $perms = ( $size ne ' <DIR>'
70
- ? ' -'
71
- : ' d' )
72
- . ( ( $ext eq ' exe' || $ext eq ' com' || $ext eq ' bat' )
76
+ my $perms = $size eq ' <DIR>'
77
+ ? ' drwxr-xr-x'
78
+ : ( $ext eq ' exe' || $ext eq ' com' || $ext eq ' bat' )
73
79
? $exec
74
- : ' rw-r--r--' );
75
- my $path = $longname
76
- ? " $args [0]/$longname "
77
- : uc ( " $args [0]/$name " . ( $ext ? " .$ext " : " " ) );
80
+ : ' -rw-r--r--' ;
81
+ my $path = ( $dir ? " /$dir /" : " /" )
82
+ . ( $longname ? $longname : $name )
83
+ . ( $ext ? " .$ext " : " " );
84
+ $path = uc ( $path ) unless $longname ;
78
85
$secs = defined $secs ? $secs : " 00" ;
79
- printf " %-10s 1 %-8d %-8d %8s %s /%s /%s %s :%s :%s %s " , $perms , $< ,
86
+ print_debug " list: path = $path " ;
87
+ $output -> { $path } = sprintf " %-10s 1 %-8d %-8d %8s %s /%s /%s %s :%s :%s %s " , $perms , $< ,
80
88
$( , $size ne ' <DIR>' ? $size : 0, $mon , $day , $year , $hours , $mins , $secs , $path
81
89
. " \n " ;
82
- default_handler( $cmd , $archive , $path ) if ( $size eq ' <DIR>' );
83
90
}
84
91
else {
85
92
print_debug " list: skipped: $_ " ;
86
93
}
87
94
}
95
+ print foreach map { $output -> { $_ } } sort keys %{ $output };
88
96
}
89
97
}
90
98
91
99
print_debug " $0 : cmd = $cmd ; archive = $archive ; args = @args " ;
100
+ $actions -> { $cmd } = $ENV {MC_TEST_EXTFS_LIST_CMD } if exists $ENV {MC_TEST_EXTFS_LIST_CMD };
92
101
die " Cannot find command $cmd , are mtools installed?\n " unless check_mtools( $cmd );
93
102
exists $actions -> { $cmd } ? default_handler( $cmd , $archive , @args )
94
103
: die " mode $cmd not available\n " ;
0 commit comments