1e5c31af7Sopenharmony_ci# -*- coding: utf-8 -*-
2e5c31af7Sopenharmony_ci
3e5c31af7Sopenharmony_ci#-------------------------------------------------------------------------
4e5c31af7Sopenharmony_ci# Khronos OpenGL CTS
5e5c31af7Sopenharmony_ci# ------------------
6e5c31af7Sopenharmony_ci#
7e5c31af7Sopenharmony_ci# Copyright (c) 2016 The Khronos Group Inc.
8e5c31af7Sopenharmony_ci#
9e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
10e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License.
11e5c31af7Sopenharmony_ci# You may obtain a copy of the License at
12e5c31af7Sopenharmony_ci#
13e5c31af7Sopenharmony_ci#      http://www.apache.org/licenses/LICENSE-2.0
14e5c31af7Sopenharmony_ci#
15e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
16e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
17e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and
19e5c31af7Sopenharmony_ci# limitations under the License.
20e5c31af7Sopenharmony_ci#
21e5c31af7Sopenharmony_ci#-------------------------------------------------------------------------
22e5c31af7Sopenharmony_ci
23e5c31af7Sopenharmony_ciimport os
24e5c31af7Sopenharmony_ciimport sys
25e5c31af7Sopenharmony_ciimport shutil
26e5c31af7Sopenharmony_ciimport argparse
27e5c31af7Sopenharmony_ciimport subprocess
28e5c31af7Sopenharmony_ci
29e5c31af7Sopenharmony_cisys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
30e5c31af7Sopenharmony_cifrom fetch_kc_cts import SHA1
31e5c31af7Sopenharmony_ci
32e5c31af7Sopenharmony_cisys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts"))
33e5c31af7Sopenharmony_cifrom ctsbuild.common import *
34e5c31af7Sopenharmony_ci
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_ciEXTERNAL_DIR    = os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")))
37e5c31af7Sopenharmony_ci
38e5c31af7Sopenharmony_cidef computeChecksum (data):
39e5c31af7Sopenharmony_ci	return hashlib.sha256(data).hexdigest()
40e5c31af7Sopenharmony_ci
41e5c31af7Sopenharmony_ciclass Source:
42e5c31af7Sopenharmony_ci	def __init__(self, baseDir, extractDir):
43e5c31af7Sopenharmony_ci		self.baseDir		= baseDir
44e5c31af7Sopenharmony_ci		self.extractDir		= extractDir
45e5c31af7Sopenharmony_ci
46e5c31af7Sopenharmony_ci	def clean (self):
47e5c31af7Sopenharmony_ci		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
48e5c31af7Sopenharmony_ci		if os.path.exists(fullDstPath):
49e5c31af7Sopenharmony_ci			shutil.rmtree(fullDstPath, ignore_errors=False)
50e5c31af7Sopenharmony_ci
51e5c31af7Sopenharmony_ciclass GitRepo (Source):
52e5c31af7Sopenharmony_ci	def __init__(self, url, revision, baseDir, extractDir = "src"):
53e5c31af7Sopenharmony_ci		Source.__init__(self, baseDir, extractDir)
54e5c31af7Sopenharmony_ci		self.url		= url
55e5c31af7Sopenharmony_ci		self.revision	= revision
56e5c31af7Sopenharmony_ci
57e5c31af7Sopenharmony_ci	def update (self):
58e5c31af7Sopenharmony_ci		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
59e5c31af7Sopenharmony_ci
60e5c31af7Sopenharmony_ci		if not os.path.exists(fullDstPath):
61e5c31af7Sopenharmony_ci			execute(["git", "clone", "--no-checkout", self.url, fullDstPath])
62e5c31af7Sopenharmony_ci
63e5c31af7Sopenharmony_ci		pushWorkingDir(fullDstPath)
64e5c31af7Sopenharmony_ci		try:
65e5c31af7Sopenharmony_ci			execute(["git", "fetch", self.url, "+refs/heads/*:refs/remotes/origin/*"])
66e5c31af7Sopenharmony_ci			execute(["git", "checkout", self.revision])
67e5c31af7Sopenharmony_ci		finally:
68e5c31af7Sopenharmony_ci			popWorkingDir()
69e5c31af7Sopenharmony_ci	def compare_rev(self):
70e5c31af7Sopenharmony_ci		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
71e5c31af7Sopenharmony_ci		pushWorkingDir(fullDstPath)
72e5c31af7Sopenharmony_ci		try:
73e5c31af7Sopenharmony_ci			out = subprocess.check_output(["git", "rev-parse", "HEAD"])
74e5c31af7Sopenharmony_ci			if out.replace('\n', '') != SHA1:
75e5c31af7Sopenharmony_ci				raise Exception ("KC CTS checkout revision %s in external/fetch_kc_cts.py doesn't match KC CTS master HEAD revision %s" % (SHA1, out))
76e5c31af7Sopenharmony_ci		finally:
77e5c31af7Sopenharmony_ci			popWorkingDir()
78e5c31af7Sopenharmony_ci
79e5c31af7Sopenharmony_ciPACKAGES = [
80e5c31af7Sopenharmony_ci	GitRepo(
81e5c31af7Sopenharmony_ci		"git@gitlab.khronos.org:opengl/kc-cts.git",
82e5c31af7Sopenharmony_ci		"HEAD",
83e5c31af7Sopenharmony_ci		"kc-cts"),
84e5c31af7Sopenharmony_ci]
85e5c31af7Sopenharmony_ci
86e5c31af7Sopenharmony_ciif __name__ == "__main__":
87e5c31af7Sopenharmony_ci	for pkg in PACKAGES:
88e5c31af7Sopenharmony_ci		pkg.update()
89e5c31af7Sopenharmony_ci		pkg.compare_rev()
90