• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# Khronos OpenGL CTS
5# ------------------
6#
7# Copyright (c) 2016 The Khronos Group Inc.
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
23import os
24import sys
25import shutil
26import argparse
27import subprocess
28
29sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
30from fetch_kc_cts import SHA1
31
32sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts"))
33from ctsbuild.common import *
34
35
36EXTERNAL_DIR    = os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")))
37
38def computeChecksum (data):
39	return hashlib.sha256(data).hexdigest()
40
41class Source:
42	def __init__(self, baseDir, extractDir):
43		self.baseDir		= baseDir
44		self.extractDir		= extractDir
45
46	def clean (self):
47		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
48		if os.path.exists(fullDstPath):
49			shutil.rmtree(fullDstPath, ignore_errors=False)
50
51class GitRepo (Source):
52	def __init__(self, url, revision, baseDir, extractDir = "src"):
53		Source.__init__(self, baseDir, extractDir)
54		self.url		= url
55		self.revision	= revision
56
57	def update (self):
58		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
59
60		if not os.path.exists(fullDstPath):
61			execute(["git", "clone", "--no-checkout", self.url, fullDstPath])
62
63		pushWorkingDir(fullDstPath)
64		try:
65			execute(["git", "fetch", self.url, "+refs/heads/*:refs/remotes/origin/*"])
66			execute(["git", "checkout", self.revision])
67		finally:
68			popWorkingDir()
69	def compare_rev(self):
70		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
71		pushWorkingDir(fullDstPath)
72		try:
73			out = subprocess.check_output(["git", "rev-parse", "HEAD"])
74			if out.replace('\n', '') != SHA1:
75				raise Exception ("KC CTS checkout revision %s in external/fetch_kc_cts.py doesn't match KC CTS master HEAD revision %s" % (SHA1, out))
76		finally:
77			popWorkingDir()
78
79PACKAGES = [
80	GitRepo(
81		"git@gitlab.khronos.org:opengl/kc-cts.git",
82		"HEAD",
83		"kc-cts"),
84]
85
86if __name__ == "__main__":
87	for pkg in PACKAGES:
88		pkg.update()
89		pkg.compare_rev()
90