From patchwork Tue Mar 6 01:10:51 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 144822 X-Patchwork-Delegate: wd@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 738B4B6FB4 for ; Tue, 6 Mar 2012 12:11:15 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 5B030280A5; Tue, 6 Mar 2012 02:11:12 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UGHD7JCh2-sf; Tue, 6 Mar 2012 02:11:11 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2DAF028099; Tue, 6 Mar 2012 02:11:10 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E1E5328099 for ; Tue, 6 Mar 2012 02:11:08 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qCOyMK4kPnXD for ; Tue, 6 Mar 2012 02:11:07 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-out.m-online.net (mail-out.m-online.net [212.18.0.9]) by theia.denx.de (Postfix) with ESMTPS id 201AA28083 for ; Tue, 6 Mar 2012 02:11:05 +0100 (CET) Received: from frontend1.mail.m-online.net (unknown [192.168.8.180]) by mail-out.m-online.net (Postfix) with ESMTP id 3V20L11Lxzz4LDdV; Tue, 6 Mar 2012 02:11:05 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.8.164]) by mail.m-online.net (Postfix) with ESMTP id 3V20L11GB6z4KK5P; Tue, 6 Mar 2012 02:11:05 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from smtp-auth.mnet-online.de ([192.168.8.180]) by localhost (dynscan1.mail.m-online.net [192.168.8.164]) (amavisd-new, port 10024) with ESMTP id G6zU2H5HQK6v; Tue, 6 Mar 2012 02:11:04 +0100 (CET) X-Auth-Info: YSgycY7ivDZ+kWcjawq2D9xOXDBBtnwjmRl1AU1h+pA= Received: from mashiro.lan (host-82-135-33-74.customer.m-online.net [82.135.33.74]) by smtp-auth.mnet-online.de (Postfix) with ESMTPA; Tue, 6 Mar 2012 02:11:03 +0100 (CET) From: Marek Vasut To: u-boot@lists.denx.de Date: Tue, 6 Mar 2012 02:10:51 +0100 Message-Id: <1330996251-24214-1-git-send-email-marex@denx.de> X-Mailer: git-send-email 1.7.9 In-Reply-To: <1330968789-17997-1-git-send-email-marex@denx.de> References: <1330968789-17997-1-git-send-email-marex@denx.de> Cc: Marek Vasut Subject: [U-Boot] [PATCH V4] MAKEALL: Add -m/-M option to determine maintainers X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de 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/ with git log and use three most recent emails 2) Check board/ 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 Cc: Wolfgang Denk --- 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/^.*.*$//"` + 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