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

3 messages from 2009-08-05 to 2009-08-05. Participants: Daniel Barkalow, Johannes Schindelin.
Thread: https://gitlist.dev/t/20388

## Daniel Barkalow, 2009-08-05 05:02

Subject: [PATCH 09/13] Allow helpers to report in "list" command that the ref is unchanged
Message-ID: <alpine.LNX.2.00.0908050056000.2147@iabervon.org>
URL: https://gitlist.dev/e/alpine.LNX.2.00.0908050056000.2147%40iabervon.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>
---
 Documentation/git-remote-helpers.txt |    4 +++-
 transport-helper.c                   |    6 ++++++
 2 files changed, 9 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 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, 2009-08-05 21:03

Subject: Re: [PATCH 09/13] Allow helpers to report in "list" command that the ref is unchanged
Message-ID: <alpine.DEB.1.00.0908052258440.8306@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0908052258440.8306%40pacific.mpi-cbg.de
In-Reply-To: <alpine.LNX.2.00.0908050056000.2147@iabervon.org>

```
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, 2009-08-05 21:18

Subject: Re: [PATCH 09/13] Allow helpers to report in "list" command that the ref is unchanged
Message-ID: <alpine.LNX.2.00.0908051717580.2147@iabervon.org>
URL: https://gitlist.dev/e/alpine.LNX.2.00.0908051717580.2147%40iabervon.org
In-Reply-To: <alpine.DEB.1.00.0908052258440.8306@pacific.mpi-cbg.de>

```
On Wed, 5 Aug 2009, Johannes Schindelin wrote:

> 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*

```
