SVK::Util - Utility functions for SVK classes


    use SVK::Util qw( func1 func2 func3 )


This is yet another abstraction function set for portable file, buffer and IO handling, tailored to SVK's specific needs.

No symbols are exported by default; the user module needs to specify the list of functions to import.


Constant Functions


Boolean flag to indicate whether this system is running Microsoft Windows.


The default program to invoke for editing buffers: notepad.exe on Win32, vi otherwise.


The I/O layer for text files: :crlf on Win32, empty otherwise.

Boolean flag to indicate whether this system supports symlink().


Boolean flag to indicate whether we can successfully load SVN::Mirror.

Constant Scalars


Native path separator: platform: \ on dosish platforms, / otherwise.


End of line marker: \015\012 on Win32, \012 otherwise.


User Interactivity

get_prompt ($prompt, $pattern)

Repeatedly prompt the user for a line of answer, until it matches the regular expression pattern. Returns the chomped answer line.

edit_file ($file_name)

Launch editor to edit a file.

get_buffer_from_editor ($what, $sep, $content, $filename, $anchor, $targets_ref)

XXX Undocumented


Get the current encoding from locale

get_encoder ([$encoding])

from_native ($octets, $what, [$encoding])

to_native ($octets, $what, [$encoding])

File Content Manipulation

read_file ($filename)

Read from a file and returns its content as a single scalar.

write_file ($filename, $content)

Write out content to a file, overwriting existing content if present.

slurp_fh ($input_fh, $output_fh)

Read all data from the input filehandle and write them to the output filehandle. The input may also be a scalar, or reference to a scalar.

md5_fh ($input_fh)

Calculate MD5 checksum for data in the input filehandle.

mimetype ($file)

Return the MIME type for the file, or undef if the MIME database is missing on the system.

mimetype_is_text ($mimetype)

Return whether a MIME type string looks like a text file.

is_binary_file ($filename OR $filehandle)

Returns true if the given file or filehandle contains binary data. Otherwise, returns false.

Path and Filename Handling

abspath ($path)

Return paths with components in symlink resolved, but keep the final path even if it's symlink. Returns undef if the base directory does not exist.

abs_path_noexist ($path)

Return paths with components in symlink resolved, but keep the final path even if it's symlink. Unlike abs_path(), returns a valid value even if the base directory doesn't exist.

abs2rel ($pathname, $old_basedir, $new_basedir, $sep)

Replace the base directory in the native pathname to another base directory and return the result.

If the pathname is not under $old_basedir, it is returned unmodified.

If $new_basedir is an empty string, removes the old base directory but keeps the leading slash. If $new_basedir is undef, also removes the leading slash.

By default, the return value of this function will use $SEP as its path separator. Setting $sep to / will turn native path separators into / instead.

catdir (@directories)

Concatenate directory names to form a complete path; also removes the trailing slash from the resulting string, unless it is the root directory.

catfile (@directories, $pathname)

Concatenate one or more directory names and a filename to form a complete path, ending with a filename. If $pathname contains directories, they will be splitted off to the end of @directories.

catpath ($volume, $directory, $filename)

XXX Undocumented - See File::Spec

devnull ()

Return a file name suitable for reading, and guaranteed to be empty.

get_anchor ($need_target, @paths)

Returns the (anchor, target) pairs for native path @paths. Discard the targets being returned unless $need_target.

get_depot_anchor ($need_target, @paths)

Returns the (anchor, target) pairs for depotpaths @paths. Discard the targets being returned unless $need_target.

catdepot ($depot_name, @paths)

make_path ($path)

Create a directory, and intermediate directories as required.

splitpath ($path)

Splits a path in to volume, directory, and filename portions. On systems with no concept of volume, returns an empty string for volume.

splitdir ($path)

The opposite of catdir(); return a list of path components.

tmpdir ()

Return the name of the first writable directory from a list of possible temporary directories.

tmpfile (TEXT => $is_textmode, %args)

In scalar context, return the filehandle of a temporary file. In list context, return the filehandle and the filename.

If $is_textmode is true, the returned file handle is marked with TEXT_MODE.

See File::Temp for valid keys of %args.

Return whether a file is a symbolic link, as determined by -l. If $filename is not specified, return -l _ instead.

is_executable ($filename)

Return whether a file is likely to be an executable file. Unlike is_symlink(), the $filename argument is not optional.

can_run ($filename)

Check if we can run some command.

is_uri ($string)

Check if a string is a valid URI.

move_path ($source, $target)

Move a path to another place, creating intermediate directories in the target path if neccessary. If move failed, tell the user to move it manually.

traverse_history (root => $fs_root, path => $path, cross => $cross, callback => $cb($path, $revision))

Traverse the history of $path in $fs_root backwards until the first copy, unless $cross is true. We do cross renames regardless of the value of $cross being non-zero, but not -1. We invoke $cb for each $path, $revision we encounter. If cb returns a nonzero value we stop traversing as well.

is_path_inside($path, $parent)

Returns true if unix path $path is inside $parent. If they are the same, return true as well.


Returns escaped URI.


Unescape escaped URI and return it.


Check if a string is a valid depotpath.