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"

Signed-off-by: Rodrigo Vivi <[email protected]>
---
 dim | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

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

Reply via email to