On Mon, Nov 14, 2016 at 10:48 PM, Karthik Nayak <[email protected]> wrote:
> On Tue, Nov 15, 2016 at 1:21 AM, Junio C Hamano <[email protected]> wrote:
>> Karthik Nayak <[email protected]> writes:
>>
>>>>  - More importantly, what do these do?  I do not think of a good
>>>>    description that generalizes "base of refs/foo/bar/boz is foo" to
>>>>    explain your :base.
>>>
>>> $ ./git for-each-ref --format "%(refname)%(end) %(refname:dir)"
>>> refs/heads/master                  refs/heads
>>> refs/heads/ref-filter                refs/heads
>>> refs/remotes/junio/va/i18n     refs/remotes/junio/va
>>>
>>> $ ./git for-each-ref  refs/heads --format
>>> "%(align:left,30)%(refname)%(end) %(refname:base)"
>>> refs/heads/master                 heads
>>> refs/heads/ref-filter                heads
>>> refs/remotes/junio/va/i18n     remotes
>>>
>>> I guess this should clear it up.
>>
>> Hmph.
>>
>> I would guess from these examples that :dir is an equivalent to
>> dirname().  But it is unclear how :base is defined.  Is it the path
>> component that comes immediately after "refs/" that appears at the
>> beginning?
>
> ':dir' is equivalent to dirname(). Yup, base is the folder right after 
> 'refs/'.
> For local branches it is 'heads' for remotes it is 'remotes'. This is useful
> when we want to make decisions based on the type of branch we're dealing
> with (using along with %(if)...%(end)).
>
> --
> Regards,
> Karthik Nayak


dirname makes sense. What about implementing a reverse variant of
strip, which you could perform stripping of right-most components and
instead of stripping by a number, strip "to" a number, ie: keep the
left N most components, and then you could use something like

"keep=2" to keep "refs/heads"

?

I think that would be more general purpose than basename, and less confusing?

Thanks,
Jake

Reply via email to