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

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

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

大致思路:
1. 可以使用svn status railsapp_root 可以得到一个列表
A  +   test/unit/supplier_category_test.rb
A  +   test/functional/supplier_categories_controller_test.rb
...
A  +   public/inventory/images/system_pic/add.jpg
A  +   public/inventory/images/system_pic/sub.jpg
A  +   public/inventory/stylesheets/my.css

这个列表中就包含了所有新建或者修改的目录和文件,只需要按照这个清单“抓药“就好了

2. 根据这个文件中提示的信息,进行逐行分解,得到相应的路径
A  +   public/inventory/images/system_pic/add.jpg
=>
public/inventory/images/system_pic/add.jpg
然后,判断这个信息指定的父路径(public/inventory/images/system_pic/)是否存在。
不存在,就依次创建。
再判断这个 是否是目录,如果是,则在目标路径下增加相应的目录(不要复制),
如果不是目录(是文件),那么就复制。

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

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

代码:autocreate_upgradepackage.rb
# step
# 1.get svn status
# 2.explain each line to get file or directory 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 .

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 /
    tempfile = ARGV[2] || '/tmp/tempfile.txt'
  end
rescue
  bhelp = true
end
if bhelp
  puts " \
  ruby autocreate_upgradepackage.rb svn_dir desc_dir \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_upgradepackage.rb /tmp/subversion/inventory/tags/20080107 /root/Desktop/mypackage \n\
  "
  exit 
end

prefix_length = 7 #A  +   test/functional/supplier_categories_controller_test.rb

# 1.
system("svn status #{railsroot} > #{tempfile}")

# 2.
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|
    filename = line[ipre,line.length-ipre-1] # -1 : remove the tall ( \n )
    arrList << filename
    }
end


# 3.
system("mkdir #{descroot} -p")
descroot_withsplit = descroot + "/" 
railsroot_withsplit = railsroot + "/"
arrList.each do |line|
  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"


windows版本:
# step
# 1.get svn status
# 2.explain each line to get file or directory 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 .

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 /
    tempfile = ARGV[2] || 'c:\temp\tempfile.txt' # '/tmp/tempfile.txt'
  end
rescue
  bhelp = true
end
if bhelp
  puts " \
  ruby autocreate_upgradepackage.rb svn_dir desc_dir \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_upgradepackage.rb /tmp/subversion/inventory/tags/20080107 /root/Desktop/mypackage \n\
  "
  exit 
end

prefix_length = 7 #A  +   test/functional/supplier_categories_controller_test.rb

# 1.
system("svn status #{railsroot} > #{tempfile}")

# 2.
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|
    filename = line[ipre,line.length-ipre-1] # -1 : remove the tall ( \n )
    arrList << filename
  }
end


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

puts "finished"

分享到:
评论

相关推荐

    根据SVN信息自动生成升级补丁包

    标题中的“根据SVN信息自动生成升级补丁包”指的是在软件开发过程中,利用版本控制系统Subversion(SVN)的数据,自动化地创建一个包含了代码差异的补丁包。这个过程通常用于将软件的新功能或修复的bug推送给用户,...

    JAVA项目根据SVN日志自动生成补丁包

    为了解决这个问题,我们可以利用版本控制系统如SVN的日志信息,结合自动化脚本来自动生成补丁包。本文将详细介绍如何基于SVN日志使用Python脚本实现这一目标,特别是针对JAVAWEB项目。 首先,理解SVN日志的作用至关...

    基于Svn补丁日志自动生成Java项目补丁包[python]

    因此,"基于Svn补丁日志自动生成Java项目补丁包[python]"的解决方案应运而生,它通过自动化流程大大简化了这个过程。 该方案的核心是利用Python脚本解析Svn的日志,从中提取出改动的文件信息,然后将这些改动打包成...

    SubVersion的客户端汉化包

    在描述中提到的 "SubVersion的客户端汉化包",指的是 SubVersion 客户端(尤其是 TortoiseSVN)的中文语言包。这个汉化包使得非英语使用者能够更加方便地使用 TortoiseSVN,因为所有菜单、对话框和提示都已被翻译成...

    根据SVN日志自动生成补丁

    标题 "根据SVN日志自动生成补丁" 描述了一个基于SVNKit的自动化工具,该工具能够分析SVN(Subversion)的日志,找出在版本控制中的改动,然后将这些改动打包成升级补丁,并生成相应的更新日志。这个过程在软件开发中...

    subversion在centos最小化安装所需要的rpm包,包含了执行的脚本

    - 使用`yum install subversion`或`dnf install subversion`命令,系统会自动处理所有依赖关系并安装所需的RPM包。 - 如果是从非标准源安装,可能需要先添加相应的RPM仓库,例如EPEL(Extra Packages for ...

    subversion-ruby-1.7.14-16.el7.x86_64.rpm

    subversion-ruby-1.7.14-16.el7.x86_64.rpm

    Subversion汉化包

    Subversion汉化包则是为了方便中国用户使用而专门设计的,将Subversion的界面和文档翻译成中文,使得国内用户在操作过程中能更直观地理解各项功能。 Subversion的基本概念包括工作副本(Working Copy)、仓库...

    svn subversion-1.7.2

    - 通过持续集成工具(如Jenkins、Travis CI)与Subversion结合,实现自动化构建和测试。 综上所述,Subversion 1.7.2是Subversion版本控制系统的一个重要版本,它带来了诸多改进,增强了版本控制的效率和用户体验...

    Subversion Edge详细安装与使用手册

    - **配置 Java 环境变量**:如果安装 Subversion Edge 前没有安装 Java 和 Python,那么安装过程中会自动同步安装。配置 Java 环境变量的具体步骤如下: - 设置 `JAVA_HOME` 变量为 Java 安装路径,例如:`JAVA_...

    subversion离线安装包

    首先,我们来了解安装Subversion所需的依赖包。`apr-1.5.1.tar.gz`和`apr-util-1.5.3.tar.gz`是Apache Portable Runtime ( APR ) 和 APR Util 包,它们提供了许多操作系统接口和实用工具,Subversion需要这些来运行...

    Subversion

    Subversion Subversion Subversion Subversion Subversion

    subversion

    `subversion-1.7.2.tar.gz` 是 Subversion 1.7.2 版本的源代码包。这个版本发布于2012年,引入了一些重要的改进和特性。1.7.x 系列的一个主要更新是引入了“工作副本数据库”(Working Copy Database),这改变了...

    JIRA和Subversion的集成

    2. **安装JIRA插件**:JIRA提供了一些插件,如“Subversion Issue Updater”或“JIRA-SVN Connector”,它们可以帮助自动化JIRA与Subversion之间的交互。通过JIRA的管理界面,管理员可以安装并配置这些插件,以实现...

    Subversion自动备份

    在团队开发中,Subversion的自动备份功能至关重要,因为它确保了代码的安全性和可恢复性。下面将详细介绍如何配置和执行Subversion的自动备份,以及与之相关的文件`backup.bat`和`simpleBackup.bat`的作用。 首先,...

    根据svn版本库自动生成版本号

    本篇文章将探讨如何利用Python来自动化地从SVN版本库生成版本号,以辅助软件的发布和维护工作。 首先,我们需要理解`MakeVersion.py`、`VersionConf.py`和`VersionFormat.txt`这三个文件的作用: 1. `MakeVersion....

    利用SVN信息制作升级包小工具

    标题中的“利用SVN信息制作升级包小工具”是指通过Subversion(SVN)版本控制系统来创建软件更新或升级包的程序。SVN是一个广泛使用的版本控制系统,它可以帮助开发者跟踪和管理项目源代码的变更。当需要发布软件的...

    subversion-1.10.6.zip

    2. **持续集成**:Maven可以通过自动化脚本与Subversion交互,例如在每次提交后自动触发构建和测试。 3. **版本发布**:当项目准备发布新版本时,Maven可以将工件部署到Subversion仓库,供其他项目使用。 4. **scm...

    Subversion以及TortoiseSVN安装包

    Subversion和TortoiseSVN是两个在软件版本控制领域非常重要的工具,它们主要用于管理和跟踪代码库的变化。Subversion是一个开源的版本控制系统,而TortoiseSVN则是Subversion的一个图形化界面客户端,专为Windows...

Global site tag (gtag.js) - Google Analytics