1import pysvn 2import sys 3import os 4 5def make_tag( from_url, tag_base_url, version ): 6 client = pysvn.Client() 7 client.callback_get_log_message = lambda : (True, 'Tag version '+version) 8 client.callback_get_login = callback_getLogin 9 10 try: 11 from_files = client.ls( from_url, recurse=False ) 12 print( 'Info: Found', from_url ) 13 except pysvn.ClientError as e: 14 print( 'Error: From does not exist',from_url ) 15 return 16 17 try: 18 tag_files = client.ls( tag_base_url, recurse=False ) 19 print( 'Info: Found', tag_base_url ) 20 except pysvn.ClientError as e: 21 print( 'Error: Tag base does not exist',tag_base_url ) 22 return 23 24 cur_versions = [os.path.basename(f['name']) for f in tag_files] 25 26 if version in cur_versions: 27 print( 'Error: Already tagged',version ) 28 return 29 30 31 try: 32 to_url = tag_base_url + '/' + version 33 print( 'Info: Copy',repr(from_url), repr(to_url) ) 34 client.copy( from_url, to_url ) 35 print( 'Info: Copy complete' ) 36 except pysvn.ClientError as e: 37 print( 'Error: ', str(e) ) 38 return 39 40def callback_getLogin( realm, username, may_save ): 41 print( 'May save:',may_save ) 42 print( 'Realm:',realm ) 43 if username: 44 print( 'Username:',username ) 45 else: 46 sys.stdout.write( 'Username: ' ) 47 username = sys.stdin.readline().strip() 48 if len(username) == 0: 49 return 0, '', '', False 50 51 sys.stdout.write( 'Password: ' ) 52 password = sys.stdin.readline().strip() 53 54 save_password = 'x' 55 while save_password.lower() not in ['y','ye','yes','n', 'no','']: 56 sys.stdout.write( 'Save password? [y/n] ' ) 57 save_password = sys.stdin.readline().strip() 58 59 return 1, username, password, save_password in ['y','ye','yes'] 60 61def main(): 62 if len(sys.argv) != 2: 63 print( 'Usage: %s version' % sys.argv[0] ) 64 return 65 66 version = sys.argv[1] 67 from_url = 'https://svn.code.sf.net/p/cxx/code/trunk/CXX' 68 tag_base_url = 'https://svn.code.sf.net/p/cxx/code/tags' 69 70 make_tag( from_url, tag_base_url, version ) 71 72if __name__ == '__main__': 73 main() 74