libvcs.cmd.svn#

For subversion, aka svn(1)

Run svn (subversion) commands directly against SVN working copy.

Busman’s holiday?.

We need to fill these SVN commands and their tests to exquisite perfection, like the artisans in those Michelin-star videos on YouTube. We welcome your contributions, providing you “color between the lines” and stick to the interface. Get in, ‘APIs unstable until we fit the spec.

exception libvcs.cmd.svn.SvnPropsetValueOrValuePathRequired(*args)[source]#

Bases: LibVCSException, TypeError

Raised when required parameters are not passed.

Parameters:

args (object) –

class libvcs.cmd.svn.Svn(*, dir, progress_callback=None)[source]#

Bases: object

Run commands directly against SVN working copy.

Lite, typed, pythonic wrapper for svn(1).

Parameters:

Examples

>>> Svn(dir=tmp_path)
<Svn dir=...>
__init__(*, dir, progress_callback=None)[source]#

Lite, typed, pythonic wrapper for svn(1).

Parameters:
Return type:

None

Examples

>>> Svn(dir=tmp_path)
<Svn dir=...>
dir: Path#

Directory to check out

progress_callback: Optional[ProgressCallbackProtocol] = None#
run(args, *, quiet=None, username=None, password=None, no_auth_cache=None, non_interactive=True, trust_server_cert=None, config_dir=None, config_option=None, make_parents=True, check_returncode=None, **kwargs)[source]#

Run a command for this SVN working copy.

Passing None to a subcommand option, the flag won’t be passed unless otherwise stated.

svn help and svn help [cmd]

Wraps svn’s Options.

Parameters:
Return type:

str

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.run(['help'])
"usage: svn <subcommand> [options] [args]..."
checkout(*, url, revision=None, force=None, ignore_externals=None, depth=None, quiet=None, username=None, password=None, no_auth_cache=None, non_interactive=True, trust_server_cert=None, make_parents=True, check_returncode=False)[source]#

Check out a working copy from an SVN repo.

Wraps svn checkout (co).

Parameters:
  • url (str) –

  • revision (Union[RevisionLiteral, str]) – Number, ‘{ DATE }’, ‘HEAD’, ‘BASE’, ‘COMMITTED’, ‘PREV’

  • force (bool, optional) – force operation to run

  • ignore_externals (bool, optional) – ignore externals definitions

  • depth (Optional[Literal['infinity', 'empty', 'files', 'immediates']]) – Sparse checkout support, Optional

  • make_parents (bool, default: True) – Creates checkout directory (:attr:`self.dir) if it doesn’t already exist.

  • check_returncode (bool, default: True) – Passthrough to Svn.run()

  • quiet (bool | None) –

  • username (str | None) –

  • password (str | None) –

  • no_auth_cache (bool | None) –

  • non_interactive (bool | None) –

  • trust_server_cert (bool | None) –

Return type:

str

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn_remote_repo = create_svn_remote_repo()
>>> svn.checkout(url=f'file://{svn_remote_repo}')
'...Checked out revision ...'
>>> svn.checkout(url=f'file://{svn_remote_repo}', revision=10)
'svn: E160006: No such revision 10...'
add(*, path, targets=None, depth=None, force=None, auto_props=None, no_auto_props=None, parents=None)[source]#

Stage an unversioned file to be pushed to repository next commit.

Passing None means the flag won’t be passed unless otherwise stated.

Wraps svn add.

Parameters:
  • targets (pathlib.Path) – –targets ARG: contents of file ARG as additional args

  • depth (Optional[Literal['infinity', 'empty', 'files', 'immediates']]) – –depth ARG, Sparse checkout support, Optional

  • force (Optional[bool]) – –force, Ignore already versioned paths

  • no_ignore–no-ignore

  • auto_props (Optional[bool]) – –auto-props

  • no_auto_props (Optional[bool]) – –no-auto-props

  • parents (Optional[bool]) – –parents

  • path (list[Path] | Path) –

Return type:

str

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...'
>>> new_file = tmp_path / 'new.txt'
>>> new_file.write_text('example text', encoding="utf-8")
12
>>> svn.add(path=new_file)
'A  new.txt'
auth(remove=None, show_passwords=None, **kwargs)[source]#

Manage stored authentication credentials.

Wraps svn auth.

Parameters:
  • remove (str, optional) – Remove matching auth credentials

  • show_passwords (bool, optional) – Show cached passwords

  • kwargs (Any) –

Return type:

str

Examples

>>> Svn(dir=tmp_path).auth()
"Credentials cache in '...' is empty"
blame(target, *, revision=None, verbose=None, force=None, use_merge_history=None, incremental=None, xml=None, extensions=None, **kwargs)[source]#

Show authorship for file line-by-line.

Wraps svn blame.

Parameters:
  • target (pathlib.Path) – path of file

  • revision (Union[RevisionLiteral, str]) – Number, ‘{ DATE }’, ‘HEAD’, ‘BASE’, ‘COMMITTED’, ‘PREV’

  • verbose (bool) – -v, –verbose, output extra info

  • use_merge_history (bool) – -g, –use-merge-history, show extra mergeg info

  • incremental (bool) – –incremental, give output suitable for concatenation

  • xml (bool) – –xml, xml output

  • extensions (str, optional) – Diff or blame tool (pass raw args).

  • force (bool, optional) – force operation to run

  • kwargs (Any) –

Return type:

str

Examples

>>> svn = Svn(dir=tmp_path)
>>> repo = create_svn_remote_repo()
>>> svn.checkout(url=f'file://{repo}')
'...Checked out revision ...'
>>> new_file = tmp_path / 'new.txt'
>>> new_file.write_text('example text', encoding="utf-8")
12
>>> svn.add(path=new_file)
'A  new.txt'
>>> svn.commit(path=new_file, message='My new commit')
'...'
>>> svn.blame('new.txt')
'4        ... example text'
cat(*args, **kwargs)[source]#

Output contents of files from working copy or repository URLs.

Wraps svn cat.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

changelist(*args, **kwargs)[source]#

Connect or disconnect files with a changelist.

Wraps svn changelist (cl).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

cleanup(*args, **kwargs)[source]#

Recursively clean up working copy of locks. Unblocks operations.

Wraps svn cleanup.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

commit(*, path, targets=None, message=None, no_unlock=None, file=None, depth=None, encoding=None, force_log=None, keep_changelists=None, include_externals=None, **kwargs)[source]#

Push changes from working copy to SVN repo.

Wraps svn commit (ci).

Parameters:
  • targets (pathlib.Path) – –targets ARG: contents of file ARG as additional args

  • depth (Optional[Literal['infinity', 'empty', 'files', 'immediates']]) – –depth ARG, Sparse checkout support, Optional

  • encoding (Optional[str]) – –encoding, treat value as charset encoding passed

  • keep_changelists (Optional[bool]) – –keep_changelists, don’t delete changelists after commit

  • force_log (Optional[bool]) – –force-log, Ignore already versioned paths

  • path (list[Path] | Path) –

  • message (str | None) –

  • no_unlock (bool | None) –

  • file (Path | None) –

  • include_externals (bool | None) –

  • kwargs (Any) –

Return type:

str

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...'
>>> new_file = tmp_path / 'new.txt'
>>> new_file.write_text('example text', encoding="utf-8")
12
>>> svn.add(path=new_file)
'A  new.txt'
>>> svn.commit(path=new_file, message='My new commit')
'Adding          new.txt...Transmitting file data...Committed revision 4.'
copy(*args, **kwargs)[source]#

Copy file or dir in this SVN working copy or repo.

Wraps svn copy (cp).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

delete(*args, **kwargs)[source]#

Remove file from this SVN working copy or repo.

Wraps svn delete (del, remove, rm).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

diff(*args, **kwargs)[source]#

Return diff of two files or revisions.

Wraps svn diff.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

export(*args, **kwargs)[source]#

Export clean directory tree of working directory.

Wraps svn export.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

help(*args, **kwargs)[source]#

SVN Help command.

Wraps svn help (?, h).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

import_(*args, **kwargs)[source]#

Import local directory into repository.

Wraps svn import.

Due to python limitation, .import isn’t possible.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

info(target=None, targets=None, changelist=None, revision=None, depth=None, incremental=None, recursive=None, xml=None, *args, **kwargs)[source]#

Return info about this SVN repository.

Wraps svn info.

Return type:

str

Parameters:
targetspathlib.Path

–targets ARG: contents of file ARG as additional args

xmlbool

–xml, xml output

revisionUnion[RevisionLiteral, str]

Number, ‘{ DATE }’, ‘HEAD’, ‘BASE’, ‘COMMITTED’, ‘PREV’

depth :

–depth ARG, Sparse checkout support, Optional

incrementalbool

–incremental, give output suitable for concatenation

_list(*args, **kwargs)[source]#

List files in SVN repository (without downloading them).

Wraps svn list (ls).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

lock(targets=None, force=None, **kwargs)[source]#

Lock path or URLs for working copy or repository.

Wraps svn lock.

Return type:

str

Parameters:
  • targets (Path | None) –

  • force (bool | None) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.lock(targets='samplepickle')
"'samplepickle' locked by user '...'."
log(*args, **kwargs)[source]#

Show logs from repository.

Wraps svn log.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

merge(*args, **kwargs)[source]#

Apply diffs between two places to SVN working copy.

Wraps svn merge.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

mkdir(*args, **kwargs)[source]#

Create directory in SVN working copy.

Wraps svn mkdir.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

move(*args, **kwargs)[source]#

Move a file in SVN working copy.

Wraps svn move (mv, rename, ren).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

patch(*args, **kwargs)[source]#

Apply a patch to SVN working copy.

Wraps svn patch.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

propdel(*args, **kwargs)[source]#

Remove a property for this SVN working copy.

Wraps svn propdel (pdel, pd).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

propedit(*args, **kwargs)[source]#

Change a property for this SVN working copy.

Wraps svn propedit (pedit, pe).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

propget(*args, **kwargs)[source]#

Return a property for this SVN working copy.

Wraps svn propget (pget, pg).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

proplist(*args, **kwargs)[source]#

Return list of properties for this SVN working copy.

Wraps svn proplist (plist, pl).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

propset(name, path=None, value=None, value_path=None, target=None, *args, **kwargs)[source]#

Set property for this SVN working copy or a remote revision.

Note: Setting remote properties via –revprop does not work yet.

Wraps svn propset (pset, ps).

Parameters:
Return type:

str

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.propset(name="my_prop", value="value", path=".")
"property 'my_prop' set on '.'"
relocate(*, to_path, **kwargs)[source]#

Set the SVN repository URL for this working copy.

Wraps svn relocate.

Return type:

str

Parameters:

Examples

>>> svn = Svn(dir=tmp_path / 'initial_place')
>>> repo_path = create_svn_remote_repo()
>>> svn.checkout(url=repo_path.as_uri())
'...Checked out revision ...'
>>> new_place = repo_path.rename(tmp_path / 'new_place')
>>> svn.relocate(to_path=new_place.absolute().as_uri())
''
resolve(path, targets=None, depth=None, force=None, *args, **kwargs)[source]#

Resolve conflicts with this SVN working copy.

Wraps svn resolve.

Return type:

str

Parameters:
  • path (list[Path] | Path) –

  • targets (Path | None) –

  • depth (Literal['infinity', 'empty', 'files', 'immediates'] | None) –

  • force (bool | None) –

  • args (Any) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.resolve(path='.')
''
resolved(*, path, targets=None, depth=None, force=None, **kwargs)[source]#

Resolve this working copy’s conflicted state.

Wraps svn resolved.

Return type:

str

Parameters:
  • path (list[Path] | Path) –

  • targets (Path | None) –

  • depth (Literal['infinity', 'empty', 'files', 'immediates'] | None) –

  • force (bool | None) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.resolved(path='.')
''
revert(*, path, targets=None, depth=None, force=None, **kwargs)[source]#

Revert any changes to this SVN working copy.

Wraps svn revert.

Return type:

str

Parameters:
  • path (list[Path] | Path) –

  • targets (Path | None) –

  • depth (Literal['infinity', 'empty', 'files', 'immediates'] | None) –

  • force (bool | None) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> new_file = tmp_path / 'new.txt'
>>> new_file.write_text('example text', encoding="utf-8")
12
>>> svn.add(path=new_file)
'A  new.txt'
>>> svn.commit(path=new_file, message='My new commit')
'...'
>>> svn.revert(path=new_file)
''
status(*args, **kwargs)[source]#

Return status of this SVN working copy.

Wraps svn status (stat, st).

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.status()
''
switch(*, to_path, path, ignore_ancestry=None, **kwargs)[source]#

Switch working copy to a different SVN repo URL.

Wraps svn switch (sw).

Return type:

str

Parameters:

Examples

>>> svn = Svn(dir=tmp_path / 'initial_place')
>>> repo_path = create_svn_remote_repo()
>>> svn.checkout(url=(repo_path / 'sampledir').as_uri())
'...Checked out revision ...'
>>> other_dir = repo_path / 'otherdir'
>>> svn.switch(to_path=other_dir.as_uri(), path='.', ignore_ancestry=True)
'D...Updated to revision...'
unlock(targets=None, force=None, **kwargs)[source]#

Unlock path or URL reserved by another user.

Wraps svn unlock.

Return type:

str

Parameters:
  • targets (Path | None) –

  • force (bool | None) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.lock(targets='samplepickle')
"'samplepickle' locked by user '...'."
>>> svn.unlock(targets='samplepickle')
"'samplepickle' unlocked."
update(accept=None, changelist=None, diff3_cmd=None, editor_cmd=None, force=None, ignore_externals=None, parents=None, quiet=None, revision=None, set_depth=None, *args, **kwargs)[source]#

Fetch latest changes to working copy.

Wraps svn update (up).

Return type:

str

Parameters:
  • accept (str | None) –

  • changelist (list[str] | None) –

  • diff3_cmd (str | None) –

  • editor_cmd (str | None) –

  • force (bool | None) –

  • ignore_externals (bool | None) –

  • parents (bool | None) –

  • quiet (bool | None) –

  • revision (str | None) –

  • set_depth (str | None) –

  • args (Any) –

  • kwargs (Any) –

Examples

>>> svn = Svn(dir=tmp_path)
>>> svn.checkout(url=f'file://{create_svn_remote_repo()}')
'...Checked out revision ...'
>>> svn.update()
"Updating ..."
upgrade(*args, **kwargs)[source]#

Upgrade working copy’s metadata storage format.

Wraps svn upgrade.

Return type:

str

Parameters:
  • args (Any) –

  • kwargs (Any) –