Messages in this thread | | | Date | Fri, 30 May 2008 11:29:50 +0200 | From | Roel <> | Subject | Re: whomto.pl -- finding out whom to send patches to |
| |
Vegard Nossum schreef: > Hi, > > I've written this perl script that takes a patch as input and prints the > authors/committers of the affected lines, using git-blame as the back end. > > (The purpose of this is of course to find out whom to send patches to.) > > There are some caveats: > > - If I've understood correctly, git-blame incremental output doesn't split > commits when a newer one is found, so we currently possibly take into > account more than just the last patch to touch a line. This might not be > a disadvantage, however... > > - The patch must apply to the current working tree. I suppose there is > some way to use the index information in the patch to determine what to > run git-blame against, but this is currently beyond my git knowledge. > > - It's a bit slow, particularly for large files. But doing the same thing > by hand would be slower, so I suppose it's an overall improvement. > > Running this on a random -mm patch, for example > http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.26-rc2/2.6.26-rc2-mm1/broken-out/acpi-fix-fadt-parsing.patch > gives the following output: > > $ perl whomto2.pl acpi-fix-fadt-parsing.patch > Running git-blame on drivers/acpi/tables/tbfadt.c... > > To: (Committers) > 48 Len Brown <len.brown@intel.com> > Cc: (Authors) > 44 Bob Moore <robert.moore@intel.com> > 2 Alexey Starikovskiy <alexey.y.starikovskiy@linux.intel.com> > 2 Len Brown <len.brown@intel.com> > > Maybe this tool can be useful? :-) > > (Improvements are of course also welcome.) > > > Vegard
Based on Linus' script to get the email address of a maintainer, I wrote this bash script to get an indication of relevant lists. Maybe you can make use of the part that parses the MAINTAINERS file for relevant lists?
---
git log --since="1 year ago" "$@" | sed -n "s/^ .[-a-z]*by: \(.*\) <.*$/\1/p" | sort | uniq | sort -n -r | while read -r name; do sed -n "/^P:[ \t]*.*$name/,/^$/{ s/^L:[ \t]*\(.*\)$/\1/p }" ./MAINTAINERS done | sort | uniq -c | sort -n -r | while read -r nr list; do tot=`grep -c "^L:\W*.*$list.*" ./MAINTAINERS` echo "`expr $nr / \( $tot + 1 \)` $nr $tot $list" done | sort -r | cut -d " " -f2- | while read -r nr tot list; do echo -e "$nr/$tot Acks were commited by maintainers of list $list" done
| |