Ruby_SVN打包脚本

简介:

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


脚本如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/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



本文转自 nonono11 51CTO博客,原文链接:http://blog.51cto.com/abian/1363780,如需转载请自行联系原作者
相关文章
|
4月前
|
存储 数据库 开发者
Ruby的魔法之旅:如何从命令行脚本演变为Web应用
【8月更文挑战第31天】在编程领域,Ruby凭借其灵活优雅的语法深受开发者喜爱。从命令行脚本到Web应用,Ruby均能游刃有余。它可以帮助我们简化日常任务,如批量重命名文件或自动备份数据。随着技能提升,Ruby还能用于开发复杂的数据抓取工具,并通过Sinatra框架快速搭建Web接口,实现功能共享。其强大的社区支持和简洁的代码风格,使Ruby成为探索编程世界的理想选择,无论处理文本还是构建应用,Ruby都能带来高效与便捷。
46 0
|
2月前
|
XML 前端开发 数据格式
Ruby脚本:自动化网页图像下载的实践案例
Ruby脚本:自动化网页图像下载的实践案例
|
4月前
|
API 数据库 Ruby
Ruby自动化魔法:揭秘日常任务的脚本编程秘籍
【8月更文挑战第31天】使用Ruby编写自动化脚本是一种高效且直观的方式。首先确保已安装Ruby环境,然后创建`auto_script.rb`文件开始编写。Ruby语法简洁优雅,内置及第三方库丰富,便于处理文件操作、网络请求和数据库交互等任务。通过`FileUtils`可轻松复制、删除或移动文件;利用`net/http`库可与网络API交互;`whenever`库帮助定时执行任务;而`mail`库则方便发送邮件。Ruby的强大功能和活跃社区支持,使自动化任务变得简单有趣。
56 0
|
测试技术 Python
【python脚本】ICer的脚本入门训练——svn_back
【python脚本】ICer的脚本入门训练——svn_back
清空文件夹下的SVN文件BAT脚本
清空文件夹下的SVN文件BAT脚本
145 0
批处理清理SVN文件BAT脚本
批处理清理SVN文件BAT脚本
85 0
|
自然语言处理 Ruby
Ruby脚本解释流程
Ruby提供了ripper这个工具,我们可利用此工具分析ruby代码,方便定位性能问题。 以下内容都是以如下代码为例: x > 100 ? 'foo' : 'bar' Ruby在执行程序前会将代码转化为更加结构化的语句 第一步:将代码切分为一个一个的词条 ripper的tokenize的方法可以将代
185 0
SVN启停脚本
说明:特别注意红色部分,外部$1传入Msg函数时失效,故特此读取一遍再传入!执行时要给脚本加执行权限!#chmod 755 /scripts/svn   [root@kazihuo /scripts]# cat svn 1 #!/bin/bash 2 #by luomurui 2018/05/07 3 4 [ -f /etc/init.
1070 0