summaryrefslogtreecommitdiff
path: root/MAKEALL
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2012-03-05 15:10:51 +0000
committerWolfgang Denk <wd@denx.de>2012-03-30 22:34:58 +0200
commit9b96c6b11fac3d7bcd5f9cb4d2868d06500e28db (patch)
treeef343334324d2cedc8fd41ed9dd50082240ec046 /MAKEALL
parentc0b77e097f376878331757b135b3fd93605db10f (diff)
MAKEALL: Add -m/-M option to determine maintainers
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>
Diffstat (limited to 'MAKEALL')
-rwxr-xr-xMAKEALL115
1 files changed, 112 insertions, 3 deletions
diff --git a/MAKEALL b/MAKEALL
index c33be1d4b53..e5da6f18599 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