All pastes #405526 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-03-21 20:09 UTC
rendered paste body
#!/usr/bin/python
"""
Update all Subversion trees within a given directory.
"""
import sys, os, os.path
from optparse import OptionParser
import pysvn

parser = OptionParser(usage="%prog [options] FILE...");
parser.add_option("-d", "--directory", dest="directory", default=".", help="The base directory for updating.", metavar="DIRECTORY")
(options, args) = parser.parse_args()

#repository = repos.open(directory)
basedir = options.directory
dirs = os.listdir(basedir)

def printlist(fnlist):
    if len(fnlist) == 0:
        print "\tNo files"
    else:
        for fn in fnlist:
            print "\t%s" % (fn)

for dir in dirs:
    client = pysvn.Client()
    fulldir = os.path.join(basedir, dir)
    if os.path.isdir(os.path.join(fulldir)):
        print ""
        print "Working on directory %s..." % (fulldir)
        sys.stdout.flush()
        try:
            canupdate = True
            changes = client.status(fulldir)
            fadded = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.added]
            fremoved = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.deleted]
            fchanged = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.modified]
            fconflicts = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.conflicted]
            funversioned = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.unversioned]
            if (    (len(fadded) == 0)
                    and (len(fremoved) == 0)
                    and (len(fchanged) == 0)
                    and (len(fconflicts) == 0)
                    and (len(funversioned) == 0)) :
                # If no local changes exist, update the repository
                print "Updating repository in directory %s..." % (fulldir)
                sys.stdout.flush()
                client.update(fulldir)
                print "Finished."
                sys.stdout.flush()
            else:
                print 'files to be added:'
                printlist(fadded)
                print 'files to be removed:'
                printlist(fremoved)
                print 'files that have changed:'
                printlist(fchanged)
                print 'files with merge conflicts:'
                printlist(fconflicts)
                print 'unversioned files:'
                printlist(funversioned)
                sys.stdout.flush()
        except:
            print "failure"