diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2015-07-17 19:00:02 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-07-20 11:29:24 -0700 |
commit | 33aef83666900df03c39bcf7e391e2f8195dd13c (patch) | |
tree | fc709a2b5aed1e79ce51863e6e4485762c4234df /builtin | |
parent | 39e69e151951040b952b3c81d2ee40b827fd9abf (diff) | |
download | git-33aef83666900df03c39bcf7e391e2f8195dd13c.tar.gz |
checkout: check_linked_checkout: simplify symref parsing
check_linked_checkout() only understands symref-style HEAD (i.e. "ref:
refs/heads/master"), however, HEAD may also be a an actual symbolic link
(on platforms which support it), thus it will need to check that style
HEAD, as well (via readlink()). As a preparatory step, simplify parsing
of symref-style HEAD so the actual branch check can be re-used easily
for symbolic links (in an upcoming patch).
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/checkout.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c index de6619f4c5..6f4e49232a 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -878,7 +878,6 @@ static void check_linked_checkout(const char *branch, const char *id) struct strbuf sb = STRBUF_INIT; struct strbuf path = STRBUF_INIT; struct strbuf gitdir = STRBUF_INIT; - const char *start, *end; /* * $GIT_COMMON_DIR/HEAD is practically outside @@ -890,15 +889,13 @@ static void check_linked_checkout(const char *branch, const char *id) else strbuf_addf(&path, "%s/HEAD", get_git_common_dir()); - if (strbuf_read_file(&sb, path.buf, 0) < 0 || - !skip_prefix(sb.buf, "ref:", &start)) + if (strbuf_read_file(&sb, path.buf, 0) >= 0 && + starts_with(sb.buf, "ref:")) { + strbuf_remove(&sb, 0, strlen("ref:")); + strbuf_trim(&sb); + } else goto done; - while (isspace(*start)) - start++; - end = start; - while (*end && !isspace(*end)) - end++; - if (strncmp(start, branch, end - start) || branch[end - start] != '\0') + if (strcmp(sb.buf, branch)) goto done; if (id) { strbuf_reset(&path); |