svn增量更新处理

新的环境下 又回旧的svn 一直都是移动的各种定制版本小批量更新 每次都是一个个文件的找 真麻烦 

svn增量的更新 先获取svn提交过的文件日志记录

 

项目下svn工具 右键 show log  可以查看多个版本 复制出来更新的记录信息到记事本上

可以选择多个提交的版本 右键 copy to clipboard (复制到粘贴板) -->Full Data (所有数据)

 

 

 

 

 

再通过程序过滤 并复制对应的路径 到指定的文件目录下

package cssp;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileSvnTest {
    //svn生成的历史修改文件记录
    static String CHANGE_LOG_FILE_NAME = "d:/6.txt";
    //changeLog文件中 多余的路径前缀
    static String CHANGE_LOG_PREFIX = "Modified : /trunk/code/xxxxx/";
    //classes 文件夹本地路径
    static String CLASS_SOURCE_PREFIX = "D:/hdl/xxxxx/WebContent/WEB-INF/classes/";
    //webroot 文件夹本地路径
    static String JSP_SOURCE_PREFIX = "D:/hdl/xxxxx/WebContent/";
    //生成 增量包目标文件夹
    static String TARGET_PREFIX = "d:/svnupdate/";
    //增量包生成 主名称--后面会加上生成时间 年月日时分秒
    static String PACKAGE_NAME = "network";
    //项目WebRoot 文件夹
    static String WEBROOT = "WebContent";
    //项目Classes 文件夹
    static String WEB_INF = "WEB-INF/classes/";
    //项目 src 文件夹
    static String SRC = "src";
    //项目配置文件 文件夹
    static String ROURCE = "resources";
    static {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        String dateStr = sdf.format(date);
        PACKAGE_NAME = PACKAGE_NAME + "_" + dateStr;
        File file = new File(TARGET_PREFIX + PACKAGE_NAME);
        if (file.exists()) {
            try {
                del(TARGET_PREFIX + PACKAGE_NAME);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            file.mkdirs();
        }
    }


    /**
     *
     * @param filepath
     * @throws IOException
     */
    public static void del(String filepath) throws IOException {
        File f = new File(filepath);// 定义文件路径
        if (f.exists() && f.isDirectory()) {// 判断是文件还是目录
            if (f.listFiles().length == 0) {// 若目录下没有文件则直接删除
                f.delete();
            } else {// 若有则把文件放进数组,并判断是否有下级目录
                File delFile[] = f.listFiles();
                int i = f.listFiles().length;
                for (int j = 0; j < i; j++) {
                    if (delFile[j].isDirectory()) {
                        del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径
                    }
                    delFile[j].delete();// 删除文件
                }
            }
        }
    }
    /**
     * 复制文件
     * @param sourceFile
     * @param targetFile
     * @throws Exception
     */
    public static void copyFile(File sourceFile, File targetFile) throws Exception {
        BufferedInputStream inBuff = null;
        BufferedOutputStream outBuff = null;
        if (sourceFile.isFile()) {
            try {
                // 新建文件输入流并对它进行缓冲
                inBuff = new BufferedInputStream(new FileInputStream(sourceFile));

                if(!targetFile.exists()){
                    try{
                        targetFile.getParentFile().mkdirs();
                        targetFile.createNewFile();
                    }catch(Exception e){
                        System.out.println(targetFile.getAbsolutePath());
                        throw e;
                    }
                }
                // 新建文件输出流并对它进行缓冲
                outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));

                // 缓冲数组
                byte[] b = new byte[256];
                int len;
                while ((len = inBuff.read(b)) != -1) {
                    outBuff.write(b, 0, len);
                }
                // 刷新此缓冲的输出流
                outBuff.flush();
            } finally {
                // 关闭流
                if (inBuff != null)
                    inBuff.close();
                if (outBuff != null)
                    outBuff.close();
            }
        }
    }


    public static void main(String[] args) throws Exception {
        File file = new File(CHANGE_LOG_FILE_NAME);
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line = null;
        System.err.println(PACKAGE_NAME);
        try {
            while ((line = br.readLine())!= null) {
                line = line.trim();
                System.out.println(line);
                System.out.println(CHANGE_LOG_PREFIX);
                if (line.indexOf(CHANGE_LOG_PREFIX) > -1) {
                    String[] relativePaths = line.split(CHANGE_LOG_PREFIX);
                    String relativePath = relativePaths[1];
                    if (relativePath.startsWith(SRC+"/")) {
                        if (relativePath.contains(".java")) {
                            relativePath = relativePath.replaceAll(".java", ".class");
                        }
                        relativePath = relativePath.replaceAll(SRC+"/", "");
                        String sourcePath = CLASS_SOURCE_PREFIX + relativePath;
                        String targetPath = TARGET_PREFIX + PACKAGE_NAME + "/" + WEB_INF + relativePath;
                        copyFile(new File(sourcePath), new File(targetPath));

                    } else if (relativePath.startsWith(WEBROOT+"/")) {
                        relativePath = relativePath.replaceAll(WEBROOT+"/", "");
                        String sourcePath = JSP_SOURCE_PREFIX + relativePath;
                        String targetPath = TARGET_PREFIX + PACKAGE_NAME + "/" + relativePath;
                        copyFile(new File(sourcePath), new File(targetPath));
                    } else if (relativePath.startsWith(ROURCE+"/")) {
                        relativePath = relativePath.replaceAll(ROURCE+"/", "");
                        String sourcePath = CLASS_SOURCE_PREFIX + relativePath;
                        String targetPath = TARGET_PREFIX + PACKAGE_NAME + "/" + WEB_INF + relativePath;
                        copyFile(new File(sourcePath), new File(targetPath));
                    }

                    System.err.println(relativePath);
                }

//				if(line) {
//
//				}
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            br.close();
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值