#!/usr/bin/env python import os.path import argparse import sys from subprocess import call def update(apps_dir): """Updates a collection of Subversion/Git/Mercurial/Bazaar working copies, including subdirectories""" for app_name in os.listdir(apps_dir): app_dir = os.path.abspath(os.path.join(apps_dir, app_name)) if os.path.isdir(app_dir): git_path = os.path.join(app_dir, '.git') svn_path = os.path.join(app_dir, '.svn') hg_path = os.path.join(app_dir, '.hg') bzr_path = os.path.join(app_dir, '.bzr') if os.path.lexists(svn_path): print "Updating svn %s" % app_dir os.chdir(app_dir) call(['svn', 'update']) elif os.path.lexists(git_path): print "Updating git %s" % app_dir os.chdir(app_dir) call(['git', 'pull']) elif os.path.lexists(hg_path): print "Updating hg %s" % app_dir os.chdir(app_dir) call(['hg', 'pull', '-u']) elif os.path.lexists(bzr_path): print "Updating bzr %s" % app_dir os.chdir(app_dir) call(['bzr', 'update']) else: update(app_dir) else: continue return None if __name__ == "__main__": parser = argparse.ArgumentParser(description = "Updates a collection of Subversion/Git/Mercurial/Bazaar working copies, including subdirectories") parser.add_argument("--path", default = "./", help = "Directory to be updated (maybe the parent dir). (Default: current folder)") args = parser.parse_args() path = os.path.abspath(args.path) if os.path.isdir(path): update(path) print ">>> DONE: Successfully updated %s" % (os.path.basename(path),) sys.exit(0) else: print ">>> ERROR: %s is not a valid directory" % (os.path.basename(path),) sys.exit(1)