mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-10-20 14:45:41 +00:00
87c8a7c0dd
An xCAT installed from these debs could report no version at all: `lsxcatd -v` printed a bare "Version" and there was no /opt/xcat/share/xcat/version to consult. xCAT::Version ships with #XCATVERSIONSUBHERE / #XCATSVNBUILDSUBHERE placeholders that perl-xCAT/debian/rules fills by calling modifyUtils with the version and the commit. It takes the commit from ../Gitinfo, falling back to `git log`. Neither Debian builder wrote Gitinfo -- buildrpms.pl does, which is why only the deb side was affected -- so a tree without a readable .git left that argument empty. modifyUtils then hit `if [ -z "$2" ]` and returned 0 WITHOUT substituting, and neither caller checks the status, so the placeholders shipped. Two independent things had to be wrong for this to be silent, and both are fixed: modifyUtils now exits non-zero on a missing argument, so a build that cannot stamp a version fails instead of producing one that cannot identify itself. Its message was also wrong -- it checked $2 and complained about the version, which is $1 -- so each argument now names itself. builddebs.pl writes Gitinfo, as buildrpms.pl already does. BuildUtils:: git_revision prefers the checkout, falls back to an existing Gitinfo (a source export carries the real revision that way, and overwriting it with a placeholder would discard the only provenance the tree has), and only then returns "unknown" -- never the empty string modifyUtils ignores. "unknown" is now warned about rather than stamped quietly. The cause is usually not a missing .git but git refusing one it considers dubiously owned: the tree belongs to another user and the safe.directory exception sits in a config that the build's own HOME override hides. That is exactly how this went unnoticed. Not a regression -- build-ubunturepo produces byte-identical unsubstituted placeholders in the same .git-less tree, verified by running it there. It is a pre-existing hole that CD masks by writing Gitinfo in the pipeline. Verified on xcat-master-ub: with a readable checkout the deb carries 'Version ' . '2.19.0' . ' (git commit 0030133c896854119cf652eb718f92452e905696)'; without one it carries '(git commit unknown)' and the build prints the warning naming the tree, the command to run and the HOME to run it under. Nine assertions drive modifyUtils itself -- stamping both forms, and each missing argument -- and dropping either sed, or restoring the silent exit, reddens it. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
36 lines
1.2 KiB
Bash
Executable File
36 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# Put the version and git commit into the Version function in Version.pm
|
|
|
|
# Both arguments are required, and a missing one is fatal. Returning 0 here meant a
|
|
# build with no git information silently produced an xCAT that cannot report its own
|
|
# version -- the substitution below never ran, xCAT::Version kept its placeholders,
|
|
# and `lsxcatd -v` printed a bare "Version". Neither caller checked the status, so
|
|
# the package shipped that way. Fail instead, and say which argument is missing.
|
|
if [ -z "$1" ]
|
|
then
|
|
echo "modifyUtils: Error: must specify the xCAT version as the first argument" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$2" ]
|
|
then
|
|
echo "modifyUtils: Error: must specify the git commit as the second argument" >&2
|
|
exit 1
|
|
fi
|
|
|
|
VER=$1
|
|
GITREF="git commit $2"
|
|
|
|
if [ "$(uname)" = "AIX" ]
|
|
then
|
|
sed -e s/"#XCATVERSIONSUBHERE"/". '$VER'"/ -e s/"#XCATSVNBUILDSUBHERE"/". ' ($GITREF)'"/ xCAT/Version.pm >xCAT/Version.pm.new
|
|
mv xCAT/Version.pm.new xCAT/Version.pm
|
|
else
|
|
if [ -f "/etc/debian_version" ];then
|
|
FILENAME="debian/perl-xcat/opt/xcat/lib/perl/xCAT/Version.pm"
|
|
else
|
|
FILENAME="xCAT/Version.pm"
|
|
fi
|
|
sed -i -e s/"#XCATVERSIONSUBHERE"/". '$VER'"/ -e s/"#XCATSVNBUILDSUBHERE"/". ' ($GITREF)'"/ $FILENAME
|
|
fi
|