git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/7] push: flag updates that require force

From
Chris Rorvick <chris@rorvick.com>
Date
Nov 23, 2012, 04:21 UTC
Message-ID
<1353644515-17349-5-git-send-email-chris@rorvick.com>
In-Reply-To
<1353644515-17349-1-git-send-email-chris@rorvick.com>

Add a flag for indicating an update to a reference requires force. Currently the nonfastforward flag of a ref is used for this when generating status the status message. A separate flag insulates the status logic from the details of set_ref_status_for_push().

Signed-off-by: Chris Rorvick <chris@rorvick.com>
---
 cache.h     |  4 +++-
 remote.c    | 11 ++++++++---
 transport.c |  2 +-
 3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/cache.h b/cache.h
index 722321c..b7ab4ac 100644
--- a/cache.h
+++ b/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,
diff --git a/remote.c b/remote.c
index 07040b8..4a6f822 100644
--- a/remote.c
+++ b/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;
+				}
 			}
 		}
 	}
diff --git a/transport.c b/transport.c
index 271965e..ea8bbbd 100644
--- a/transport.c
+++ b/transport.c
@@ -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";
-- 
1.8.0.209.gf3828dc
Previous: Chris RorvickNext: Chris Rorvick
Message 7 of 18 in “push: update remote tags only with force”
  1. 0/7 push: update remote tags only with forceChris Rorvick, Nov 23, 2012
  2. 1/7 push: return reject reasons via a maskChris Rorvick, Nov 23, 2012
  3. Junio C HamanoNov 26, 2012
  4. Chris RorvickNov 27, 2012
  5. 2/7 push: add advice for rejected tag referenceChris Rorvick, Nov 23, 2012
  6. 3/7 push: flag updatesChris Rorvick, Nov 23, 2012
  7. 4/7 push: flag updates that require forceChris Rorvick, Nov 23, 2012
  8. 5/7 push: require force for refs under refs/tags/Chris Rorvick, Nov 23, 2012
  9. Junio C HamanoNov 26, 2012
  10. Chris RorvickNov 27, 2012
  11. Junio C HamanoNov 27, 2012
  12. push: cleanup push rules commentChris Rorvick, Nov 28, 2012
  13. Junio C HamanoNov 28, 2012
  14. 6/7 push: require force for annotated tagsChris Rorvick, Nov 23, 2012
  15. 7/7 push: clarify rejection of update to non-commit-ishChris Rorvick, Nov 23, 2012
  16. Junio C HamanoNov 26, 2012
  17. Chris RorvickNov 27, 2012
  18. Junio C HamanoNov 27, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.