push: further clean up fields of "struct ref"
The "nonfastforward" and "update" fields are only used while deciding what value to assign to the "status" locally in a single function. Remove them from the "struct ref". The "requires_force" field is not used to decide if the proposed update requires a --force option to succeed, or to record such a decision made elsewhere. It is used by status reporting code that the particular update was "forced". Rename it to "forced_update", and move the code to assign to it around to further clarify how it is used and what it is used for. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
16
remote.c
16
remote.c
@ -1317,27 +1317,23 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
|
||||
* passing the --force argument
|
||||
*/
|
||||
|
||||
ref->update =
|
||||
!ref->deletion &&
|
||||
!is_null_sha1(ref->old_sha1);
|
||||
|
||||
if (ref->update) {
|
||||
ref->nonfastforward =
|
||||
if (!ref->deletion && !is_null_sha1(ref->old_sha1)) {
|
||||
int nonfastforward =
|
||||
!has_sha1_file(ref->old_sha1)
|
||||
|| !ref_newer(ref->new_sha1, ref->old_sha1);
|
||||
|| !ref_newer(ref->new_sha1, ref->old_sha1);
|
||||
|
||||
if (!prefixcmp(ref->name, "refs/tags/")) {
|
||||
ref->requires_force = 1;
|
||||
if (!force_ref_update) {
|
||||
ref->status = REF_STATUS_REJECT_ALREADY_EXISTS;
|
||||
continue;
|
||||
}
|
||||
} else if (ref->nonfastforward) {
|
||||
ref->requires_force = 1;
|
||||
ref->forced_update = 1;
|
||||
} else if (nonfastforward) {
|
||||
if (!force_ref_update) {
|
||||
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
|
||||
continue;
|
||||
}
|
||||
ref->forced_update = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user