NAME

SVK::Util - Utility functions for SVK classes

SYNOPSIS

use SVK::Util qw( func1 func2 func3 )

DESCRIPTION

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.

CONSTANTS

Constant Functions

IS_WIN32

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

DEFAULT_EDITOR

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

TEXT_MODE

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

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

HAS_SVN_MIRROR

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

Constant Scalars

$SEP

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

$EOL

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

FUNCTIONS

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_encoding

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.