From 45b75b0ae8cb8ccf0fdcc25aef6b4c2801ce49dd Mon Sep 17 00:00:00 2001 From: Phil Pennock Date: Thu, 9 Feb 2017 22:42:00 -0500 Subject: [PATCH] Fix release RC stamping & tarball ownership The ability to release 4.XX.Y via hardcoding a version.sh as part of release broke the ability to do properly versioned RC releases. Fix that. Try to fix ownership of files in tarballs to not be local system user. (cherry picked from commit 7677a8673f89843326aab3944e608c6be4339039) Signed-off-by: Phil Pennock --- release-process/scripts/mk_exim_release | 29 ++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/release-process/scripts/mk_exim_release b/release-process/scripts/mk_exim_release index 34fe77c67..6e4767bd2 100755 --- a/release-process/scripts/mk_exim_release +++ b/release-process/scripts/mk_exim_release @@ -24,12 +24,13 @@ sub get_and_check_version { # make sure this looks like a real release version # which should (currently) be 4.xx[.y] or 4.xx[.y]_RCx - unless ( $release =~ /^(?(?4\.\d\d)(?:\.(?\d+))?(?:_RC\d+)?)$/ ) { + unless ( $release =~ /^(?(?4\.\d\d)(?:\.(?\d+))?(?_RC\d+)?)$/ ) { croak "The given version number does not look right - $release"; } $context->{release} = $+{release}; $context->{major} = $+{major}; $context->{minor} = $+{minor}; + $context->{candidatev} = $+{rc}; ($context->{trelease} = $+{release}) =~ s/_RC\d+//; } @@ -134,11 +135,18 @@ sub make_version_script { # Thus we've to provide the version.sh, based on the info we have # about the release. If reversion finds this, it doesn't try to find # it's own way to get a valid version number from the git. + # + # 4.89 series: the logic here did not handle _RC thus breaking RC + # status in versions. nb: candidatev in context should be same as $variant + # in local context. + my $stamp = $context->{minor} ? '_'.$context->{minor} : ''; + $stamp .= $context->{candidatev} if $context->{candidatev}; + # open(my $v, '>', 'version.sh') or die "Can't open '>version.sh' $!\n"; print {$v} <<__; # initial version automatically generated from $0 EXIM_RELEASE_VERSION=$context->{major} -EXIM_VARIANT_VERSION=@{[$context->{minor}?'_'.$context->{minor}:'']} +EXIM_VARIANT_VERSION=$stamp EXIM_COMPILE_NUMBER=0 __ close($v); @@ -361,6 +369,17 @@ sub create_tar_files { } } + # We ideally do not want local system user information in release tarballs; + # those are artifacts of use of tar for backups and have no place in + # software release packaging; if someone extracts as root, then they should + # get sane file ownerships. + my $ownership = ""; + if (`tar --help 2>&1` =~ /^\s*--owner=/m) { + $ownership .= " --owner=$context->{tar_perms}{user} --group=$context->{tar_perms}{group}"; + # on this GNU tar, --numeric-owner works during creation too + $ownership .= " --numeric-owner"; + } + # See also environment variables set in main, tuning compression levels my @COMPRESSIONS = ( # compressors-dict-key, file-extension, flags-as-string @@ -376,7 +395,7 @@ sub create_tar_files { my ($compkey, $extension, $flags) = @{$comp}; next unless $context->{compressors}{$compkey}; print "Creating: ${pkgs}/${dirname}.tar.${extension}\n" if ($verbose || $debug); - system("$tar cf ${pkgs}/${dirname}.tar.${extension} ${flags} --numeric-owner -C ${pkgdirs} ${dirname}"); + system("$tar cf ${pkgs}/${dirname}.tar.${extension} ${flags} ${ownership} -C ${pkgdirs} ${dirname}"); } } @@ -394,6 +413,10 @@ MAIN: { tmp_dir => File::Temp->newdir(), webgen_base => "$FindBin::Bin/../../../exim-website", tar_cmd => 'tar', + tar_perms => { + user => '0', + group => '0', + }, make_cmd => 'make', compressors => { gzip => 1, -- 2.30.2