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