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>
This commit is contained in:
parent
ffe81ef2ac
commit
8c5f6f717d
4
cache.h
4
cache.h
@ -999,7 +999,9 @@ struct ref {
|
||||
unsigned char old_sha1[20];
|
||||
unsigned char new_sha1[20];
|
||||
char *symref;
|
||||
unsigned int force:1,
|
||||
unsigned int
|
||||
force:1,
|
||||
requires_force:1,
|
||||
merge:1,
|
||||
nonfastforward: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;
|
||||
|
||||
for (ref = remote_refs; ref; ref = ref->next) {
|
||||
int force_ref_update = ref->force || force_update;
|
||||
|
||||
if (ref->peer_ref)
|
||||
hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
|
||||
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)
|
||||
|| !ref_newer(ref->new_sha1, ref->old_sha1);
|
||||
|
||||
if (ref->nonfastforward && !ref->force && !force_update) {
|
||||
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
|
||||
continue;
|
||||
if (ref->nonfastforward) {
|
||||
ref->requires_force = 1;
|
||||
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;
|
||||
|
||||
strcpy(quickref, status_abbrev(ref->old_sha1));
|
||||
if (ref->nonfastforward) {
|
||||
if (ref->requires_force) {
|
||||
strcat(quickref, "...");
|
||||
type = '+';
|
||||
msg = "forced update";
|
||||
|
Loading…
Reference in New Issue
Block a user