return !!grep { $_ eq "--deliberately-$enquiry" } @deliberatelies;
}
+sub deliberately_not_fast_forward () {
+ deliberately('not-fast-forward') ||
+ deliberately('TEST-not-fast-forward-dgit-only');
+}
+
#---------- remote protocol support, common ----------
# remote push initiator/responder protocol:
return $c;
}
-sub git_get_ref ($) {
- my ($refname) = @_;
- my $got = cmdoutput_errok @git, qw(show-ref --), $refname;
- if (!defined $got) {
- $?==256 or fail "git show-ref failed (status $?)";
- printdebug "ref $refname= [show-ref exited 1]\n";
- return '';
- }
- if ($got =~ m/^(\w+) \Q$refname\E$/m) {
- printdebug "ref $refname=$1\n";
- return $1;
- } else {
- printdebug "ref $refname= [no match]\n";
- return '';
- }
-}
-
sub must_getcwd () {
my $d = getcwd();
defined $d or fail "getcwd failed: $!";
}
}
-sub is_fast_fwd ($$) {
- my ($ancestor,$child) = @_;
- my @cmd = (@git, qw(merge-base), $ancestor, $child);
- my $mb = cmdoutput_errok @cmd;
- if (defined $mb) {
- return git_rev_parse($mb) eq git_rev_parse($ancestor);
- } else {
- $?==256 or failedcmd @cmd;
- return 0;
- }
-}
-
sub git_fetch_us () {
runcmd_ordryrun_local @git, qw(fetch),access_giturl(),fetchspec();
}
if ($forceflag && defined $lastpush_hash) {
git_for_each_tag_referring($lastpush_hash, sub {
- my ($objid,$fullrefname,$tagname) = @_;
- responder_send_command("supersedes $fullrefname=$objid");
- $supersedes{$fullrefname} = $objid;
+ my ($tagobjid,$refobjid,$fullrefname,$tagname) = @_;
+ responder_send_command("supersedes $fullrefname=$tagobjid");
+ $supersedes{$fullrefname} = $tagobjid;
});
}
if (fetch_from_archive()) {
if (is_fast_fwd(lrref(), 'HEAD')) {
# ok
- } elsif (deliberately('not-fast-forward') ||
- deliberately('TEST-not-fast-forward-dgit-only')) {
+ } elsif (deliberately_not_fast_forward) {
$forceflag = '+';
} else {
fail "dgit push: HEAD is not a descendant".