2020-12-16 17:25:24 +08:00

127 lines
4.3 KiB
Python

# -*- coding:utf-8 -*-
#############################################################################
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
#############################################################################
"""
This file is for Gauss version things.
"""
import os
import sys
import re
sys.path.append(sys.path[0] + "/../../")
from gspylib.common.ErrorCode import ErrorCode
class VersionInfo():
"""
Info about current version
"""
def __init__(self):
pass
# package version
__PACKAGE_VERSION = ""
# OM version string
COMMON_VERSION = "Gauss200 OM VERSION"
# It will be replaced with the product version, such as "Gauss200",
# while being packaged by mpp_package.sh
PRODUCT_NAME = "__GAUSS_PRODUCT_STRING__"
PRODUCT_NAME_PACKAGE = "-".join(PRODUCT_NAME.split())
__COMPATIBLE_VERSION = []
COMMITID = ""
@staticmethod
def getPackageVersion():
"""
function: Get the current version from version.cfg
input : NA
output: String
"""
if (VersionInfo.__PACKAGE_VERSION != ""):
return VersionInfo.__PACKAGE_VERSION
# obtain version file
versionFile = VersionInfo.get_version_file()
version, number, commitid = VersionInfo.get_version_info(versionFile)
# the 2 value is package version
VersionInfo.__PACKAGE_VERSION = version
return VersionInfo.__PACKAGE_VERSION
@staticmethod
def getCommitid():
if VersionInfo.COMMITID != "":
return VersionInfo.COMMITID
versionFile = VersionInfo.get_version_file()
version, number, commitid = VersionInfo.get_version_info(versionFile)
# the 2 value is package version
VersionInfo.COMMITID = commitid
return VersionInfo.COMMITID
@staticmethod
def get_version_file():
"""
function: Get version.cfg file
input : NA
output: String
"""
# obtain version file
dirName = os.path.dirname(os.path.realpath(__file__))
versionFile = os.path.join(dirName, "./../../../", "version.cfg")
versionFile = os.path.realpath(versionFile)
if (not os.path.exists(versionFile)):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % versionFile)
if (not os.path.isfile(versionFile)):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50210"] % versionFile)
return versionFile
@staticmethod
def get_version_info(versionFile):
# the infomation of versionFile like this:
# openGauss-1.0
# XX.0
# ae45cfgt
if not os.path.exists(versionFile):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % versionFile)
if not os.path.isfile(versionFile):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50210"] % versionFile)
with open(versionFile, 'r') as fp:
retLines = fp.readlines()
if len(retLines) < 3:
raise Exception(ErrorCode.GAUSS_502["GAUSS_50222"] % versionFile)
version = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+').search(
retLines[0].strip()).group()
number = retLines[1].strip()
commitId = retLines[2].strip()
if version is None:
raise Exception(ErrorCode.GAUSS_502["GAUSS_50222"] %
"version.cfg" + "Does not have version "
"such as openGauss-1.0")
try:
float(number)
except Exception as e:
raise Exception(str(e) + ErrorCode.GAUSS_516["GAUSS_51628"]
% number)
if not (commitId.isalnum() and len(commitId) == 8):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50222"] % versionFile
+ " Commit id is wrong.")
return version, number, commitId