add Angular (eg2) install steps
[sitka/sitka-tools.git] / deployment / access_pathmap.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use Config::Simple;
5 use Getopt::Long;
6
7 my ($help, $config_file, $component, $srcpath); 
8
9 GetOptions(
10     'help'              => \$help,              # show help message and exit
11     'config=s'          => \$config_file,       # INI file for path mappings
12     'component=s'       => \$component,         # The component to grab the source paths for
13     'srcpath=s'         => \$srcpath            # The source path to grap the destination path for
14 );
15
16 if ($help) {
17     print <<"HELP";
18
19 OPTIONS:
20     --help
21         Show help message and exit.
22     --config
23         Location of INI file for path mappings.
24     --component
25         The component of the INI file for which you want the paths.
26         If you do not specify a component value then all components
27         (sections) in the INI file are returned.
28     --srcpath
29         The source path to return the destination path for
30
31 HELP
32     exit;
33 }
34
35 # load config
36 die "No config file specified\n" unless ($config_file);
37 die "Config file does not exist\n" unless (-r $config_file and -s $config_file);
38
39 my $cfg = new Config::Simple($config_file);
40
41 if (!$component) {
42     my @components = ();
43     #pull out components from INI file
44     open my $fh, '<', $config_file;
45     while (<$fh>) {
46         chomp;
47         if ($_ =~ /^\[[^]]+\]$/) {
48             $_ =~ s/^\[//;
49             $_ =~ s/\]$//;
50             #we use newlines because spaces seem to be valid within an INI file section.
51             #I am not sure if newlines are also valid because I could not find anything
52             #defining the INI section syntax, but I imagine using a newline within an INI
53             #file section declartion is not done very often if it is valid syntax.
54             print "$_\n";
55         }
56     }
57 } elsif (!$srcpath) {
58     foreach my $key (keys %{$cfg->get_block($component)}) {
59         #again we use newlines because spaces can be used within directory names. I belive
60         #it is possible to use a newline in a directory name, but someone would have to be
61         #trying really hard to make things break if they started doing that with the Evergreen
62         #source.
63         print $key . "\n";
64     }
65 } else {
66     while (!defined $cfg->get_block($component)->{$srcpath}) {
67         $srcpath =~ s/\/[^\/]*$//;
68         if ($srcpath !~ '/') {
69             last;
70         }
71     }
72
73     if (defined $cfg->get_block($component)->{$srcpath}) {
74         print $cfg->get_block($component)->{$srcpath};
75     }
76 }
77