summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b962dbd)
raw | patch | inline | side by side (parent: b962dbd)
author | Daniel Barkalow <barkalow@iabervon.org> | |
Wed, 18 Nov 2009 01:42:30 +0000 (02:42 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 18 Nov 2009 05:45:44 +0000 (21:45 -0800) |
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>
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>
Documentation/git-remote-helpers.txt | patch | blob | history | |
transport-helper.c | patch | blob | history |
index d6c5268d38cab106920f473bdb944d905bdab768..f4b6a5aea3bb3b1076877cffa8beb17936114468 100644 (file)
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 628a5ca21062ee26ca219f75e13ad7d3c7dcff4d..c87530e87d0891a9e14c8fcddd57051b0fe1bcde 100644 (file)
--- a/transport-helper.c
+++ b/transport-helper.c
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;
(*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);