--post-commit won't delete pages and --refresh seems no deadlock
[ikiwiki] / ikiwiki-update-wikilist
CommitLineData
926c04e8 1#!/usr/bin/perl -t
2# Add a user to the system wide wikilist.
3# This script can safely be made suid.
4use warnings;
5use strict;
6use English;
7
bc3363be
JH
8my $remove=(@ARGV && $ARGV[0] eq '-r');
9
926c04e8 10my $username=getpwuid($REAL_USER_ID);
11if (! defined $username || ! length $username) {
12 die "unable to determine user name for UID $REAL_USER_ID\n";
13}
14
15my $wikilist="/etc/ikiwiki/wikilist";
16if (! -e $wikilist) {
17 die "$wikilist does not exist\n";
18}
19
bc3363be
JH
20my $changed=0;
21my $seen=0;
926c04e8 22my @lines;
23open (my $list, "<$wikilist") || die "read $wikilist: $!";
24while (<$list>) {
25 chomp;
26 if (/^\s*([^\s]+)\s*$/) {
27 my $user=$1;
28 if ($user eq $username) {
bc3363be
JH
29 if (! $remove) {
30 $seen=1;
31 push @lines, $_;
32 }
926c04e8 33 }
34 else {
35 push @lines, $_;
36 }
37 }
38 else {
39 push @lines, $_;
40 }
41}
bc3363be
JH
42if (! $seen && ! $remove) {
43 push @lines, $username;
44 $changed=1;
926c04e8 45}
bc3363be
JH
46if ($changed) {
47 close $list || die "ikiwiki-update-wikilist: error reading $list: $!\n";
950850f6 48 open ($list, ">$wikilist") || die "ikiwiki-update-wikilist: cannot write to $wikilist\n";
bc3363be
JH
49 foreach (@lines) {
50 print $list "$_\n";
51 }
52 if ($remove) {
53 print "ikiwiki-update-wikilist: removed user $username from $wikilist\n";
54 }
55 else {
56 print "ikiwiki-update-wikilist: added user $username to $wikilist\n";
57 }
58 close $list || die "ikiwiki-update-wikilist: error writing $wikilist: $!\n";
926c04e8 59}
60else {
bc3363be 61 print "ikiwiki-update-wikilist: no changes need to be made\n";
926c04e8 62}