|
因为项目版本之间的diff比较常用到,一般都查看改动过的脚本的diff,尤其是看其他人写的代码的时候。有些情况是一个目录中有很多文件,到最后也不知道都改了哪里了,于是需要逐个diff。
于是就诞生了这个脚本,这也是很久之前刚开始写python的时候写的比较简陋的.
因为linux执行ll命令,不同的机器可能显示不太相同,可做相应调整,下面脚本适应的情况是:
total 12
drwxr-sr-x 3 work work 4096 Nov 22 16:43 bin
drwxr-sr-x 2 work work 4096 Nov 8 10:30 conf
-rw-rw-r-- 1 work work 64 Nov 22 15:27 test.pl
两个脚本构成,主要是思路是检测新代码目录中与旧目录中脚本的diff,如果新目录中有新出现的脚本也会发现。
运行脚本为go_diff.py,调用脚本为diff_work.py
go_diff.py
import os
import sys
if __name__ == '__main__':
if len(sys.argv) == 4:
print "yes,running"
print "==============================================================="
file1 = sys.argv[1]
file2 = sys.argv[2]
file3 = sys.argv[3]
cmd = 'ls -l '+file1+' >temp_file1'
os.system(cmd)
cmd = 'ls -l '+file2+' >temp_file2'
os.system(cmd)
cmd = 'rm -rf '+file3+';mkdir '+file3
os.system(cmd)
cmd = 'cat temp_file1 temp_file2|python diff_.py '+file1+' '+file2+' '+file3
os.system(cmd)
cmd = 'rm temp_file1 temp_file2'
os.system(cmd)
print "==============================================================="
# find_content(ff,int(sys.argv[1]))
else:
print "parameter num error ******"
print "parameter1:content1"
print "parameter2:content2"
print "parameter3:dest_content"
diff_work.py
import sys
import os
def find_content(ff,file1,file2,file3):
m = {}
flag = 0
while True:
ll = ff.readline().strip()
if(ll):
tokens = ll.split(' ')
if(len(tokens) > 4 and tokens[0].find('drw')!=0):
m[tokens[-1]] = 0
if(len(tokens) < 3 and flag!=0):
break
flag = 1
else:
break
n = {}
while True:
ll = ff.readline().strip()
if(ll):
tokens = ll.split(' ')
if(len(tokens) > 4 and tokens[0].find('drw')!=0):
n[tokens[-1]] = 0
else:
break
for x in m.keys():
if(n.has_key(x)):
print x
cmd = "diff %s/%s %s/%s > %s/%s" %(file1,x,file2,x,file3,x)
os.system(cmd)
else:
print x
cmd = 'cat %s/%s > %s/%s' %(file1,x,file3,x)
os.system(cmd)
if __name__ == '__main__':
ff = sys.stdin
if len(sys.argv) == 4:
find_content(ff,sys.argv[1],sys.argv[2],sys.argv[3])
else:
print "error"
|
|