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