Skip to content
  • Michael Haggerty's avatar
    initial_ref_transaction_commit(): function for initial ref creation · 58f233ce
    Michael Haggerty authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    "git clone" uses shortcuts when creating the initial set of
    references:
    
    * It writes them directly to packed-refs.
    
    * It doesn't lock the individual references (though it does lock the
      packed-refs file).
    
    * It doesn't check for refname conflicts between two new references or
      between one new reference and any hypothetical old ones.
    
    * It doesn't create reflog entries for the reference creations.
    
    This functionality was implemented in builtin/clone.c. But really that
    file shouldn't have such intimate knowledge of how references are
    stored. So provide a new function in the refs API,
    initial_ref_transaction_commit(), which can be used for initial
    reference creation. The new function is based on the ref_transaction
    interface.
    
    This means that we can make some other functions private to the refs
    module. That will be done in a followup commit.
    
    It would seem to make sense to add a test here that there are no
    existing references, because that is how the function *should* be
    used. But in fact, the "testgit" remote helper appears to call it
    *after* having set up refs/remotes/<name>/HEAD and
    refs/remotes/<name>/master, so we can't be so strict. For now, the
    function trusts its caller to only call it when it makes sense. Future
    commits will add some more limited sanity checks.
    
    Signed-off-by: default avatarMichael Haggerty <mhagger@alum.mit.edu>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    58f233ce