---
name: "SVK::Command"
section: "3pm"
platform: "linux"
package: "svk"
version: "2.0.2-3"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/SVK::Command"
---

# SVK::Command(3pm)

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. *opt\_recursive* 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\_revision($target)* 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. *filename* 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::*"`
