X-Git-Url: https://git.exim.org/buildfarm-client.git/blobdiff_plain/4f55cd78ca4ea2fc2a3793ab06d1d52c73f93840..9218d819b7570950ca7de64c8a482ffa376c0800:/run_branches diff --git a/run_branches b/run_branches index 8ee1f9f..7506a52 100755 --- a/run_branches +++ b/run_branches @@ -78,35 +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; + # 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 "$0: re-execute after update"; - chdir $CALLED{cwd} or die "$0: Can't chdir to $CALLED{cwd}: $!\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 (