EG install scripts: production branches
[sitka/sitka-tools.git] / deployment / access_pathmap.pl
index b2cfdae..33c3b4c 100755 (executable)
@@ -7,10 +7,10 @@ use Getopt::Long;
 my ($help, $config_file, $component, $srcpath); 
 
 GetOptions(
-    'help'              => \$help,            # show help message and exit
-    'config=s'          => \$config_file,     # INI file for path mappings
-    'component=s'       => \$component,       # The component to grab the source paths for
-    'srcpath=s'         => \$srcpath          # The source path to grap the destination path for
+    'help'              => \$help,              # show help message and exit
+    'config=s'          => \$config_file,       # INI file for path mappings
+    'component=s'       => \$component,         # The component to grab the source paths for
+    'srcpath=s'         => \$srcpath            # The source path to grap the destination path for
 );
 
 if ($help) {
@@ -22,7 +22,9 @@ OPTIONS:
     --config
         Location of INI file for path mappings.
     --component
-        The component of the INI file for which you want the paths
+        The component of the INI file for which you want the paths.
+        If you do not specify a component value then all components
+        (sections) in the INI file are returned.
     --srcpath
         The source path to return the destination path for
 
@@ -33,6 +35,7 @@ HELP
 # load config
 die "No config file specified\n" unless ($config_file);
 die "Config file does not exist\n" unless (-r $config_file and -s $config_file);
+
 my $cfg = new Config::Simple($config_file);
 
 if (!$component) {
@@ -42,16 +45,33 @@ if (!$component) {
     while (<$fh>) {
         chomp;
         if ($_ =~ /^\[[^]]+\]$/) {
-            $_ =~ s/[\[\]]//g;
-            push(@components, $_);
+            $_ =~ s/^\[//;
+            $_ =~ s/\]$//;
+            #we use newlines because spaces seem to be valid within an INI file section.
+            #I am not sure if newlines are also valid because I could not find anything
+            #defining the INI section syntax, but I imagine using a newline within an INI
+            #file section declartion is not done very often if it is valid syntax.
+            print "$_\n";
         }
     }
-    print "@components\n";
 } elsif (!$srcpath) {
-    foreach my $key (keys $cfg->get_block($component)) {
+    foreach my $key (keys %{$cfg->get_block($component)}) {
+        #again we use newlines because spaces can be used within directory names. I belive
+        #it is possible to use a newline in a directory name, but someone would have to be
+        #trying really hard to make things break if they started doing that with the Evergreen
+        #source.
         print $key . "\n";
     }
 } else {
-    print $cfg->get_block($component)->{$srcpath};
+    while (!defined $cfg->get_block($component)->{$srcpath}) {
+        $srcpath =~ s/\/[^\/]*$//;
+        if ($srcpath !~ '/') {
+            last;
+        }
+    }
+
+    if (defined $cfg->get_block($component)->{$srcpath}) {
+        print $cfg->get_block($component)->{$srcpath};
+    }
 }