ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now always...
authorJoey Hess <joey@kodama.kitenet.net>
Sun, 27 Jul 2008 04:02:04 +0000 (00:02 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sun, 27 Jul 2008 04:02:04 +0000 (00:02 -0400)
debian/changelog
doc/ikiwiki-update-wikilist.mdwn
ikiwiki-update-wikilist

index 08be87fbecdff3759e4ababcff1deae83136cf38..982c557962325d19741f69f5155a3d4d276772dd 100644 (file)
@@ -7,6 +7,8 @@ ikiwiki (2.60) UNRELEASED; urgency=low
   * The way wrappers are defined in the setup file has changed. Old setup
     files will continue to work, for now.
   * Version control backends promoted to first-class plugins.
+  * ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now
+    always to add.
 
  -- Joey Hess <joeyh@debian.org>  Mon, 21 Jul 2008 11:35:46 -0400
 
index 4e87f92e67b31b81ae8dcd6864f2a2bd471628ff..e5ea72e36cf519816489c17d34b45c9eb895031e 100644 (file)
@@ -4,14 +4,16 @@ ikiwiki-update-wikilist - add or remove user from /etc/ikiwiki/wikilist
 
 # SYNOPSIS
 
-ikiwiki-update-wikilist
+ikiwiki-update-wikilist [-r]
 
 # DESCRIPTION
 
-`ikiwiki-update-wikilist` is designed to be made suid root, but not installed
+`ikiwiki-update-wikilist` is designed to be made suid root, but is not installed
 suid by default. If made suid, it allows users to add or remove their names
-from the `/etc/ikiwiki/wikilist` file. If a user's name is not in the file,
-it will be added; if the name is already present, it will be removed.
+from the `/etc/ikiwiki/wikilist` file. 
+
+By default, the user's name will be added.
+The `-r` switch causes the user's name to be removed.
 
 If your name is in `/etc/ikiwiki/wikilist`, the [[ikiwiki-mass-rebuild]](8)
 command will look for a ~/.ikiwiki/wikilist file, and rebuild the wikis listed
index 0f3f0bcc6497f2b6f6b73cf6821f01847bb6925c..0b52543cda5bdfb3a1b1e6bbd03a0a697210a141 100755 (executable)
@@ -5,6 +5,8 @@ use warnings;
 use strict;
 use English;
 
+my $remove=(@ARGV && $ARGV[0] eq '-r');
+
 my $username=getpwuid($REAL_USER_ID);
 if (! defined $username || ! length $username) {
        die "unable to determine user name for UID $REAL_USER_ID\n";
@@ -15,7 +17,8 @@ if (! -e $wikilist) {
        die "$wikilist does not exist\n";
 }
 
-my $removed=0;
+my $changed=0;
+my $seen=0;
 my @lines;
 open (my $list, "<$wikilist") || die "read $wikilist: $!";
 while (<$list>) {
@@ -23,7 +26,10 @@ while (<$list>) {
        if (/^\s*([^\s]+)\s*$/) {
                my $user=$1;
                if ($user eq $username) {
-                       $removed=1;             
+                       if (! $remove) {
+                               $seen=1;
+                               push @lines, $_;
+                       }
                }
                else {
                        push @lines, $_;
@@ -33,16 +39,24 @@ while (<$list>) {
                push @lines, $_;
        }
 }
-close $list || die "error reading $list: $!";
-open ($list, ">$wikilist") || die "write $wikilist: $!";
-foreach (@lines) {
-       print $list "$_\n";
+if (! $seen && ! $remove) {
+       push @lines, $username;
+       $changed=1;
 }
-if ($removed) {
-       print "removed user $username from $wikilist\n";
+if ($changed) {
+       close $list || die "ikiwiki-update-wikilist: error reading $list: $!\n";
+       open ($list, ">$wikilist") || die "ikiwiki-update-wikilist: error writing $wikilist: $!\n";
+       foreach (@lines) {
+               print $list "$_\n";
+       }
+       if ($remove) {
+               print "ikiwiki-update-wikilist: removed user $username from $wikilist\n";
+       }
+       else {
+               print "ikiwiki-update-wikilist: added user $username to $wikilist\n";
+       }
+       close $list || die "ikiwiki-update-wikilist: error writing $wikilist: $!\n";
 }
 else {
-       print $list "$username\n";
-       print "added user $username to $wikilist\n";
+       print "ikiwiki-update-wikilist: no changes need to be made\n";
 }
-close $list || die "error writing $list: $!";