X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=3d3628093e0d42e4ae8d9ac4ed22b05c429611d6;hp=5d239d692155079085853cf93f0d383704657bd9;hb=5f9258f673404e784b450631b39ba433a1fda945;hpb=eb3b3a8f4be0903cd73193e563c7b56ad48bf54e diff --git a/dgit b/dgit index 5d239d69..3d362809 100755 --- a/dgit +++ b/dgit @@ -1658,7 +1658,8 @@ sub sign_changes ($) { } } -sub dopush () { +sub dopush ($) { + my ($forceflag) = @_; printdebug "actually entering push\n"; prep_ud(); @@ -1737,7 +1738,6 @@ sub dopush () { responder_send_command("param head $head"); responder_send_command("param csuite $csuite"); - my $forceflag = deliberately('not-fast-forward') ? '+' : ''; if ($forceflag && defined $lastpush_hash) { git_for_each_tag_referring($lastpush_hash, sub { my ($objid,$fullrefname,$tagname) = @_; @@ -1902,17 +1902,27 @@ sub cmd_push { if (check_for_git()) { git_fetch_us(); } + my $forceflag = ''; if (fetch_from_archive()) { - is_fast_fwd(lrref(), 'HEAD') or + if (is_fast_fwd(lrref(), 'HEAD')) { + # ok + } elsif (deliberately('not-fast-forward') || + deliberately('TEST-not-fast-forward-dgit-only')) { + $forceflag = '+'; + } else { fail "dgit push: HEAD is not a descendant". " of the archive's version.\n". - "$us: To overwrite it, use git merge -s ours ".lrref()."."; + "$us: To overwrite its contents,". + " use git merge -s ours ".lrref().".\n". + "$us: To rewind history, if permitted by the archive,". + " use --deliberately-not-fast-forward"; + } } else { $new_package or fail "package appears to be new in this suite;". " if this is intentional, use --new"; } - dopush(); + dopush($forceflag); } #---------- remote commands' implementation ----------