diff options
author | Jakub Kicinski <kuba@kernel.org> | 2020-11-11 15:22:03 -0800 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2020-11-13 17:48:22 +0100 |
commit | 99babde7dab06d67e8c64d882f63c07c2cc5143a (patch) | |
tree | 5c39a63484286d5e4f700008c4cb400726944df8 | |
parent | 7d4c8853661a71e8fcc3205a009335bc0c0bf41e (diff) | |
download | pw-99babde7dab06d67e8c64d882f63c07c2cc5143a.tar.gz |
pw-apply: don't use git-pw
There are multiple reasons to steer clear of git pw:
1. The fewer external dependencies the better (although we
still need to replace the git pw use in -a to get rid
of the dependency completely).
2. Speed - git-pw takes 1.8s per request, we do a show and
a download. curl requests take 1s to complete, moreover
for auto-merge we need to download series json anyway.
All in all with auto-merge we save 2.6s.
3. Output format of show is cluttered and useless IMHO, we
can do better.
Example output, before:
Property Value
---------- --------------------------------------------------------------------------
ID 212566
Date 2020-11-06T03:52:08
Name [v4,net-next,1/3] ptp: idt82p33: add adjphase support
URL https://patchwork.ozlabs.org/project/netdev/list/?series=212566
Submitter Min Li (min.li.xe@renesas.com)
Project Linux network development
Version 4
Received 3 of 3
Complete True
Cover
Patches 1395475 [v4,net-next,1/3] ptp: idt82p33: add adjphase support
1395450 [v4,net-next,2/3] ptp: idt82p33: use i2c_master_send for bus write
1395474 [v4,net-next,3/3] ptp: idt82p33: optimize _idt82p33_adjfine
After:
By: Min Li Age: 1d 17h Tree: net-next Version: 4 Patches: 3
-----
ptp: idt82p33: add adjphase support
ptp: idt82p33: use i2c_master_send for bus write
ptp: idt82p33: optimize _idt82p33_adjfine
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r-- | lib.sh | 102 | ||||
-rwxr-xr-x | pw-apply | 14 |
2 files changed, 110 insertions, 6 deletions
@@ -0,0 +1,102 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# +# Copyright (C) 2020 Jakub Kicinski <kuba@kernel.org> + +bold() +{ + echo -n -e "\e[1m$@" + [ ! -z "$@" ] && echo -n -e "\e[0m" +} + +normal() +{ + echo -n -e "\e[0m$@" +} + +pr_trunc_n() +{ + local len=$1 + local str="$2" + + if [ ${#str} -le $len ]; then + echo -n "$str" + else + echo -n ${str::len - 3}... + fi +} + +date_to_age() +{ + local past="$1" + + now=$(date +%s) + was=$(date -d "$past" +%s) + + hours=$(( (now - was) / (60 * 60) )) + + echo "$((hours / 24))d $((hours % 24))h" +} + +subject_remove_tag() +{ + echo "$@" | sed -e 's/\[.*\] *//' +} + +subject_get_tree() +{ + tree=$(echo "$@" | + sed -n 's/\[\(.*\)\].*/\1/p' | + tr , '\n' | + sed -n '/[a-z]$/p') + echo ${tree:--} +} + +pw_series_download_mbox() +{ + local series_json="$1" + local out_file=${2:-mbox} + + mbox_url=$(echo "$series_json" | jq -r '.mbox') + curl -s "$mbox_url" > $out_file +} + +pw_series_print_short() +{ + local series_json="$1" + + series_subj=$(echo "$series_json" | jq -r '.name') + patch_subj=$(echo "$series_json" | jq -r '.patches[0].name') + cover_letter=$(echo "$series_json" | jq -r '.cover_letter') + cnt=$(echo "$series_json" | jq -r '.patches | length') + author=$(echo "$series_json" | jq -r '.submitter.name') + ver=$(echo "$series_json" | jq -r '.version') + date=$(echo "$series_json" | jq -r '.date') + + date="$date UTC" + + name=$(subject_remove_tag "$series_subj") + tree=$(subject_get_tree "$patch_subj") + age=$(date_to_age "$date") + resend=$(echo "$patch_subj" | sed -n 's/.*resend.*/r/Ip') + + bold "By: $author Age: $age Tree: $tree Version: $ver$resend Patches: $cnt\n" + echo "-----" + + if [ "$cover_letter" != "null" ]; then + bold + pr_trunc_n 78 "$name" + normal "\n" + fi + + echo "$series_json" | + jq -r '.patches[].name' | + while read -r patch_subj; do + patch_name=$(subject_remove_tag "$patch_subj") + echo -n " " + pr_trunc_n 77 "$patch_name" + echo + done + + echo +} @@ -3,6 +3,8 @@ # # Copyright (C) 2019 Daniel Borkmann <daniel@iogearbox.net> +source $(dirname $0)/lib.sh + usage() { cat <<-EOF @@ -20,15 +22,15 @@ mbox_from_url() mbox_from_series() { - git pw series show $1 -f simple 2> /dev/null | \ - sed ''/Complete/s//$(printf "\033[1mComplete\033[0m")/'' - git pw series download $1 mbox.i 2> /dev/null + srv=$(git config --get pw.server) + series_json=$(curl -s $srv/series/$1/) + + pw_series_print_short "$series_json" + pw_series_download_mbox "$series_json" mbox.i } get_cover() { - srv=$(git config --get pw.server) - series_json=$(curl -s $srv/series/$1/) cover_json=$(echo "$series_json" | jq '.cover_letter') link=$(echo "$cover_json" | jq -r '.mbox' ) @@ -114,7 +116,7 @@ done body= author=XYZ if [ ! -z "$auto_branch" ]; then - get_cover $series + get_cover [ -z "$cover_msgid" ] && merge= fi |