[U-Boot] [PATCH] 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.
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de --- MAKEALL | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 88 insertions(+), 3 deletions(-)
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

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:
- Check board/<boardname> with git log and use three most recent emails
- Check board/<boardname> with git log and use three most used emails
- 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

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:
- Check board/<boardname> with git log and use three most recent emails
- Check board/<boardname> with git log and use three most used emails
- 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

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

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

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 | 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!)
diff --git a/MAKEALL b/MAKEALL index 0f2b4a1..0a1a768 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,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

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

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.
diff --git a/MAKEALL b/MAKEALL index 0f2b4a1..b9a8176 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() { + 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

Dear Marek Vasut,
In message 1330981868-29895-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:
- Check board/<boardname> with git log and use three most recent emails
- Check board/<boardname> with git log and use three most used emails
- 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.
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@dekaresearch.com galaxy5200_LOWBOOT:emillbrandt@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@denx.de ipek01:wg@denx.de jupiter:hs@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

On Monday 05 March 2012 16:11:08 Marek Vasut wrote:
+get_target_location() {
- target=$1
- BOARD_NAME=""
- CONFIG_NAME=""
- board=""
- vendor=""
please use "local" when declaring variables that are function local
- line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg`
obviously i prefer $(...) rather than `...`
- if [ -z "${line}" ] ; then echo "" ; return ; fi
please unroll
- [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
: ${BOARD_NAME:=${1%_config}}
- [ $# -gt 6 ] && [ "$7" != "-" ] && {
please use: if ... ; then
- if ! grep -i ${name} MAINTAINERS >/dev/null 2>&1 ; then
use -qs and then you can drop the redirects
return ;
drop the semi-colon -mike

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

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:
- Check board/<boardname> with git log and use three most recent emails
- Check board/<boardname> with git log and use three most used emails
- 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

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:
- Check board/<boardname> with git log and use three most recent emails
- Check board/<boardname> with git log and use three most used emails
- 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

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:
- Check board/<boardname> with git log and use three most recent emails
- Check board/<boardname> with git log and use three most used emails
- 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

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
participants (3)
-
Marek Vasut
-
Mike Frysinger
-
Wolfgang Denk