xref: /dokuwiki/bin/dwpage.php (revision 1caeb00a5a0b9894a582514ef385b71cab195092)
1*1caeb00aSHarry Fuecks#!/usr/bin/php -d short_open_tag=on
2*1caeb00aSHarry Fuecks<?php
3*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
4*1caeb00aSHarry Fuecksif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
5*1caeb00aSHarry Fuecksrequire_once DOKU_INC.'inc/init.php';
6*1caeb00aSHarry Fuecksrequire_once DOKU_INC.'inc/common.php';
7*1caeb00aSHarry Fuecksrequire_once DOKU_INC.'inc/cliopts.php';
8*1caeb00aSHarry Fuecks
9*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
10*1caeb00aSHarry Fuecksfunction usage($action) {
11*1caeb00aSHarry Fuecks    switch ( $action ) {
12*1caeb00aSHarry Fuecks        case 'checkout':
13*1caeb00aSHarry Fuecks           print "Usage: dwpage.php [opts] checkout <wiki:page> [working_file]
14*1caeb00aSHarry Fuecks
15*1caeb00aSHarry Fuecks    Checks out a file from the repository, using the wiki id and obtaining
16*1caeb00aSHarry Fuecks    a lock for the page.
17*1caeb00aSHarry Fuecks    If a working_file is specified, this is where the page is copied to.
18*1caeb00aSHarry Fuecks    Otherwise defaults to the same as the wiki page in the current
19*1caeb00aSHarry Fuecks    working directory.
20*1caeb00aSHarry Fuecks
21*1caeb00aSHarry Fuecks    EXAMPLE
22*1caeb00aSHarry Fuecks    $ ./dwpage.php checkout wiki:syntax ./new_syntax.txt
23*1caeb00aSHarry Fuecks
24*1caeb00aSHarry Fuecks    OPTIONS
25*1caeb00aSHarry Fuecks        -h, --help=<action>: get help
26*1caeb00aSHarry Fuecks        -f: force obtaining a lock for the page (generally bad idea)
27*1caeb00aSHarry Fuecks";
28*1caeb00aSHarry Fuecks        break;
29*1caeb00aSHarry Fuecks        case 'commit':
30*1caeb00aSHarry Fuecks           print "Usage: dwpage.php [opts] -m \"Msg\" commit <working_file> <wiki:page>
31*1caeb00aSHarry Fuecks
32*1caeb00aSHarry Fuecks    Checks in the working_file into the repository using the specified
33*1caeb00aSHarry Fuecks    wiki id, archiving the previous version.
34*1caeb00aSHarry Fuecks
35*1caeb00aSHarry Fuecks    EXAMPLE
36*1caeb00aSHarry Fuecks    $ ./dwpage.php -m \"Some message\" commit ./new_syntax.txt wiki:syntax
37*1caeb00aSHarry Fuecks
38*1caeb00aSHarry Fuecks    OPTIONS
39*1caeb00aSHarry Fuecks        -h, --help=<action>: get help
40*1caeb00aSHarry Fuecks        -f: force obtaining a lock for the page (generally bad idea)
41*1caeb00aSHarry Fuecks        -m (required): Summary message describing the change
42*1caeb00aSHarry Fuecks";
43*1caeb00aSHarry Fuecks        break;
44*1caeb00aSHarry Fuecks        case 'lock':
45*1caeb00aSHarry Fuecks           print "Usage: dwpage.php [opts] lock <wiki:page>
46*1caeb00aSHarry Fuecks
47*1caeb00aSHarry Fuecks    Obtains or updates a lock for a wiki page
48*1caeb00aSHarry Fuecks
49*1caeb00aSHarry Fuecks    EXAMPLE
50*1caeb00aSHarry Fuecks    $ ./dwpage.php lock wiki:syntax
51*1caeb00aSHarry Fuecks
52*1caeb00aSHarry Fuecks    OPTIONS
53*1caeb00aSHarry Fuecks        -h, --help=<action>: get help
54*1caeb00aSHarry Fuecks        -f: force obtaining a lock for the page (generally bad idea)
55*1caeb00aSHarry Fuecks";
56*1caeb00aSHarry Fuecks        break;
57*1caeb00aSHarry Fuecks        case 'unlock':
58*1caeb00aSHarry Fuecks           print "Usage: dwpage.php [opts] unlock <wiki:page>
59*1caeb00aSHarry Fuecks
60*1caeb00aSHarry Fuecks    Removes a lock for a wiki page.
61*1caeb00aSHarry Fuecks
62*1caeb00aSHarry Fuecks    EXAMPLE
63*1caeb00aSHarry Fuecks    $ ./dwpage.php unlock wiki:syntax
64*1caeb00aSHarry Fuecks
65*1caeb00aSHarry Fuecks    OPTIONS
66*1caeb00aSHarry Fuecks        -h, --help=<action>: get help
67*1caeb00aSHarry Fuecks        -f: force obtaining a lock for the page (generally bad idea)
68*1caeb00aSHarry Fuecks";
69*1caeb00aSHarry Fuecks        break;
70*1caeb00aSHarry Fuecks        default:
71*1caeb00aSHarry Fuecks            print "Usage: dwpage.php [opts] <action>
72*1caeb00aSHarry Fuecks
73*1caeb00aSHarry Fuecks    Utility to help command line Dokuwiki page editing, allow
74*1caeb00aSHarry Fuecks    pages to be checked out for editing then committed after changes
75*1caeb00aSHarry Fuecks
76*1caeb00aSHarry Fuecks    Normal operation would be;
77*1caeb00aSHarry Fuecks
78*1caeb00aSHarry Fuecks
79*1caeb00aSHarry Fuecks
80*1caeb00aSHarry Fuecks    ACTIONS
81*1caeb00aSHarry Fuecks        checkout: see $ dwpage.php --help checkout
82*1caeb00aSHarry Fuecks        commit: see $ dwpage.php --help commit
83*1caeb00aSHarry Fuecks        lock: see $ dwpage.php --help lock
84*1caeb00aSHarry Fuecks
85*1caeb00aSHarry Fuecks    OPTIONS
86*1caeb00aSHarry Fuecks        -h, --help=<action>: get help
87*1caeb00aSHarry Fuecks            e.g. $ ./dwpage.php -hcommit
88*1caeb00aSHarry Fuecks            e.g. $ ./dwpage.php --help=commit
89*1caeb00aSHarry Fuecks";
90*1caeb00aSHarry Fuecks        break;
91*1caeb00aSHarry Fuecks    }
92*1caeb00aSHarry Fuecks}
93*1caeb00aSHarry Fuecks
94*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
95*1caeb00aSHarry Fuecksfunction getUser() {
96*1caeb00aSHarry Fuecks    $user = getenv('USER');
97*1caeb00aSHarry Fuecks    if (empty ($username)) {
98*1caeb00aSHarry Fuecks        $user = getenv('USERNAME');
99*1caeb00aSHarry Fuecks    } else {
100*1caeb00aSHarry Fuecks        return $user;
101*1caeb00aSHarry Fuecks    }
102*1caeb00aSHarry Fuecks    if (empty ($username)) {
103*1caeb00aSHarry Fuecks        $user = 'admin';
104*1caeb00aSHarry Fuecks    }
105*1caeb00aSHarry Fuecks    return $user;
106*1caeb00aSHarry Fuecks}
107*1caeb00aSHarry Fuecks
108*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
109*1caeb00aSHarry Fuecksfunction getSuppliedArgument($OPTS, $short, $long) {
110*1caeb00aSHarry Fuecks    $arg = $OPTS->get($short);
111*1caeb00aSHarry Fuecks    if ( is_null($arg) ) {
112*1caeb00aSHarry Fuecks        $arg = $OPTS->get($long);
113*1caeb00aSHarry Fuecks    }
114*1caeb00aSHarry Fuecks    return $arg;
115*1caeb00aSHarry Fuecks}
116*1caeb00aSHarry Fuecks
117*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
118*1caeb00aSHarry Fuecksfunction obtainLock($WIKI_ID) {
119*1caeb00aSHarry Fuecks
120*1caeb00aSHarry Fuecks    global $USERNAME;
121*1caeb00aSHarry Fuecks
122*1caeb00aSHarry Fuecks    if ( !file_exists(wikiFN($WIKI_ID)) ) {
123*1caeb00aSHarry Fuecks        fwrite( STDERR, "$WIKI_ID does not yet exist\n");
124*1caeb00aSHarry Fuecks    }
125*1caeb00aSHarry Fuecks
126*1caeb00aSHarry Fuecks    $_SERVER['REMOTE_USER'] = $USERNAME;
127*1caeb00aSHarry Fuecks    if ( checklock($WIKI_ID) ) {
128*1caeb00aSHarry Fuecks        fwrite( STDERR, "Page $WIKI_ID is already locked by another user\n");
129*1caeb00aSHarry Fuecks        exit(1);
130*1caeb00aSHarry Fuecks    }
131*1caeb00aSHarry Fuecks
132*1caeb00aSHarry Fuecks    lock($WIKI_ID);
133*1caeb00aSHarry Fuecks
134*1caeb00aSHarry Fuecks    $_SERVER['REMOTE_USER'] = '_'.$USERNAME.'_';
135*1caeb00aSHarry Fuecks
136*1caeb00aSHarry Fuecks    if ( checklock($WIKI_ID) != $USERNAME ) {
137*1caeb00aSHarry Fuecks
138*1caeb00aSHarry Fuecks        fwrite( STDERR, "Unable to obtain lock for $WIKI_ID\n" );
139*1caeb00aSHarry Fuecks        exit(1);
140*1caeb00aSHarry Fuecks
141*1caeb00aSHarry Fuecks    }
142*1caeb00aSHarry Fuecks}
143*1caeb00aSHarry Fuecks
144*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
145*1caeb00aSHarry Fuecksfunction clearLock($WIKI_ID) {
146*1caeb00aSHarry Fuecks
147*1caeb00aSHarry Fuecks    global $USERNAME ;
148*1caeb00aSHarry Fuecks
149*1caeb00aSHarry Fuecks    if ( !file_exists(wikiFN($WIKI_ID)) ) {
150*1caeb00aSHarry Fuecks        fwrite( STDERR, "$WIKI_ID does not yet exist\n");
151*1caeb00aSHarry Fuecks    }
152*1caeb00aSHarry Fuecks
153*1caeb00aSHarry Fuecks    $_SERVER['REMOTE_USER'] = $USERNAME;
154*1caeb00aSHarry Fuecks    if ( checklock($WIKI_ID) ) {
155*1caeb00aSHarry Fuecks        fwrite( STDERR, "Page $WIKI_ID is locked by another user\n");
156*1caeb00aSHarry Fuecks        exit(1);
157*1caeb00aSHarry Fuecks    }
158*1caeb00aSHarry Fuecks
159*1caeb00aSHarry Fuecks    unlock($WIKI_ID);
160*1caeb00aSHarry Fuecks
161*1caeb00aSHarry Fuecks    if ( file_exists(wikiFN($WIKI_ID).'.lock') ) {
162*1caeb00aSHarry Fuecks        fwrite( STDERR, "Unable to clear lock for $WIKI_ID\n" );
163*1caeb00aSHarry Fuecks        exit(1);
164*1caeb00aSHarry Fuecks    }
165*1caeb00aSHarry Fuecks
166*1caeb00aSHarry Fuecks}
167*1caeb00aSHarry Fuecks
168*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
169*1caeb00aSHarry Fuecksfunction deleteLock($WIKI_ID) {
170*1caeb00aSHarry Fuecks
171*1caeb00aSHarry Fuecks    $wikiLockFN = wikiFN($WIKI_ID).'.lock';
172*1caeb00aSHarry Fuecks
173*1caeb00aSHarry Fuecks    if ( file_exists($wikiLockFN) ) {
174*1caeb00aSHarry Fuecks        if ( !unlink($wikiLockFN) ) {
175*1caeb00aSHarry Fuecks            fwrite( STDERR, "Unable to delete $wikiLockFN\n" );
176*1caeb00aSHarry Fuecks            exit(1);
177*1caeb00aSHarry Fuecks        }
178*1caeb00aSHarry Fuecks    }
179*1caeb00aSHarry Fuecks
180*1caeb00aSHarry Fuecks}
181*1caeb00aSHarry Fuecks
182*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
183*1caeb00aSHarry Fuecks$USERNAME = getUser();
184*1caeb00aSHarry Fuecks$CWD = getcwd();
185*1caeb00aSHarry Fuecks$SYSTEM_ID = '127.0.0.1';
186*1caeb00aSHarry Fuecks
187*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
188*1caeb00aSHarry Fuecks$OPTS = Doku_Cli_Opts::getOptions(
189*1caeb00aSHarry Fuecks    __FILE__,
190*1caeb00aSHarry Fuecks    'h::fm:u:s:',
191*1caeb00aSHarry Fuecks    array(
192*1caeb00aSHarry Fuecks        'help==',
193*1caeb00aSHarry Fuecks        'user=',
194*1caeb00aSHarry Fuecks        'system=',
195*1caeb00aSHarry Fuecks        )
196*1caeb00aSHarry Fuecks);
197*1caeb00aSHarry Fuecks
198*1caeb00aSHarry Fuecksif ( $OPTS->isError() ) {
199*1caeb00aSHarry Fuecks    print $OPTS->getMessage()."\n";
200*1caeb00aSHarry Fuecks    exit(1);
201*1caeb00aSHarry Fuecks}
202*1caeb00aSHarry Fuecks
203*1caeb00aSHarry Fuecksif ( $OPTS->has('h') or $OPTS->has('help') or !$OPTS->hasArgs() ) {
204*1caeb00aSHarry Fuecks    usage(getSuppliedArgument($OPTS,'h','help'));
205*1caeb00aSHarry Fuecks    exit(0);
206*1caeb00aSHarry Fuecks}
207*1caeb00aSHarry Fuecks
208*1caeb00aSHarry Fuecksif ( $OPTS->has('u') or $OPTS->has('user') ) {
209*1caeb00aSHarry Fuecks    $USERNAME = getSuppliedArgument($OPTS,'u','user');
210*1caeb00aSHarry Fuecks}
211*1caeb00aSHarry Fuecks
212*1caeb00aSHarry Fuecksif ( $OPTS->has('s') or $OPTS->has('system') ) {
213*1caeb00aSHarry Fuecks    $SYSTEM_ID = getSuppliedArgument($OPTS,'s','system');
214*1caeb00aSHarry Fuecks}
215*1caeb00aSHarry Fuecks
216*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------
217*1caeb00aSHarry Fuecksswitch ( $OPTS->arg(0) ) {
218*1caeb00aSHarry Fuecks
219*1caeb00aSHarry Fuecks    #----------------------------------------------------------------------
220*1caeb00aSHarry Fuecks    case 'checkout':
221*1caeb00aSHarry Fuecks
222*1caeb00aSHarry Fuecks        $WIKI_ID = $OPTS->arg(1);
223*1caeb00aSHarry Fuecks
224*1caeb00aSHarry Fuecks        if ( !$WIKI_ID ) {
225*1caeb00aSHarry Fuecks            fwrite( STDERR, "Wiki page ID required\n");
226*1caeb00aSHarry Fuecks            exit(1);
227*1caeb00aSHarry Fuecks        }
228*1caeb00aSHarry Fuecks
229*1caeb00aSHarry Fuecks        $WIKI_FN = wikiFN($WIKI_ID);
230*1caeb00aSHarry Fuecks
231*1caeb00aSHarry Fuecks        if ( !file_exists($WIKI_FN) ) {
232*1caeb00aSHarry Fuecks            fwrite( STDERR, "$WIKI_ID does not yet exist\n");
233*1caeb00aSHarry Fuecks            exit(1);
234*1caeb00aSHarry Fuecks        }
235*1caeb00aSHarry Fuecks
236*1caeb00aSHarry Fuecks        $TARGET_FN = $OPTS->arg(2);
237*1caeb00aSHarry Fuecks
238*1caeb00aSHarry Fuecks        if ( empty($TARGET_FN) ) {
239*1caeb00aSHarry Fuecks            $TARGET_FN = getcwd().'/'.basename($WIKI_FN);
240*1caeb00aSHarry Fuecks        }
241*1caeb00aSHarry Fuecks
242*1caeb00aSHarry Fuecks        if ( !file_exists(dirname($TARGET_FN)) ) {
243*1caeb00aSHarry Fuecks            fwrite( STDERR, "Directory ".dirname($TARGET_FN)." does not exist\n");
244*1caeb00aSHarry Fuecks            exit(1);
245*1caeb00aSHarry Fuecks        }
246*1caeb00aSHarry Fuecks
247*1caeb00aSHarry Fuecks        if ( stristr( realpath(dirname($TARGET_FN)), realpath($conf['datadir']) ) !== FALSE ) {
248*1caeb00aSHarry Fuecks            fwrite( STDERR, "Attempt to check out file into data directory - not allowed\n");
249*1caeb00aSHarry Fuecks            exit(1);
250*1caeb00aSHarry Fuecks        }
251*1caeb00aSHarry Fuecks
252*1caeb00aSHarry Fuecks        if ( $OPTS->has('f') ) {
253*1caeb00aSHarry Fuecks            deleteLock($WIKI_ID);
254*1caeb00aSHarry Fuecks        }
255*1caeb00aSHarry Fuecks
256*1caeb00aSHarry Fuecks        obtainLock($WIKI_ID);
257*1caeb00aSHarry Fuecks
258*1caeb00aSHarry Fuecks        # Need to lock the file first?
259*1caeb00aSHarry Fuecks        if ( !copy($WIKI_FN, $TARGET_FN) ) {
260*1caeb00aSHarry Fuecks            fwrite( STDERR, "Unable to copy $WIKI_FN to $TARGET_FN\n");
261*1caeb00aSHarry Fuecks            clearLock($WIKI_ID);
262*1caeb00aSHarry Fuecks            exit(1);
263*1caeb00aSHarry Fuecks        }
264*1caeb00aSHarry Fuecks
265*1caeb00aSHarry Fuecks        print "$WIKI_ID > $TARGET_FN\n";
266*1caeb00aSHarry Fuecks        exit(0);
267*1caeb00aSHarry Fuecks
268*1caeb00aSHarry Fuecks    break;
269*1caeb00aSHarry Fuecks
270*1caeb00aSHarry Fuecks    #----------------------------------------------------------------------
271*1caeb00aSHarry Fuecks    case 'commit':
272*1caeb00aSHarry Fuecks
273*1caeb00aSHarry Fuecks        $TARGET_FN = $OPTS->arg(1);
274*1caeb00aSHarry Fuecks
275*1caeb00aSHarry Fuecks        if ( !$TARGET_FN ) {
276*1caeb00aSHarry Fuecks            fwrite( STDERR, "Target filename required\n");
277*1caeb00aSHarry Fuecks            exit(1);
278*1caeb00aSHarry Fuecks        }
279*1caeb00aSHarry Fuecks
280*1caeb00aSHarry Fuecks        if ( !file_exists($TARGET_FN) ) {
281*1caeb00aSHarry Fuecks            fwrite( STDERR, "$TARGET_FN does not exist\n");
282*1caeb00aSHarry Fuecks            exit(1);
283*1caeb00aSHarry Fuecks        }
284*1caeb00aSHarry Fuecks
285*1caeb00aSHarry Fuecks        if ( !is_readable($TARGET_FN) ) {
286*1caeb00aSHarry Fuecks            fwrite( STDERR, "Cannot read from $TARGET_FN\n");
287*1caeb00aSHarry Fuecks            exit(1);
288*1caeb00aSHarry Fuecks        }
289*1caeb00aSHarry Fuecks
290*1caeb00aSHarry Fuecks        $WIKI_ID = $OPTS->arg(2);
291*1caeb00aSHarry Fuecks
292*1caeb00aSHarry Fuecks        if ( !$WIKI_ID ) {
293*1caeb00aSHarry Fuecks            fwrite( STDERR, "Wiki page ID required\n");
294*1caeb00aSHarry Fuecks            exit(1);
295*1caeb00aSHarry Fuecks        }
296*1caeb00aSHarry Fuecks
297*1caeb00aSHarry Fuecks        if ( !$OPTS->has('m') ) {
298*1caeb00aSHarry Fuecks            fwrite( STDERR, "Summary message required\n");
299*1caeb00aSHarry Fuecks            exit(1);
300*1caeb00aSHarry Fuecks        }
301*1caeb00aSHarry Fuecks
302*1caeb00aSHarry Fuecks        if ( $OPTS->has('f') ) {
303*1caeb00aSHarry Fuecks            deleteLock($WIKI_ID);
304*1caeb00aSHarry Fuecks        }
305*1caeb00aSHarry Fuecks
306*1caeb00aSHarry Fuecks        $_SERVER['REMOTE_USER'] = $USERNAME;
307*1caeb00aSHarry Fuecks        if ( checklock($WIKI_ID) ) {
308*1caeb00aSHarry Fuecks            fwrite( STDERR, "$WIKI_ID is locked by another user\n");
309*1caeb00aSHarry Fuecks            exit(1);
310*1caeb00aSHarry Fuecks        }
311*1caeb00aSHarry Fuecks
312*1caeb00aSHarry Fuecks        obtainLock($WIKI_ID);
313*1caeb00aSHarry Fuecks
314*1caeb00aSHarry Fuecks        saveWikiText($WIKI_ID, file_get_contents($TARGET_FN), $OPTS->get('m'));
315*1caeb00aSHarry Fuecks
316*1caeb00aSHarry Fuecks        clearLock($WIKI_ID);
317*1caeb00aSHarry Fuecks
318*1caeb00aSHarry Fuecks        exit(0);
319*1caeb00aSHarry Fuecks
320*1caeb00aSHarry Fuecks    break;
321*1caeb00aSHarry Fuecks
322*1caeb00aSHarry Fuecks    #----------------------------------------------------------------------
323*1caeb00aSHarry Fuecks    case 'lock':
324*1caeb00aSHarry Fuecks
325*1caeb00aSHarry Fuecks        $WIKI_ID = $OPTS->arg(1);
326*1caeb00aSHarry Fuecks
327*1caeb00aSHarry Fuecks        if ( !$WIKI_ID ) {
328*1caeb00aSHarry Fuecks            fwrite( STDERR, "Wiki page ID required\n");
329*1caeb00aSHarry Fuecks            exit(1);
330*1caeb00aSHarry Fuecks        }
331*1caeb00aSHarry Fuecks
332*1caeb00aSHarry Fuecks        if ( $OPTS->has('f') ) {
333*1caeb00aSHarry Fuecks            deleteLock($WIKI_ID);
334*1caeb00aSHarry Fuecks        }
335*1caeb00aSHarry Fuecks
336*1caeb00aSHarry Fuecks        obtainLock($WIKI_ID);
337*1caeb00aSHarry Fuecks
338*1caeb00aSHarry Fuecks        print "Locked : $WIKI_ID\n";
339*1caeb00aSHarry Fuecks        exit(0);
340*1caeb00aSHarry Fuecks
341*1caeb00aSHarry Fuecks    break;
342*1caeb00aSHarry Fuecks
343*1caeb00aSHarry Fuecks    #----------------------------------------------------------------------
344*1caeb00aSHarry Fuecks    case 'unlock':
345*1caeb00aSHarry Fuecks
346*1caeb00aSHarry Fuecks        $WIKI_ID = $OPTS->arg(1);
347*1caeb00aSHarry Fuecks
348*1caeb00aSHarry Fuecks        if ( !$WIKI_ID ) {
349*1caeb00aSHarry Fuecks            fwrite( STDERR, "Wiki page ID required\n");
350*1caeb00aSHarry Fuecks            exit(1);
351*1caeb00aSHarry Fuecks        }
352*1caeb00aSHarry Fuecks
353*1caeb00aSHarry Fuecks        if ( $OPTS->has('f') ) {
354*1caeb00aSHarry Fuecks            deleteLock($WIKI_ID);
355*1caeb00aSHarry Fuecks        } else {
356*1caeb00aSHarry Fuecks            clearLock($WIKI_ID);
357*1caeb00aSHarry Fuecks        }
358*1caeb00aSHarry Fuecks
359*1caeb00aSHarry Fuecks        print "Unlocked : $WIKI_ID\n";
360*1caeb00aSHarry Fuecks        exit(0);
361*1caeb00aSHarry Fuecks
362*1caeb00aSHarry Fuecks    break;
363*1caeb00aSHarry Fuecks
364*1caeb00aSHarry Fuecks    #----------------------------------------------------------------------
365*1caeb00aSHarry Fuecks    default:
366*1caeb00aSHarry Fuecks
367*1caeb00aSHarry Fuecks        fwrite( STDERR, "Invalid action ".$OPTS->arg(0)."\n" );
368*1caeb00aSHarry Fuecks        exit(1);
369*1caeb00aSHarry Fuecks
370*1caeb00aSHarry Fuecks    break;
371*1caeb00aSHarry Fuecks
372*1caeb00aSHarry Fuecks}
373*1caeb00aSHarry Fuecks
374