diff --git a/mycp/mycp b/mycp/mycp index 6ff57fd..d8a562a 100755 --- a/mycp/mycp +++ b/mycp/mycp @@ -28,13 +28,14 @@ use File::Copy; use Cwd; use Cwd 'abs_path'; use vars qw( -$hostname -$cvspath -$editor -$cpcmd -$cvscmd -$mkdircmd -$sudocmd + $hostname + $cvspath + $editor + $cpcmd + $cvscmd + $mkdircmd + $sudocmd + $permsfile ); $hostname = hostname(); @@ -47,6 +48,10 @@ $sudocmd = "/usr/bin/sudo"; &readconfig; +unless ( $permsfile ) { + $permsfile = $cvspath ? "$cvspath/PERMS" : ""; +} + my %option = (); &cmdline; @@ -56,6 +61,7 @@ if ( $cvspath ) { foreach ( @ARGV ) { if ( -f $_ ) { &incvs($_); # check if file exists in cvs else make it so + &inperms($_); # check if file perms are registered or make it so unless (&cmptocvs($_)) { # compare file to cvs print "$_ not in sync with cvs version\n"; print "please fix this\n"; @@ -166,6 +172,45 @@ sub incvs($) { } } +sub inperms($) { + my $file = shift; + my $path = &fullpath($file); + my $fullname = "$path/" . basename($file); + my @stats = stat $fullname; + my $user = (getpwuid($stats[4]))[0]; + my $group = (getgrgid($stats[5]))[0]; + my $mode = sprintf "%lo", $stats[2]; + $mode =~ s/.*(\d{4})$/$1/; + + print "$mode:$user:$group:$fullname\n"; + exit; + + unless ( -f $permsfile ) { + print <>$permsfile"); + print FH "$mode:$user:$group:$fullname\n"; + close FH; + system("$cvscmd ci -m \"adding $fullname\" $permsfile"); + } + print "$path\n"; + exit; +} + sub edit($) { if ( exists $ENV{'EDITOR'} ) { $editor = $ENV{'EDITOR'}; @@ -307,6 +352,14 @@ sub fullpath($) { } } +sub slurp($) { + my $file = shift; + open(FH, "<$file") or die "Couldn't open $file: $!\n"; + my $result = do { local $/; ; }; + close FH; + return $result; +} + sub help { print <