@@ -144,13 +144,17 @@ INTERACTIVE=
DRY=
FORCE=
HELP=
+EDIT=
-while getopts hdfis opt; do
+while getopts hdefis opt; do
case "$opt" in
d)
DRY_RUN=--dry-run
DRY=echo
;;
+ e)
+ EDIT=1
+ ;;
f)
FORCE=1
;;
@@ -670,13 +674,23 @@ function dim_push_fixes
dim_push_branch drm-intel-fixes "$@"
}
+function get_committer_email
+{
+ local committer_email
+
+ if ! committer_email=$(git config --get user.email) ; then
+ committer_email=$EMAIL
+ fi
+ echo -n $committer_email
+}
+
# ensure we're on branch $1, and apply patches. the rest of the arguments are
# passed to git am.
dim_alias_ab=apply-branch
dim_alias_sob=apply-branch
function dim_apply_branch
{
- local branch file message_id commiter_email patch_from sob rv
+ local branch file message_id committer_email patch_from sob rv
branch=${1:?$usage}
shift
@@ -688,13 +702,10 @@ function dim_apply_branch
cat > $file
message_id=$(message_get_id $file)
-
- if ! commiter_email=$(git config --get user.email) ; then
- commiter_email=$EMAIL
- fi
+ committer_email=$(get_committer_email)
patch_from=$(grep "From:" "$file" | head -1)
- if [[ "$patch_from" != *"$commiter_email"* ]] ; then
+ if [[ "$patch_from" != *"$committer_email"* ]] ; then
sob=-s
fi
@@ -1213,6 +1224,15 @@ function rangeish()
fi
}
+function insert_extracted_tags
+{
+ local committer_email new_tags sob
+ committer_email=$(get_committer_email)
+ new_tags=$(awk '{ORS="\\n"} {print $0}' $1 | head -c-3)
+ sob="Signed-off-by: .*<$committer_email>"
+ awk "/$sob/{p++} p==1{print \"$new_tags\"; p++} p!=1{print}"
+}
+
function dim_extract_tags
{
local branch range file tags
@@ -1234,9 +1254,18 @@ function dim_extract_tags
return 0
fi
- tags=$(printf -- "# *** extracted tags ***\n%s" "$tags")
-
- git filter-branch -f --msg-filter "cat ; echo \"$tags\"" $range
+ # If edit is selected, launch an editor to allow tag editing
+ # If it's not, just append the tags at the bottom of the commit
+ if [ "$EDIT" ] && [ -n $EDITOR ]; then
+ echo "$tags" > $file
+ $EDITOR $file >/dev/tty</dev/tty
+ export -f get_committer_email insert_extracted_tags
+ cmd="insert_extracted_tags $file"
+ else
+ tags=$(printf -- "# *** extracted tags ***\n%s" "$tags")
+ cmd="cat ; echo \"$tags\""
+ fi
+ git filter-branch -f --msg-filter "$cmd" $range
}
function dim_extract_queued
@@ -96,6 +96,7 @@ OPTIONS
-f Ignore some error conditions.
-d Dry run.
+-e Edit mode.
-i Interactive mode.
COMMANDS
@@ -204,6 +205,10 @@ This extracts various tags (e.g. Reviewed-by:) from emails and applies them to t
top commit on the given branch. You can give the command a rangeish to add the
tags from the same email to multiple already applied patches.
+Use the -e argument to launch $EDITOR, allowing you to immediately edit the
+extracted tags. Once finished, the tags will be inserted above your
+Signed-off-by tag.
+
extract-fixes [*git-rangeish*]
------------------------------
Launch $EDITOR when extracting tags to curate the tags immediately. Once the tags are proper, automatically add them before the committer's Signed-off-by line to all patches in the range. Changes in v2: - Append the tags before the committer's SoB (Ville) - Make launching $EDITOR contingent on -i flag (Ville/Jani) - Fix tty issues when launching editor Changes in v3: - Don't overload interactive mode (add new edit mode) (Jani) - Don't default to vi, use non-edit mode if EDITOR not set (Jani) - Fix newline escaping in insert_extracted_tags Signed-off-by: Sean Paul <seanpaul@chromium.org> --- dim | 49 +++++++++++++++++++++++++++++++++++++++---------- dim.rst | 5 +++++ 2 files changed, 44 insertions(+), 10 deletions(-)