push: flag updates that require force
Add a flag for indicating an update to a reference requires force. Currently the `nonfastforward` flag is used for this when generating the status message. A separate flag insulates dependent logic from the details of set_ref_status_for_push(). Signed-off-by: Chris Rorvick <chris@rorvick.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
ffe81ef2ac
commit
8c5f6f717d
4
cache.h
4
cache.h
|
@ -999,7 +999,9 @@ struct ref {
|
||||||
unsigned char old_sha1[20];
|
unsigned char old_sha1[20];
|
||||||
unsigned char new_sha1[20];
|
unsigned char new_sha1[20];
|
||||||
char *symref;
|
char *symref;
|
||||||
unsigned int force:1,
|
unsigned int
|
||||||
|
force:1,
|
||||||
|
requires_force:1,
|
||||||
merge:1,
|
merge:1,
|
||||||
nonfastforward:1,
|
nonfastforward:1,
|
||||||
not_forwardable:1,
|
not_forwardable:1,
|
||||||
|
|
11
remote.c
11
remote.c
|
@ -1293,6 +1293,8 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
|
||||||
struct ref *ref;
|
struct ref *ref;
|
||||||
|
|
||||||
for (ref = remote_refs; ref; ref = ref->next) {
|
for (ref = remote_refs; ref; ref = ref->next) {
|
||||||
|
int force_ref_update = ref->force || force_update;
|
||||||
|
|
||||||
if (ref->peer_ref)
|
if (ref->peer_ref)
|
||||||
hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
|
hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
|
||||||
else if (!send_mirror)
|
else if (!send_mirror)
|
||||||
|
@ -1335,9 +1337,12 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
|
||||||
!has_sha1_file(ref->old_sha1)
|
!has_sha1_file(ref->old_sha1)
|
||||||
|| !ref_newer(ref->new_sha1, ref->old_sha1);
|
|| !ref_newer(ref->new_sha1, ref->old_sha1);
|
||||||
|
|
||||||
if (ref->nonfastforward && !ref->force && !force_update) {
|
if (ref->nonfastforward) {
|
||||||
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
|
ref->requires_force = 1;
|
||||||
continue;
|
if (!force_ref_update) {
|
||||||
|
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -659,7 +659,7 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
|
||||||
const char *msg;
|
const char *msg;
|
||||||
|
|
||||||
strcpy(quickref, status_abbrev(ref->old_sha1));
|
strcpy(quickref, status_abbrev(ref->old_sha1));
|
||||||
if (ref->nonfastforward) {
|
if (ref->requires_force) {
|
||||||
strcat(quickref, "...");
|
strcat(quickref, "...");
|
||||||
type = '+';
|
type = '+';
|
||||||
msg = "forced update";
|
msg = "forced update";
|
||||||
|
|
Loading…
Reference in New Issue