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

[PATCH v2 10/13] Allow helpers to report in "list" command that the ref is unchanged

From
Sverre Rabbelier <srabbelier@gmail.com>
Date
Nov 4, 2009, 19:48 UTC
Message-ID
<1257364098-1685-11-git-send-email-srabbelier@gmail.com>
In-Reply-To
<1257364098-1685-1-git-send-email-srabbelier@gmail.com>
From: Daniel Barkalow <barkalow@iabervon.org>

Helpers may use a line like "? name unchanged" to specify that there is nothing new at that name, without any git-specific code to determine the correct response.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
---
	Unchanged.
 Documentation/git-remote-helpers.txt |    4 +++-
 transport-helper.c                   |   22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-remote-helpers.txt b/Documentation/git-remote-helpers.txt
index e9aa67e..2c5130f 100644
--- a/Documentation/git-remote-helpers.txt
+++ b/Documentation/git-remote-helpers.txt
@@ -70,7 +70,9 @@ CAPABILITIES
 REF LIST ATTRIBUTES
 -------------------
 
-None are defined yet, but the caller must accept any which are supplied.
+'unchanged'::
+	This ref is unchanged since the last import or fetch, although
+	the helper cannot necessarily determine what value that produced.
 
 Documentation
 -------------
diff --git a/transport-helper.c b/transport-helper.c
index 72ed95b..a80d803 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -176,6 +176,22 @@ static int fetch(struct transport *transport,
 	return -1;
 }
 
+static int has_attribute(const char *attrs, const char *attr) {
+	int len;
+	if (!attrs)
+		return 0;
+
+	len = strlen(attr);
+	for (;;) {
+		const char *space = strchrnul(attrs, ' ');
+		if (len == space - attrs && !strncmp(attrs, attr, len))
+			return 1;
+		if (!*space)
+			return 0;
+		attrs = space + 1;
+	}
+}
+
 static struct ref *get_refs_list(struct transport *transport, int for_push)
 {
 	struct child_process *helper;
@@ -210,6 +226,12 @@ static struct ref *get_refs_list(struct transport *transport, int for_push)
 			(*tail)->symref = xstrdup(buf.buf + 1);
 		else if (buf.buf[0] != '?')
 			get_sha1_hex(buf.buf, (*tail)->old_sha1);
+		if (eon) {
+			if (has_attribute(eon + 1, "unchanged")) {
+				(*tail)->status |= REF_STATUS_UPTODATE;
+				read_ref((*tail)->name, (*tail)->old_sha1);
+			}
+		}
 		tail = &((*tail)->next);
 	}
 	strbuf_release(&buf);
-- 
1.6.5.2.295.g0d105
Previous: Junio C HamanoNext: Sverre Rabbelier
Message 22 of 36 in “Reroll of the remote-vcs-helper series”
  1. 00/13 Reroll of the remote-vcs-helper seriesSverre Rabbelier, Nov 4, 2009
  2. 01/13 Fix memory leak in helper method for disconnectSverre Rabbelier, Nov 4, 2009
  3. 02/13 Allow programs to not depend on remotes having urlsSverre Rabbelier, Nov 4, 2009
  4. 03/13 Use a function to determine whether a remote is validSverre Rabbelier, Nov 4, 2009
  5. 04/13 Allow fetch to modify refsSverre Rabbelier, Nov 4, 2009
  6. 05/13 Add a config option for remotes to specify a foreign vcsSverre Rabbelier, Nov 4, 2009
  7. 06/13 Allow specifying the remote helper in the urlSverre Rabbelier, Nov 4, 2009
  8. 07/13 Add support for "import" helper commandSverre Rabbelier, Nov 4, 2009
  9. 08/13 Write local refs written by the "import" helper command only onceSverre Rabbelier, Nov 4, 2009
  10. 09/13 Honour the refspec when updating refs after importSverre Rabbelier, Nov 4, 2009
  11. Daniel BarkalowNov 4, 2009
  12. Sverre RabbelierNov 4, 2009
  13. Daniel BarkalowNov 4, 2009
  14. Sverre RabbelierNov 5, 2009
  15. Daniel BarkalowNov 5, 2009
  16. Daniel BarkalowNov 5, 2009
  17. Sverre RabbelierNov 5, 2009
  18. Daniel BarkalowNov 6, 2009
  19. Sverre RabbelierNov 6, 2009
  20. Daniel BarkalowNov 6, 2009
  21. Junio C HamanoNov 6, 2009
  22. 10/13 Allow helpers to report in "list" command that the ref is unchangedSverre Rabbelier, Nov 4, 2009
  23. 11/13 Allow helpers to request the path to the .git directorySverre Rabbelier, Nov 4, 2009
  24. Daniel BarkalowNov 4, 2009
  25. Sverre RabbelierNov 4, 2009
  26. Daniel BarkalowNov 4, 2009
  27. Sverre RabbelierNov 4, 2009
  28. Daniel BarkalowNov 4, 2009
  29. Sverre RabbelierNov 4, 2009
  30. Daniel BarkalowNov 4, 2009
  31. Junio C HamanoNov 5, 2009
  32. Sverre RabbelierNov 5, 2009
  33. 12/13 Basic build infrastructure for Python scriptsSverre Rabbelier, Nov 4, 2009
  34. 13/13 Add Python support library for remote helpersSverre Rabbelier, Nov 4, 2009
  35. Johan HerlandNov 5, 2009
  36. Sverre RabbelierNov 6, 2009

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.