`
hellosoft
  • 浏览: 54089 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自动生成升级包(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
分享到:
评论

相关推荐

    课设毕设基于SSM的毕业生就业信息管理系统-LW+PPT+源码可运行

    课设毕设基于SSM的毕业生就业信息管理系统--LW+PPT+源码可运行

    STM32设置闹钟中断-博文程序源码

    发了《STM32设置闹钟中断》一文后,大家都要问我要源码,其实我也找不到,当初也只是做设计时的一部分,根本没留单独的源代码,今天按博文特意重新整理了一下,有需要的自己下载吧。

    node-v0.8.26-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python非常炫酷的跳动爱心代码

    python爱心代码高级 python非常炫酷的跳动爱心代码 python非常炫酷的跳动爱心代码 python非常炫酷的跳动爱心代码 python非常炫酷的跳动爱心代码 python非常炫酷的跳动爱心代码

    123pan_2.0.5.exe

    123pan_2.0.5

    NOSQL-课程复习资料

    NOSQL-课程复习资料

    node-v0.10.20-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python爱心代码高级.zip

    python爱心代码高级

    springboot270基于JAVA的社团管理系统的设计与实现.rar

    开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat11+ 开发软件:idea/eclipse(推荐idea)

    ClaudiaIDE.vsix

    ClaudiaIDE

    node-v0.8.20-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.8.23-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于JavaScript+html+css开发的泊车系统+源码(毕业设计&课程设计&项目开发)

    基于JavaScript+html+css开发的泊车系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于JavaScript+html+css开发的泊车系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于JavaScript+html+css开发的泊车系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于JavaScript+html+css开发的泊车系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~

    node-v0.8.17-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    OpenHarmony下的minicom工具

    1. 发送文件到OpenHarmony: hdc file send minicom /data hdc shell chmod +x /data/minicom hdc shell mkdir -p /data/terminfo/v/ hdc file send vt100 /data/terminfo/v/ 2. 进入串口之后,执行以下命令运行minicom setenforce 0 export TERMINFO=/data/terminfo export TERM=vt100 /data/minicom -D /dev/ttyS9 3. minicom的操作方式,跟在linux系统下一模一样。 备注:这个工具在hdc shell连接终端下使用不友好,只能看到进入的界面,其他的操作都看不到。

    Optimizer-16.4.exe

    Optimizer-16.4

    node-v0.10.42-linux-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.9.6-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    springboot265基于Spring Boot的库存管理系统.rar

    开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat11+ 开发软件:idea/eclipse(推荐idea)

    node-v0.10.31-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics