• M
    delete_ref(): use the usual convention for old_sha1 · 1c03c4d3
    Michael Haggerty 提交于
    The ref_transaction_update() family of functions use the following
    convention for their old_sha1 parameters:
    
    * old_sha1 == NULL: Don't check the old value at all.
    * is_null_sha1(old_sha1): Ensure that the reference didn't exist
      before the transaction.
    * otherwise: Ensure that the reference had the specified value before
      the transaction.
    
    delete_ref() had a different convention, namely treating
    is_null_sha1(old_sha1) as "don't care". Change it to adhere to the
    standard convention to reduce the scope for confusion.
    
    Please note that it is now a bug to pass old_sha1=NULL_SHA1 to
    delete_ref() (because it doesn't make sense to delete a reference that
    you already know doesn't exist). This is consistent with the behavior
    of ref_transaction_delete().
    
    Most of the callers of delete_ref() never pass old_sha1=NULL_SHA1 to
    delete_ref(), and are therefore unaffected by this change. The
    two exceptions are:
    
    * The call in cmd_update_ref(), which passed NULL_SHA1 if the old
      value passed in on the command line was 0{40} or the empty string.
      Change that caller to pass NULL in those cases.
    
      Arguably, it should be an error to call "update-ref -d" with the old
      value set to "does not exist", just as it is for the `--stdin`
      command "delete". But since this usage was accepted until now,
      continue to accept it.
    
    * The call in delete_branches(), which could pass NULL_SHA1 if
      deleting a broken or symbolic ref. Change it to pass NULL in these
      cases.
    Signed-off-by: NMichael Haggerty <mhagger@alum.mit.edu>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    1c03c4d3
branch.c 28.8 KB