---
name: "SVN::Class"
section: "3pm"
platform: "linux"
package: "libsvn-class-perl"
version: "0.18-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SVN::Class"
---

# SVN::Class(3pm)

manipulate Subversion workspaces with Perl objects

## NAME

SVN::Class - manipulate Subversion workspaces with Perl objects

## SYNOPSIS

```
 use SVN::Class;

 my $file = svn_file( 'path/to/file' );
 my $fh = $file->open('>>');
 print {$fh} "hello world\n";
 $fh->close;
 $file->add;
 if ($file->modified) {
    my $rev = $file->commit('the file changed');
    print "$file was committed with revision $rev\n";
 }
 else {
    croak "$file was not committed: " . $file->errstr;
 }

 my $dir = svn_dir( 'path/to/dir' );
 $dir->mkpath unless -d $dir;
 $dir->add;  # recurses by default
 $dir->commit('added directory') if $dir->modified;
```

## DESCRIPTION

SVN::Class extends Path::Class to allow for basic Subversion workspace management. SVN::Class::File and SVN::Class::Dir are subclasses of Path::Class::File::Stat and Path::Class::Dir respectively.

SVN::Class does not use the SVN::Core Subversion SWIG bindings. Instead, the `"svn"` binary tool is used for all interactions, using IPC::Cmd. This design decision was made for maximum portability and to eliminate non-CPAN dependencies.

## EXPORT

SVN::Class exports two functions by default: **svn\_file()** and **svn\_dir()**. These work just like the **dir()** and **file()** functions in Path::Class. If you do not want to export them, just invoke SVN::Class like:

```
 use SVN::Class ();
```

### svn\_file( *file* )

Works just like **Path::Class::file()**.

### svn\_dir( *dir* )

Works just like **Path::Class::dir()**.

## METHODS

SVN::Class inherits from Path::Class. Only new or overridden methods are documented here.

### svn

Path to the svn binary. Defaults to `"svn"` and thus relies on environment's PATH to find and execute the correct command.

### stdout

Get the stdout from the last **svn\_run()**.

### stderr

Get the stderr from the last **svn\_run()**.

### error

If the last **svn\_run()** exited with non-zero, **error()** will return same as **stderr()**. If **svn\_run()** was successful, returns the empty string.

### error\_code

Returns the last exit value of **svn\_run()**.

### verbose

Get/set a true value to enable IPC output in **svn\_run()**.

### debug

Get/set a true value to see debugging output printed on stderr.

### svn\_run( *cmd*, *opts*, *file* )

Execute *cmd* given *opts* and *file* as arguments. This is a wrapper around the IPC::Run **run()** function.

*opts* should be an array ref of options to pass to *cmd*.

*file* defaults to `$self`-\>**stringify()**.

Returns the success code from IPC::Run **run()**. Sets the stdout, stderr, err, errstr, and error\_code values in the SVN::Class object.

This method is used internally by all the Subversion commands.

**NOTE:** In order to standardize the output of Subversion commands into a locale that is easily parse-able by other methods that call **svn\_run()** internally, all commands are run with `"LC_ALL=C"` to make sure output is ASCII only.

### log

Returns svn log of the file or 0 on error. The log is returned as an arrayref (same as accessing **stdout()**).

### add

Schedule the object for addition to the repository.

### delete

Schedule the object for removal from the repository.

### update

Get the latest version of the object from the repository.

### up

Alias for **update()**.

### revert

Undo the last Subversion action on the object.

### commit( *message* )

Commit the object to the repository with the log *message*.

Returns the revision number of the commit on success, 0 on failure.

### status

Returns the workspace status of the object.

### modified

Returns true if the **status()** of the object is `"Add"` or `"Modified"`.

### conflicted

Returns true if the **status()** of the object is `"Conflicted"`.

### diff

Diff the workspace version of the object against either the repository or the current working baseline version.

### blame

Annotated accounting of who modified what lines of the object.

### info

Returns SVN::Class::Info instance with information about the current object or 0 on failure.

### dump

Returns a Data::Dump serialization of the object. Useful for debugging.

### errstr

Returns the contents of **error()** as a newline-joined string.

### outstr

Returns the contents of **stdout()** as a newline-joined string.

## AUTHOR

Peter Karman, `"<karman at cpan.org>"`

## BUGS

Please report any bugs or feature requests to `"bug-svn-class at rt.cpan.org"`, or through the web interface at \<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SVN-Class\>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

## SUPPORT

You can find documentation for this module with the perldoc command.

```
    perldoc SVN::Class
```

You can also look for information at:

- •

  AnnoCPAN: Annotated CPAN documentation

  \<http://annocpan.org/dist/SVN-Class\>

- •

  CPAN Ratings

  \<http://cpanratings.perl.org/d/SVN-Class\>

- •

  RT: CPAN's request tracker

  \<http://rt.cpan.org/NoAuth/Bugs.html?Dist=SVN-Class\>

- •

  Search CPAN

  \<http://search.cpan.org/dist/SVN-Class\>

## ACKNOWLEDGEMENTS

I looked at SVN::Agent before starting this project. It has a different API, more like SVN::Client in the SVN::Core, but I cribbed some of the ideas.

The Minnesota Supercomputing Institute `"http://www.msi.umn.edu/"` sponsored the development of this software.

## COPYRIGHT

Copyright 2007 by the Regents of the University of Minnesota.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

Path::Class, Class::Accessor::Fast, SVN::Agent, IPC::Cmd
