`

用shell和java对svn代码打增量包

 
阅读更多
每次从svn上打增包都很麻烦,好像也没有找到什么工具,就想用shell来解决这个问题,无奈shell不精通,只能用shell+java来实现这个功能。

第一步:首先要比较出两个版本之间改变的文件,并把有改变的文件文件路径生成一到一个文件里。这一步我用shell来完成。
这里假设要打796到809后的增量包。把改变的文件路径生成到patchfilepath.txt里面。
svn diff -r 809:796|grep -i Index:|awk -F : '{print $2}' >patchfilepath.txt

第二步用java完成。

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
 * 这个类用来把两个版本有变化的文件考到指定的目录下
 * 在运行这个类前,应该把要打的版本update下来
 * @author Alec
 *
 */
public class PackageSVN {
	
	public static String configPath = "D:/project/workspace/Test/src/com/yan/config.txt";//版本之间有改变的文件的路径列表
	public static String baseDir = "D:/project/workspace/ofbiz-9.4new/";//源文件根目录
	public static String destDir = "E:/ofbiz_svn/";//目标文件根目录

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new FileReader(configPath));
		String s = null;
		while((s = br.readLine()) != null) {
			s = s.trim();//去掉路径前面的空格
			String str = destDir + s;
			if(!destDir.equals(str)){//过滤空行
				copy(s,destDir);
			}
		}
		br.close();
		compress("E:/ofbiz_svn","E:/ofbiz_svn/ofbiz_svn20111102.zip");
	}
		
	private static void copy(String file, String destbaseDir) throws Exception {
		String srcFile = baseDir + file;
		String desFile = destDir + file;
		
		int lastIndex = desFile.lastIndexOf("/");
		String desPath = desFile.substring(0, lastIndex);
		
		File srcF = new File(srcFile);
		if(srcF.exists()){//如果不存在这样的源文件,就不再拷贝,这个用来解决版本之间有删除文件的情况。
			File desF = new File(desFile);
			File desP = new File(desPath);
			if(!desP.exists()) {
				desP.mkdirs();
			}
			System.out.println(srcFile);
			FileInputStream fis = new FileInputStream(srcF);
			FileOutputStream fos = new FileOutputStream(desF);
			
			byte[] buf = new byte[1024];
			int len = 0;
			while((len = fis.read(buf)) != -1) {
				fos.write(buf,0,len);
			}
			fos.flush();
			fos.close();
			fis.close();
		}
	}
	
	 /** *//** 
     * 递归压缩文件 
     * @param source 源路径,可以是文件,也可以目录 
     * @param destinct  目标路径,压缩文件名 
     * @throws IOException 
     */ 
    private static void compress(String source,String destinct) throws IOException { 
        List fileList=loadFilename(new File(source)); 
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(destinct))); 
        
        byte[] buffere=new byte[8192]; 
        int length; 
        BufferedInputStream bis; 
        
        for(int i=0;i<fileList.size();i++) { 
            File file=(File) fileList.get(i); 
            zos.putNextEntry(new ZipEntry(getEntryName(source,file))); 
            bis=new BufferedInputStream(new FileInputStream(file)); 
            
            while(true) { 
                length=bis.read(buffere); 
                if(length==-1) break; 
                zos.write(buffere,0,length); 
            } 
            bis.close(); 
            zos.closeEntry(); 
        } 
        zos.close(); 
    } 
    /** *//** 
     * 递归获得该文件下所有文件名(不包括目录名) 
     * @param file 
     * @return 
     */ 
    private static List loadFilename(File file) { 
        List filenameList=new ArrayList(); 
        if(file.isFile()) { 
            filenameList.add(file); 
        } 
        if(file.isDirectory()) { 
            for(File f:file.listFiles()) { 
                filenameList.addAll(loadFilename(f)); 
            } 
        } 
        return filenameList; 
    } 
    /** *//** 
     * 获得zip entry 字符串 
     * @param base 
     * @param file 
     * @return 
     */ 
    private static String getEntryName(String base,File file) { 
        File baseFile=new File(base); 
        String filename=file.getPath(); 
        //int index=filename.lastIndexOf(baseFile.getName()); 
        if(baseFile.getParentFile().getParentFile()==null) 
            return filename.substring(baseFile.getParent().length()); 
        return filename.substring(baseFile.getParent().length()+1); 
    }

}
2
0
分享到:
评论

相关推荐

    java 写的根据svn信息生成的增量打包

    java 写的根据svn信息生成的增量打包工具类,有部分路径和判断条件需要修改,修改正确后可直接执行main方法运行。

    svn增量打包小工具

    【svn增量打包小工具】是一种基于Java开发的实用程序,专为IT专业人士设计,用于高效地管理和打包在Subversion(svn)版本控制系统中的代码更改。这个小工具的主要目的是简化版本控制过程,特别是在处理大型项目时,...

    JAVA增量包打包工具

    "JAVA增量包打包工具"就是针对这一需求而设计的专业桌面应用程序,旨在帮助开发者实现自动化、高效的Web项目增量打包和发布。这款工具支持多种版本控制系统,包括Gitee(国内的Git托管平台)、Git和SVN,为多模块...

    svn增量包工具

    这个工具的来源:  从事了几年的工作之后,发现在部署服务的时候,总是需要将自己修改的源码编译... 源于上述遇到的问题,综合平时上班所需,开发了这个小工具,简称(svn增量包工具); 希望对各位小伙伴有所帮助

    svn增量包工具类

    你还在为svn打增量包发愁? svn 增量包工具类

    JAVA编写SVN统计代码数量系统

    【标题】"JAVA编写SVN统计代码数量系统"是一个基于Spring Boot框架的项目,用于统计在Subversion(SVN)版本控制系统中的代码提交情况。它能够详细地分析每个团队成员在SVN仓库中的代码贡献量。 【核心知识点】: ...

    svn 日志导出 增量补丁工具

    总结来说,"svn日志导出增量补丁工具"是一个能够帮助开发者高效管理和分发代码更改的实用工具。它结合了svn的日志查询与差异比较功能,生成只包含所需更改的补丁包,从而减少了网络传输的负担,提高了开发效率。通过...

    java代码下载svn上的项目

    用java代码下载svn上的项目,包含svnkit的jar包,可以根据版本号下载项目,同路径下会删除原来下载过的项目。

    java实现的svn统计修改代码行数完整源码

    本篇文章将详细介绍一个使用Java编写的工具,该工具能够统计SVN中的代码修改情况。 首先,我们需要理解SVN的工作原理。Subversion是一个分布式版本控制系统,用于管理文件和目录的变更历史。通过记录每个文件的每次...

    java 增量自动打包 增量更新

    eclipse插件 可打包增量文件,可一键将增量文件更新至测试环境且自动重启 一、使用条件 1、eclipse (eclipse 4.0以上) 2、版本管理用的svn 二、使用方法 1、将下载的jar 放入eclipse\dropins下 2、重启eclipse ...

    svnkit插件开发包 支持Java开发svn一键打包

    SVNKit是一款纯Java实现的Subversion(SVN)客户端库,它允许开发者在Java应用程序中直接集成SVN功能,无需依赖任何本地SVN客户端。这个压缩包提供的"svnkit-1.10.6"是SVNKit的一个版本,包含了支持Java开发的SVN...

    打包增量包方式.docx

    首先,需要使用SVN插件在Eclipse中生成补丁文件,然后通过Java代码或Ant脚本将补丁文件应用于项目中,实现自动化增量打包。 生成增量补丁文件的方法有两种,一种是使用Ant脚本,另一种是使用纯Java代码。使用Ant...

    java操作svn把资源下载到服务器

    Java操作SVN将资源下载...总之,通过使用Java和SVNKit库,你可以编写自定义的脚本来自动化从SVN仓库下载资源到服务器的任务,从而提高开发效率和自动化程度。记得在使用过程中遵循最佳实践,确保代码的稳定性和安全性。

    增量打包代码

    本篇文章将深入探讨“增量打包代码”的概念、实现方式以及其在版本控制(如SVN)中的应用。 首先,我们要理解“增量打包”的核心思想。增量打包是基于版本控制系统(如SVN、Git等)的变更记录来确定哪些文件发生了...

    svnsync同步增量备份

    Subversion (SVN) 是一个广泛使用的版本控制系统,被众多开发团队用于管理源代码。在实际应用中,为了确保数据的安全性和系统的稳定性,通常需要对 SVN 仓库进行备份。本文将详细介绍如何在 Linux 系统下使用 SVN ...

    SVN全量和增量备份脚本

    ### SVN全量与增量备份脚本详解 #### 一、背景介绍 在软件开发过程中,版本控制系统如Subversion (SVN) 是不可或缺的工具之一。它不仅帮助团队管理代码版本,还提供了强大的备份机制来确保数据的安全性。本文将...

    svn+maven+shell自动发布代码

    本文将详细阐述如何结合Subversion (SVN)、Maven和Shell脚本来实现代码的自动发布。 **Subversion (SVN)** 是一个版本控制系统,用于跟踪和管理项目源代码的变化。在自动部署的场景中,SVN主要用于存储和更新项目...

    java代码利用svnkit操作svn导出某版本或多个版本修改的文件

    利用svnkit操作svn,实现对版本修改文件的导出,可以导出多个版本,.java文件将会在本地取出.class文件,导出后压缩成压缩包,主要用于服务器上的资源更新,不需要开发人员去找到对应的.class文件或其他文件压缩然后...

    java实现svn更新和提交.rar

    Java 实现 SVN 更新和提交是基于版本控制系统 Subversion(简称 SVN)进行的,它主要用于团队协作中的代码管理和版本控制。Subversion 提供了多种接口,包括命令行工具、图形界面工具以及 API,使得开发者能够在各种...

    根据提交日志增量发布包

    标题中的“根据提交日志增量发布包”是指在软件开发过程中,通过跟踪代码库(如Git或SVN)中的提交历史,识别出自上次发布以来发生变化的代码文件,然后只打包这些变化的部分,形成一个相对较小的更新包,用于部署到...

Global site tag (gtag.js) - Google Analytics