Skip to contentSkip to conversation

MAKEALL: Add -m option to determine maintainers

PATCH New Marek Vasut 3 participants 15 messages Mar 5, 2012 – Apr 8, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 MAKEALL: Add -m option to determine maintainers

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.

---
 MAKEALL |   91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 88 insertions(+), 3 deletions(-)
MAKEALL +88 -3
index 0f2b4a1..2bfa696 100755
@@ -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
 
Signature · 1 line
1.7.9
#1 lore raw

PATCH 1/1 MAKEALL: Add -m option to determine maintainers

Dear Marek Vasut,

Quoted 6 lines · In message <[email protected]> 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.

Quoted 7 lines

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

---
 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 at transmode.se plagnioj at jcrosoft.com ptyser at xes-inc.com wd at 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

Signature · 6 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
You know that feeling when you're leaning back  on  a  stool  and  it
starts to tip over? Well, that's how I feel all the time.
- Steven Wright
#2 lore raw

PATCH 1/1 MAKEALL: Add -m option to determine maintainers

Dear Wolfgang Denk,

Quoted 6 lines

Dear Marek Vasut,

Quoted 3 lines · In message <[email protected]> you wrote:

The -m option lists boards including their maintainers emails. There are multiple strategies used to retrieve these emails:

Quoted 8 lines
Quoted 4 lines

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.

Quoted 4 lines

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.

Quoted 3 lines

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

Ack.

Quoted 11 lines
Quoted 10 lines

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

---

 MAKEALL |   91

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 88 insertions(+), 3 deletions(-)

Quoted 8 lines

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 at transmode.se plagnioj at jcrosoft.com
ptyser at xes-inc.com wd at denx.de

What's this "tail" error?

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

Quoted 8 lines
	-> ./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) ?

Quoted 5 lines

Best regards,

Wolfgang Denk

Best regards,
Marek Vasut

#3 lore raw

PATCH 1/1 MAKEALL: Add -m option to determine maintainers

Dear Marek Vasut,

Quoted 9 lines · In message <[email protected]> you wrote:
Quoted 7 lines

-> ./MAKEALL -m TQM860L
tail: cannot open `1090' for reading: No such file or directory
TQM860L: Joakim.Tjernlund at transmode.se plagnioj at jcrosoft.com
ptyser at xes-inc.com wd at 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.

Quoted 9 lines
Quoted 7 lines
	-> ./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 at transmode.se ptyser at xes-inc.com ratbert at faraday-tech.com wd at 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

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
A bore is someone who persists in holding his own views after we have
enlightened him with ours.
#4 lore raw

PATCH 1/1 MAKEALL: Add -m option to determine maintainers

Dear Wolfgang Denk,

Quoted 7 lines

Dear Marek Vasut,

Quoted 4 lines · In message <[email protected]> you wrote:
Quoted 4 lines

-> ./MAKEALL -m TQM860L
tail: cannot open `1090' for reading: No such file or directory
TQM860L: Joakim.Tjernlund at transmode.se plagnioj at jcrosoft.com

Quoted 8 lines
Quoted 5 lines
Quoted 3 lines

ptyser at xes-inc.com wd at 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.

Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
	-> ./MAKEALL -m mpc8xx
	fatal: ambiguous argument 'board/extquote': unknown revision or path
	not

in the working tree. Use '--' to separate paths from revisions

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
	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.

Quoted 10 lines

BTW:

-> ./MAKEALL -m AMX860
AMX860:Joakim.Tjernlund at transmode.se ptyser at xes-inc.com ratbert at faraday-tech.com wd at 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.

Quoted 5 lines

Best regards,

Wolfgang Denk

Best regards,
Marek Vasut

#5 lore raw

PATCH v2 1/1 MAKEALL: Add -m/-M option to determine maintainers

In reply to Marek Vasut

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.

---
 MAKEALL |  109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 106 insertions(+), 3 deletions(-)

V2: Add -M option to lost all emails, let -m list only emails from MAINTAINERS.
Fix issues found by wdenk (thanks!)

MAKEALL +106 -3
index 0f2b4a1..0a1a768 100755
@@ -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,101 @@ 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 "[[:blank:]]${name}[[:blank:]]" | 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
+
+	echo -n "$1:"
+
+	loc=`get_target_location $1`
+	maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"`
+
+	if [ "$MAINTAINERS_ONLY" != 'y' ] ; then
+
+		dir=`echo ${loc} | cut -d ":" -f 2`
+		cfg=`echo ${loc} | cut -d ":" -f 1`
+		git_result=`git log --format=%aE board/${dir} \
+				include/configs/${cfg}.h | grep "@"`
+		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 -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
 
Signature · 1 line
1.7.9
#6 lore raw

PATCH v2 1/1 MAKEALL: Add -m/-M option to determine maintainers

Quoted 4 lines

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:

Ignore this one please.

Best regards,
Marek Vasut

#7 lore raw

PATCH 1/1 MAKEALL: Add -m/-M option to determine maintainers

In reply to Marek Vasut

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.

---
 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.

MAKEALL +112 -3
index 0f2b4a1..b9a8176 100755
@@ -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() {
+	target=$1
+
+	BOARD_NAME=""
+	CONFIG_NAME=""
+	board=""
+	vendor=""
+
+	# Automatic mode
+	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() {
+	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 "[[:blank:]]${name}[[:blank:]]" | 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
+
+	echo -n "$1:"
+
+	loc=`get_target_location $1`
+
+	if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi
+
+	maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"`
+
+	if [ "$MAINTAINERS_ONLY" != 'y' ] ; then
+
+		dir=`echo ${loc} | cut -d ":" -f 2`
+		cfg=`echo ${loc} | cut -d ":" -f 1`
+		git_result=`git log --format=%aE board/${dir} \
+				include/configs/${cfg}.h | grep "@"`
+		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 -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
 
Signature · 1 line
1.7.9
#8 lore raw

PATCH 1/1 MAKEALL: Add -m/-M option to determine maintainers

Dear Marek Vasut,

Quoted 14 lines · In message <[email protected]> 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.

Quoted 7 lines
---
 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.

Note: the "V3" hint is missing in Subject:

There are still issues:

-> ./MAKEALL -m lwmon
lwmon:tail: cannot open `1099' for reading: No such file or directory

-> ./MAKEALL -m
...
galaxy5200:emillbrandt at dekaresearch.com galaxy5200_LOWBOOT:emillbrandt at dekaresearch.com icecube_5200:tail: +: invalid number of lines

icecube_5200_DDR:tail: +: invalid number of lines

icecube_5200_DDR_LOWBOOT:tail: +: invalid number of lines

icecube_5200_DDR_LOWBOOT08:tail: +: invalid number of lines

icecube_5200_LOWBOOT:tail: +: invalid number of lines

icecube_5200_LOWBOOT08:tail: +: invalid number of lines

inka4x0:dzu at denx.de
ipek01:wg at denx.de
jupiter:hs at denx.de
Lite5200:tail: +: invalid number of lines

lite5200b:tail: +: invalid number of lines

lite5200b_LOWBOOT:tail: +: invalid number of lines

lite5200b_PM:tail: +: invalid number of lines

Lite5200_LOWBOOT:tail: +: invalid number of lines

Lite5200_LOWBOOT08:tail: +: invalid number of lines

mcc200:
...

Thanks for this great tool!

Best regards,

Wolfgang Denk

Signature · 8 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The alternative to genuflecting before the  god  of  code-bumming  is
finding  a  better  algorithm.  It should be clear that none such was
available. If your code is too slow, you must make it faster.  If  no
better algorithm is available, you must trim cycles.
                                 - td at alice.UUCP (Tom Duff) 29 Aug 88
#9 lore raw

PATCH 1/1 MAKEALL: Add -m/-M option to determine maintainers

In reply to Marek Vasut

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 505

Quoted 7 lines · On Monday 05 March 2012 16:11:08 Marek Vasut wrote:
MAKEALL +7 -0
+get_target_location() {
+	target=$1
+
+	BOARD_NAME=""
+	CONFIG_NAME=""
+	board=""
+	vendor=""

please use "local" when declaring variables that are function local

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 508

Quoted 1 line
MAKEALL +1 -0
+	line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg`

obviously i prefer $(...) rather than ...

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 510

Quoted 1 line
MAKEALL +1 -0
+	if [ -z "${line}" ] ; then echo "" ; return ; fi

please unroll

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 519

Quoted 1 line
MAKEALL +1 -0
+	[ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
	: ${BOARD_NAME:=${1%_config}}

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 528

Quoted 1 line
MAKEALL +1 -0
+	[ $# -gt 6 ] && [ "$7" != "-" ] && {

please use:

	if ... ; then

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 548

Quoted 1 line
MAKEALL +1 -0
+	if ! grep -i ${name} MAINTAINERS >/dev/null 2>&1 ; then

use -qs and then you can drop the redirects

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 550

Quoted 1 line
MAKEALL +1 -0
+		return ;

drop the semi-colon
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120305/31a62205/attachment.pgp>

#10 lore raw

PATCH v4 1/1 MAKEALL: Add -m/-M option to determine maintainers

In reply to Marek Vasut

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.

---
 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.

MAKEALL +112 -3
index 0f2b4a1..65b979b 100755
@@ -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
 
Signature · 1 line
1.7.9
#11 lore raw

PATCH v4 1/1 MAKEALL: Add -m/-M option to determine maintainers

Quoted 9 lines

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

Quoted 7 lines

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

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

---

bump?

Best regards,
Marek Vasut

#12 lore raw

PATCH v4 1/1 MAKEALL: Add -m/-M option to determine maintainers

In reply to Marek Vasut

Dear Marek Vasut,

Quoted 10 lines · In message <[email protected]> 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.

Quoted 7 lines

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

---
 MAKEALL |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 112 insertions(+), 3 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Real programmers don't comment their code. It was hard to  write,  it
should be hard to understand.
#13 lore raw

PATCH v4 1/1 MAKEALL: Add -m/-M option to determine maintainers

Dear Wolfgang Denk,

Quoted 21 lines

Dear Marek Vasut,

Quoted 18 lines · In message <[email protected]> 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.

---

Quoted 5 lines
Quoted 3 lines
 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 :)

Quoted 3 lines

Best regards,

Wolfgang Denk

Best regards,
Marek Vasut

#14 lore raw

PATCH v4 1/1 MAKEALL: Add -m/-M option to determine maintainers

In reply to Marek Vasut

MAKEALL LIST_nds32="$(boards_by_arch nds32)" · line 589

Quoted 3 lines · On Monday 05 March 2012 20:10:51 Marek Vasut wrote:
MAKEALL +3 -0
+	else
+		echo -e "$maintainers_result" | sort -u | tr "\n" " " | \
+						sed "s/ $//" ;

simpler:

	echo $(printf '%b' "$maintainers_result" | sort -u)

-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120408/1ba9fb44/attachment.pgp>