SVK::Command - Base class and dispatcher for SVK commands


    use SVK::Command;
    my $xd = SVK::XD->new ( ... );
    my $cmd = 'checkout';
    my @args = qw( file1 file2 );
    open my $output_fh, '>', 'svk.log' or die $!;
    SVK::Command->invoke ($xd, $cmd, $output_fh, @args);


This module resolves alias for commands and dispatches them, usually with the invoke method. If the command invocation is incorrect, usage information is displayed instead.


Class Methods

invoke ($xd, $cmd, $output_fh, @args)

Takes a SVK::XD object, the command name, the output scalar reference, and the arguments for the command. The command name is translated with the %alias map.

On Win32, after @args is parsed for named options, the remaining positional arguments are expanded for shell globbing with bsd_glob.

getopt ($argv, %opt)

Takes a arrayref of argv for run getopt for the command, with additional %opt getopt options.

Instance Methods

SVK::Command->invoke loads the corresponding class SVK::Command::$name, so that's the class you want to implement the following methods in:

options ()

Returns a hash where the keys are Getopt::Long specs and the values are a string that will be the keys storing the parsed option in $self.

Subclasses should override this to add their own options. Defaults to an empty list.


Defines if the command needs the recursive flag and its default. The value will be stored in recursive.

parse_arg (@args)

This method is called with the remaining arguments after parsing named options with options above. It should use the arg_* methods to return a list of parsed arguments for the command's lock and run method to process. Defaults to return a single undef.

lock (@parse_args)

Calls the lock_* methods to lock the SVK::XD object. The arguments will be what is returned from parse_arg.

run (@parsed_args)

Actually process the command. The arguments will be what is returned from parse_arg.

Returned undef on success. Return a string message to notify the caller errors.

Utility Methods

Except for arg_depotname, all arg_* methods below returns a SVK::Path object, which consists of a hash with the following keys:


The hashes are handy to pass to many other functions.

arg_condensed (@args)

Argument is a number of checkout paths.

arg_uri_maybe ($arg, $no_new_mirror)

Argument might be a URI or a depotpath. If it is a URI, try to find it at or under one of currently mirrored paths. If not found, prompts the user to mirror and sync it.

arg_co_maybe ($arg, $no_new_mirror)

Argument might be a checkout path or a depotpath. If argument is URI then handles it via arg_uri_maybe.

arg_copath ($arg)

Argument is a checkout path.

arg_depotpath ($arg)

Argument is a depotpath, including the slashes and depot name.

arg_depotroot ($arg)

Argument is a depot root, or a checkout path that needs to be resolved into a depot root.

arg_depotname ($arg)

Argument is a name of depot. such as '' or 'test' that is being used normally between two slashes.

arg_path ($arg)

Argument is a plain path in the filesystem.


Apply the given revision from command line to $target.

parse_revlist ()

Parse -c or -r to a list of [from, to] pairs.

lock_target ($target)

XXX Undocumented

lock_coroot ($target)

XXX Undocumented

brief_usage ($file)

Display an one-line brief usage of the command object. Optionally, a file could be given to extract the usage from the POD.


Return the filename for the command module.

usage ($want_detail)

Display usage. If $want_detail is true, the DESCRIPTION section is displayed as well.

Error Handling

handle_error ($error)

XXX Undocumented

add_handler ($error, $handler)

XXX Undocumented

msg_handler ($error, $message)

XXX Undocumented

msg_handler ($error)

XXX Undocumented

command ($cmd, \%args)

Construct a command object of the $cmd subclass and return it.

The new object will share the xd from the calling command object; contents in %args is also assigned into the new object.

rebless ($cmd, \%args)

Like command above, but modifies the calling object instead of creating a new one. Useful for a command object to recast itself into another command class.

run_command_recursively($target, $code)

Traverse $target and and invoke $code with each node.


SVK, SVK::XD, SVK::Command::*