On Tue, Jul 28, 2015 at 2:12 PM, David Turner <dturner@xxxxxxxxxxxxxxxx> 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 <dturner@xxxxxxxxxxxxxxxx> > --- > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html