cleanups: whitespaces; checks for mandatory fields
[darcs-mirror-metainit.git] / Parse.pm
index e278f04..8ac043d 100644 (file)
--- a/Parse.pm
+++ b/Parse.pm
@@ -1,31 +1,55 @@
-package Parse
+package Parse;
 
 sub parse {
-    my $fh = shift;
+    my $filename = shift;
+    open(FILE, "<", $filename) || die $!;
 
     my %parsed;
     my $lastkey;
-    while (<$fh>) {
-        #last if /^$/;
-        if (my ($key, $value) = m/^([^ ].*): (.*)/) {
+    while (<FILE>) {
+       # Ignore empty lines and comments
+       chomp;
+       next if /^$/ or /^#/;
+        if (my ($key, $value) = m/^(\S.*): (.*)/) {
             $parsed{$key} = $value;
            $lastkey = $key;
         }
         elsif ($lastkey) {
             s/^ //;
             s/^\.$//;
-            $parsed{$lastkey} .= $_;
+            $parsed{$lastkey} .= "\n$_";
         } else {
            die "Cannot parse $!";
        }
     }
+    close FILE;
 
     if (not exists $parsed{Description}) {
         $parsed{Description} = $parsed{Name}
     }
 
-    ($parsed{Path}, $parsed{Args}) = split(/\s/,$parsed{Exec});
+    {
+       no warnings qw(uninitialized);
+       ($parsed{Path}, $parsed{Args}) = split(/\s+/,$parsed{Exec});
+
+       my @splits = qw(Required-Start Should-Start Required-Stop Should-Stop);
+
+       for (@splits){
+               $parsed{$_} = [ split m/\s+/, $parsed{$_} ];
+       }
+    }
+
+    my @mandatory = qw(Exec Name);
+
+    my $error_msg = "";
+    for (@mandatory){
+           $error_msg .= "No '$_:' provided\n" unless $parsed{$_};
+    } 
+    die $error_msg if $error_msg;
 
     return %parsed;
 }
 
+
+# Return a true value
+1;