Skip to content

Commit

Permalink
do not force write of packed refs
Browse files Browse the repository at this point in the history
We force writing a ref if it does not exist. Originally, we only had to look
for the ref file to check if it existed. Now we have to look for a packed ref
as well. Luckily, resolve_ref already does all the work for us.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Clemens Buchacher authored and Junio C Hamano committed Nov 5, 2008
1 parent 16088d8 commit 5bdd8d4
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
7 changes: 4 additions & 3 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -788,10 +788,10 @@ static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
char *ref_file;
const char *orig_ref = ref;
struct ref_lock *lock;
struct stat st;
int last_errno = 0;
int type, lflags;
int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
int missing = 0;

lock = xcalloc(1, sizeof(struct ref_lock));
lock->lock_fd = -1;
Expand Down Expand Up @@ -819,12 +819,13 @@ static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
orig_ref, strerror(errno));
goto error_return;
}
missing = is_null_sha1(lock->old_sha1);
/* When the ref did not exist and we are creating it,
* make sure there is no existing ref that is packed
* whose name begins with our refname, nor a ref whose
* name is a proper prefix of our refname.
*/
if (is_null_sha1(lock->old_sha1) &&
if (missing &&
!is_refname_available(ref, NULL, get_packed_refs(), 0))
goto error_return;

Expand All @@ -838,7 +839,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
lock->ref_name = xstrdup(ref);
lock->orig_ref_name = xstrdup(orig_ref);
ref_file = git_path("%s", ref);
if (lstat(ref_file, &st) && errno == ENOENT)
if (missing)
lock->force_write = 1;
if ((flags & REF_NODEREF) && (type & REF_ISSYMREF))
lock->force_write = 1;
Expand Down
7 changes: 7 additions & 0 deletions t/t3210-pack-refs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,13 @@ test_expect_success \
git branch -d n/o/p &&
git branch n'

test_expect_success \
'see if up-to-date packed refs are preserved' \
'git branch q &&
git pack-refs --all --prune &&
git update-ref refs/heads/q refs/heads/q &&
! test -f .git/refs/heads/q'

test_expect_success 'pack, prune and repack' '
git tag foo &&
git pack-refs --all --prune &&
Expand Down

0 comments on commit 5bdd8d4

Please sign in to comment.