[RFC] dim: drm-intel: Include drm-intel-gt-next as part of unified fixes flow

Jani Nikula jani.nikula at linux.intel.com
Wed Sep 30 08:30:26 UTC 2020


On Tue, 29 Sep 2020, Rodrigo Vivi <rodrigo.vivi at intel.com> wrote:
> This is the minimal and more straight forward way to do it,
> although I'm sure there are better ways.

Hardly minimal?

I think there's probably a magic git spell to list multiple branches to
look for when passing the parameters to git_list_fixes.

Failing at that, at least the refactoring and adding branches should be
separate steps.

BR,
Jani.


>
> Since I'm not confident yet with the overall approach, let's
> at least use this for a proposal.
>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
>  dim | 105 ++++++++++++++++++++++++++++++++++--------------------------
>  1 file changed, 59 insertions(+), 46 deletions(-)
>
> diff --git a/dim b/dim
> index c3a048db8956..9c1891e79a81 100755
> --- a/dim
> +++ b/dim
> @@ -1373,64 +1373,77 @@ function git_list_fixes
>  	    "$@"
>  }
>  
> -function cherry_pick_branch
> +function cherry_pick_commit
>  {
> -	local branch log fail_log intel_remote needed have_fixes
> +	local commit have_fixes needed
> +	commit=${1:?$usage}
>  
> -	branch=${1:?$usage}
> -	log=$(mktemp)
> -	fail_log=$(mktemp)
> +	echo -n "Considering $(dim_cite $commit)... "
>  
> -	intel_remote=$(repo_to_remote drm-intel)
> +	# Look at history for already cherry-picked fixes.
> +	# Note: use *local* branches to account for unpushed commits.
> +	git log drm-intel-fixes --format=format:%h --after=6months \
> +	    --grep="cherry picked .* $commit" > $log
> +	if [ "$(cat $log)" = "" ]; then
> +		git log drm-intel-next-fixes --format=format:%h --after=6months \
> +		    --grep="cherry picked .* $commit" > $log
> +	fi
>  
> -	# Look for commits in dinq tagged as fixes.
> -	for commit in $(git_list_fixes $intel_remote/$branch..$intel_remote/drm-intel-next-queued -- drivers/gpu/drm/i915); do
> -		echo -n "Considering $(dim_cite $commit)... "
> +	if [ "$(cat $log)" != "" ]; then
> +		echo "Already backported as $(tr "\n" " " < $log). OK."
> +		continue
> +	fi
>  
> -		# Look at history for already cherry-picked fixes.
> -		# Note: use *local* branches to account for unpushed commits.
> -		git log drm-intel-fixes --format=format:%h --after=6months \
> -		    --grep="cherry picked .* $commit" > $log
> -		if [ "$(cat $log)" = "" ]; then
> -			git log drm-intel-next-fixes --format=format:%h --after=6months \
> -			    --grep="cherry picked .* $commit" > $log
> +	have_fixes=
> +	needed=
> +	for fixes in $(git show -s $commit | grep -i "^    Fixes: *[0-9a-fA-F]" | sed 's/^ *[Ff]ixes: *\([0-9a-fA-F]\+\).*/\1/'); do
> +		have_fixes=1
> +		fixes=$(git log -1 --format=format:%H $fixes 2>/dev/null || true)
> +		if [[ -z "$fixes" ]]; then
> +			continue
>  		fi
>  
> -		if [ "$(cat $log)" != "" ]; then
> -			echo "Already backported as $(tr "\n" " " < $log). OK."
> -			continue
> +		# FIXME: see if the commit to be fixed has been
> +		# backported!
> +		echo -n "Fixes: $(dim_cite $fixes). "
> +		if [[ "$(git merge-base $branch $fixes)" = "$fixes" ]]; then
> +			needed=1
>  		fi
> +	done
>  
> -		have_fixes=
> -		needed=
> -		for fixes in $(git show -s $commit | grep -i "^    Fixes: *[0-9a-fA-F]" | sed 's/^ *[Ff]ixes: *\([0-9a-fA-F]\+\).*/\1/'); do
> -			have_fixes=1
> -			fixes=$(git log -1 --format=format:%H $fixes 2>/dev/null || true)
> -			if [[ -z "$fixes" ]]; then
> -				continue
> -			fi
> +	# Note: Cc: stable will overrule Fixes:
> +	if [[ -n "$have_fixes" && -z "$needed" ]]; then
> +		echo "Fixes a commit not in $branch. OK."
> +		continue
> +	fi
>  
> -			# FIXME: see if the commit to be fixed has been
> -			# backported!
> -			echo -n "Fixes: $(dim_cite $fixes). "
> -			if [[ "$(git merge-base $branch $fixes)" = "$fixes" ]]; then
> -				needed=1
> -			fi
> -		done
> +	echo "Try to cherry-pick."
> +	commit_list_references $commit
> +	if ! git cherry-pick -x -s $commit; then
> +		echo "FAILED: $(dim_cite $commit)"
> +		(dim_cite $commit) >> $fail_log
> +		git cherry-pick --abort
> +	fi
> +}
>  
> -		# Note: Cc: stable will overrule Fixes:
> -		if [[ -n "$have_fixes" && -z "$needed" ]]; then
> -			echo "Fixes a commit not in $branch. OK."
> -			continue
> -		fi
> +function cherry_pick_branch
> +{
> +	local branch log fail_log intel_remote
>  
> -		echo "Try to cherry-pick."
> -		commit_list_references $commit
> -		if ! git cherry-pick -x -s $commit; then
> -			echo "FAILED: $(dim_cite $commit)"
> -			(dim_cite $commit) >> $fail_log
> -			git cherry-pick --abort
> -		fi
> +	branch=${1:?$usage}
> +	log=$(mktemp)
> +	fail_log=$(mktemp)
> +
> +	intel_remote=$(repo_to_remote drm-intel)
> +
> +	# Look for commits in dinq tagged as fixes.
> +	for commit in $(git_list_fixes $intel_remote/$branch..$intel_remote/drm-intel-next-queued -- drivers/gpu/drm/i915); do
> +		cherry_pick_commit $commit
> +	done
> +
> +	# Look for commits in dinq tagged as fixes.
> +	for commit in $(git_list_fixes $intel_remote/$branch..$intel_remote/drm-intel-gt-next -- drivers/gpu/drm/i915); do
> +		cherry_pick_commit $commit
>  	done
>  
>  	# FIXME: evolve this into an email report to commit authors etc.

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the dim-tools mailing list