Skip to content
  • Michael Haggerty's avatar
    packed_ref_store: handle a packed-refs file that is a symlink · 198b808e
    Michael Haggerty authored and Junio C Hamano's avatar Junio C Hamano committed
    One of the tricks that `contrib/workdir/git-new-workdir` plays is to
    making `packed-refs` in the new workdir a symlink to the `packed-refs`
    file in the original repository. Before
    42dfa7ec ("commit_packed_refs(): use a staging file separate from
    the lockfile", 2017-06-23), a lockfile was used as the staging file,
    and because the `LOCK_NO_DEREF` was not used, the pointed-to file was
    locked and modified.
    
    But after that commit, the staging file was created using a tempfile,
    with the end result that rewriting the `packed-refs` file in the
    workdir overwrote the symlink rather than the original `packed-refs`
    file.
    
    Change `commit_packed_refs()` to use `get_locked_file_path()` to find
    the path of the file that it should overwrite. Since that path was
    properly resolved when the lockfile was created, this restores the
    pre-42dfa7ec
    
     behavior.
    
    Also add a test case to document this use case and prevent a
    regression like this from recurring.
    
    Signed-off-by: default avatarMichael Haggerty <mhagger@alum.mit.edu>
    Reviewed-by: default avatarJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    198b808e