On Tue, Jul 28, 2015 at 2:12 PM, David Turner <[email protected]> wrote:
> Pseudorefs should not be updated through the ref transaction
> API, because alternate ref backends still need to store pseudorefs
> in GIT_DIR (instead of wherever they store refs). Instead,
> change update_ref and delete_ref to call pseudoref-specific
> functions.
>
> Signed-off-by: David Turner <[email protected]>
> ---
> diff --git a/refs.c b/refs.c
> index 553ae8b..2bd6aa6 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -2877,12 +2877,87 @@ enum ref_type ref_type(const char *refname)
> +static int delete_pseudoref(const char *pseudoref, const unsigned char
> *old_sha1)
> +{
> + static struct lock_file lock;
> + const char *filename;
> +
> + filename = git_path("%s", pseudoref);
> +
> + if (old_sha1 && !is_null_sha1(old_sha1)) {
> + int fd;
> + unsigned char actual_old_sha1[20];
> +
> + fd = hold_lock_file_for_update(&lock, filename,
> + LOCK_DIE_ON_ERROR);
> + if (fd < 0)
> + die_errno(_("Could not open '%s' for writing"),
> filename);
> + read_ref(pseudoref, actual_old_sha1);
> + if (hashcmp(actual_old_sha1, old_sha1)) {
> + warning("Unexpected sha1 when deleting %s",
> pseudoref);
> + return -1;
Does this need to release the lock file before returning?
> + }
> +
> + unlink(filename);
> + rollback_lock_file(&lock);
> + } else {
> + unlink(filename);
> + }
> +
> + return 0;
> +}
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html