Skip to main content

A Python abstraction layer for multiple version control systems.

Build Status PyPI Package

python-anyvcs provides a Python interface to work with version control repositories through a consistent interface regardless of the underlying repository type. It currently supports:

  • Git repositories (either bare or non-bare)

  • Mercurial repositories

  • Subversion master repositories (those created with svnadmin create)

The focus is on read-only operations, but a few write operations are supported (like creating new repositories or loading a Subversion dumpfile).

If you are looking for an interface to work with working copies of version control repositories, either contribute to this project or look elsewhere.

Supported Operations

  • ls() - list files

  • cat() - read file contents

  • readlink() - read symbolic link target

  • branches() - list branches

  • bookmarks() - list bookmarks (Mercurial only)

  • tags() - list tags

  • heads() - list all branches, bookmarks, tags, etc.

  • empty() - determine if the repository contains any commits

  • __len__() - count the number of commits in the repository

  • __contains__() - determine if the repository contains the given revision

  • log() - get commit logs

  • changed() - list files that were changed in a given revision

  • pdiff() - get diff that a given revision introduced

  • diff() - get diff between any two revisions

  • ancestor() - find most recent common ancestor of any two revisions

  • blame() - blame (a.k.a. annotate) lines of a file

  • canonical_rev() - get the canonical revision identifier

  • private_path - a path in the repository where untracked data can be stored

  • dump() - create a Subversion dumpfile (Subversion only)

  • load() - load a Subversion dumpfile (Subversion only)

Operations that are not natively supported by the underlying version control system are implemented in this library.

Example

>>> from pprint import pprint
>>> import anyvcs
>>> repo = anyvcs.open('/path/to/repo')
>>> repo.branches()
['1.0_develop', '1.0_master', 'develop', 'master']
>>>
>>> log = repo.log(limit=3)
>>> pprint([commit.message for commit in log])
["Merge branch 'release/1.2.0' into develop\n",
 "Merge branch 'release/1.2.0'\n",
 'add README symlink to keep python happy\n',
 'add copyright information\n']
>>>
>>> ls = repo.ls('master', '/')
>>> pprint(ls)
[{'name': '.gitignore', 'path': '.gitignore', 'type': 'f'},
 {'name': 'AUTHORS', 'path': 'AUTHORS', 'type': 'f'},
 {'name': 'COPYING', 'path': 'COPYING', 'type': 'f'},
 {'name': 'COPYING.LESSER', 'path': 'COPYING.LESSER', 'type': 'f'},
 {'name': 'LICENSE', 'path': 'LICENSE', 'type': 'f'},
 {'name': 'MANIFEST.in', 'path': 'MANIFEST.in', 'type': 'f'},
 {'name': 'README', 'path': 'README', 'type': 'l'},
 {'name': 'README.md', 'path': 'README.md', 'type': 'f'},
 {'name': 'RELEASE-NOTES.txt', 'path': 'RELEASE-NOTES.txt', 'type': 'f'},
 {'name': 'anyvcs', 'path': 'anyvcs', 'type': 'd'},
 {'name': 'setup.py', 'path': 'setup.py', 'type': 'f'},
 {'name': 'tests.py', 'path': 'tests.py', 'type': 'f'}]

Compatibility

python-anyvcs should work with the following software versions:

  • Python: 2.6 or later (including 3.0 or later)

  • Git: 1.7.0 or later

  • Mercurial: 1.6.1 or later

  • Subversion: 1.5 or later

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anyvcs-1.3.0.tar.gz (18.3 kB view details)

Uploaded Source

File details

Details for the file anyvcs-1.3.0.tar.gz.

File metadata

  • Download URL: anyvcs-1.3.0.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for anyvcs-1.3.0.tar.gz
Algorithm Hash digest
SHA256 3535a88dc0d627dfc945af13f8890969788da48250e63da9a0d175cbe7455280
MD5 20e3bd2e7f1289b97633f4829ea60dca
BLAKE2b-256 7b38183f5f6e02908729f5bf7195e572e4a2216183b5f3ca15c76cae64a39c90

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.0

1 file

1.3.1

1 file

This release

1.3.0 This release

1 file

1.2.3

1 file

1.2.2

1 file

1.2.1

1 file

1.2.0

1 file

1.1.1

1.1.0

1.0.1

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page