#!/usr/bin/env python import sys import os import svn.core import svn.client if '--help' in sys.argv: sys.stdout.write("""\ Usage: %s [CONFIG_DIR] Crawl the authentication credentials cache under CONFIG_DIR (or the default user Subversion runtime configuration directory if not provided), displaying what is found and prompting the user regarding whether Subversion should or should not delete each cached set of credentials found. """ % (sys.argv[0])) sys.exit(0) config_dir = svn.core.svn_config_get_user_config_path(None, '') if len(sys.argv) > 1: config_dir = sys.argv[1] svn.core.svn_config_ensure(config_dir) def print_help(): sys.stdout.write("""\ Valid actions are as follows: (v) view details of the credentials (d) delete the credentials (n) continue to next credentials (q) quit the program (?) show this help output """) def show_creds(hash): hash_keys = hash.keys() maxkeylen = max(map(lambda x: len(x), hash_keys)) maxvallen = max(map(lambda x: len(x), hash.values())) hash_keys.sort() sys.stdout.write("+") sys.stdout.write("-" * (maxkeylen + 2)) sys.stdout.write("+") sys.stdout.write("-" * (78 - maxkeylen - 2)) sys.stdout.write("\n") for key in hash_keys: sys.stdout.write("| %s | %s\n" % (key.ljust(maxkeylen), hash[key])) sys.stdout.write("+") sys.stdout.write("-" * (maxkeylen + 2)) sys.stdout.write("+") sys.stdout.write("-" * (78 - maxkeylen - 2)) sys.stdout.write("\n") def walk_func(cred_kind, realmstring, hash, pool): show_creds({ 'cred_kind' : cred_kind, 'realmstring' : realmstring }) while 1: yesno = raw_input(" Action (v/d/n/q/?) [n]? ") if yesno == '?': print_help() elif yesno == 'v': show_creds(hash) elif yesno == 'n': return 0 elif yesno == 'd': return 1 elif yesno == 'q': raise svn.core.SubversionException("", svn.core.SVN_ERR_CEASE_INVOCATION) elif yesno == '': return 0 else: sys.stderr.write("ERROR: Invalid input") svn.core.svn_config_walk_auth_data(config_dir, walk_func)