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

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

From
Sverre Rabbelier <srabbelier@gmail.com>
Date
Nov 18, 2009, 01:42 UTC
Message-ID
<1258508552-20752-11-git-send-email-srabbelier@gmail.com>
In-Reply-To
<1258508552-20752-10-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 d6c5268..f4b6a5a 100644
--- a/Documentation/git-remote-helpers.txt
+++ b/Documentation/git-remote-helpers.txt
@@ -84,7 +84,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 628a5ca..c87530e 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -206,6 +206,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;
@@ -240,6 +256,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.3.164.g07b0c
Previous: Sverre RabbelierNext: Sverre Rabbelier
Message 11 of 13 in “Reroll of the remote-vcs-helper series”
  1. 00/12 Reroll of the remote-vcs-helper seriesSverre Rabbelier, Nov 18, 2009
  2. 01/12 Fix memory leak in helper method for disconnectSverre Rabbelier, Nov 18, 2009
  3. 02/12 Allow programs to not depend on remotes having urlsSverre Rabbelier, Nov 18, 2009
  4. 03/12 Use a function to determine whether a remote is validSverre Rabbelier, Nov 18, 2009
  5. 04/12 Allow fetch to modify refsSverre Rabbelier, Nov 18, 2009
  6. 05/12 Add a config option for remotes to specify a foreign vcsSverre Rabbelier, Nov 18, 2009
  7. 06/12 Allow specifying the remote helper in the urlSverre Rabbelier, Nov 18, 2009
  8. 07/12 Add support for "import" helper commandSverre Rabbelier, Nov 18, 2009
  9. 08/12 Allow helper to map private ref names into normal namesSverre Rabbelier, Nov 18, 2009
  10. 09/12 Fix various memory leaks in transport-helper.cSverre Rabbelier, Nov 18, 2009
  11. 10/12 Allow helpers to report in "list" command that the ref is unchangedSverre Rabbelier, Nov 18, 2009
  12. 11/12 Basic build infrastructure for Python scriptsSverre Rabbelier, Nov 18, 2009
  13. 12/12 Add Python support library for remote helpersSverre Rabbelier, Nov 18, 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.