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.
166 lines
4.8 KiB
166 lines
4.8 KiB
#!/usr/bin/env python
|
|
|
|
import os
|
|
import sys
|
|
import difflib
|
|
import filecmp
|
|
import tempfile
|
|
from optparse import OptionParser
|
|
from subprocess import call
|
|
from subprocess import Popen
|
|
from subprocess import PIPE
|
|
|
|
def which(program):
|
|
def executable(path):
|
|
return os.path.isfile(path) and os.access(path, os.X_OK)
|
|
|
|
path, file = os.path.split(program)
|
|
if path and executable(program):
|
|
return program
|
|
else:
|
|
for path in os.environ["PATH"].split(os.pathsep):
|
|
exe = os.path.join(path, program)
|
|
if executable(exe):
|
|
return exe
|
|
return ""
|
|
|
|
DIFF_TOOLS=["meld", "kdiff3", "xdiff", "diffmerge.sh", "diff"]
|
|
|
|
PROTO_SRC="./src/com/android/keyguard/"
|
|
PROTO_RES="./res/"
|
|
|
|
TEMP_FILE1="/tmp/tempFile1.txt"
|
|
TEMP_FILE2="/tmp/tempFile2.txt"
|
|
|
|
FW_SRC="../../../../frameworks/base/policy/src/com/android/internal/policy/impl/keyguard/"
|
|
FW_RES="../../../../frameworks/base/core/res/res/"
|
|
|
|
FW_PKG="com.android.internal.policy.impl.keyguard"
|
|
PROTO_PKG="com.android.keyguard"
|
|
|
|
FW_RES_IMPORT="import com.android.internal.R;"
|
|
|
|
# Find a differ
|
|
DIFF_TOOL=""
|
|
if ("DIFF_TOOL" in os.environ and len(os.environ["DIFF_TOOL"]) > 0):
|
|
DIFF_TOOL=which(os.environ["DIFF_TOOL"])
|
|
if len(DIFF_TOOL) == 0:
|
|
for differ in DIFF_TOOLS:
|
|
DIFF_TOOL=which(differ)
|
|
if len(DIFF_TOOL) > 0:
|
|
break
|
|
|
|
print "Using differ", DIFF_TOOL
|
|
|
|
#Anything file which contains any string in this list as a substring will be ommitted
|
|
IGNORE=["LockHotnessActivity.java", "unified_lock_activity.xml", "optionmenu.xml"]
|
|
WATCH=[]
|
|
|
|
def dirCompare(sourceDir, destDir, ext, run_in_reverse):
|
|
sourceFiles = getFileList(sourceDir, ext)
|
|
destFiles = getFileList(destDir, ext)
|
|
for file in sourceFiles:
|
|
print file
|
|
destFile = destDir + file
|
|
sourceFile = sourceDir + file
|
|
if (file in destFiles):
|
|
if run_in_reverse:
|
|
prepareFileForCompare(sourceFile, TEMP_FILE1, FW_RES_IMPORT, FW_PKG, PROTO_PKG)
|
|
prepareFileForCompare(destFile, TEMP_FILE2, FW_RES_IMPORT,)
|
|
else:
|
|
prepareFileForCompare(destFile, TEMP_FILE1, FW_RES_IMPORT, FW_PKG, PROTO_PKG)
|
|
prepareFileForCompare(sourceFile, TEMP_FILE2, FW_RES_IMPORT,)
|
|
if (filecmp.cmp(TEMP_FILE1, TEMP_FILE2)):
|
|
print "File %s is the same in proto and framework" %(file)
|
|
else:
|
|
print "Running diff for: %s" %(file)
|
|
diff(sourceFile, destFile)
|
|
else:
|
|
print "File %s does not exist in framework" %(file)
|
|
if not run_in_reverse:
|
|
diff(sourceFile, destFile)
|
|
|
|
def main(argv):
|
|
run_in_reverse = False
|
|
if len(argv) > 1:
|
|
if argv[1] == '--help' or argv[1] == '-h':
|
|
print ('Usage: %s [<commit>]' % argv[0])
|
|
print ('\tdiff to framework, ' +
|
|
'optionally restricting to files in <commit>')
|
|
sys.exit(0)
|
|
elif argv[1] == '--reverse':
|
|
print "Running in reverse"
|
|
run_in_reverse = True
|
|
else:
|
|
print ("**** Pulling file list from: %s" % argv[1])
|
|
pipe = Popen(['git', 'diff', '--name-only', argv[1]], stdout=PIPE).stdout
|
|
for line in iter(pipe.readline,''):
|
|
path = line.rstrip()
|
|
file = path[path.rfind('/') + 1:]
|
|
print '**** watching: %s' % file
|
|
WATCH.append(file);
|
|
pipe.close()
|
|
|
|
if run_in_reverse:
|
|
#dirCompare(FW_RES, PROTO_RES, ".xml", run_in_reverse)
|
|
print ("**** Source files:")
|
|
dirCompare(FW_SRC, PROTO_SRC, ".java", run_in_reverse)
|
|
else:
|
|
#dirCompare(PROTO_RES, FW_RES, ".xml", run_in_reverse)
|
|
print ("**** Source files:")
|
|
dirCompare(PROTO_SRC, FW_SRC, ".java", run_in_reverse)
|
|
|
|
if (os.path.exists(TEMP_FILE1)):
|
|
os.remove(TEMP_FILE1)
|
|
|
|
if (os.path.exists(TEMP_FILE2)):
|
|
os.remove(TEMP_FILE2)
|
|
|
|
def getFileList(rootdir, extension):
|
|
fileList = []
|
|
|
|
for root, subFolders, files in os.walk(rootdir):
|
|
for file in files:
|
|
f = os.path.join(root,file)
|
|
if (os.path.splitext(f)[1] == extension and (not inIgnore(f))):
|
|
fileList.append(f[len(rootdir):])
|
|
return fileList
|
|
|
|
|
|
def prepareFileForCompare(inFile, outFile, skip="", replace="", withText=""):
|
|
# Delete the outfile, so we're starting with a new file
|
|
if (os.path.exists(outFile)):
|
|
os.remove(outFile)
|
|
|
|
fin = open(inFile)
|
|
fout = open(outFile, "w")
|
|
for line in fin:
|
|
# Ignore any lines containing the ignore string ("import com.android.internal.R;) and
|
|
# ignore any lines containing only whitespace.
|
|
if (line.find(skip) < 0 and len(line.strip(' \t\n\r')) > 0):
|
|
# For comparison, for framework files, we replace the fw package with the
|
|
# proto package, since these aren't relevant.
|
|
if len(replace) > 0:
|
|
fout.write(line.replace(replace, withText))
|
|
else:
|
|
fout.write(line)
|
|
fin.close()
|
|
fout.close()
|
|
|
|
def diff(file1, file2):
|
|
call([DIFF_TOOL, file1, file2])
|
|
|
|
def inIgnore(file):
|
|
for ignore in IGNORE:
|
|
if file.find(ignore) >= 0:
|
|
return True
|
|
if len(WATCH) > 0:
|
|
for watch in WATCH:
|
|
if file.find(watch) >= 0:
|
|
return False
|
|
return True
|
|
return False
|
|
|
|
if __name__=="__main__":
|
|
main(sys.argv)
|