[PATCH] dim: add backmerge tool
Daniel Vetter
daniel.vetter at ffwll.ch
Mon Apr 3 15:52:38 UTC 2017
Does a few sanity checks to avoid common gotchas:
- make sure the backmerge is in drm-tip already
- check that git rerere resolves all conflict, and cuation if not
- merge commit template.
Cc: Sean Paul <seanpaul at chromium.org>
Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
---
bash_completion | 2 +-
dim | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
dim.rst | 7 +++++++
3 files changed, 62 insertions(+), 1 deletion(-)
diff --git a/bash_completion b/bash_completion
index 7dfc4b86cb13..451db26aae8c 100644
--- a/bash_completion
+++ b/bash_completion
@@ -75,7 +75,7 @@ _dim ()
checkpatch)
# FIXME needs a git sha1
;;
- pull-request)
+ pull-request|backmerge)
if [[ $args == 2 ]]; then
COMPREPLY=( $( compgen -W "$nightly_branches" -- $cur ) )
elif [[ $args == 3 ]]; then
diff --git a/dim b/dim
index 8357d4f635e7..6474d078af67 100755
--- a/dim
+++ b/dim
@@ -749,6 +749,60 @@ function dim_apply_pull
return $rv
}
+function dim_backmerge
+{
+ local branch upstream patch_file
+
+ branch=${1:?$usage}
+ upstream=${2:?$usage}
+
+ cd $DIM_PREFIX/drm-tip
+ tip_remote=$(url_to_remote $drm_tip_ssh)
+ git fetch -q $tip_remote || true
+
+ if ! git merge-base --is-ancestor $upstream $tip_remote/drm-tip ; then
+ echoerr "Upstream $upstream not merged into drm-tip, aborting."
+ echoerr "Please make sure any backmerge is tested in drm-tip,"
+ echoerr "to give all the CI bots some time to find bugs."
+ exit 1
+ fi
+
+ assert_branch $branch
+ assert_repo_clean
+
+ git merge --rerere-autoupdate --no-commit $upstream >& /dev/null || true
+
+ if [[ -d .git ]]; then
+ patch_file=".git"
+ else
+ patch_file=$(cut -d ' ' -f 2 .git)
+ fi
+ patch_file=$patch_file/MERGE_MSG
+
+
+ cat > $patch_file <<-HERE
+ Merge $upstream into $branch
+
+ Explain here why you've done the backmerge, e.g. which patches
+ or which driver pull request you need to be able to merge
+ \$feature_work from \$author.
+
+ HERE
+
+ if git diff | grep -q '\(<<<<<<<\|=======\|>>>>>>>\||||||||\)' ; then
+ echoerr "Conflicts find while merging $upstream into $branch."
+ echoerr "This should only happen when git rerere gets confused"
+ echoerr "or if there's a manual fixup patch in drm-rerere."
+ echoerr "Please proceed with extreme caution."
+ echoerr "Once the conflict is resolved, commit it with"
+ echoerr " git commit -a"
+ fi
+
+ git add -u
+ git commit -s
+
+}
+
function dim_add_link
{
local branch file message_id
diff --git a/dim.rst b/dim.rst
index bc4d9a0b2a76..b99248e24a8d 100644
--- a/dim.rst
+++ b/dim.rst
@@ -360,6 +360,13 @@ apply-pull *branch*
-------------------
Reads a pull request mail from stdin and merges it into the given *branch*.
+backmerge *branch* *upstream*
+-----------------------------
+
+Backmerges *upstream* into *branch*, making a few sanity checks on the way. The
+*upstream* we backmerge should be the same as used for sending out pull requests
+using **pull-request**.
+
update-next
-----------
Pushes out the latest dinq to drm-intel-next and tags it. Also
--
2.11.0
More information about the dri-devel
mailing list