PySvn Notes
Page Contents
Preamble...
PySvn is a neat
Python module who's goal is to enable tools to be written in Python
that use Subversion.
I'm using PySvn version 1.7.5.0. You can find out your version by doing the
following as unfortunately pysvn.__version__ isn't defined :(
>>> import pysvn >>> pysvn.version (1, 7, 5, 0)
A Little (Scrappy) Example
A silly little script that does a slightly more pretty log print than the standard SVN log. It colours headings and organises the file lists by action. Based on examples found on the PySvn developers guide.
import pysvn
import colorama
from collections import defaultdict
colorama.init()
TITLE_COLOR = colorama.Fore.GREEN + colorama.Style.BRIGHT
START_BOLD = colorama.Style.BRIGHT
END_COLOR = colorama.Style.RESET_ALL
client = pysvn.Client()
svn_log_entries = client.log(".", discover_changed_paths=True)
action_dict = {"M" : "Modified", "A": "Added", "U": "Updated", "G" :"Changes merged", "D" : "Deleted", "R" : "Replaced", "B" : "Branched"}
for svn_log_entry in svn_log_entries:
by_action = defaultdict(list)
for path in svn_log_entry.changed_paths:
if (path.action == "A") and (path.copyfrom_path is not None):
by_action["B"].append(path)
else:
by_action[path.action].append(path)
if "B" in by_action:
print START_BOLD + ">" * 40 + END_COLOR
print TITLE_COLOR + "Revision: " + END_COLOR + str(svn_log_entry.revision.number)
print TITLE_COLOR + "Author: " + END_COLOR + svn_log_entry.author
print TITLE_COLOR + "Message: " + END_COLOR
print svn_log_entry.message if hasattr(svn_log_entry, "message") else "-- No message --"
print TITLE_COLOR + "Files:" + END_COLOR
for key in by_action:
if key != "B": continue
print " " + START_BOLD + action_dict[key] + ":"
print " " + "-" * (len(action_dict[key]) + 1) + END_COLOR
paths_for_action = by_action[key]
for path in paths_for_action:
print " " + path.path
if path.copyfrom_path is not None:
print " From: " + path.copyfrom_path + " @" + str(path.copyfrom_revision.number) + " (" + str(path.copyfrom_revision.kind) + ")"
print START_BOLD + "<" * 40 + END_COLOR
print "\n"
Getting file/repo logs and info
currPropList = client.proplist(curr_path, recurse=False)
if len(currPropList) > 0:
currPropList = currPropList[0][1].keys()