#!/usr/bin/python # -*- coding: utf-8 -*- # # $Id: make_tag.py 1221 2016-05-26 11:00:07Z ehrlicher $ # $HeadURL: svn://192.168.133.21/admin/rpmbuild/make_tag.py $ # $Author: ehrlicher $ # Created by Christian Ehrlicher, SLSE, 20013-02-19 # import datetime import getopt import os import subprocess import sys # helper functions def verbose(): verb = os.getenv( "EMERGE_VERBOSE" ) if ( not verb == None and verb.isdigit() and int(verb) > 0 ): return int( verb ) else: return 0 def debug( message ): if verbose() > 0: print "emerge debug:", message return True def die( message ): print >> sys.stderr, "emerge fatal error: %s" % message sys.exit( 1 ) def system( cmdstring, file = None ): debug( "Executing '%s'" % cmdstring ) out = subprocess.PIPE if file != None: out = file p = subprocess.Popen( cmdstring, shell=True, stdout=out, stderr=sys.stderr ) ret = p.wait() if ( ret != 0 ): die( "Error executing %s (%s)" % (cmdstring, ret) ) ret = "" if file == None: ret = p.stdout.read().strip() return ret def getSvn_Release( svn_dir ): try: old_lang = os.environ['LANG'] except: old_lang = None os.putenv("LANG", "en_US") cmd = "svn info %s | grep \"Last Changed Rev\"" % svn_dir rel = system( cmd ).split(':')[1].strip() if old_lang: os.putenv("LANG", old_lang) return rel def usage(): print >> sys.stdout, "Usage: %s [-r repository] [-s source] -p -v " % sys.argv[0] print >> sys.stdout, " e.g.: %s -r TDS -s ctc -p tes_uae_ctc -v 4.3" % sys.argv[0] print >> sys.stdout, " e.g.: %s -r AVS -s trunk -p tes_uae_ctc -v 4.3" % sys.argv[0] def main(): svn_server = "slssvn" try: ip = socket.gethostbyname(socket.gethostname()) if ip.startswith('172.'): svn_server = "ECCORAS01" except: print >> sys.stdout, "Using %s as svn server" % svn_server try: opts, args = getopt.getopt(sys.argv[1:], "p:r:s:v:", ["project_name=", "source=", "repository=", "version=",]) except getopt.GetoptError, err: print >> sys.stderr, err usage() sys.exit(2) version = None project_name = None svn_repo = "TDS" svn_src = None for o, a in opts: if o in ("-p", "--project_name"): project_name = a if o in ("-r", "--repository"): svn_repo = a if o in ("-s", "--source"): svn_src = a if o in ("-v", "--version"): version = a.split('.') try: version_maj = version[0] version_min = version[1] version = "%s.%s" % ( version_maj, version_min ) except: die( "Invalid version format (maj.min): %s" % a ) if not version or not project_name: usage() die("Version or project name not defined") if not svn_src: svn_src = project_name[project_name.rfind('_') + 1:] project = project_name[:project_name.rfind('_'):] subproject_src = svn_src subproject_dst = project_name[project_name.rfind('_') + 1:] svn_branch = "svn://%s/%s/branches/%s/stable/%s" % ( svn_server, svn_repo, project, subproject_src ) full_version = "%s-%s" % ( version, getSvn_Release( svn_branch ) ) svn_tag = "svn://%s/%s/tags/%s/%s/%s_%s-%s" % ( svn_server, svn_repo, project, subproject_dst, project, subproject_dst, full_version ) print "Project: %s" % project print "SubProject SRC: %s" % subproject_src print "SubProject DST: %s" % subproject_dst print "SVN Path: %s" % svn_branch print "SVN Tag: %s" % svn_tag filename = "svn-commit-msg-branch-%s" % project_name f = open( filename, 'w' ) f.write( "Tagged TES UAE %s rev %s on %s\n" % ( project_name.upper(), full_version, datetime.date.today().isoformat() ) ) f.close() system("svn cp %s %s -F %s" % ( svn_branch, svn_tag, filename ) ) os.remove( filename ) if __name__ == "__main__": main()