Function for updating refs.

A function intended to be called from builtins updating refs
by locking them before write, specially those that came from
scripts using "git update-ref".

[jc: with minor fixups]

Signed-off-by: Carlos Rica <jasampler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Carlos Rica
2007-09-05 03:38:24 +02:00
committed by Junio C Hamano
parent 1e61b7640d
commit 3d9f037c60
5 changed files with 46 additions and 29 deletions

View File

@@ -307,20 +307,14 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
rs.src = ref->name;
rs.dst = NULL;
if (!remote_find_tracking(remote, &rs)) {
struct ref_lock *lock;
fprintf(stderr, " Also local %s\n", rs.dst);
if (will_delete_ref) {
if (delete_ref(rs.dst, NULL)) {
error("Failed to delete");
}
} else {
lock = lock_any_ref_for_update(rs.dst, NULL, 0);
if (!lock)
error("Failed to lock");
else
write_ref_sha1(lock, ref->new_sha1,
"update by push");
}
} else
update_ref("update by push", rs.dst,
ref->new_sha1, NULL, 0, 0);
free(rs.dst);
}
}