develooper Front page | perl.perl5.porters | Postings from May 2012

[PATCH 3/3] rewrite installhtml's installdir dir scan logic

Thread Previous | Thread Next
From:
Aristotle Pagaltzis
Date:
May 15, 2012 10:00
Subject:
[PATCH 3/3] rewrite installhtml's installdir dir scan logic
Message ID:
55219361e693ea7636c1932c3d41203bc64dd3b3.1337098224.git.pagaltzis@gmx.de
The code so far was riddled with copy-paste and hacks and incurred
redundant effort, including syscalls. Replaced with a skimmable and
parsimonious implementation.
---
 installhtml |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/installhtml b/installhtml
index c09cd64..44b3e87 100644
--- a/installhtml
+++ b/installhtml
@@ -4,7 +4,7 @@
 
 use strict;
 use Config;		# for config options in the makefile
-use File::Spec::Functions qw(rel2abs);
+use File::Spec::Functions qw(rel2abs no_upwards);
 use Getopt::Long;	# for command-line parsing
 use Cwd;
 use Pod::Html 'anchorify';
@@ -497,22 +497,23 @@ sub installdir {
     opendir(DIR, "$podroot/$dir")
 	|| die "$0: error opening directory $podroot/$dir: $!\n";
 
-    # find the directories to recurse on
-    @dirlist = map { if ($^O eq 'VMS') {/^(.*)\.dir$/i; "$dir/$1";} else {"$dir/$_";}}
-	grep(-d "$podroot/$dir/$_" && !/^\.{1,2}/, readdir(DIR)) if $recurse;
-    rewinddir(DIR);
-
-    # find all the .pod files within the directory
-    @podlist = map { /^(.*)\.pod$/; "$dir/$1" }
-	grep(! -d "$podroot/$dir/$_" && /\.pod$/, readdir(DIR));
-    rewinddir(DIR);
-
-    # find all the .pm files within the directory
-    @pmlist = map { /^(.*)\.pm$/; "$dir/$1" }
-	grep(! -d "$podroot/$dir/$_" && /\.pm$/, readdir(DIR));
+    while(readdir DIR) {
+	no_upwards($_) or next;
+	my $is_dir = -d "$podroot/$dir/$_";
+	next if $is_dir and not $recurse;
+	my $target = (
+	    $is_dir    ? \@dirlist :
+	    s/\.pod$// ? \@podlist :
+	    s/\.pm$//  ? \@pmlist  :
+	    undef
+	);
+	push @$target, "$dir/$_" if $target;
+    }
 
     closedir(DIR);
 
+    if ($^O eq 'VMS') { s/\.dir$//i for @dirlist }
+
     # recurse on all subdirectories we kept track of
     foreach $dir (@dirlist) {
 	installdir($dir, $recurse, $podroot, $splitdirs, $ignore);
-- 
1.7.4.1


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About