This is a re-roll of the series from: http://public-inbox.org/git/20170228120633.zkwfqms57fk7dkl5@xxxxxxxxxxxxxxxxxxxxx/ Thanks Junio and Jake for reviewing the original. This is mostly the same, but: - it fixes the case where "branch -r @{-1}" mistakes a local branch for a remote (and adds a test) - as a result of the above fix, the series needs to be applied on top of jk/auto-namelen-in-interpret-branch-name. - I clarified the history in the commit message of patch 4 - the commit message for patch 4 now explicitly mentions which callers can be left alone (so anybody blaming the history won't think they were simply forgotten). With the exception of patch 6 flipping the failure/success bit on the new test, the rest of the patches should be identical. [1/8]: interpret_branch_name: move docstring to header file [2/8]: strbuf_branchname: drop return value [3/8]: strbuf_branchname: add docstring [4/8]: interpret_branch_name: allow callers to restrict expansions [5/8]: t3204: test git-branch @-expansion corner cases [6/8]: branch: restrict @-expansions when deleting [7/8]: strbuf_check_ref_format(): expand only local branches [8/8]: checkout: restrict @-expansions when finding branch builtin/branch.c | 5 +- builtin/checkout.c | 2 +- builtin/merge.c | 2 +- cache.h | 32 +++++++- refs.c | 2 +- revision.c | 2 +- sha1_name.c | 92 ++++++++++++----------- strbuf.h | 21 +++++- t/t3204-branch-name-interpretation.sh | 133 ++++++++++++++++++++++++++++++++++ 9 files changed, 240 insertions(+), 51 deletions(-) create mode 100755 t/t3204-branch-name-interpretation.sh -Peff