defined($umask=umask) or die $!;
$home= $ENV{'HOME'}.'/';
-while (@ARGV =~ m/^-/) {
+while ($ARGV[0] =~ m/^-/) {
$_= shift(@ARGV);
last if m/^--$/;
while (m/^-./) {
}
}
}
+die if @ARGV;
stat $home or die $!;
-d _ or die;
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);
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);
-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\\]/;
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 $!;
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);
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 $!;