[PATCH] dim: Consider fix-of-fix for -fixes cherry picking.

Rodrigo Vivi rodrigo.vivi at intel.com
Fri Dec 30 11:55:29 UTC 2022


In case a fix was not propagated yet to upstream, the
original commit sha won't be found hence the fix of this
fix will be missed during the cherry-pick.

Since dim cherry-picks reliably adds the -x "(cherry picked
from" message, let's also grep in the log to see if that
was the case, before we give up and forget.

Also, if that's the case, let's then fix the 'Fixes:' tag.

v2: Actually replaces the 'Fixes:' tag, otherwise dim doesn't
allow us to push giving the following message:
"Fixes: SHA1 in not pointing at an ancestor:"
"dim: ERROR: issues in commits detected, aborting"

v3: - Also consider fix of fixes in drm-intel-fixes besides
      the drm-intel-next-fixes.
    - Use intel_remote branches instead of local.
    - And run the check unconditionally as suggested by Daniel.

Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
---
 dim | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/dim b/dim
index b699108..b87b542 100755
--- a/dim
+++ b/dim
@@ -1481,10 +1481,15 @@ function cherry_pick_branch
 			if [[ "$(git merge-base $branch $fixes)" = "$fixes" ]]; then
 				needed=1
 			fi
+
+			fix_of_fix=$(git log --grep="cherry picked from commit $fixes" --after=6months --format=format:%h $intel_remote/drm-intel-next-fixes -1)
+			if [[ -z "$fix_of_fix" ]]; then
+				fix_of_fix=$(git log --grep="cherry picked from commit $fixes" --after=6months --format=format:%h $intel_remote/drm-intel-fixes -1)
+			fi
 		done
 
 		# Note: Cc: stable will overrule Fixes:
-		if [[ -n "$have_fixes" && -z "$needed" ]]; then
+		if [[ -n "$have_fixes" && -z "$needed" && -z "$fix_of_fix" ]]; then
 			echo "Fixes a commit not in $branch. OK."
 			continue
 		fi
@@ -1495,6 +1500,14 @@ function cherry_pick_branch
 			echo "FAILED: $(dim_cite $commit)"
 			(dim_cite $commit) >> $fail_log
 			git cherry-pick --abort
+		else
+			if [[ "$fix_of_fix" ]]; then
+				short_fixes_hash=$(git log -1 --format=format:%h $fixes 2>/dev/null || true)
+				git log -1 --pretty=%B | \
+					sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' | \
+					sed "s/$short_fixes_hash/$fix_of_fix/g" | \
+					git commit --amend -F-
+			fi
 		fi
 	done
 
-- 
2.38.1



More information about the dim-tools mailing list