Hi,
Junio C Hamano wrote:
> Subject: [PATCH] check-ref-format: --branch cannot grok @{-1} outside a
> repository
How about this? It is written to be more conservative than the patch
I am replying to, but except for the commit message, it should be
pretty much equivalent.
[...]
> --- a/builtin/check-ref-format.c
> +++ b/builtin/check-ref-format.c
> @@ -38,13 +38,22 @@ static char *collapse_slashes(const char *refname)
>
> static int check_ref_format_branch(const char *arg)
> {
> + int nongit, malformed;
> struct strbuf sb = STRBUF_INIT;
> - int nongit;
> + const char *name = arg;
>
> setup_git_directory_gently(&nongit);
> - if (strbuf_check_branch_ref(&sb, arg))
> +
> + if (!nongit)
> + malformed = (strbuf_check_branch_ref(&sb, arg) ||
> + !skip_prefix(sb.buf, "refs/heads/", &name));
> + else
> + malformed = check_branch_ref_format(arg);
Handles the nongit case in strbuf_check_branch_ref instead of
introducing a new check_branch_ref_format helper.
[...]
> --- a/cache.h
> +++ b/cache.h
> @@ -1444,6 +1444,20 @@ extern int parse_oid_hex(const char *hex, struct
> object_id *oid, const char **en
> #define INTERPRET_BRANCH_HEAD (1<<2)
> extern int interpret_branch_name(const char *str, int len, struct strbuf *,
> unsigned allowed);
> +
> +/*
> + * NEEDSWORK: declare strbuf_branchname() and strbuf_check_branch_ref()
> + * here, not in strbuf.h
> + */
As a result, it doesn't touch headers. I agree that these functions
don't belong in strbuf.h (sorry for not updating the headers at the
same time I moved their implementations) but suspect e.g. branch.h,
revision.h, or some new header like revision-syntax.h would be a
better place.
[...]
> --- a/strbuf.h
> +++ b/strbuf.h
> @@ -568,6 +568,12 @@ static inline void strbuf_complete_line(struct strbuf
> *sb)
> strbuf_complete(sb, '\n');
> }
>
> +/*
> + * NEEDSWORK: the following two functions should not be in this file;
> + * these are about refnames, and should be declared next to
> + * interpret_branch_name() in cache.h
> + */
Didn't touch headers.
[...]
> --- a/t/t1402-check-ref-format.sh
> +++ b/t/t1402-check-ref-format.sh
> @@ -161,6 +161,18 @@ test_expect_success 'check-ref-format --branch from
> subdir' '
> test "$refname" = "$sha1"
> '
>
> +test_expect_success 'check-ref-format --branch @{-1} from non-repo' '
> + test_must_fail nongit git check-ref-format --branch @{-1}
> +'
Swapped test_must_fail and nongit to match existing tests.
Junio C Hamano (3):
check-ref-format --branch: do not expand @{...} outside repository
check-ref-format --branch: strip refs/heads/ using skip_prefix
check-ref-format doc: --branch validates and expands <branch>
Documentation/git-check-ref-format.txt | 9 ++++++++-
builtin/check-ref-format.c | 6 ++++--
sha1_name.c | 5 ++++-
t/t1402-check-ref-format.sh | 16 ++++++++++++++++
4 files changed, 32 insertions(+), 4 deletions(-)