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.
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
Metadata
Release files for anyvcs 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| anyvcs-1.3.0.tar.gz | 18.3 kB | Without provenance | Details for anyvcs-1.3.0.tar.gz |
Release files / anyvcs-1.3.0.tar.gz
| Download URL | anyvcs-1.3.0.tar.gz |
|---|---|
| Size | 18.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3535a88dc0d627dfc945af13f8890969788da48250e63da9a0d175cbe7455280
|
|
BLAKE2b-256 checksum How to use checksums |
7b38183f5f6e02908729f5bf7195e572e4a2216183b5f3ca15c76cae64a39c90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for anyvcs 1.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.