Skip to content
  • Junio C Hamano's avatar
    push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE · 75e5c0dc
    Junio C Hamano authored
    
    
    When we push to update an existing ref, if:
    
     * the object at the tip of the remote is not a commit; or
     * the object we are pushing is not a commit,
    
    it won't be correct to suggest to fetch, integrate and push again,
    as the old and new objects will not "merge".  We should explain that
    the push must be forced when there is a non-committish object is
    involved in such a case.
    
    If we do not have the current object at the tip of the remote, we do
    not even know that object, when fetched, is something that can be
    merged.  In such a case, suggesting to pull first just like
    non-fast-forward case may not be technically correct, but in
    practice, most such failures are seen when you try to push your work
    to a branch without knowing that somebody else already pushed to
    update the same branch since you forked, so "pull first" would work
    as a suggestion most of the time.  And if the object at the tip is
    not a commit, "pull first" will fail, without making any permanent
    damage.  As a side effect, it also makes the error message the user
    will get during the next "push" attempt easier to understand, now
    the user is aware that a non-commit object is involved.
    
    In these cases, the current code already rejects such a push on the
    client end, but we used the same error and advice messages as the
    ones used when rejecting a non-fast-forward push, i.e. pull from
    there and integrate before pushing again.
    
    Introduce new rejection reasons and reword the messages
    appropriately.
    
    [jc: with help by Peff on message details]
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    75e5c0dc