Add --web and --tools to support other repo's.
[tools.git] / review-tools / addrev
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 my $args = "";
7 my $filterargs = "HEAD^..";
8 my $list_reviewers = 0;
9 my $help = 0;
10 my $haveprnum = 0;
11 my $trivial = 0;
12 my $useself = 1;
13
14 my $my_email;
15
16 foreach (@ARGV) {
17     if (/^[a-z]+$/ || /^\@\w(?:[-\w]*\w)?$/) {
18         $args .= "--reviewer=$_ ";
19     } elsif (/^--reviewer=(.+)$/) {
20         $args .= "--reviewer=$1 ";
21     } elsif (/^--rmreviewers$/) {
22         $args .= "--rmreviewers ";
23     } elsif (/^--trivial$/) {
24         $args .= "--trivial ";
25     } elsif (/^--web$/) {
26         $args .= "--web ";
27     } elsif (/^--tools$/) {
28         $args .= "--tools ";
29     } elsif (/^--verbose$/) {
30         $args .= "--verbose ";
31     } elsif (/^--noself$/) {
32         $useself = 0;
33     } elsif (/^--myemail=(.+)$/) {
34         $my_email = $1;
35     } elsif (/^--nopr$/) {
36         $haveprnum = 1;
37     } elsif (/^--prnum=(.+)$/) {
38         $args .= "--prnum=$1 ";
39         $haveprnum = 1;
40     } elsif (/^--commit=(.+)$/) {
41         $args .= "--commit=$1 ";
42     } elsif (/^-(\d+)$/) {
43         $filterargs = "HEAD~$1..";
44     } elsif (/^--list$/) {
45         $list_reviewers = 1;
46         last;
47     } elsif (/^--help$/ || /^-h$/) {
48         $help = 1;
49         last;
50     } else {
51         $filterargs = $_;
52     }
53 }
54
55 if ($list_reviewers) {
56     system("gitaddrev --list");
57     exit(0);
58 }
59 if ($help) {
60     usage();
61     exit(0);
62 }
63
64 die "Need either --prnum or --nopr flag" unless $haveprnum;
65
66 if ($useself) {
67     if (!defined $my_email) {
68         $my_email = `git config --get user.email`;
69     }
70
71     $args .= "--myemail=$my_email ";
72 }
73
74 system("git filter-branch -f --tag-name-filter cat --msg-filter \"gitaddrev $args\" $filterargs");
75
76 sub usage {
77     print STDERR <<"EOF";
78 usage: addrev args...
79
80 option style arguments:
81
82 --help                  Print this help and exit
83 --list                  List the known reviewers and exit (discards all other
84                         arguments)
85 --verbose               Be a bit more verbose
86 --reviewer=<reviewer>   A reviewer to be added on a Reviewed-by: line
87 --rmreviewers           Remove all existing Reviewed-by: lines before adding
88                         reviewers
89 --commit=<id>           Only apply to commit <id>
90 --myemail=<email>       Set email address.  Defaults to the result from
91                         git configuration setting user.email.
92 --nopr                  Do not requre a PR number.
93 --prnum=NNN             Add a reference to GitHub pull request NNN
94 -<n>                    Change the last <n> commits.  Defaults to 1.
95
96 non-option style arguments can be:
97
98 a string of lower case letters, denoting a reviewer name.
99
100 a string starting with \@, denoting a reviewer's github ID.
101
102 anything else will be used as a commit range.  If no commit range is given,
103 HEAD^.. is assumed.
104
105 Examples (all meaning the same thing):
106
107   addrev -2 steve levitte
108   addrev steve \@levitte HEAD^^..
109   addrev --reviewer=steve --reviewer=levitte\@openssl.org -2
110 EOF
111 }