summaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-11-09 01:32:49 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-11-09 01:32:49 (GMT)
commit832e719d79296f1942a2aca5fb067bc610986fc4 (patch)
tree8dfdf706b10fa4891ebaceb5ec7543078a73cc44 /refs.c
parent2819854ec5013fc0958ea477fa49d53fc0faee80 (diff)
parent16ed2f48be228918af3d1a6c5a6a4fe9b832cb84 (diff)
downloadgit-832e719d79296f1942a2aca5fb067bc610986fc4.zip
git-832e719d79296f1942a2aca5fb067bc610986fc4.tar.gz
git-832e719d79296f1942a2aca5fb067bc610986fc4.tar.bz2
Merge branch 'cb/maint-update-ref-fix' into maint
* cb/maint-update-ref-fix: push: fix local refs update if already up-to-date do not force write of packed refs
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/refs.c b/refs.c
index 48271a9..293389e 100644
--- a/refs.c
+++ b/refs.c
@@ -789,10 +789,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;
@@ -820,12 +820,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;
@@ -839,7 +840,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;