ruby_svn tag 및 메 일 발송
5265 단어 SVNRubymail우편물 을 발송 하 다
#!/usr/bin/ruby
require 'fileutils'
require 'net/smtp'
dir = ARGV[0]
to_mail = "" #mail address list
$svn_ser = "http://192.168.12.12/svn"
if to_mail.empty?
puts "Please Setting Maillist"
Process.exit(7)
end
`export SVN_EDITOR="/bin/vi"`
usage =<<EOF
-------------------
./script.rb svn_path
-------------------
EOF
if dir.nil?
puts usage
Process.exit(1)
end
if not(File.directory?(dir))
puts "It's Not exist Dir"
Process.exit(2)
end
Dir::chdir(dir)
if not(File.directory?'.svn')
puts "This Dir is not SVN Working Dir"
Process.exit(3)
end
`svn log -v>/tmp/svn_temp_temp`
svn_log = File.open("/tmp/svn_temp_temp",'r')
def format_srt(sa)
m = 0
str, ok = "", ""
sa.each {|x|
if not(/^---+$/.match(x).nil?)
if /^Commit:Release-\d+\.\d+/.match(str) and m == 1
break
else ok = ok + str
end
str = x
m = 1
elsif not(/^r[0-9]+\s/.match(x).nil?)
tmp_array = x.split('|')
str = str + "
ReVersion:%42s
Author:%45s
Date:%47s
" %[tmp_array[0].chop,tmp_array[1][1,18].chop,tmp_array[2][1,19]]
elsif not(/^\s..[ADUCMG]|^Changed\spaths/.match(x).nil?)
if /\/tag\/release-\d+\.|release_notes\.txt/.match(x).nil?
str = str + x
else
x = ''
end
elsif not(/\s.+\w.*|\w.*/.match(x).nil?)
str = str + "Commit:" + x
elsif not(/\s.*$/.match(x).nil?)
str = str
end
}
return ok.gsub(/\s*$/,'').gsub(/Changed paths/,'ChangePath') + "
------------------------------------------------------------------------"
end
def check_re_no()
re_no = ""
File.open("release_notes.txt",'r').each{ |x|
if /Release-/.match(x)
re_no = x
break
end
}
return re_no.split('-')[1].to_f
end
def rel_title(re_no)
re_module = Dir.pwd.split('/')[-1]
release_no = <<EOF
////////////////////////////////////////////////////////////////////////
Module:#{re_module} Release-#{re_no}
////////////////////////////////////////////////////////////////////////
EOF
return release_no
end
def tag(dir,log,project)
copy_www = $svn_ser + "/" + project + dir.split(project)[-1] #$svn_ser + / + TD1T + /Code/RTL
tag_www = $svn_ser + "/" + project + "/Tag" + dir.split(project)[-1] #$svn_ser + / + TD1T + /Tag + /Code/RTL
if File.exist?("release_notes.txt") #exist
dir_no = check_re_no + 1
log = rel_title(dir_no.to_s) + "
" +log
writefile(log)
`svn ci release_notes.txt -m "Release-"#{dir_no.to_s}`
`svn copy #{copy_www} #{tag_www + "/release-" + dir_no.to_s } -m "Release-"#{dir_no.to_s}`
return dir_no
else
log = rel_title('1.0') + "
" +log
writefile(log)
`svn ci release_notes.txt -m "Release-1.0"`
`cd #{dir.split(project)[0] + project} && svn mkdir --parents #{"./Tag" + dir.split(project)[1]} && svn ci #{dir.split(project)[0] + project + "/Tag"} -m "add tag path"`
`svn copy #{copy_www} #{tag_www + "/release-1.0"} -m "Release-1.0"`
return "1.0"
end
end
def mailer(mailadd,re_no,svn_name)
re_no = "Release:% 31s" %re_no
re_module = "Module:% 33s" % Dir.pwd.split('/')[-1]
re_user = "Author:% 34s" % `cd $HOME && grep username -h -A2 ./.subversion/auth/svn.simple/* | tail -1`
project = "Project:% 33s" % svn_name
path = "Path:% 36s" % Dir.pwd.split(svn_name)[1]
File.open(mailadd,'r').each {|dst|
msgstr = <<END_OF_MESSAGE
From: SVN <[email protected]>
To: #{dst.chomp}
Subject: SVN_Release
#{project.chomp}
#{re_no.chomp}
#{re_module.chomp}
#{re_user.chomp}
#{path}
END_OF_MESSAGE
acct = '[email protected]'
domain = "163.com"
pass = '1q1123452'
Net::SMTP.start('smtp.163.com', 25, domain, acct, pass, :login) { |smtp|
smtp.send_message msgstr,'[email protected]',dst.chomp
}
#Net::SMTP.start(server, port, domain, acct, passwd, authtype)
}
end
def writefile(str)
aFile = File.new("release_notes.txt","w")
aFile.puts str
aFile.close
end
def svn_project_name()
name = ''
File.open(Dir.pwd + "/.svn/all-wcprops",'r').each { |x|
if /!svn\/ver\/\d+/.match(x)
name = x
break
end
}
return name.split('/')[2]
end
svn_name = svn_project_name
re_no = tag(Dir.pwd,format_srt(svn_log),svn_name)
mailer(to_mail,re_no,svn_name)
puts "Release-#{re_no} Success"
`rm -f /tmp/svn_temp_temp`
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
svn 팁1. SVN 서버 IP 교체 2.특정 버전 가져오기 3.한 버전의 파일을 업데이트합니다. * svn: E155036: Working copy is too old (format 10, created by Subvers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.