[U-Boot] [PATCH] MAKEALL: Add -m option to determine maintainers
Marek Vasut
marex at denx.de
Mon Mar 5 18:33:09 CET 2012
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 at denx.de>
Cc: Wolfgang Denk <wd at 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
--
1.7.9
More information about the U-Boot
mailing list