X-Git-Url: https://git.exim.org/buildfarm-client.git/blobdiff_plain/552a2c7d076c106a12009a45c56a5152de658014..5db707a5077177f8f0fc38a0655609aaea8196dd:/run_branches diff --git a/run_branches b/run_branches index e1d0b9e..429b02e 100755 --- a/run_branches +++ b/run_branches @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl =comment @@ -78,34 +78,45 @@ $branch = 'global'; require $buildconf; # Check if auto-update is wanted and possible -if (not exists $EximBuild::Conf{auto_update} or $EximBuild::Conf{auto_update}) -{ - my $remote = $EximBuild::Conf{auto_update} // 'origin'; +eval { + if (not exists $EximBuild::Conf{auto_update} or $EximBuild::Conf{auto_update}) + { + my $remote = $EximBuild::Conf{auto_update} // 'origin'; - die "$0: auto-update not possible: need write permissions in @{[cwd]}\n" - if not -w '.'; + die "auto-update not possible: need write permissions in @{[cwd]}\n" + if not -w '.'; - # Get information about our remote and calculate the chance for a - # successfull auto-updat. Based on: - # http://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git - system("git fetch $remote") == 0 or die $? >> 8; - my ($upstream, $local, $base) = qx'git rev-parse ...@{upstream}'; die $? >> 8 if $?; - $base =~ s/^\^//; + # Get information about our remote and calculate the chance for a + # successfull auto-updat. Based on: + # http://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git + system("git fetch $remote") == 0 or die "'git fetch $remote' failed\n"; + my ($upstream, $local, $base) = qx'git rev-parse ...@{upstream}' or die "'git rev-parse' failed\n"; - if ($upstream ne $local) { + $base =~ s/^\^//; + + if ($upstream ne $local) { + + if ($base ne $local) { + die "the merge base is not local anymore. Refusing to `git pull`\n" + } - if ($base ne $local) { - warn "$0: the merge base is not local anymore. Refusing to `git pull`\n" - } - else { # if we're the merge base, the ff-only should work - system('git pull --ff-only') == 0 or die $? >> 8; - say "$0: re-execute after update"; - chdir $CALLED{cwd} or die "$0: Can't chdir to $CALLED{cwd}: $!\n"; + # except if there are local changes. We won't stop, if we + # fail to update, but we'll issue a warning + system("git pull --ff-only $remote") == 0 or die "git pull --ff-only\n"; + + say "re-execute after update"; + chdir $CALLED{cwd} or die "Can't chdir to $CALLED{cwd}: $!\n"; exec $CALLED{argv0}, @{$CALLED{argv}}; die "Can't re-exec\n"; } } +}; + +if ($@) { + chomp $@; + warn "Automatic updated failed with `$@'\n" + ."Continue anyway\n"; } unless ( @@ -148,15 +159,12 @@ elsif ($EximBuild::conf{branches_to_build} =~ @branches = apply_throttle(@branches); -my $global_lock_dir = - $EximBuild::conf{global_lock_dir} - ||$EximBuild::conf{build_root} - ||''; +my $global_lock_dir = $EximBuild::conf{global_lock_dir} + // $EximBuild::conf{build_root} + // die "$0: need global_lock_dir\n"; -unless ($global_lock_dir && -d $global_lock_dir) -{ - die "no global lock directory: $global_lock_dir"; -} +die "$0: need r/w permissions for directory '$global_lock_dir'\n" + if not -d -w $global_lock_dir; # acquire the lock