SVN Project Release Script

Source: Internet
Author: User

Before it was a toss with Ruby, now learning Python, and then originally doing for a project, now for multiple projects,

Now record it.

#!/usr/bin/python# -*- coding:utf-8 -*-import reimport sysimport osimport  filecmpimport smtplibimport tempfileimport linecacheimport datetimefrom  email.mime.text import mimetext  svn_ser = {  "AAA": "http://bbb.163.net/svn/ AAA ",             " BBB ":" http://aaa.163.net/ SVN/BBB " }svn_rel_ser = "  svn_rel =  "     svn_rel_dir  =  "/branches" svn_tmp_dir = tempfile.mkdtemp () tar_list_name = svn_tmp_dir +   "/tar.list"  maillist =  "/home/"  + os.getlogin (). replace ('. ', ')  +  '/'. Maillist.txt "svn_name, svn_comment = ",  "OLD_DIR&NBSP;=&NBSP;OS.GETCWD () run_user =  ["Li.li", "Se.ni", "163"]def check_user ():   if os.getlogin ()  in run_user:     if&nbSp;not os.path.exists (maillist):      print  "Mail List File  not exist! "       print  "Please vim /home/%s/.maillist.txt"  %  Os.getlogin (). replace ('. ', ')       sys.exit (1)   else:     print  "permission denied!"     sys.exit (1) def send_mail (Tar_name, diff):     ci_time  = datetime.datetime.now (). Strftime ('%y-%m-%d %h:%m:%s ')   mail_host= "smtp.163.com"    mail_user= "[email protected]"      mail_s=  "ABCABC"    sub =  "Svn_release"   content =  "  Module:  RTL   comment: %s  version: %s  tarname: %s  tarsize: %s   citime: %s    ============= diffsvn: ======================  %s   ==========================================    '  %  (Svn_comment, re.findall (' [0-9]{3} ',  tar_name) [0], tar_name,  Os.path.getsize (tar_name), ci_time, diff )   f = open (maillist, ' R ')    for i in f:    if not re.match (' ^# ', i):       me= "SVN" + "<" +mail_user+ ">"         msg =  mimetext (content,_subtype= ' plain ', _charset= ' gb2312 ')         msg[ ' Subject '] = sub        msg[' from '] = me         msg[' to '] = i      try:           server = smtplib. SMTP ()            server.connect (Mail_host)           server.login (mail_user,mail_s)           server.sendmail (me, i  ,  msg.as_string ())           server.close ()          except Exception, e:           print  "Send to %s error"  % i    f.close ()   def usage ():  tmp =  "  usage               script project_name [comment]             e.g.    script AAA  " Test by me "                     script aaa           '   print  Tmp   def co_check (Co_ser):   os.chdir (Svn_tmp_dir)   os.system ("svn  co %s/code/rtl 1>/dev/null 2>&1 " % co_ser) def create_tar_list ():   file_path = []  tar_list = []  for filepath,pathname, Filename in os.walk (svn_tmp_dir):      #filepath   fullpath      #pathname   fullpath child dir     #filename    child dir file    if os.path.exists (filepath +  "/"  +  filepath.split ('/') [-1] +  ". F"):       file_path.append (filepath  +  "/"  + filepath.split ('/') [-1] +  '. F ')              tmp_line = []  true_path =  '     for i in  file_path:    f = open (i, ' R ')     for line in  f:      if re.search (R ' ^\/\/', Line.strip ()):         next      elif re.search (R ' ^\.| ^\w+ ', Line.strip ()):          if re.search (R ' \/\/', line):           tmp_line = line.strip (). Split ('//') [0]. Rstrip (). Split ('/')          else:           tmp_line = line.strip (). Split ('/')          if  '. '  in tmp_line:          del tmp_line[tmp_ Line.index ('. ')]         if  ' ... '  in tmp_line:          del tmp_line[tmp_ Line.index ('.. ')]         ture_path = os.path.dirname (i)  +  "/"   +  '/'. Join (Tmp_line)         if os.path.isfile (Ture_path):           tar_list.append ("."  + ture_path.split (Svn_tmp_dir) [-1])     f.close ()   open ( tar_list _name,  ' W '). Write (' \ n '. Join (Tar_list)) Def tar_file_name ():   os.system (' cd %s  && mkdir rel tmp && cd rel && svn co  %s 1>/dev/null 2>&1 '  %  (svn_tmp_dir, svn_rel_ser)       #can  not find tar?   tmp_name = os.popen ("cd %s && file $ (svn log -v | grep  ' tar.bz2 '  | awk   ' {print \ '. \ "$NF} ')  | grep -v error"  %  (svn_tmp_dir +  "/rel /" + svn_rel "). Read ()   if tmp_name.strip ()  ==  ":     if svn_name ==  "AAA":       return [svn_name +   "_RELEASE.001.TAR.BZ2"]    else:      return [svn _name +  "_001.tar.bz2"]  else:    tmp_name = tmp_name.split ( ) [0].split ('/') [ -1].strip () [0:-1]    if svn_name ==  ' AAA ':       tmp_no = int (Tmp_name.split ('. ') [-3])  + 1      new_name = svn_name +  "_release.%0 3D.TAR.BZ2 " % tmp_no      returN [new_name,tmp_name.split ('/') [ -1]]    else:      tmp_ No = int (Tmp_name.split ('_') [ -1][0:3])  + 1      new_name  = svn_name +  "_%03D.TAR.BZ2"  % tmp_no      return  [new_name,tmp_name.split ('/') [ -1]]def diff_svn (tar_name):      diff_tmp  = []   tar_path =  "./rel"  + os.popen ("cd %s/rel & & find . -name %s " %  (svn_tmp_dir, tar_name). read (). Strip () [1:]   os.system ("cd %s && tar xf %s -c %s"  %  (svn_tmp_dir , tar_path, svn_tmp_dir +  "/tmp"))   f = open (tar_list_name,  ' R ')   for i in f:    i = i.strip ()      Filename = svn_tmp_dir +  "/tmp"  + i[1:]    if os.path.isfile (svn_tmp_dir  +  "/tmp" &NBSP;+&NBSP;I[1:]):  #exist  file ---> cmp     &NBSP;&NBSP;IF&NBSP;NOT&NBSP;FILECMP.CMP (svn_tmp_dir + i[1:],svn_tmp_dir +  "/tmp"  +  i[1:]):         diff_tmp.append (Os.path.dirname (I.strip ()))      else:      diff_tmp.append (Os.path.dirname (I.strip ()))    f.close ()   return list (set (diff_tmp))     #--------------------------     if len (SYS.ARGV)  <= 1:  usage ()   sys.exit (1) Else :   try:    svn_name, svn_comment = str.upper (sys.argv[1]),  Sys.argv[2]  except:    svn_name, svn_comment = str.upper ( SYS.ARGV[1]),  "Auto rElease "  if not svn_ser.has_key (svn_name):       usage ()     sys.exit (1)    if svn_name ==  ' AAA ':     svn_rel_ser, svn_rel = svn_ser[svn_name] +  "-rel", svn_name +  "- REL "  else:    svn_rel_ser, svn_rel = svn_ser[svn_name] +   "_rel", svn_name +  "_rel"   svn_rel_dir = svn_tmp_dir +  "/ rel/" + svn_rel + "/branches "  check_user ()    co_check ( svn_ Ser[svn_name]) create_tar_list () tar_name = tar_file_name () if  "001"  in tar_name[0]:   diff =  ' Else:  diff = diff_svn (tar_name[1])   if len ( diff)  == 0:    diff =  '   else:    diff  =  "\ n". Join (diff)# svn ci   if raw_input ("are you sure release? [y|n]   \n   ). Lower (). Strip ()  ==  "y":   os.system ("cd %s &&  tar -jc -t tar.list -f %s " %  (svn_tmp_dir, tar_name[0))    os.chdir (Svn_rel_dir)   os.system ("MV&NBSP;.. /.. /.. /%s . "  % tar_name[0])   os.system ("svn add %s"  % tar_name[0])    Os.system ("svn ci %s -m  '%s '"  %  (tar_name[0], svn_comment))      # send mail  send_mail (Tar_name[0],diff)   print  "svn  Release ok "Else:  pass# delete temp fileos.chdir ('/tmp ') Os.system (' Rm -rf  $ (ls -1 /tmp | grep -e  "tmp[a-za-z0-9]+") sys.exit (0)


SVN Project Release Script

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.