[dim PATCH 4/7] dim: abstract helper for listing unmerged tags

Jani Nikula jani.nikula at intel.com
Fri Dec 7 10:00:38 UTC 2018


On Thu, 06 Dec 2018, Daniel Vetter <daniel at ffwll.ch> wrote:
> On Wed, Dec 05, 2018 at 05:02:56PM +0200, Jani Nikula wrote:
>> Make the pull request code a bit easier to grasp. Use git log pretty
>> format for easier extraction of the tags.
>> 
>> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>> ---
>>  dim | 18 +++++++++++++++++-
>>  1 file changed, 17 insertions(+), 1 deletion(-)
>> 
>> diff --git a/dim b/dim
>> index b227f0db99dc..e0f96f78c858 100755
>> --- a/dim
>> +++ b/dim
>> @@ -345,6 +345,22 @@ function git_branch_exists # branch
>>  	fi
>>  }
>>  
>> +# $1: branch
>> +# $2: upstream
>> +function git_unmerged_tags
>> +{
>> +	local branch upstream
>> +
>> +	branch=$1
>> +	upstream=$2
>> +
>> +	# assume branch based tag names
>> +	git log --decorate --pretty=%D "$branch@{upstream}" ^$upstream |\
>> +		grep -o "tag: $branch-[0-9-]\+" |\
>
> This drops the () which contain the branches, slightly increasing the risk
> we misparse. I'm still baffled that there's no better way to get a list of
> tags for a commit range.

Note how I use --pretty=%D so I can be sure the git log output only
contains ref names, and nothing else. I think this *decreases* the
chances of misparsing.

>> +		sed -e "s/^tag: //" |\
>> +		tr "[:space:]" " "
>
> Not clear to me why we need to do space translations with your pipeline.

Yeah, *sigh*.

It's not strictly about this pipeline, it's about robustness in general.

Assigning the output to a variable would include the newlines... but
$drm_intel_next_tags references would have the newlines expanded to
spaces while quoted "$drm_intel_next_tags" would retain the newlines. As
the follow-up patches need to be able to pick the first from the list, I
opted to this so I can use ${x%% *} to do that, without fear that
quoting would mess that up.

This was another one of those cases where I paused to contemplate the
relative merits of converting the entire thing to python.

> I'd go with the old pipeline exactly. Not because it's better, but because
> we know it works. At least until we have a real way to list tags ...

Alas the old one doesn't work as-is for the general case. The
drm-intel-next- grep&sed works only because the drm-intel-next branch
does not contain tags such as drm-intel-next-fixes- which would also
match.

BR,
Jani.

> -Daniel
>
>> +}
>> +
>>  function git_committer_email
>>  {
>>  	if ! committer_email=$(git config --get user.email) ; then
>> @@ -1930,7 +1946,7 @@ function dim_pull_request
>>  
>>  	if [ "$branch" = "drm-intel-next" ]; then
>>  		# drm-intel-next pulls have been tagged using dim update-next
>> -		drm_intel_next_tags=$(git log "$branch@{upstream}" ^$upstream --decorate | grep "(.*tag: drm-intel-next-" | sed -e "s/^.*(.*tag: \(drm-intel-next-[^ ,]*\).*)$/\1/")
>> +		drm_intel_next_tags=$(git_unmerged_tags "$branch" "$upstream")
>>  		prep_pull_mail $req_file $drm_intel_next_tags
>>  		tag=$(git describe --all --exact "$branch@{upstream}")
>>  
>> -- 
>> 2.11.0
>> 
>> _______________________________________________
>> dim-tools mailing list
>> dim-tools at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dim-tools

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the dim-tools mailing list