threads / patch / 20388

patch, 13 partsAllow helpers to report in "list" command that the ref is unchanged

Subject: [PATCH 09/13] Allow helpers to report in "list" command that the ref is unchanged

## tl;dr

3 messages between Aug 5, 2009 and Aug 5, 2009. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Daniel Barkalow· Aug 5, 2009, 05:02 UTC · lore

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>
---
 Documentation/git-remote-helpers.txt |    4 +++-
 transport-helper.c                   |    6 ++++++
 2 files changed, 9 insertions(+), 1 deletions(-)
Show changes to 2 files +9 −1

Documentation/git-remote-helpers.txt, transport-helper.c

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 6eee0da..956cece 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -193,6 +193,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 (strstr(eon + 1, "unchanged")) {
+				(*tail)->status |= REF_STATUS_UPTODATE;
+				read_ref((*tail)->name, (*tail)->old_sha1);
+			}
+		}
 		tail = &((*tail)->next);
 	}
 	strbuf_release(&buf);
-- 
1.6.4.rc3.27.g95032.dirty
Johannes Schindelin· Aug 5, 2009, 21:03 UTC · re: Daniel Barkalow · lore

Re: [PATCH 09/13] Allow helpers to report in "list" command that the ref is unchanged

Hi,
On Wed, 5 Aug 2009, Daniel Barkalow wrote:
> +			if (strstr(eon + 1, "unchanged")) {
I guess we'll want to have a helper like this already:
	static int has_attribute(const char *tail, const char *attr) {
		int len;
		if (!tail)
			return 0;
		len = strlen(attr);
		for (;;) {
			const char *space = strchrnul(tail, ' ');
			if (len == space - tail && !strncmp(tail, attr, len))
				return 1;
			if (!*space)
				return 0;
			tail = space + 1;
		}
	}

This guards against attributes that are substrings of other attributes. (You want to future-proof the attributes system, after all, i.e. handle helpers returning attributes unknown to the current Git.)

Ciao, Dscho

Daniel Barkalow· Aug 5, 2009, 21:18 UTC · re: Johannes Schindelin · lore

Re: [PATCH 09/13] Allow helpers to report in "list" command that the ref is unchanged

On Wed, 5 Aug 2009, Johannes Schindelin wrote:
Show 28 quoted lines
> Hi,
> 
> On Wed, 5 Aug 2009, Daniel Barkalow wrote:
> 
> > +			if (strstr(eon + 1, "unchanged")) {
> 
> I guess we'll want to have a helper like this already:
> 
> 	static int has_attribute(const char *tail, const char *attr) {
> 		int len;
> 
> 		if (!tail)
> 			return 0;
> 
> 		len = strlen(attr);
> 		for (;;) {
> 			const char *space = strchrnul(tail, ' ');
> 			if (len == space - tail && !strncmp(tail, attr, len))
> 				return 1;
> 			if (!*space)
> 				return 0;
> 			tail = space + 1;
> 		}
> 	}
> 
> This guards against attributes that are substrings of other attributes.  
> (You want to future-proof the attributes system, after all, i.e. handle 
> helpers returning attributes unknown to the current Git.)
Good point.
	-Daniel
*This .sig left intentionally blank*

← back to recent threads