Re: [PATCH v3] refs: loosen restrictions on wildcard '*' refspecs
- From
Jacob Keller <jacob.keller@gmail.com>
- Date
- Jul 22, 2015, 18:24 UTC
- Message-ID
- <CA+P7+xrnRTJZ1j1bPx=3CNtOiNLxHux5bR9b1gaJKeM2_LZ6Kw@mail.gmail.com>
- In-Reply-To
- <1437589261.4520.2.camel@twopensource.com>
On Wed, Jul 22, 2015 at 11:21 AM, David Turner <dturner@twopensource.com> wrote:
Show 68 quoted lines
> On Wed, 2015-07-22 at 09:06 -0700, Jacob Keller wrote:
>> From: Jacob Keller <jacob.keller@gmail.com>
>>
>> Update the check_refname_component logic in order to allow for a less
>> strict refspec format in regards to REFNAME_REFSPEC_PATTERN. Previously
>> the '*' could only replace a single full component, and could not
>> replace arbitrary text. Now, refs such as `foo/bar*:foo/bar*` will be
>> accepted. This allows for somewhat more flexibility in references and
>> does not break any current users. The ref matching code already allows
>> this but the check_refname_format did not. Note this does also allow
>> refs such as `foo/bar*:foe/baz*`, that is, arbitrary renames. This was
>> already possible with namespace sections before, but now is possible
>> even as part of the pattern section. Since users have to explicitly type
>> these into the configuration it does not seem an issue.
>>
>> Also streamline the code by making this new check part of
>> check_refname_component instead of checking after we error during
>> check_refname_format, which fits better with how other issues in refname
>> components are checked.
>>
>> Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
>> Cc: Daniel Barkalow <barkalow@iabervon.iabervon.org>
>> Cc: Junio C Hamano <gitster@pobox.com>
>> ---
>>
>> I updated the patch description a bit. This is also re-based onto the
>> next/ branch in-case. This is mostly a resend so that anyone interested
>> in review has another chance to see the patch.
>>
>> Documentation/git-check-ref-format.txt | 4 ++--
>> refs.c | 39 +++++++++++++++++++---------------
>> refs.h | 4 ++--
>> t/t1402-check-ref-format.sh | 8 ++++---
>> 4 files changed, 31 insertions(+), 24 deletions(-)
>>
>> diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
>> index fc02959ba4ab..9044dfaadae1 100644
>> --- a/Documentation/git-check-ref-format.txt
>> +++ b/Documentation/git-check-ref-format.txt
>> @@ -94,8 +94,8 @@ OPTIONS
>> Interpret <refname> as a reference name pattern for a refspec
>> (as used with remote repositories). If this option is
>> enabled, <refname> is allowed to contain a single `*`
>> - in place of a one full pathname component (e.g.,
>> - `foo/*/bar` but not `foo/bar*`).
>> + in the refspec (e.g., `foo/bar*/baz` or `foo/bar*baz/`
>> + but not `foo/bar*/baz*`).
>>
>> --normalize::
>> Normalize 'refname' by removing any leading slash (`/`)
>> diff --git a/refs.c b/refs.c
>> index ce8cd8d45001..3002015ff289 100644
>> --- a/refs.c
>> +++ b/refs.c
>> @@ -20,11 +20,12 @@ struct ref_lock {
>> * 2: ., look for a preceding . to reject .. in refs
>> * 3: {, look for a preceding @ to reject @{ in refs
>> * 4: A bad character: ASCII control characters, "~", "^", ":" or SP
>> + * 5: check for patterns to reject unless REFNAME_REFSPEC_PATTERN is set
>
> How about this:
> + 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
>
> (I guess it's possible that we would later allow other pattern chars,
> but we could change the message then).
>
>
>Ok that makes sense
Regards, Jake