You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.6 KiB
128 lines
4.6 KiB
# -*- coding: utf8 -*-'
|
|
import os,sys,os.path;
|
|
import pysvn;
|
|
import time;
|
|
client = pysvn.Client();
|
|
|
|
#排除相同日志
|
|
def rep(str,samestr):
|
|
strs=str.split('\&')
|
|
if len(strs)<=0:
|
|
return False
|
|
for s in strs:
|
|
if s == samestr:
|
|
return True
|
|
return False
|
|
#排除过滤
|
|
def repignore(str):
|
|
str1="ignore";
|
|
for i in ignores:
|
|
pos = str.rfind(i)
|
|
if pos >= 0:
|
|
return False;
|
|
return True
|
|
ignores={"ignore","commit","testcode"}
|
|
|
|
def writeAppSvnInfo(d):
|
|
cfg = readIni(basedir+"/"+pf+"_apprev.log");
|
|
|
|
info = client.info(d+"/main");
|
|
cfg["prev"] = cfg.get("rev") or 0;
|
|
cfg["rev"]=info.revision.number;
|
|
writeIni(cfg,basedir+"/"+pf+"_apprev.log");
|
|
def writeIni(cfg,fn):
|
|
cfgf = open(fn,"w");
|
|
print (cfg);
|
|
for k in cfg:
|
|
cfgf.write(k+"="+str(cfg[k])+"\n");
|
|
cfgf.close();
|
|
def fmtDateTime( t ):
|
|
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(t))
|
|
|
|
def getsvnLog_style1(svn_path,y,m,d,ty,tm,td):
|
|
start_date=time.mktime((int(y), int(m), int(d), 0, 0, 0, 0, 0, 0))
|
|
end_date=time.mktime((int(ty), int(tm), int(td), 0, 0, 0, 0, 0, 0))
|
|
revision_start=pysvn.Revision( pysvn.opt_revision_kind.date, start_date )
|
|
revision_end1=pysvn.Revision(pysvn.opt_revision_kind.date,end_date)
|
|
LogList=client.log(svn_path,revision_start,revision_end1)
|
|
dic={};
|
|
for LogInfo in LogList:
|
|
LogInfo.message=LogInfo.message.replace("\n","");
|
|
if LogInfo.message!="":
|
|
if repignore(LogInfo.message)==True:
|
|
if LogInfo.author not in dic:
|
|
dic[LogInfo.author]={"msg":"","name":LogInfo.author,"date":"","showmsg":""};
|
|
# else:
|
|
if rep(dic[LogInfo.author]["msg"],LogInfo.message)==False:
|
|
dic[LogInfo.author]["msg"]+=LogInfo.message+"\&"
|
|
dic[LogInfo.author]["date"]+=fmtDateTime(LogInfo.date);
|
|
dic[LogInfo.author]["showmsg"]+=LogInfo.message+" "+fmtDateTime( LogInfo.date )+"\n"
|
|
s1="start log content\n"
|
|
for key,value in dic.items():
|
|
s1+="\n\n\n\n------------------ "+key+" ---------------------------\n"+value["showmsg"]
|
|
f=open("svnLog_style1.txt","w")
|
|
f.write(s1)
|
|
f.close()
|
|
def getsvnLog_style2(svn_path,y,m,d,ty,tm,td):
|
|
start_date=time.mktime((int(y), int(m), int(d), 0, 0, 0, 0, 0, 0))
|
|
end_date=time.mktime((int(ty), int(tm), int(td), 0, 0, 0, 0, 0, 0))
|
|
revision_start=pysvn.Revision( pysvn.opt_revision_kind.date, start_date )
|
|
revision_end1=pysvn.Revision(pysvn.opt_revision_kind.date,end_date)
|
|
LogList=client.log(svn_path,revision_start,revision_end1)
|
|
dic={};
|
|
for LogInfo in LogList:
|
|
LogInfo.message=LogInfo.message.replace("\n","");
|
|
if LogInfo.message!="":
|
|
if repignore(LogInfo.message)==True:
|
|
if LogInfo.author not in dic:
|
|
dic[LogInfo.author]={"msg":"","name":LogInfo.author,"date":"","showmsg":""};
|
|
# else:
|
|
if rep(dic[LogInfo.author]["msg"],LogInfo.message)==False:
|
|
dic[LogInfo.author]["msg"]+=LogInfo.message+"\&"
|
|
dic[LogInfo.author]["date"]+=fmtDateTime(LogInfo.date);
|
|
# dic[LogInfo.author]["showmsg"]+=LogInfo.message+","+LogInfo.author+", tm="+fmtDateTime(LogInfo.date)+"\n"
|
|
dic[LogInfo.author]["showmsg"]+="tm="+fmtDateTime(LogInfo.date)+","+LogInfo.message+","+LogInfo.author+"\n";
|
|
|
|
s1="start log content\n"
|
|
for key,value in dic.items():
|
|
s1+=value["showmsg"]+"\n"
|
|
f=open("svnLog_style2.csv","w")
|
|
f.write(s1)
|
|
f.close()
|
|
|
|
|
|
def readIni(fn):
|
|
if not os.path.exists(fn):
|
|
print ("ini file not exists:",fn);
|
|
return {};
|
|
print ("read ini :",fn);
|
|
cfgf = open(fn);
|
|
cfg = {};
|
|
for l in cfgf.readlines():
|
|
strs = l.strip().split("=");
|
|
print (l);
|
|
if len(strs) == 2:
|
|
cfg[strs[0]] = strs[1];
|
|
return cfg;
|
|
def get_login( realm, username, may_save ):
|
|
print (realm,username);
|
|
global cfg;
|
|
id = realm.split(" ")[1];
|
|
print ("id=",id);
|
|
return (True,cfg["SVN_USERNAME"],cfg["SVN_PASSWORD"],True);
|
|
|
|
cfg = readIni("svnlogConfig.txt");
|
|
client.callback_get_login = get_login;
|
|
start_date=cfg["SVN_START_DATE"].split(',')
|
|
end_date=cfg["SVN_END_DATE"].split(',')
|
|
svn_path=cfg["SVN_PATH"]
|
|
print (start_date[0])
|
|
print (start_date[1])
|
|
print (start_date[2])
|
|
|
|
print (end_date[0])
|
|
print (end_date[1])
|
|
print (end_date[2])
|
|
|
|
getsvnLog_style1(svn_path,start_date[0],start_date[1],start_date[2],end_date[0],end_date[1],end_date[2]);
|
|
getsvnLog_style2(svn_path,start_date[0],start_date[1],start_date[2],end_date[0],end_date[1],end_date[2]);
|