An abstraction layer for multiple version control systems.
Project description
A Python abstraction layer for multiple version control systems.
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.
tip() - find the tip of a named head
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
compose_rev() - compose a revision identifier which encodes branch and revision
clone() - clone an existing repository
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file anyvcs-1.4.0.tar.gz
.
File metadata
- Download URL: anyvcs-1.4.0.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2872ccdc1fa9bdd8668a2c74c9930c9d2cd9c0a0d8144c4c1e5d19335dcbca05 |
|
MD5 | ac0f9184138edaef8d5d444350e1929a |
|
BLAKE2b-256 | 5984ed84e69682dff7f28dbb4f4fb5f369bf2cc67a0b80bac78f70b1a5b0ed6c |