自动生成升级包(subversion, ruby ) 续

自动生成升级包2(subversion)

之前,已经写了一边有关制作提取当前目录下修改过的文件,这次是当前目录下比较之前某一个版本,然后得到的差异文件。

笔者想制作一个工具,可以很快速的从subversion控制下的目录中,
找出当前版本与之间某一版本之间的差异文件,并且形成升级包,以便于到服务器上的升级工作。
(我们需要将升级包copy到服务器之后,直接将升级包的内容覆盖,就可以完成升级 )
以前这个升级包总是手动创建,很麻烦,尤其是如果文件比较分散的时候,更是如此。

大致思路:
1. 可以使用svn diff -r old_version:current_version svn_url 可以得到一个差异列表
Index: t2.txt
===================================================================
--- t2.txt (版本 0)
+++ t2.txt (版本 4)
@@ -0,0 +1 @@
+ok2 ==> ok3

其中的Index: 后面的就是有修改的文件名。

注意,其中 current_version, svn_url 都是从 指定目录下的.svn/entries中获取,
这个列表中就包含了所有新建或者修改的目录和文件,只需要按照这个清单“抓药“就好了

2. 根据这个文件中提示的信息,进行逐行分解,得到相应的文件及路径
Index: t2.txt
===================================================================
--- t2.txt (版本 0)
+++ t2.txt (版本 4)
@@ -0,0 +1 @@
+ok2 ==> ok3

=>
t2.txt
然后,判断这个信息指定的父路径是否存在。
不存在,就依次创建。
再判断这个 是否是目录,如果是,则在目标路径下增加相应的目录(不要复制),
如果不是目录(是文件),那么就复制。

注意目录一概不要复制,复制之后,会带.svn一起复制的。

3. ruby 调用外部命令可以使用system
例如 system('pwd')
笔者还不知道如何将执行之后的结果捕捉,所以就只能使用临时文件的方法了。:)
如果有那位大虾知道,还望告知一二。


本工具还有几个bug :
如果是删除掉的文件,可能会提示: cp: 无法 stat “xxxx”: 没有那个文件或目录
如果是新增的目录,但是目录下文件,那么此目录也不会生成


# step
# 1.get svn diff
# 2.explain each line to get file with path
# 3.Does check it's parent exist? if not, create it's parent
# 4.if it is a directory , create it
# 5.if it is a file , copy it .
#
# e.g. ruby autocreate_diffpackage.rb sourcepath targetpath old_version
#

bhelp = false
begin
if ["--help","-?",nil,""].member?(ARGV[0])
bhelp = true
else
railsroot = ARGV[0] #'/tmp/subversion/inventory/tags/20080107' # without /
descroot = ARGV[1] #'/root/Desktop/kk2' # without /
old_version = ARGV[2] # 3
tempfile = ARGV[4] || '/tmp/tempfile.txt'
svn_default_path = ARGV[5] || 'svn://192.168.10.109/var/repository'
end
rescue
bhelp = true
end

#---------------------------------------------------------------------------------------------------------------

if bhelp
puts " \
ruby autocreate_diffpackage.rb svn_dir desc_dir old_version \n \
Attention : \n\
1.svn_dir must be a directory. \n \
2.the tail of svn_dir and desc_dir need not be with / . \n \
\n \
e.g. \n \
ruby autocreate_diffpackage.rb /tmp/subversion/inventory/tags/20080107 /root/Desktop/mypackage 5 \n\
"
exit
end

# prepare
svn_entries = "#{railsroot}/.svn/entries"

new_version = old_version
svn_url = ""
iline = 1
File.open(svn_entries).each do |file|

file.each_line { |line|
iline = iline + 1
next if iline > 6
line = line.gsub(/\n/,"")
new_version = line if iline == 5
svn_url = line if iline == 6
}
end


svn_diff_version = old_version.to_s + ":" + new_version.to_s

# 1.
system("svn diff -r #{svn_diff_version } #{svn_url} > #{tempfile}")

# 2.
=begin
Index: t2.txt
===================================================================
--- t2.txt (版本 0)
+++ t2.txt (版本 4)
@@ -0,0 +1 @@
+ok2 ==> ok3

==>
t2.txt
=end


descroot_withsplit = descroot + "/"
railsroot_withsplit = railsroot + "/"
arrList = []
#irailsroot = railsroot=="."? 0 : railsroot.length+1
#ipre = prefix_length + irailsroot
File.open(tempfile).each do |file|
file.each_line { |line|
#Index: t2.txt
if line[0,5] == "Index"
filename = line[6,line.length - 6].strip.gsub(/\n/,"")
arrList << filename
else
next
end
}
end

# 3.
system("mkdir #{descroot} -p")
descroot_withsplit = descroot + "/"
railsroot_withsplit = railsroot + "/"
arrList.each do |line|
line = "" if line.nil?
if not File.exist?(descroot_withsplit+line)
if File.directory?(railsroot_withsplit+line)
system("mkdir #{descroot_withsplit+line} -p") # 4.if it is a directory , create it
else
dirpath = File.dirname(descroot_withsplit+line)
if not File.exist?(dirpath)
system("mkdir #{dirpath} -p") # 3.Does check it's parent exist? if not, create it's paren
end
system("cp #{railsroot_withsplit+line} #{descroot_withsplit+line}") # 5.if it is a file , copy it .
end
end
end

puts "finished"

=begin
自动生成升级包2(subversion)

笔者想制作一个工具,可以很快速的从subversion控制下的目录中,
找出当前版本与之间某一版本之间的差异文件,并且形成升级包,以便于到服务器上的升级工作。
(我们需要将升级包copy到服务器之后,直接将升级包的内容覆盖,就可以完成升级 )
以前这个升级包总是手动创建,很麻烦,尤其是如果文件比较分散的时候,更是如此。

大致思路:
1. 可以使用svn diff -r old_version:current_version svn_url 可以得到一个差异列表
Index: t2.txt
===================================================================
--- t2.txt (版本 0)
+++ t2.txt (版本 4)
@@ -0,0 +1 @@
+ok2 ==> ok3

其中的Index: 后面的就是有修改的文件名。

注意,其中 current_version, svn_url 都是从 指定目录下的.svn/entries中获取,
这个列表中就包含了所有新建或者修改的目录和文件,只需要按照这个清单“抓药“就好了

2. 根据这个文件中提示的信息,进行逐行分解,得到相应的文件及路径
Index: t2.txt
===================================================================
--- t2.txt (版本 0)
+++ t2.txt (版本 4)
@@ -0,0 +1 @@
+ok2 ==> ok3

=>
t2.txt
然后,判断这个信息指定的父路径是否存在。
不存在,就依次创建。
再判断这个 是否是目录,如果是,则在目标路径下增加相应的目录(不要复制),
如果不是目录(是文件),那么就复制。

注意目录一概不要复制,复制之后,会带.svn一起复制的。

3. ruby 调用外部命令可以使用system
例如 system('pwd')
笔者还不知道如何将执行之后的结果捕捉,所以就只能使用临时文件的方法了。:)
如果有那位大虾知道,还望告知一二。


本工具还有几个bug :
如果是删除掉的文件,可能会提示: cp: 无法 stat “xxxx”: 没有那个文件或目录
如果是新增的目录,但是目录下文件,那么此目录也不会生成

=end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值