Skip to content

Commit

Permalink
Allow helpers to report in "list" command that the ref is unchanged
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Daniel Barkalow authored and Junio C Hamano committed Nov 18, 2009
1 parent b962dbd commit f8ec916
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
4 changes: 3 additions & 1 deletion Documentation/git-remote-helpers.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------------
Expand Down
22 changes: 22 additions & 0 deletions transport-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit f8ec916

Please sign in to comment.