【问题背景】需要了解git diff 文件中@@等修饰符的作用
【解决方案】参考链接 http://www.gnu.org/software/diffutils/manual/diffutils.html#Detailed-Unified
【同步产出】适用于某些项目的自动化添加diff信息
【脚本源码】有些(不会用git blame)的客户的项目需要在每笔提交前后添加注释行,标注这行代码是为什么添加,我觉得很脑残,写了个自动化的
import re
CASES_TABLE=[
r"(@@.+)(.+\d{1,3},)(\d{1,3})(.+)",
r"(.*)wayoung(.*)",
r"^\+",
r"^\+\+\+"
]
diffNameSrc="1.diff"
diffNameDist="2.diff"
MeilingSaid={
"predix":"+somebody add here for reason 1 begin",
"appendix":"+somebody add here for reason 1 end",
}
MyFileIn=[]
with open (diffNameSrc)as diffile:
for line in diffile:
MyFileIn.append(line.strip('\n'))
pass
pass
MyGap=[]
for index in range(0,len(MyFileIn)):
item = MyFileIn[index]
if (len(re.findall(CASES_TABLE[2], item))!=0):
if (len(re.findall(CASES_TABLE[3], item))!=0):
pass
else:
MyGap.append(index)
pass
pass
pass
def PreEditAtNum(MyListIn):
AtNumberList = GetAtNumbers(MyListIn)
BatList=ModifyTotalAtNum(ListIn=MyFileIn)
for i in range(0, len(AtNumberList)):
MyListIn[AtNumberList[i]]=BatList[i]
pass
return MyListIn
def WashListTo2List(ListIn):
ListOut_begin = []
ListOut_end = []
for i in range(0,len(ListIn)):
try:
if (ListIn[i]+1 != ListIn[i+1]):
ListOut_end.append(ListIn[i])
pass
except:
ListOut_end.append(ListIn[i])
try:
if (ListIn[i]-1 != ListIn[i-1]):
ListOut_begin.append(ListIn[i])
pass
except:
ListOut_end.append(ListIn[i])
pass
return (ListOut_begin,ListOut_end)
def GetAtNumbers(ListIn, re_para=CASES_TABLE[0]):
OutList=[]
for i in range(0,len(ListIn)):
if (len(re.findall(re_para,ListIn[i])) != 0):
OutList.append(i)
pass
pass
return OutList
pass
def ModifyTotalAtNum(ListIn, re_para=CASES_TABLE[0]):
ListOut=[]
for line in ListIn:
temp = re.findall(CASES_TABLE[0],line)
# add modified line num
if (len(temp) != 0):
modify_num = int(temp[0][2])
modify_num += 2
e=str(modify_num)
print(e)
temp = re.sub(CASES_TABLE[0],r"\1\2"+"wayoung"+e+r"\4",line)
line2 = re.sub(CASES_TABLE[1],r"\1\2",str(temp))
ListOut.append(line2)
pass
pass
return ListOut
pass
AtNumberList = GetAtNumbers(MyFileIn)
(predix_position_List,appendix_position_List)=WashListTo2List(MyGap)
MyFileIn=PreEditAtNum(MyFileIn)
with open(diffNameDist,"w")as fileout:
for i in range(0,len(MyFileIn)):
if i in predix_position_List:
print(MeilingSaid["predix"],file=fileout)
print(MeilingSaid["predix"])
pass
print(MyFileIn[i],file=fileout)
print(MyFileIn[i])
if i in appendix_position_List:
print(MeilingSaid["appendix"],file=fileout)
print(MeilingSaid["appendix"])
pass