It's not exactly trivial to add the smarts to properly check for pushing backmerges, rebases, topic branches and subtree branches (such as gvt). For a start, prompt the user with hints about what's going on.
Cc: Daniel Vetter <dan...@ffwll.ch> Signed-off-by: Jani Nikula <jani.nik...@intel.com> --- Untested. --- dim | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/dim b/dim index 56463eb0c0a6..9fc2d78b8617 100755 --- a/dim +++ b/dim @@ -989,7 +989,7 @@ function checkpatch_commit_push_range # push. function dim_push_branch { - local branch remote committer_email count + local branch remote committer_email commit_count merge_count branch=${1:?$usage} shift @@ -1004,9 +1004,15 @@ function dim_push_branch # Apart from maintainers pushing merges or rebases, most patches should # be pushed in small batches. - count=$(git rev-list --count --first-parent "$branch@{u}..$branch") - if [[ $count -gt 10 ]]; then - if ! ask_user "Pushing $count commits. Are you sure?"; then + commit_count=$(git rev-list --count --no-merges --first-parent "$branch@{u}..$branch") + merge_count=$(git rev-list --count --merges --first-parent "$branch@{u}..$branch") + if [[ $merge_count -gt 0 ]]; then + if ! ask_user "Pushing $merge_count merges and $commit_count non-merge commits. Merges should only be pushed by maintainers. Are you sure?"; then + echoerr "NOTE: Branch not pushed." + return 1 + fi + elif [[ $commit_count -gt 10 ]]; then + if ! ask_user "Pushing $commit_count commits. Commits should be only be pushed in relatively small batches. Are you sure?"; then echoerr "NOTE: Branch not pushed." return 1 fi -- 2.20.1