chiark / gitweb /
autotitle builds and installs. Various fixes.
[ian-dotfiles.git] / process
diff --git a/process b/process
index 0a6dba60474ea47ac3a6bb2aa8f1497fa4a14f7b..bf3295ddfff085cd645aabd1510bb664df558bc3 100755 (executable)
--- a/process
+++ b/process
@@ -6,7 +6,7 @@ $action=0;
 defined($umask=umask) or die $!;
 $home= $ENV{'HOME'}.'/';
 
-while (@ARGV =~ m/^-/) {
+while ($ARGV[0] =~ m/^-/) {
     $_= shift(@ARGV);
     last if m/^--$/;
     while (m/^-./) {
@@ -21,6 +21,7 @@ while (@ARGV =~ m/^-/) {
        }
     }
 }
+die if @ARGV;
 
 stat $home or die $!;
 -d _ or die;
@@ -56,7 +57,7 @@ sub mkparents ($) {
 sub maybe_chmod ($$$) {
     my ($nowperms,$perms,$obj) = @_;
     return if $nowperms==$perms;
-    if ($doing) {
+    if ($action) {
        chmod $perms, $home.$obj or die $!;
     } else {
        would($obj, sprintf 'chmod %04o -> %04o', $nowperms, $perms);
@@ -73,7 +74,7 @@ sub ensuredir ($) {
        maybe_chmod($nowperms,$perms,$dir);
     } else {
        die $! unless $!==&ENOENT;
-       if ($doing) {
+       if ($action) {
            mkdir $home.$dir, $perms or die $!;
        } else {
            would($dir, sprintf 'mkdir %04o', $perms);
@@ -83,6 +84,19 @@ sub ensuredir ($) {
 
 -d 'new' or mkdir 'new', 02700 or die $!;
 
+sub prep_proc ($$) {
+    my ($if,$newf) = @_;
+    my ($c);
+    defined($c= fork) or die $!;
+    if (!$c) {
+       unlink $newf;
+       open STDOUT, "> $newf" or die "$newf $!";
+       exec './gpt','config',$if; die $!;
+    }
+    $!=0; waitpid($c,0)==$c or die $!;
+    $? and die $?;
+}
+
 opendir D, "files" or die $!;
 while ($if=readdir D) {
     next unless $if =~ m/^[_a-z0-9\\]/;
@@ -94,16 +108,9 @@ while ($if=readdir D) {
        length $1 eq 1 ? $1 : sprintf '%c', hex $1 
            /ge;
 
-    $newf= 'new/'.$if;
     mkparents($of);
-    defined($c= fork) or die $!;
-    if (!$c) {
-       unlink $newf;
-       open STDOUT, "> $newf" or die "$of $newf $!";
-       exec './gpt','config','files/'.$if; die $!;
-    }
-    $!=0; waitpid($c,0)==$c or die $!;
-    $? and die $?;
+    $newf= 'new/'.$if;
+    prep_proc('files/'.$if,$newf);
 
     $perms= exists $fileperms{$of} ? $fileperms{$of} : 00666&~$umask;
     chmod $perms, $newf or die $!;
@@ -111,12 +118,13 @@ while ($if=readdir D) {
     if (stat $home.$of) {
        -f _ or die "$of is not a file!";
        $nowperms= (stat _)[2] & 07777;
+       if ($nowperms != $perms) {
+           would($of, sprintf 'chmod %04o -> %04o', $nowperms, $perms);
+       }
        if (!$action) {
-           if ($nowperms != $perms) {
-               would($of, sprintf 'chmod %04o -> %04o', $nowperms, $perms);
-           }
            system 'diff','-u',$home.$of,$newf;
            $?==0 or $?==256 or die $?;
+           $changes++ if $?;
        }
     } else {
        would($of, sprintf 'create %04o', $perms);
@@ -139,6 +147,19 @@ sub would ($$) {
     my ($obj,$what) = @_;
     return if $would_done{$obj}++;
     print STDOUT "*** $what $obj\n" or die $!;
+    $changes++;
+}
+
+if ($changes) {
+    print STDOUT "=== $changes changes\n" or die $!;
+} else {
+    print STDOUT "=== no changes\n" or die $!;
+}
+
+prep_proc('execute','new/,execute');
+if ($action) {
+    chmod 0700,'new/,execute' or die $!;
+    system 'new/,execute'; $? and die $?;
 }
 
 close STDOUT or die $!;