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

[PATCH v6 p2 1/9] transport-helper: update remote helper namespace

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 24, 2012, 03:25 UTC
Message-ID
<1353727520-26039-2-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1353727520-26039-1-git-send-email-felipe.contreras@gmail.com>

When pushing, the remote namespace is updated correctly (e.g. refs/origin/master), but not the remote helper's (e.g. refs/testgit/origin/master).

This alone should not cause any regressions, but combined with other patches to handle negative refs correctly (upcoming patch), it might. However, that's a good thing; otherwise those issues would go unnoticed.

For the moment though, this patch alone shouldn't cause any issues, in fact the rest of the code seems to rely on this happening.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 transport-helper.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/transport-helper.c b/transport-helper.c
index cfe0988..32ad877 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -10,6 +10,7 @@
 #include "string-list.h"
 #include "thread-utils.h"
 #include "sigchain.h"
+#include "refs.h"
 
 static int debug;
 
@@ -600,7 +601,7 @@ static int fetch(struct transport *transport,
 	return -1;
 }
 
-static void push_update_ref_status(struct strbuf *buf,
+static int push_update_ref_status(struct strbuf *buf,
 				   struct ref **ref,
 				   struct ref *remote_refs)
 {
@@ -651,7 +652,7 @@ static void push_update_ref_status(struct strbuf *buf,
 		*ref = find_ref_by_name(remote_refs, refname);
 	if (!*ref) {
 		warning("helper reported unexpected status of %s", refname);
-		return;
+		return 1;
 	}
 
 	if ((*ref)->status != REF_STATUS_NONE) {
@@ -660,11 +661,12 @@ static void push_update_ref_status(struct strbuf *buf,
 		 * status reported by the remote helper if the latter is 'no match'.
 		 */
 		if (status == REF_STATUS_NONE)
-			return;
+			return 1;
 	}
 
 	(*ref)->status = status;
 	(*ref)->remote_status = msg;
+	return 0;
 }
 
 static void push_update_refs_status(struct helper_data *data,
@@ -673,11 +675,23 @@ static void push_update_refs_status(struct helper_data *data,
 	struct strbuf buf = STRBUF_INIT;
 	struct ref *ref = remote_refs;
 	for (;;) {
+		char *private;
+
 		recvline(data, &buf);
 		if (!buf.len)
 			break;
 
-		push_update_ref_status(&buf, &ref, remote_refs);
+		if (push_update_ref_status(&buf, &ref, remote_refs))
+			continue;
+
+		if (!data->refspecs)
+			continue;
+
+		/* propagate back the update to the remote namespace */
+		private = apply_refspecs(data->refspecs, data->refspec_nr, ref->name);
+		if (!private)
+			continue;
+		update_ref("update by helper", private, ref->new_sha1, NULL, 0, 0);
 	}
 	strbuf_release(&buf);
 }
-- 
1.8.0
Previous: Felipe ContrerasNext: Felipe Contreras
Message 2 of 16 in “transport-helper and fast-export fixes”
  1. 0/9 transport-helper and fast-export fixesFelipe Contreras, Nov 24, 2012
  2. 1/9 transport-helper: update remote helper namespaceFelipe Contreras, Nov 24, 2012
  3. Felipe ContrerasNov 24, 2012
  4. 2/9 fast-export: don't handle uninteresting refsFelipe Contreras, Nov 24, 2012
  5. Felipe ContrerasNov 24, 2012
  6. 3/9 transport-helper: trivial code shuffleFelipe Contreras, Nov 24, 2012
  7. Junio C HamanoNov 27, 2012
  8. Felipe ContrerasNov 28, 2012
  9. Junio C HamanoNov 28, 2012
  10. Felipe ContrerasNov 28, 2012
  11. 4/9 transport-helper: fix push without refspecFelipe Contreras, Nov 24, 2012
  12. 5/9 transport-helper: fix pushing with straight refspecFelipe Contreras, Nov 24, 2012
  13. 6/9 transport-helper: fix push without marksFelipe Contreras, Nov 24, 2012
  14. 7/9 fast-export: make extra_refs globalFelipe Contreras, Nov 24, 2012
  15. 8/9 fast-export: refactor get_tags_and_duplicates()Felipe Contreras, Nov 24, 2012
  16. 9/9 fast-export: trivial cleanupsFelipe Contreras, Nov 24, 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.