summaryrefslogtreecommitdiff
path: root/notes-cache.h
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2014-01-15 03:37:23 -0500
committerLibravatar Junio C Hamano <gitster@pobox.com>2014-01-15 12:43:29 -0800
commit3f6eb30f1dbb6f8f715c9121bba43f2a1d294e28 (patch)
treece7c117c2bb9c0c03b7dedf0215bf8d51c847f56 /notes-cache.h
parentinterpret_branch_name: always respect "namelen" parameter (diff)
downloadtgif-3f6eb30f1dbb6f8f715c9121bba43f2a1d294e28.tar.xz
interpret_branch_name: avoid @{upstream} past colon
get_sha1() cannot currently parse a valid object name like "HEAD:@{upstream}" (assuming that such an oddly named file exists in the HEAD commit). It takes two passes to parse the string: 1. It first considers the whole thing as a ref, which results in looking for the upstream of "HEAD:". 2. It finds the colon, parses "HEAD" as a tree-ish, and then finds the path "@{upstream}" in the tree. For a path that looks like a normal reflog (e.g., "HEAD:@{yesterday}"), the first pass is a no-op. We try to dwim_ref("HEAD:"), that returns zero refs, and we proceed with colon-parsing. For "HEAD:@{upstream}", though, the first pass ends up in interpret_upstream_mark, which tries to find the branch "HEAD:". When it sees that the branch does not exist, it actually dies rather than returning an error to the caller. As a result, we never make it to the second pass. One obvious way of fixing this would be to teach interpret_upstream_mark to simply report "no, this isn't an upstream" in such a case. However, that would make the error-reporting for legitimate upstream cases significantly worse. Something like "bogus@{upstream}" would simply report "unknown revision: bogus@{upstream}", while the current code diagnoses a wide variety of possible misconfigurations (no such branch, branch exists but does not have upstream, etc). However, we can take advantage of the fact that a branch name cannot contain a colon. Therefore even if we find an upstream mark, any prefix with a colon must mean that the upstream mark we found is actually a pathname, and should be disregarded completely. This patch implements that logic. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'notes-cache.h')
0 files changed, 0 insertions, 0 deletions