push: keep track of "update" state separately
If the reference exists on the remote and it is not being removed, then mark as an update. This is in preparation for handling tags (lightweight and annotated) exceptionally. Signed-off-by: Chris Rorvick <chris@rorvick.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b24e6047a8
commit
ffe81ef2ac
1
cache.h
1
cache.h
@ -1003,6 +1003,7 @@ struct ref {
|
||||
merge:1,
|
||||
nonfastforward:1,
|
||||
not_forwardable:1,
|
||||
update:1,
|
||||
deletion:1;
|
||||
enum {
|
||||
REF_STATUS_NONE = 0,
|
||||
|
18
remote.c
18
remote.c
@ -1326,15 +1326,19 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
|
||||
|
||||
ref->not_forwardable = !is_forwardable(ref);
|
||||
|
||||
ref->nonfastforward =
|
||||
ref->update =
|
||||
!ref->deletion &&
|
||||
!is_null_sha1(ref->old_sha1) &&
|
||||
(!has_sha1_file(ref->old_sha1)
|
||||
|| !ref_newer(ref->new_sha1, ref->old_sha1));
|
||||
!is_null_sha1(ref->old_sha1);
|
||||
|
||||
if (ref->nonfastforward && !ref->force && !force_update) {
|
||||
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
|
||||
continue;
|
||||
if (ref->update) {
|
||||
ref->nonfastforward =
|
||||
!has_sha1_file(ref->old_sha1)
|
||||
|| !ref_newer(ref->new_sha1, ref->old_sha1);
|
||||
|
||||
if (ref->nonfastforward && !ref->force && !force_update) {
|
||||
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user