mirror of
https://github.com/apache/impala.git
synced 2026-01-05 21:00:54 -05:00
It was noticed that some build processes did not checkout Impala and instead built it from a tarball. This would cause our gen_build_version script to write a blank version info everytime to the version.info file. This patch takes care of the case where if there is an already existing version.info file and we cannot get the git rev-parse output, we use the old file instead. Blank version info is written only when we don't have an old version.info file and we cannot do a git rev-parse. Change-Id: Id7af33502bbb70185dc15ffca6219436a616f25b Reviewed-on: http://gerrit.cloudera.org:8080/4411 Reviewed-by: Sailesh Mukil <sailesh@cloudera.com> Tested-by: Sailesh Mukil <sailesh@cloudera.com>
126 lines
4.3 KiB
Python
Executable File
126 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env impala-python
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
# This script generates be/src/common/version.h which contains the build version based
|
|
# on the git hash.
|
|
|
|
import os
|
|
import time;
|
|
import filecmp
|
|
from subprocess import PIPE, call
|
|
from commands import getstatusoutput
|
|
from time import localtime, strftime
|
|
|
|
IMPALA_HOME = os.environ['IMPALA_HOME']
|
|
SAVE_VERSION_SCRIPT = os.path.join(IMPALA_HOME, 'bin/save-version.sh')
|
|
VERSION_FILE_NAME = os.path.join(IMPALA_HOME, 'bin/version.info')
|
|
VERSION_CC_FILE_NAME = os.path.join(IMPALA_HOME, 'be/src/common/version.cc')
|
|
|
|
# Redirecting stdout and stderr to os.devnull as we don't want unnecessary output.
|
|
devnull = open(os.devnull, 'w')
|
|
try:
|
|
can_obtain_git_hash = \
|
|
call(['git', 'rev-parse', 'HEAD'], stdout=devnull, stderr=devnull) == 0
|
|
finally:
|
|
devnull.close()
|
|
|
|
version_file_exists = os.path.isfile(VERSION_FILE_NAME)
|
|
|
|
# If we have a version file and cannot obtain a git hash, skip generating a new
|
|
# version file.
|
|
if version_file_exists and not can_obtain_git_hash:
|
|
print "Cannot obtain git hash, using existing version file."
|
|
else:
|
|
# Remove existing version files only if they exist.
|
|
# TODO: Might be useful to make a common utility function remove_if_clean.
|
|
if version_file_exists:
|
|
print 'Removing existing file: %s' % (VERSION_FILE_NAME)
|
|
os.remove(VERSION_FILE_NAME)
|
|
if os.path.isfile(VERSION_CC_FILE_NAME):
|
|
print 'Removing existing file: %s' % (VERSION_CC_FILE_NAME)
|
|
os.remove(VERSION_CC_FILE_NAME)
|
|
|
|
# SAVE_VERSION_SCRIPT will generate a dummy version.info file if we cannot obtain the
|
|
# git hash.
|
|
# Generate a new version file.
|
|
os.system(SAVE_VERSION_SCRIPT)
|
|
|
|
# version.info file has the format:
|
|
# VERSION: <version>
|
|
# GIT_HASH: <git has>
|
|
# BUILD_TIME: <build time>
|
|
version, git_hash, build_time = [None, None, None]
|
|
version_file = open(VERSION_FILE_NAME)
|
|
try:
|
|
version, git_hash, build_time = [line.split(':',1)[-1].strip() \
|
|
for line in version_file.readlines() if not line.startswith('#') ]
|
|
finally:
|
|
version_file.close()
|
|
|
|
print '\n'.join([version, git_hash, build_time])
|
|
|
|
file_contents = """
|
|
//
|
|
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
// This is a generated file, DO NOT EDIT IT.
|
|
// To change this file, see impala/bin/gen_build_version.py
|
|
|
|
#include "common/version.h"
|
|
|
|
#define IMPALA_BUILD_VERSION "%(build_version)s"
|
|
#define IMPALA_BUILD_HASH "%(build_hash)s"
|
|
#define IMPALA_BUILD_TIME "%(build_time)s"
|
|
|
|
const char* GetDaemonBuildVersion() {
|
|
return IMPALA_BUILD_VERSION;
|
|
}
|
|
|
|
const char* GetDaemonBuildHash() {
|
|
return IMPALA_BUILD_HASH;
|
|
}
|
|
|
|
const char* GetDaemonBuildTime() {
|
|
return IMPALA_BUILD_TIME;
|
|
}
|
|
""" % {'build_version': version,
|
|
'build_hash': git_hash,
|
|
'build_time': build_time}
|
|
file_contents = file_contents.strip()
|
|
|
|
# Generate a new version file.
|
|
version_file = open(VERSION_CC_FILE_NAME, "w")
|
|
version_file.write(file_contents)
|
|
version_file.close()
|