Ruby_SVN打包脚本

发布时间:2020-07-15 22:05:58 作者:nonono11
来源:网络 阅读:422

根据SVN相关目录中的 .f 文件里面的内容来打包,并ci到另一个SVN,然后再发邮件给指定人员。


脚本如下:


#!/usr/bin/ruby
require 'net/smtp'
require 'fileutils'
require 'find'
svn_server = "http://192.168.1.5/svn/TEST"
to_mail = "/home/test/maillist.txt" #mail address list
svn_tmp_dir = "/tmp/tmp." + rand(99999).to_s
def mailer(mailadd,modules,comment,version,tar_name,size,ci_time)
File.open(mailadd,'r').each {|dst|
msgstr = <<END_OF_MESSAGE
From: SVN <sync.svn@163.com>
To: #{dst.chomp}
Subject: SVN_Release
Module:  #{modules}
Comment: #{comment}
Version: #{version}
TarName: #{tar_name}
TarSize: #{size}
CiTime: #{ci_time}
END_OF_MESSAGE
    acct = 'sync.svn@163.com'
    domain = "163.com"
    pass = '123123'
    Net::SMTP.start('smtp.163.com', 25, domain, acct, pass, :login) { |smtp|
        smtp.send_message msgstr,'sync.svn@163.com',dst.chomp
    }
    #Net::SMTP.start(server, port, domain, acct, passwd, authtype)
}
end
def usage
help=<<EOF
Usage:
      ./script ci path tar_name comment
                 
EOF
puts help
end
def checkout(path,tmp_dir,ser)
    FileUtils.mkdir tmp_dir
    Dir::chdir(tmp_dir)
    `svn co "#{ser + path.split("TEST")[-1]}"`
end
def create_tar_list(tmp_dir)
#get xxx.f
file_path_name = []
tar_list = []
Find.find(tmp_dir) { |x|
    if File.basename(x)  == x.split('/')[-2] + ".f"
        file_path_name << x
    else
        next
    end
}
#get need tar file list
true_path = ''
tmp_line = []
file_path_name.length.times { |x|   # file_path_name /tmp/svn_tmp_dir/RTL/include/include.f
    File.open(file_path_name[x],'r').each { |line|
        if line.strip.match(/^\/\//) # ^//
            next
        elsif line.strip.match(/^\.|^\w+/)
            if line.match(/\/\//)
                tmp_line = line.strip.split('//')[0].rstrip.split('/')
            else
                tmp_line = line.strip.split('/')
            end
            tmp_line.delete('.')
            tmp_line.delete('..')         
            true_path = File.join((file_path_name[x].split('/')[3..-2] + tmp_line).uniq)
            tar_list << true_path if File.exist?(true_path)                 
        else
            next
        end
    }
}
writefile(tar_list.uniq,tmp_dir)
end
def writefile(str,tmp_dir)
aFile = File.new(tmp_dir + "/tar.list","w")
    aFile.puts str
aFile.close
end
case ARGV[0]
    when "ci"
        olddir = Dir.pwd
        if `[ -d .svn ] && grep "TEST-REL" .svn/* | wc -l`.to_i == 0
            puts "Not SVN Work Dir OR Not SVN Release Work Dir"
            exit
        end
        #hwasvn ci TEST/Code TarName comment  
        ARGV[1].match(/\/$/) ? path = ARGV[1][0..-2] : path = ARGV[1]
        checkout(path,svn_tmp_dir,svn_server)
        create_tar_list(svn_tmp_dir)
        Dir::chdir(svn_tmp_dir)
        tar_name = "#{ARGV[2]}.tar.bz2"
        `tar -jc -T tar.list -f #{tar_name}`  
        FileUtils.mv tar_name, olddir
        Dir::chdir(olddir)
        result = `svn ci #{tar_name} -m "#{ARGV[3]}" 2>&1`     
        if result.match(/not under/)
            `svn add #{tar_name}`
            result = `svn ci #{tar_name} -m "#{ARGV[3]}"` 
        end
        mailer(to_mail,path,ARGV[3],result.split[-1][0..-2],tar_name,File.size(tar_name),Time.now.strftime("%Y/%m/%d %H:%M")) 
        FileUtils.rm tar_name, :force => true
        FileUtils.remove_dir(svn_tmp_dir)
    else usage
end


推荐阅读:
  1. innobackup的全备和打包脚本
  2. 用shell编写批量打包日志脚本

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

address require vn

上一篇:最快的开平方 sqrt 算法,供赏析

下一篇:Flask-admin 使用总结

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》