llvm-project/llvm/utils
Kristof Beyls 6255ac03f5 Add Script to match open Phabricator reviews with potential reviewers.
At the last EuroLLVM, I gave a lightning talk about code review
statistics on Phabricator reviews and what we could derive from that
to try and reduce waiting-for-review bottlenecks. (see
https://llvm.org/devmtg/2018-04/talks.html#Lightning_2).

One of the items I pointed to is a script we've been using internally
for a little while to try and match open Phabricator reviews to people
who might be able to review them well. I received quite a few requests
to share that script, so here it is.

Warning: this is prototype quality!

The script uses 2 similar heuristics to try and match open reviews with
potential reviewers:

If there is overlap between the lines of code touched by the
patch-under-review and lines of code that a person has written, that
person may be a good reviewer.
If there is overlap between the files touched by the patch-under-review
and the source files that a person has made changes to, that person may
be a good reviewer.
The script provides a percentage for each of the above heuristics and
emails a summary. For example, a summary I received a few weeks ago
from the script is the following:

SUMMARY FOR kristof.beyls@arm.com (found 8 reviews):
[3.37%/41.67%] https://reviews.llvm.org/D46018 '[GlobalISel][IRTranslator] Split aggregates during IR translation' by Amara Emerson
[0.00%/100.00%] https://reviews.llvm.org/D46111 '[ARM] Enable misched for R52.' by Dave Green
[0.00%/50.00%] https://reviews.llvm.org/D45770 '[AArch64] Disable spill slot scavenging when stack realignment required.' by Paul Walker
[0.00%/40.00%] https://reviews.llvm.org/D42759 '[CGP] Split large data structres to sink more GEPs' by Haicheng Wu
[0.00%/25.00%] https://reviews.llvm.org/D45189 '[MachineOutliner][AArch64] Keep track of functions that use a red zone in AArch64MachineFunctionInfo and use that instead of checking for noredzone in the MachineOutliner' by Jessica Paquette
[0.00%/25.00%] https://reviews.llvm.org/D46107 '[AArch64] Codegen for v8.2A dot product intrinsics' by Oliver Stannard
[0.00%/12.50%] https://reviews.llvm.org/D45541 '[globalisel] Update GlobalISel emitter to match new representation of extending loads' by Daniel Sanders
[0.00%/6.25%] https://reviews.llvm.org/D44386 '[x86] Introduce the pconfig/enclv instructions' by Gabor Buella

The first percentage in square brackets is the percentage of lines in
the patch-under-review that changes lines that I wrote. The second
percentage is the percentage of files that I made at least some
changes to out of all of the files touched by the patch-under-review.

Both the script and the heuristics are far from perfect, but I've
heard positive feedback from the few colleagues the script has been
sending a summary to every day - hearing that this does help them to
quickly find patches-under-review they can help to review.

The script takes quite some time to run (I typically see it running
for 2 to 3 hours on weekdays when it gets started by a cron job early
in the morning). There are 2 reasons why it takes a long time:

The REST api into Phabricator isn't very efficient, i.e. a lot of
uninteresting data needs to be fetched. The script tries to reduce this
overhead partly by caching info it has fetched on previous runs, so as
to not have to refetch lots of Phabricator state on each run.
The script uses git blame to find for each line of code in the patch who
wrote the original line of code being altered. git blame is
sloooowww....
Anyway - to run this script:

First install a virtualenv as follows (using Python2.7 - Python3 is
almost certainly not going to work at the moment):
$ virtualenv venv
$ . ./venv/bin/activate
$ pip install Phabricator

Then to run the script, looking for open reviews that could be done by
X.Y@company.com, run (in the venv):
$ python ./find_interesting_reviews.py X.Y@company.com

Please note that "X.Y@company.com" needs to be the exact email address
(capitalization is important) that the git LLVM repository knows the
person as. Multiple email addresses can be specified on the command
line. Note that the script as is will email the results to all email
addresses specified on the command line - so be careful not to spam
people accidentally!

Differential Revision: https://reviews.llvm.org/D46192

llvm-svn: 332711
2018-05-18 13:02:32 +00:00
..
FileCheck Define InitLLVM to do common initialization all at once. 2018-04-13 18:26:06 +00:00
KillTheDoctor Remove @brief commands from doxygen comments, too. 2018-05-01 16:10:38 +00:00
LLVMVisualizers
Misc
PerfectShuffle
Reviewing Add Script to match open Phabricator reviews with potential reviewers. 2018-05-18 13:02:32 +00:00
TableGen Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
Target/ARM
UpdateTestChecks [utils] improve AArch64 asm parser 2018-04-20 17:16:23 +00:00
bugpoint
count
crosstool
docker [Dockerfiles] Split checkout and build scripts into separate files. 2018-04-20 10:19:38 +00:00
emacs Add attributes and fix some keywords in llvm-mode.el 2018-03-08 01:28:45 +00:00
fpcmp
gdb-scripts
git
git-svn [git-llvm] Handle files ignored by svn correctly 2017-12-22 21:19:13 +00:00
jedit
kate
lint
lit Mark test with "REQUIRES: shell" since it directly invokes "sh" and was failing on Windows. 2018-05-17 01:36:25 +00:00
llvm-build Remove llvm-build's --configure-target-def-file. 2018-04-20 17:21:10 +00:00
llvm-lit [lit] Actually do normalize the case of files in the config map. 2017-09-21 21:27:11 +00:00
not [CMake] Use PRIVATE in target_link_libraries for executables 2017-12-05 21:49:56 +00:00
release build_llvm_package.bat: Drop LLDB from the package. 2018-03-19 13:05:37 +00:00
sanitizers Add libstd++-4.8 exceptions to ubsan_blacklist.txt 2017-11-29 20:10:14 +00:00
testgen
textmate
unittest [unittests] Change std::sort to llvm::sort in response to r327219 2018-04-07 01:29:45 +00:00
valgrind
vim vim: rename `singlethread` to `syncscope` 2018-03-22 16:39:54 +00:00
vscode
yaml-bench Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
DSAclean.py
DSAextract.py
GenLibDeps.pl
GetRepositoryPath
GetSourceVersion
LLVMBuild.txt
UpdateCMakeLists.pl
abtest.py
bisect
bisect-skip-count
bugpoint_gisel_reducer.py Add a utility to reduce GlobalISel tests 2018-01-23 19:47:10 +00:00
check-each-file
clang-parse-diagnostics-file
codegen-diff
countloc.sh
create_ladder_graph.py
extract_symbols.py Fix some user facing typos 2018-03-17 17:30:08 +00:00
findmisopt
findoptdiff
findsym.pl
getsrcs.sh
indirect_calls.py Remove a stale comment cut and pasted from another file. 2018-04-03 17:07:05 +00:00
lldbDataFormatters.py
llvm-compilers-check
llvm-gisel-cov.py [globalisel][tablegen] Generate rule coverage and use it to identify untested rules 2017-11-16 00:46:35 +00:00
llvm-native-gxx
llvm.grm
llvmdo
llvmgrep
prepare-code-coverage-artifact.py
schedcover.py [MachineScheduler] Add itinerary to schedcover.py. Make default work in the command line filter 2018-03-27 04:26:39 +00:00
shuffle_fuzz.py
shuffle_select_fuzz_tester.py Adding a shufflevector and select LLVM IR instructions fuzz tool 2017-10-31 11:39:31 +00:00
sort_includes.py
unicode-case-fold.py Resubmit r325107 (case folding DJB hash) 2018-02-21 22:36:31 +00:00
update_analyze_test_checks.py [UpdateTestChecks] Add update_analyze_test_checks.py for cost model analysis generation 2018-04-06 12:36:27 +00:00
update_cc_test_checks.py Fix LLVM IR check lines in utils/update_cc_test_checks.py 2018-03-14 17:47:07 +00:00
update_llc_test_checks.py [utils] Refactor utils/update_{,llc_}test_checks.py to share more code 2018-02-10 05:01:33 +00:00
update_mca_test_checks.py [UpdateTestChecks] Change update_mca_test_checks.py file mode to match the other scripts 2018-04-25 11:20:42 +00:00
update_mir_test_checks.py update_mir_test_checks: Fix handling of IR input after r326284 2018-03-12 18:06:58 +00:00
update_test_checks.py [UpdateTestChecks] Remove unnecessary return from add_ir_checks 2018-04-05 09:30:42 +00:00
wciia.py