#!/usr/bin/env python
import sys
from svn import core, client, ra

# Parse revisions from the command-line.
revs = [-1, 1]
for i in range(len(sys.argv[1:])):
    arg = sys.argv[i + 1]
    if arg.startswith('-r'):
        revs = map(lambda x: int(x), arg[2:].split(':'))
        if len(revs) != 2:
            print "Invalid revision range."
            sys.exit(1)
        del (sys.argv[i + 1])

# Parse the URL and paths (or magic values).
if len(sys.argv) < 3:
    print "Usage: get-log.py [-rN:M] URL null"
    print "       get-log.py [-rN:M] URL RELPATH1 RELPATH2 ..."
    sys.exit(0)
url =  sys.argv[1]
if sys.argv[2] == 'null':
    paths = None
elif sys.argv[2] == 'empty':
    paths = []
else:
    paths = sys.argv[2:]

# Setup ctx_t's and callbacks and auth_batons and junk.
core.svn_config_ensure(None)
ctx = client.ctx_t()
ctx.auth_baton = core.svn_auth_open([
    client.get_simple_provider(),
    client.get_username_provider(),
    client.get_ssl_server_trust_file_provider(),
    client.get_ssl_client_cert_file_provider(),
    client.get_ssl_client_cert_pw_file_provider(),
    ])
ctx.config = core.svn_config_get_config(None)
ra_callbacks = ra.callbacks_t()
ra_callbacks.auth_baton = ctx.auth_baton
ra_session = ra.open(sys.argv[1], ra_callbacks, None, ctx.config)

def _receiver(log_entry, pool):
    print "Revision %d" % (log_entry.revision)

# Log it!
print "Running logs with:"
print "     url = %s" % (url)
print "   paths = %s" % (str(paths))
print "   start = %d" % (revs[0])
print "     end = %d" % (revs[1])
print "   limit = 10"
print "------------------"
ra.get_log2(ra_session, paths, revs[0], revs[1], 10, 0, 0, 0, [], _receiver)

