diff mbox

[U-Boot] MAKEALL: Add -m option to determine maintainers

Message ID 1330968789-17997-1-git-send-email-marex@denx.de
State Changes Requested
Headers show

Commit Message

Marek Vasut March 5, 2012, 5:33 p.m. UTC
The -m option lists boards including their maintainers 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.

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

Comments

Wolfgang Denk March 5, 2012, 7:15 p.m. UTC | #1
Dear Marek Vasut,

In message <1330968789-17997-1-git-send-email-marex@denx.de> you wrote:
> The -m option lists boards including their maintainers 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

I think if the board can be found in MAINTAINERS, this should have
preference, i. e. always printed first.  Normaly, it should be the
only address printed.

We might also want to double-check git log based resutls against
include/configs/<name>.h - this file is way more often edited by the
maintainers.

Eventually "-m" should just print one address; we could add "-M" for all found addresses.

> The result is then sorted and unique results are retrieved and reported.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Wolfgang Denk <wd@denx.de>
> ---
>  MAKEALL |   91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 files changed, 88 insertions(+), 3 deletions(-)

Hm... there are also problems with the code:

	-> ./MAKEALL -m TQM860L
	tail: cannot open `1090' for reading: No such file or directory
	TQM860L: Joakim.Tjernlund@transmode.se plagnioj@jcrosoft.com ptyser@xes-inc.com wd@denx.de

What's this "tail" error?

	-> ./MAKEALL -m mpc8xx
	fatal: ambiguous argument 'board/extquote': unknown revision or path not in the working tree.
	Use '--' to separate paths from revisions
	mpc8xx:

Doesn't work at all.



Best regards,

Wolfgang Denk
Marek Vasut March 5, 2012, 8:14 p.m. UTC | #2
Dear Wolfgang Denk,

> Dear Marek Vasut,
> 
> In message <1330968789-17997-1-git-send-email-marex@denx.de> you wrote:
> > The -m option lists boards including their maintainers 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
> 
> I think if the board can be found in MAINTAINERS, this should have
> preference, i. e. always printed first.  Normaly, it should be the
> only address printed.

Ok, not a bad idea indeed.

> 
> We might also want to double-check git log based resutls against
> include/configs/<name>.h - this file is way more often edited by the
> maintainers.

Ok.

> 
> Eventually "-m" should just print one address; we could add "-M" for all
> found addresses.

Ack.

> 
> > The result is then sorted and unique results are retrieved and reported.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Wolfgang Denk <wd@denx.de>
> > ---
> > 
> >  MAKEALL |   91
> >  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files
> >  changed, 88 insertions(+), 3 deletions(-)
> 
> Hm... there are also problems with the code:
> 
> 	-> ./MAKEALL -m TQM860L
> 	tail: cannot open `1090' for reading: No such file or directory
> 	TQM860L: Joakim.Tjernlund@transmode.se plagnioj@jcrosoft.com
> ptyser@xes-inc.com wd@denx.de
> 
> What's this "tail" error?

Yes, thanks for finding this. We have multiple TQM860L in MAINTAINERS.

> 
> 	-> ./MAKEALL -m mpc8xx
> 	fatal: ambiguous argument 'board/extquote': unknown revision or path not
> in the working tree. Use '--' to separate paths from revisions
> 	mpc8xx:
> 
> Doesn't work at all.
> 

What's this supposed to do? You mean ./MAKEALL -m -c mpc8xx (missing -c) ?

> 
> 
> Best regards,
> 
> Wolfgang Denk

Best regards,
Marek Vasut
Wolfgang Denk March 5, 2012, 8:27 p.m. UTC | #3
Dear Marek Vasut,

In message <201203052114.10141.marex@denx.de> you wrote:
>
> > 	-> ./MAKEALL -m TQM860L
> > 	tail: cannot open `1090' for reading: No such file or directory
> > 	TQM860L: Joakim.Tjernlund@transmode.se plagnioj@jcrosoft.com
> > ptyser@xes-inc.com wd@denx.de
> > 
> > What's this "tail" error?
> 
> Yes, thanks for finding this. We have multiple TQM860L in MAINTAINERS.

Umm... no, there are two entries which contain this string: "TQM860L"
and "TQM860L_FEC", but thse are (or were) considered to be different.

> > 	-> ./MAKEALL -m mpc8xx
> > 	fatal: ambiguous argument 'board/extquote': unknown revision or path not
> > in the working tree. Use '--' to separate paths from revisions
> > 	mpc8xx:
> > 
> > Doesn't work at all.
> > 
> 
> What's this supposed to do? You mean ./MAKEALL -m -c mpc8xx (missing -c) ?

Actualy I meant to test "./MAKEALL -m 8xx" which appears to work
mostly fine.  In any case the git error message should not be printed.


BTW:

-> ./MAKEALL -m AMX860
AMX860:Joakim.Tjernlund@transmode.se ptyser@xes-inc.com ratbert@faraday-tech.com wd@denx.de wdenk

These entries like "wdenk" here from CVS times are really obsolete.
Should we keep them, or introduce a cut-off-date (or -commit) ?


Best regards,

Wolfgang Denk
Marek Vasut March 5, 2012, 8:37 p.m. UTC | #4
Dear Wolfgang Denk,

> Dear Marek Vasut,
> 
> In message <201203052114.10141.marex@denx.de> you wrote:
> > > 	-> ./MAKEALL -m TQM860L
> > > 	tail: cannot open `1090' for reading: No such file or directory
> > > 	TQM860L: Joakim.Tjernlund@transmode.se plagnioj@jcrosoft.com
> > > 
> > > ptyser@xes-inc.com wd@denx.de
> > > 
> > > What's this "tail" error?
> > 
> > Yes, thanks for finding this. We have multiple TQM860L in MAINTAINERS.
> 
> Umm... no, there are two entries which contain this string: "TQM860L"
> and "TQM860L_FEC", but thse are (or were) considered to be different.

Yes, fixed now.
> 
> > > 	-> ./MAKEALL -m mpc8xx
> > > 	fatal: ambiguous argument 'board/extquote': unknown revision or path
> > > 	not
> > > 
> > > in the working tree. Use '--' to separate paths from revisions
> > > 
> > > 	mpc8xx:
> > > Doesn't work at all.
> > 
> > What's this supposed to do? You mean ./MAKEALL -m -c mpc8xx (missing -c)
> > ?
> 
> Actualy I meant to test "./MAKEALL -m 8xx" which appears to work
> mostly fine.  In any case the git error message should not be printed.

But this shouldn't print anything because board "mpc8xx" doesn't exist. Though 
this is still unfixed, V3 on the way, ignore V2 please.
> 
> 
> BTW:
> 
> -> ./MAKEALL -m AMX860
> AMX860:Joakim.Tjernlund@transmode.se ptyser@xes-inc.com
> ratbert@faraday-tech.com wd@denx.de wdenk
> 
> These entries like "wdenk" here from CVS times are really obsolete.
> Should we keep them, or introduce a cut-off-date (or -commit) ?

Found already and fixed in V2, though V3 will be necessary.
> 
> 
> Best regards,
> 
> Wolfgang Denk

Best regards,
Marek Vasut
diff mbox

Patch

diff --git a/MAKEALL b/MAKEALL
index 0f2b4a1..2bfa696 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -17,6 +17,7 @@  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 emails
 	  -h,        --help            This help output
 
 	Selections by these options are logically ANDed; if the same option
@@ -48,8 +49,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:lm"
+LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers"
 
 # Option processing based on util-linux-2.13/getopt-parse.bash
 
@@ -67,6 +68,7 @@  eval set -- "$TEMP"
 
 SELECTED=''
 ONLY_LIST=''
+PRINT_MAINTS=''
 
 while true ; do
 	case "$1" in
@@ -109,6 +111,10 @@  while true ; do
 	-l|--list)
 		ONLY_LIST='y'
 		shift ;;
+	-m|--maintainers)
+		ONLY_LIST='y'
+		PRINT_MAINTS='y'
+		shift ;;
 	-h|--help)
 		usage ;;
 	--)
@@ -483,11 +489,90 @@  LIST_nds32="$(boards_by_arch nds32)"
 
 #-----------------------------------------------------------------------
 
+get_target_location() {
+	target=$1
+
+	BOARD_NAME=""
+	CONFIG_NAME=""
+	board=""
+	vendor=""
+
+	# Automatic mode
+	line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg`
+	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() {
+	name=`echo $1 | cut -d : -f 1`
+
+	if ! grep -i ${name} MAINTAINERS >/dev/null 2>&1 ; then
+		echo ""
+		return ;
+	fi
+
+	line=`tac MAINTAINERS | grep -ni ${name} | cut -d : -f 1`
+	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
+
+	loc=`get_target_location $1`
+	maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"`
+	dir=`echo ${loc} | cut -d ":" -f 2`
+	git_result=`git log --format=%aE board/${dir}`
+	git_result_recent=`echo ${git_result} | tr " " "\n" | head -n 3`
+	git_result_top=`echo ${git_result} | tr " " "\n" | \
+		sort | uniq -c | sort -nr | head -n 3 | \
+		sed "s/^ \+[0-9]\+ \+//"`
+
+	echo -n "$1:"
+	echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \
+		sort -u | tr "\n" " " | sed "s/ $//"
+	echo ""
+}
+
 build_target() {
 	target=$1
 
 	if [ "$ONLY_LIST" == 'y' ] ; then
-		echo "$target"
+		list_target ${target}
 		return
 	fi