diff mbox

[U-Boot,V4] MAKEALL: Add -m/-M option to determine maintainers

Message ID 1330996251-24214-1-git-send-email-marex@denx.de
State Accepted
Commit 9b96c6b11fac3d7bcd5f9cb4d2868d06500e28db
Delegated to: Wolfgang Denk
Headers show

Commit Message

Marek Vasut March 6, 2012, 1:10 a.m. UTC
The -m option tries to find the board in MAINTAINERS file and figure out the
email. The -M option lists boards including their maintainers emails and all
affiliated emails. There are multiple strategies used to retrieve these emails:

1) Check board/<boardname> with git log and use three most recent emails
2) Check board/<boardname> with git log and use three most used emails
3) Try finding board in MAINTAINERS file and retrieve all emails from there

The result is then sorted and unique results are retrieved and reported.

For -m option, only strategy 3) is used.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
---
 MAKEALL |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 112 insertions(+), 3 deletions(-)

V2: Add -M option to lost all emails, let -m list only emails from MAINTAINERS.
    Fix issues found by wdenk (thanks!)
V3: Fix issue when asking for maintainer of a non-existing board.
V4: Address remaining issues by Wolfgang and Mike and change scope of variables.

Comments

Marek Vasut March 20, 2012, 8:54 p.m. UTC | #1
> The -m option tries to find the board in MAINTAINERS file and figure out
> the email. The -M option lists boards including their maintainers emails
> and all affiliated emails. There are multiple strategies used to retrieve
> these emails:
> 
> 1) Check board/<boardname> with git log and use three most recent emails
> 2) Check board/<boardname> with git log and use three most used emails
> 3) Try finding board in MAINTAINERS file and retrieve all emails from there
> 
> The result is then sorted and unique results are retrieved and reported.
> 
> For -m option, only strategy 3) is used.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Wolfgang Denk <wd@denx.de>
> ---

bump?

Best regards,
Marek Vasut
Wolfgang Denk March 30, 2012, 8:35 p.m. UTC | #2
Dear Marek Vasut,

In message <1330996251-24214-1-git-send-email-marex@denx.de> you wrote:
> The -m option tries to find the board in MAINTAINERS file and figure out the
> email. The -M option lists boards including their maintainers emails and all
> affiliated emails. There are multiple strategies used to retrieve these emails:
> 
> 1) Check board/<boardname> with git log and use three most recent emails
> 2) Check board/<boardname> with git log and use three most used emails
> 3) Try finding board in MAINTAINERS file and retrieve all emails from there
> 
> The result is then sorted and unique results are retrieved and reported.
> 
> For -m option, only strategy 3) is used.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Wolfgang Denk <wd@denx.de>
> ---
>  MAKEALL |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 files changed, 112 insertions(+), 3 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk
Marek Vasut March 30, 2012, 8:46 p.m. UTC | #3
Dear Wolfgang Denk,

> Dear Marek Vasut,
> 
> In message <1330996251-24214-1-git-send-email-marex@denx.de> you wrote:
> > The -m option tries to find the board in MAINTAINERS file and figure out
> > the email. The -M option lists boards including their maintainers emails
> > and all affiliated emails. There are multiple strategies used to
> > retrieve these emails:
> > 
> > 1) Check board/<boardname> with git log and use three most recent emails
> > 2) Check board/<boardname> with git log and use three most used emails
> > 3) Try finding board in MAINTAINERS file and retrieve all emails from
> > there
> > 
> > The result is then sorted and unique results are retrieved and reported.
> > 
> > For -m option, only strategy 3) is used.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Wolfgang Denk <wd@denx.de>
> > ---
> > 
> >  MAKEALL |  115
> >  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files
> >  changed, 112 insertions(+), 3 deletions(-)
> 
> Applied, thanks.

bwahwhawhaaa ... now shake with fear, thee maintainers that don't care for their 
code and didn't dareth to write their name into MAINTAINERS as we shall find you 
anyway and ... pester you to fix your code.

I'm off to shake with fear :)

> Best regards,
> 
> Wolfgang Denk

Best regards,
Marek Vasut
Mike Frysinger April 8, 2012, 8:45 a.m. UTC | #4
On Monday 05 March 2012 20:10:51 Marek Vasut wrote:
> +	else
> +		echo -e "$maintainers_result" | sort -u | tr "\n" " " | \
> +						sed "s/ $//" ;

simpler:
	echo $(printf '%b' "$maintainers_result" | sort -u)
-mike
diff mbox

Patch

diff --git a/MAKEALL b/MAKEALL
index 0f2b4a1..65b979b 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -17,6 +17,8 @@  usage()
 	  -v VENDOR, --vendor VENDOR   Build all boards with vendor VENDOR
 	  -s SOC,    --soc SOC         Build all boards with soc SOC
 	  -l,        --list            List all targets to be built
+	  -m,        --maintainers     List all targets and maintainer email
+	  -M,        --mails           List all targets and all affilated emails
 	  -h,        --help            This help output
 
 	Selections by these options are logically ANDed; if the same option
@@ -48,8 +50,8 @@  usage()
 	exit ${ret}
 }
 
-SHORT_OPTS="ha:c:v:s:l"
-LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list"
+SHORT_OPTS="ha:c:v:s:lmM"
+LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails"
 
 # Option processing based on util-linux-2.13/getopt-parse.bash
 
@@ -67,6 +69,8 @@  eval set -- "$TEMP"
 
 SELECTED=''
 ONLY_LIST=''
+PRINT_MAINTS=''
+MAINTAINERS_ONLY=''
 
 while true ; do
 	case "$1" in
@@ -109,6 +113,15 @@  while true ; do
 	-l|--list)
 		ONLY_LIST='y'
 		shift ;;
+	-m|--maintainers)
+		ONLY_LIST='y'
+		PRINT_MAINTS='y'
+		MAINTAINERS_ONLY='y'
+		shift ;;
+	-M|--mails)
+		ONLY_LIST='y'
+		PRINT_MAINTS='y'
+		shift ;;
 	-h|--help)
 		usage ;;
 	--)
@@ -483,11 +496,107 @@  LIST_nds32="$(boards_by_arch nds32)"
 
 #-----------------------------------------------------------------------
 
+get_target_location() {
+	local target=$1
+	local BOARD_NAME=""
+	local CONFIG_NAME=""
+	local board=""
+	local vendor=""
+
+	# Automatic mode
+	local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg`
+
+	if [ -z "${line}" ] ; then echo "" ; return ; fi
+
+	set ${line}
+
+	# add default board name if needed
+	[ $# = 3 ] && set ${line} ${1}
+
+	CONFIG_NAME="${1%_config}"
+
+	[ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
+
+	if [ "$4" = "-" ] ; then
+		board=${BOARD_NAME}
+	else
+		board="$4"
+	fi
+
+	[ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
+	[ $# -gt 6 ] && [ "$7" != "-" ] && {
+		tmp="${7%:*}"
+		if [ "$tmp" ] ; then
+			CONFIG_NAME="$tmp"
+		fi
+	}
+
+	# Assign board directory to BOARDIR variable
+	if [ -z "${vendor}" ] ; then
+	    BOARDDIR=${board}
+	else
+	    BOARDDIR=${vendor}/${board}
+	fi
+
+	echo "${CONFIG_NAME}:${BOARDDIR}"
+}
+
+get_target_maintainers() {
+	local name=`echo $1 | cut -d : -f 1`
+
+	if ! grep -qsi "[[:blank:]]${name}[[:blank:]]" MAINTAINERS ; then
+		echo ""
+		return ;
+	fi
+
+	local line=`tac MAINTAINERS | grep -ni "[[:blank:]]${name}[[:blank:]]" | cut -d : -f 1`
+	local mail=`tac MAINTAINERS | tail -n +${line} | \
+		sed -n ":start /.*@.*/ { b mail } ; n ; b start ; :mail /.*@.*/ { p ; n ; b mail } ; q" | \
+		sed "s/^.*<//;s/>.*$//"`
+	echo "$mail"
+}
+
+list_target() {
+	if [ "$PRINT_MAINTS" != 'y' ] ; then
+		echo "$1"
+		return
+	fi
+
+	echo -n "$1:"
+
+	local loc=`get_target_location $1`
+
+	if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi
+
+	local maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"`
+
+	if [ "$MAINTAINERS_ONLY" != 'y' ] ; then
+
+		local dir=`echo ${loc} | cut -d ":" -f 2`
+		local cfg=`echo ${loc} | cut -d ":" -f 1`
+		local git_result=`git log --format=%aE board/${dir} \
+				include/configs/${cfg}.h | grep "@"`
+		local git_result_recent=`echo ${git_result} | tr " " "\n" | \
+						head -n 3`
+		local git_result_top=`echo ${git_result} | tr " " "\n" | \
+			sort | uniq -c | sort -nr | head -n 3 | \
+			sed "s/^ \+[0-9]\+ \+//"`
+
+		echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \
+			sort -u | tr "\n" " " | sed "s/ $//" ;
+	else
+		echo -e "$maintainers_result" | sort -u | tr "\n" " " | \
+						sed "s/ $//" ;
+	fi
+
+	echo ""
+}
+
 build_target() {
 	target=$1
 
 	if [ "$ONLY_LIST" == 'y' ] ; then
-		echo "$target"
+		list_target ${target}
 		return
 	fi