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 $!;
-opendir D, "files" or die $!;
-while ($if=readdir D) {
- next unless $if =~ m/^[:a-z0-9]/;
- $of= $if;
- $of =~ s,\:,/,g;
- $of =~ s,^/,,;
- $of =~ s,\\\;,:,g;
- $of =~ s:\\([0-9a-f][0-9a-f]): sprintf '%c', hex $1 :ge;
-
- $newf= 'new/'.$if;
- mkparents($of);
+sub prep_proc ($$) {
+ my ($if,$newf) = @_;
+ my ($c);
defined($c= fork) or die $!;
if (!$c) {
unlink $newf;
- open STDOUT, "> $newf" or die "$of $newf $!";
- exec './gpt','config','files/'.$if; die $!;
+ 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\\]/;
+ $of= $if;
+ $of =~ s,_,/,g;
+ $of =~ s,^/,,;
+ $of =~ s,//,_,g;
+ $of =~ s/\\([0-9a-f][0-9a-f]|_|\\)/
+ length $1 eq 1 ? $1 : sprintf '%c', hex $1
+ /ge;
+
+ mkparents($of);
+ $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 $!;