2014年4月28日 星期一 晴

上周五写了个Python程序,就是解析出svn log的信息,但每次运行的结果都不一样。这是我平生第一次遇到这样的情况,我没有加随机数,访问的内容应该是一样的,怎么会结果不一样?周五快下班的时候才发现的,来不及调试了。今天来公司一步步把所有信息打印出来,看了原因是svn信息每次输出都不一样,随机的。我的正则表达式没能很好地匹配上,所以每次的结果都不一样

较为详细的回顾一下:

  1. 执行svn log -r%d:HEAD –xml -v %s’ % (rev,url)这条

–xml的输出,有时候是

<path
   kind="file"
   action="A">/branches/ZXL/AAP_SMTPH/alps/releaseSvnLabel</path>
</paths>

有时候是

<path
   action="M"  kind="file">/branches/ZXL/MR_AP_BASE/alps/packages/apps/Mms/src/com/android/mms/transaction/HttpUtils.java</path>
<path
  1. 我的正则表达式把action带进去了,所以有时候能匹配,有时候不能匹配。

  2. 解决方法:修改正则表达式,最终的代码片段如下:

changefirestr = r'action="(\w)".*?>(.*?)<\/path>'
changefireobj = re.compile(changefirestr, re.DOTALL)
#省略......
args = ('svn log -r%d:HEAD --xml -v %s' % (rev,url)).split(' ')
proc = subprocess.Popen(args,stdout=subprocess.PIPE)
info = proc.stdout.read()
for loglist in info.split('</logentry>'):
objs = lastverobj.findall(loglist)
if objs:
ver,author,changedate,commitlog = objs[0]
items = changefireobj.findall(loglist)
for item in items: