Add CTS_ARB_gl_spirv test implementation
[platform/upstream/VK-GL-CTS.git] / scripts / src_util / common.py
1 # -*- coding: utf-8 -*-
2
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
6 #
7 # Copyright 2015 The Android Open Source Project
8 #
9 # Licensed under the Apache License, Version 2.0 (the "License");
10 # you may not use this file except in compliance with the License.
11 # You may obtain a copy of the License at
12 #
13 #      http://www.apache.org/licenses/LICENSE-2.0
14 #
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
20 #
21 #-------------------------------------------------------------------------
22
23 import os
24 import subprocess
25
26 TEXT_FILE_EXTENSION = [
27     ".bat",
28     ".c",
29     ".cfg",
30     ".cmake",
31     ".cpp",
32     ".css",
33     ".h",
34     ".hh",
35     ".hpp",
36     ".html",
37     ".inl",
38     ".java",
39     ".js",
40     ".m",
41     ".mk",
42     ".mm",
43     ".py",
44     ".rule",
45     ".sh",
46     ".test",
47     ".txt",
48     ".xml",
49     ".xsl",
50     ]
51
52 BINARY_FILE_EXTENSION = [
53     ".png",
54     ".pkm",
55     ".xcf",
56     ]
57
58 def isTextFile (filePath):
59     ext = os.path.splitext(filePath)[1]
60     if ext in TEXT_FILE_EXTENSION:
61         return True
62     if ext in BINARY_FILE_EXTENSION:
63         return False
64
65     # Analyze file contents, zero byte is the marker for a binary file
66     f = open(filePath, "rb")
67
68     TEST_LIMIT = 1024
69     nullFound = False
70     numBytesTested = 0
71
72     byte = f.read(1)
73     while byte and numBytesTested < TEST_LIMIT:
74         if byte == "\0":
75             nullFound = True
76             break
77
78         byte = f.read(1)
79         numBytesTested += 1
80
81     f.close()
82     return not nullFound
83
84 def getProjectPath ():
85     # File system hierarchy is fixed
86     scriptDir = os.path.dirname(os.path.abspath(__file__))
87     projectDir = os.path.normpath(os.path.join(scriptDir, "../.."))
88     return projectDir
89
90 def git (*args):
91     process = subprocess.Popen(['git'] + list(args), cwd=getProjectPath(), stdout=subprocess.PIPE)
92     output = process.communicate()[0]
93     if process.returncode != 0:
94         raise Exception("Failed to execute '%s', got %d" % (str(args), process.returncode))
95     return output
96
97 def getAbsolutePathPathFromProjectRelativePath (projectRelativePath):
98     return os.path.normpath(os.path.join(getProjectPath(), projectRelativePath))
99
100 def getChangedFiles ():
101     # Added, Copied, Moved, Renamed
102     output = git('diff', '--cached', '--name-only', '-z', '--diff-filter=ACMR')
103     relativePaths = output.split('\0')[:-1] # remove trailing ''
104     return [getAbsolutePathPathFromProjectRelativePath(path) for path in relativePaths]
105
106 def getAllProjectFiles ():
107     output = git('ls-files', '--cached', '-z')
108     relativePaths = output.split('\0')[:-1] # remove trailing ''
109     return [getAbsolutePathPathFromProjectRelativePath(path) for path in relativePaths]