Java自动更新SVN程序,注意系统默认的忽略文件
来源:互联网 发布:杀破狼 js 微盘 编辑:程序博客网 时间:2024/06/07 17:12
以前写的一个小程序,用于自动更新SVN和自动编辑swf文件,以代替繁琐的手动操作,需要先安装flash sdk和csvn。
最近发现对.o文件不起作用了,更新操作还好,如果是新添加的文件就无法识别,先看下以前的程序:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 工具类 * * @author monitor * Created on *********************** */public class Tools { private static final Pattern p=Pattern.compile("([M|?|A])\\s+(.*)"); private static String userpass=" --username yourname --password yourpass"; /** * 调用SDK工具编辑swf文件 * * @param update 是否自动更新SVN * @param fileName 要编译的文件名 * @param sourPath 源路径 * @param destPath 目标路径 */ public static void compileSwf(boolean update,String fileName,String sourPath,String destPath){ String line=null; Process process; BufferedReader br; Runtime runTime=Runtime.getRuntime(); String cmd="mxmlc "+sourPath+fileName+".as -output "+destPath+fileName+".data"; OutputMsg.append(new OutputMsg(MsgType.INFO,"Client","【终端】:准备运行命令 "+cmd)); try{ process=runTime.exec(cmd); br = new BufferedReader(new InputStreamReader(process.getInputStream(),"GB2312")); while ( (line=br.readLine()) != null){ OutputMsg.append(new OutputMsg(MsgType.INFO,"Client","【终端】:"+line)); } br.close(); process.destroy(); if(update) updateDataToSvn(destPath,"更新"+fileName+".swf"); }catch(IOException e){ OutputMsg.append(new OutputMsg(MsgType.ERROR,"Client","执行 "+cmd+" 出错:"+e.getMessage())); } } /** * 调用cvsn的命令自动更新SVN * * @param dir 要更新的文件(夹) * @param commitMsg LOG日志 */ public static void updateDataToSvn(String dir,String commitMsg){ Matcher matcher; List<String> msgList=null; Map<String,List<String>> map=new HashMap<String,List<String>>(); OutputMsg.append(new OutputMsg(OutputMsg.MsgType.INFO,"Client","检测可更新文件:")); msgList=runCmd("svn status "+dir+" "+userpass); if(msgList!=null){ map.put("M", new LinkedList<String>()); map.put("?", new LinkedList<String>()); map.put("A", new LinkedList<String>()); for(String msg:msgList){ matcher=p.matcher(msg); if(matcher.matches()){ if(matcher.group(1).equals("M")){ map.get("M").add(matcher.group(2)); }else if(matcher.group(1).equals("A")){ map.get("A").add(matcher.group(2)); runCmd("svn add "+matcher.group(2)+userpass); map.get("M").add(matcher.group(2)); }else if(matcher.group(1).equals("?")){ map.get("?").add(matcher.group(2)); runCmd("svn add "+matcher.group(2)+userpass); map.get("M").add(matcher.group(2)); } } } } if(!map.get("M").isEmpty()){ StringBuilder cmd=new StringBuilder("svn commit -m \"【程序自动更新】"+commitMsg+"\" "); for(String str:map.get("M")){ cmd.append(str).append(" "); } cmd.append(userpass); runCmd(cmd.toString()); OutputMsg.append(new OutputMsg(OutputMsg.MsgType.INFO,"Client","SVN更新成功!!")); }else{ OutputMsg.append(new OutputMsg(OutputMsg.MsgType.INFO,"Client","无可更新文件!!")); } } /** * 运行CMD命令 * @param cmd 要运行的命令 * @return 输出的消息列表 */ public static List<String> runCmd(String cmd){ String line=null; Process process; BufferedReader br; List<String> msgList=new LinkedList<String>(); Runtime runTime=Runtime.getRuntime(); try{ process=runTime.exec(cmd); br = new BufferedReader(new InputStreamReader(process.getInputStream(),"GB2312")); while ( (line=br.readLine()) != null){ msgList.add(line); OutputMsg.append(new OutputMsg(MsgType.INFO,"Client","【终端】:"+line)); } br.close(); process.destroy(); }catch(IOException e){ e.printStackTrace(); OutputMsg.append(new OutputMsg(MsgType.ERROR,"Client","执行 "+cmd+" 出错:"+e.getMessage())); } return msgList; }}原理其实很简单,就是调用csvn的svn命令,主要是status 和 commit,通过status命令获得文件状态,以判断是否要更新,常见的状态有:
'A'
Item is scheduled for addition.
'D'
Item is scheduled for deletion.
'M'
项目已经修改了。
'R'
项目在工作拷贝中已经被替换了。这意味着文件预定要删除,然后有一个同样名称的文件要在同一个位置替换它。
'C'
项目的内容(相对于属性)与更新得到的数据冲突了。
'X'
项目与外部定义相关。
'I'
Item is being ignored (e.g., with the
svn:ignore
property).'?'
项目不在版本控制之下。
'!'
项目已经丢失(例如,你使用svn移动或者删除了它)。这也说明了一个目录不是完整的(一个检出或更新中断)。
这个小程序以前是能正常工作了,不过最近要提交的文件后缀名采用了.o的后缀,一直没法提交。连文件的状态也没有输出;网上查了下资料,
原来是SVN会默认的忽略一些文件,如.o文件等。
忽略了就没法提交了,那就把忽略去掉,先是在status后加 --no-ignore 参数,这样文件状态是出来了,不过是‘I’,也没法提交。
只能改config文件了,进入C:\Users\monitor\AppData\Roaming\Subversion下,打开config,找到:
# global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo
改为:
global-ignores = *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo
OK。
- Java自动更新SVN程序,注意系统默认的忽略文件
- SVN默认忽略库文件
- svn 上传默认忽略.a文件问题
- svn上传忽略的文件
- Java eclipse 项目svn忽略不需要提交的文件
- 使用系统默认的程序打开文件
- SVN 忽略不必要的提交的文件
- svn忽略项目的clss文件
- Androidstudio使用SVN需要忽略的文件
- svn提交设置忽略的文件
- Androidstudio使用SVN需要忽略的文件
- svn的使用以及忽略文件
- eclipse的SVN插件设置忽略文件
- eclipse的svn怎么去忽略文件
- SVN忽略文件
- SVN忽略文件
- svn 忽略文件
- svn 忽略文件
- windows下openfire的安装配置
- 网络常用端口号大全
- 国外Windows Phone 7开发教程(四天快速入门)
- Android拍照、录像、录音代码范例
- 【java】java中的异常
- Java自动更新SVN程序,注意系统默认的忽略文件
- pad上蓝牙模块检测
- ms4w+tilecache+openlayers配置xuhy总结
- OK6410开发板下rmmod: chdir(/lib/modules): No such file or directory 解决方法
- oracle中sys用户和system用户的区别
- MFC JSONCPP 配置
- android开发学习笔记(6)android应用程序框架
- 步步学ACTIVEX网页控件开发---创建安全的ActiveX控件
- 调试器GDB小结