The branch master has been updated
       via  718bcaec77e8ac62f5d607e405a29c79af23f758 (commit)
       via  f3c270f43032e296a95868ba2309c37f84baf162 (commit)
       via  fd919bab0b95f3225553af616babec0642a9c0a6 (commit)
       via  9a50378f356e619c985beb80675a37f6c83d94f9 (commit)
       via  0da1a9b3fce88f56e2c0ec07d2237f2f68e53ac1 (commit)
       via  ded000860e43844ced47214535ab3e15b2effd74 (commit)
       via  064fa8b5219684a0c26824fe80e1473cd7a8e895 (commit)
      from  04003d05734dcd23f7c4a4e505ee7a222ceb8457 (commit)


- Log -----------------------------------------------------------------
commit 718bcaec77e8ac62f5d607e405a29c79af23f758
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:24:29 2017 +0200

    Enhance addrev / gitaddrev documentation

commit f3c270f43032e296a95868ba2309c37f84baf162
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:23:37 2017 +0200

    gitaddrev: list github identities correctly

commit fd919bab0b95f3225553af616babec0642a9c0a6
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:22:59 2017 +0200

    addrev, gitaddrev: handle github ids with distinct syntax
    
    github identities should be given with a prefixing @

commit 9a50378f356e619c985beb80675a37f6c83d94f9
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:17:21 2017 +0200

    OpenSSL-Query: add request tests with tagged identities

commit 0da1a9b3fce88f56e2c0ec07d2237f2f68e53ac1
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:17:00 2017 +0200

    OpenSSL-Query: handle requests with tagged identities

commit ded000860e43844ced47214535ab3e15b2effd74
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:16:28 2017 +0200

    QueryApp: add request tests with tagged identities

commit 064fa8b5219684a0c26824fe80e1473cd7a8e895
Author: Richard Levitte <levi...@openssl.org>
Date:   Sun Jun 25 07:15:58 2017 +0200

    QueryApp: handle requests with tagged identities

-----------------------------------------------------------------------

Summary of changes:
 OpenSSL-Query/lib/OpenSSL/Query/PersonREST.pm | 16 ++++++++---
 OpenSSL-Query/t/query.t                       | 28 ++++++++++++++++++-
 QueryApp/bin/query.psgi                       | 18 +++++++++----
 QueryApp/t/query.t                            | 34 ++++++++++++++++++++++-
 QueryApp/t/query_data/pdb.yaml                |  4 +--
 QueryApp/t/query_direct.t                     | 28 ++++++++++++++++++-
 review-tools/README                           | 39 ++++++++-------------------
 review-tools/addrev                           | 11 +++++---
 review-tools/gitaddrev                        | 24 ++++++++++-------
 9 files changed, 147 insertions(+), 55 deletions(-)

diff --git a/OpenSSL-Query/lib/OpenSSL/Query/PersonREST.pm 
b/OpenSSL-Query/lib/OpenSSL/Query/PersonREST.pm
index a98a627..0b9db66 100644
--- a/OpenSSL-Query/lib/OpenSSL/Query/PersonREST.pm
+++ b/OpenSSL-Query/lib/OpenSSL/Query/PersonREST.pm
@@ -41,9 +41,19 @@ sub list_people {
   return @$decoded;
 }
 
+sub _id_encode {
+  my $id = shift;
+
+  return $id if ref($id) eq "";
+  croak "Malformed input ID" if ref($id) ne "HASH" || scalar keys %$id != 1;
+
+  my $tag = (keys %$id)[0];
+  return $tag . ':' . $id->{$tag};
+}
+
 sub find_person {
   my $self = shift;
-  my $id = shift;
+  my $id = _id_encode(shift);
 
   my $ua = $self->_personhandler;
   my $json = $ua->get($self->base_url . '/0/Person/'
@@ -58,7 +68,7 @@ sub find_person {
 
 sub find_person_tag {
   my $self = shift;
-  my $id = shift;
+  my $id = _id_encode(shift);
   my $tag = shift;
 
   my $ua = $self->_personhandler;
@@ -77,7 +87,7 @@ sub find_person_tag {
 
 sub is_member_of {
   my $self = shift;
-  my $id = shift;
+  my $id = _id_encode(shift);
   my $group = shift;
 
   my $ua = $self->_personhandler;
diff --git a/OpenSSL-Query/t/query.t b/OpenSSL-Query/t/query.t
index f167a66..5cb7c25 100644
--- a/OpenSSL-Query/t/query.t
+++ b/OpenSSL-Query/t/query.t
@@ -11,7 +11,7 @@ use Test::More;
 use OpenSSL::Query::REST;
 use Data::Dumper;
 
-plan tests => 12;
+plan tests => 15;
 
 SKIP: {
   my $query;
@@ -42,6 +42,18 @@ SKIP: {
     note( Dumper( { %res2 } ) );
   };
 
+  subtest 'Request of person data for Ray Bradbury as full name' => sub {
+    plan tests => 2;
+
+    my $res1 = $query->find_person( { fullname => 'Ray Bradbury' } );
+    ok( $res1, 'Ray Bradbury is present' );
+    note( $res1 );
+
+    my %res2 = $query->find_person( 'Ray Bradbury' );
+    ok(scalar keys %res2 > 1, "Got Ray Bradbury's data" );
+    note( Dumper( { %res2 } ) );
+  };
+
   subtest 'Request of membership in specific group for Ray Bradbury' => sub {
     plan tests => 1;
     my $res = $query->is_member_of( 'Ray Bradbury', 'scifi' );
@@ -49,6 +61,13 @@ SKIP: {
     note( $res );
   };
 
+  subtest 'Request of membership in specific group for Ray Bradbury as full 
name' => sub {
+    plan tests => 1;
+    my $res = $query->is_member_of( { fullname => 'Ray Bradbury' }, 'scifi' );
+    ok( $res, "Ray Bradbury is member of scifi since ".( $res ? $res : 
"(unknown)" ) );
+    note( $res );
+  };
+
   subtest 'Request of "author" tag value for Ray Bradbury' => sub {
     plan tests => 1;
     my $res = $query->find_person_tag( 'Ray Bradbury', 'author' );
@@ -56,6 +75,13 @@ SKIP: {
     note( Dumper $res );
   };
 
+  subtest 'Request of "author" tag value for Ray Bradbury as full name' => sub 
{
+    plan tests => 1;
+    my $res = $query->find_person_tag( { fullname => 'Ray Bradbury' }, 
'author' );
+    ok( $res, "The 'author' tag for Ray Bradbury is ".( $res ? $res : 
"(unknown)" ) );
+    note( Dumper $res );
+  };
+
   subtest 'Request of CLA status for Ray Bradbury' => sub {
     plan tests => 1;
     my $res = $query->has_cla( 'r...@ourplace.com' );
diff --git a/QueryApp/bin/query.psgi b/QueryApp/bin/query.psgi
index d6c0e56..ec9a994 100644
--- a/QueryApp/bin/query.psgi
+++ b/QueryApp/bin/query.psgi
@@ -64,6 +64,14 @@ set bureau => '/var/cache/openssl/checkouts/bureau';
 
 prefix '/0';
 
+sub name_decode {
+    my $name = shift;
+    if ($name =~ m|^([^:]+):(.+)$|) {
+       return { $1 => $2 };
+    }
+    return $name;
+}
+
 get '/People' => sub {
   my $query = OpenSSL::Query->new(bureau => config->{bureau});
   my @response = $query->list_people();
@@ -74,7 +82,7 @@ get '/People' => sub {
 
 get '/Person/:name' => sub {
   my $query = OpenSSL::Query->new(bureau => config->{bureau});
-  my $name = uri_decode(param('name'));
+  my $name = name_decode(uri_decode(param('name')));
   my %response = $query->find_person($name);
 
   return { %response } if %response;
@@ -83,7 +91,7 @@ get '/Person/:name' => sub {
 
 get '/Person/:name/Membership' => sub {
   my $query = OpenSSL::Query->new(bureau => config->{bureau}, REST => 0);
-  my $name = uri_decode(param('name'));
+  my $name = name_decode(uri_decode(param('name')));
   my %response = $query->find_person($name);
 
   return $response{memberof} if %response;
@@ -92,7 +100,7 @@ get '/Person/:name/Membership' => sub {
 
 get '/Person/:name/IsMemberOf/:group' => sub {
   my $query = OpenSSL::Query->new(bureau => config->{bureau}, REST => 0);
-  my $name = uri_decode(param('name'));
+  my $name = name_decode(uri_decode(param('name')));
   my $group = uri_decode(param('group'));
   my $response = $query->is_member_of($name, $group);
 
@@ -102,7 +110,7 @@ get '/Person/:name/IsMemberOf/:group' => sub {
 
 get '/Person/:name/ValueOfTag/:tag' => sub {
   my $query = OpenSSL::Query->new(bureau => config->{bureau}, REST => 0);
-  my $name = uri_decode(param('name'));
+  my $name = name_decode(uri_decode(param('name')));
   my $tag = uri_decode(param('tag'));
   my $response = $query->find_person_tag($name, $tag);
 
@@ -112,7 +120,7 @@ get '/Person/:name/ValueOfTag/:tag' => sub {
 
 get '/Person/:name/HasCLA' => sub {
   my $query = OpenSSL::Query->new(bureau => config->{bureau}, REST => 0);
-  my $name = uri_decode(param('name'));
+  my $name = name_decode(uri_decode(param('name')));
   my %person = $query->find_person($name);
   my @response = ();
 
diff --git a/QueryApp/t/query.t b/QueryApp/t/query.t
index 1f0d3d3..c570707 100644
--- a/QueryApp/t/query.t
+++ b/QueryApp/t/query.t
@@ -7,7 +7,7 @@ BEGIN { $ENV{DANCER_APPHANDLER} = 'PSGI';}
 
 use strict;
 use warnings;
-use Test::More tests => 15;
+use Test::More tests => 19;
 use Plack::Test;
 use Plack::Util;
 use HTTP::Request::Common;
@@ -53,6 +53,14 @@ subtest 'Request of person data for Ray Bradbury' => sub {
   is( $res->code, 200, 'We have content' );
 };
 
+subtest 'Request of person data for Ray Bradbury as full name' => sub {
+  my $res = $test->request( GET '/0/Person/fullname:Ray Bradbury' );
+  plan tests => 2;
+  ok( $res->is_success, 'Successful request' );
+  note( $res->content );
+  is( $res->code, 200, 'We have content' );
+};
+
 subtest 'Request of membership for Ray Bradbury' => sub {
   my $res = $test->request( GET '/0/Person/Ray Bradbury/Membership' );
   plan tests => 2;
@@ -61,6 +69,14 @@ subtest 'Request of membership for Ray Bradbury' => sub {
   is( $res->code, 200, 'We have content' );
 };
 
+subtest 'Request of membership for Ray Bradbury as fullname' => sub {
+  my $res = $test->request( GET '/0/Person/fullname:Ray Bradbury/Membership' );
+  plan tests => 2;
+  ok( $res->is_success, 'Successful request' );
+  note( $res->content );
+  is( $res->code, 200, 'We have content' );
+};
+
 subtest 'Request of membership in specific group for Ray Bradbury' => sub {
   my $res = $test->request( GET '/0/Person/Ray Bradbury/IsMemberOf/scifi' );
   plan tests => 2;
@@ -69,6 +85,14 @@ subtest 'Request of membership in specific group for Ray 
Bradbury' => sub {
   is( $res->code, 200, 'We have content' );
 };
 
+subtest 'Request of membership in specific group for Ray Bradbury as fullname' 
=> sub {
+  my $res = $test->request( GET '/0/Person/fullname:Ray 
Bradbury/IsMemberOf/scifi' );
+  plan tests => 2;
+  ok( $res->is_success, 'Successful request' );
+  note( $res->content );
+  is( $res->code, 200, 'We have content' );
+};
+
 subtest 'Request of "author" tag value for Ray Bradbury' => sub {
   my $res = $test->request( GET '/0/Person/Ray Bradbury/ValueOfTag/author' );
   plan tests => 2;
@@ -77,6 +101,14 @@ subtest 'Request of "author" tag value for Ray Bradbury' => 
sub {
   is( $res->code, 200, 'We have content' );
 };
 
+subtest 'Request of "author" tag value for Ray Bradbury as fullname' => sub {
+  my $res = $test->request( GET '/0/Person/fullname:Ray 
Bradbury/ValueOfTag/author' );
+  plan tests => 2;
+  ok( $res->is_success, 'Successful request' );
+  note( $res->content );
+  is( $res->code, 200, 'We have content' );
+};
+
 subtest 'Request of CLA status for Ray Bradbury' => sub {
   my $res = $test->request( GET '/0/HasCLA/r...@ourplace.com' );
   plan tests => 2;
diff --git a/QueryApp/t/query_data/pdb.yaml b/QueryApp/t/query_data/pdb.yaml
index 2dc03a0..9be3211 100644
--- a/QueryApp/t/query_data/pdb.yaml
+++ b/QueryApp/t/query_data/pdb.yaml
@@ -1,6 +1,6 @@
 -
   ids:
-  - Ray Bradbury
+  - fullname: Ray Bradbury
   - Ray
   - r...@ourplace.com
   - Burn paper burn
@@ -12,7 +12,7 @@
 
 -
   ids:
-  - Selma Lagerlöf
+  - fullname: Selma Lagerlöf
   - Selma
   memberof:
     writers: [ 1891, 1940 ]
diff --git a/QueryApp/t/query_direct.t b/QueryApp/t/query_direct.t
index e7d8ac4..2687fd6 100644
--- a/QueryApp/t/query_direct.t
+++ b/QueryApp/t/query_direct.t
@@ -7,7 +7,7 @@ BEGIN { $ENV{DANCER_APPHANDLER} = 'PSGI';}
 
 use strict;
 use warnings;
-use Test::More tests => 11;
+use Test::More tests => 14;
 use Data::Dumper;
 use FindBin;
 
@@ -41,6 +41,18 @@ subtest 'Request of person data for Ray Bradbury' => sub {
   note( Dumper( { %res2 } ) );
 };
 
+subtest 'Request of person data for Ray Bradbury as full name' => sub {
+  plan tests => 2;
+
+  my $res1 = $query->find_person( { fullname => 'Ray Bradbury' } );
+  ok( $res1, 'Ray Bradbury is present' );
+  note( $res1 );
+
+  my %res2 = $query->find_person( 'Ray Bradbury' );
+  ok(scalar keys %res2 > 1, "Got Ray Bradbury's data" );
+  note( Dumper( { %res2 } ) );
+};
+
 subtest 'Request of membership in specific group for Ray Bradbury' => sub {
   plan tests => 1;
   my $res = $query->is_member_of( 'Ray Bradbury', 'scifi' );
@@ -48,6 +60,13 @@ subtest 'Request of membership in specific group for Ray 
Bradbury' => sub {
   note( $res );
 };
 
+subtest 'Request of membership in specific group for Ray Bradbury as fullname' 
=> sub {
+  plan tests => 1;
+  my $res = $query->is_member_of( { fullname => 'Ray Bradbury' }, 'scifi' );
+  ok( $res, "Ray Bradbury is member of scifi since ".( $res ? $res : 
"(unknown)" ) );
+  note( $res );
+};
+
 subtest 'Request of "author" tag value for Ray Bradbury' => sub {
   plan tests => 1;
   my $res = $query->find_person_tag( 'Ray Bradbury', 'author' );
@@ -55,6 +74,13 @@ subtest 'Request of "author" tag value for Ray Bradbury' => 
sub {
   note( Dumper $res );
 };
 
+subtest 'Request of "author" tag value for Ray Bradbury as full name' => sub {
+  plan tests => 1;
+  my $res = $query->find_person_tag( { fullname => 'Ray Bradbury' }, 'author' 
);
+  ok( $res, "The 'author' tag for Ray Bradbury is ".( $res ? $res : 
"(unknown)" ) );
+  note( Dumper $res );
+};
+
 subtest 'Request of CLA status for Ray Bradbury' => sub {
   plan tests => 1;
   my $res = $query->has_cla( 'r...@ourplace.com' );
diff --git a/review-tools/README b/review-tools/README
index c2b2570..e601cc6 100644
--- a/review-tools/README
+++ b/review-tools/README
@@ -21,46 +21,29 @@ The scripts
 addrev
 ------
 
-addrev is a simple pair of scripts to add or edit reviewers to commits.
+addrev and gitaddrev is a simple pair of scripts to add or edit reviewers to
+commits.
 
 To use add the scripts gitaddrev and addrev to your PATH.
 
-Usage is
+Run 'addrev --help' for usage.
 
-       addrev <arguments>
-
-<arguments> can be one of:
-
---reviewer=<name> add reviewer <name> to commit range: can be used more than
-once.
-
---commit=<id> only apply if commit matches <id>: can be used more than once
-
---rmreviewers remove all reviewers from commit range: useful if you screwed
-up.
-
--<number> change the last <number> commits if not present assumes the last
-commit only.
-
---trivial add the header "CLA: trivial" to the commits
-
-Any lower case string is assumed to be a reviewer name.
-
-Anything not matching the above is take to be a commit range.
-
-If a reviewer already exists in the log message it is deleted before it is
-added to the end of the log: this ensures a reviewer can only appear once
-in a commit.
+If a reviewer already exists in the log message, it isn't added again.
 
 If the commiter is not the author of the commit then they are added
 automatically as a reviewer.
 
+Reviewer names can be given as simple known lower case names, or as github
+IDs prefixed with a @, or known email addresses if given with --reviewer.
+
+Run 'addrev --list' to ge a list of known reviewer names.
+
 Examples:
 
     addrev steve
     addrev -2 steve
-    addrev -2 steve rich
-    addrev -2 --reviewer=steve --reviewer=rich
+    addrev -2 steve @richsalz
+    addrev -2 --reviewer=steve --reviewer=rs...@openssl.org
 
 gitlabutil
 ----------
diff --git a/review-tools/addrev b/review-tools/addrev
index b3f5531..6b3d64a 100755
--- a/review-tools/addrev
+++ b/review-tools/addrev
@@ -13,7 +13,7 @@ my $trivial = 0;
 my $my_email;
 
 foreach (@ARGV) {
-    if (/^[a-z][-a-z]*$/) {
+    if (/^[a-z]+$/ || /^\@(?:\w|\w-\w)+$/) {
         $args .= "--reviewer=$_ ";
     } elsif (/^--reviewer=(.+)$/) {
         $args .= "--reviewer=$1 ";
@@ -88,12 +88,15 @@ non-option style arguments can be:
 
 a string of lower case letters, denoting a reviewer name.
 
-anything else will be used as a commit range.
+a string starting with \@, denoting a reviewer's github ID.
+
+anything else will be used as a commit range.  If no commit range is given,
+HEAD^.. is assumed.
 
 Examples (all meaning the same thing):
 
   addrev -2 steve levitte
-  addrev steve levitte HEAD^^..
-  addrev --reviewer=steve --reviewer=levitte -2
+  addrev steve \@levitte HEAD^^..
+  addrev --reviewer=steve --reviewer=levitte\@openssl.org -2
 EOF
 }
diff --git a/review-tools/gitaddrev b/review-tools/gitaddrev
index 13a7f8c..4dfd04b 100755
--- a/review-tools/gitaddrev
+++ b/review-tools/gitaddrev
@@ -32,12 +32,13 @@ my $omccount = 0;
 sub try_add_reviewer {
     my $id = shift;
     my $rc = undef;
-    my $rev = $query->find_person_tag($id, 'rev');
+    my $id2 = $id =~ /^\@(.*)$/ ? { github => $1 } : $id;
+    my $rev = $query->find_person_tag($id2, 'rev');
     if ($rev) {
        my $cla = $query->has_cla($rev);
        if ($cla) {
            unless (grep {$_ eq $rev} @reviewers) {
-               $omccount++ if $query->is_member_of($id, 'omc');
+               $omccount++ if $query->is_member_of($id2, 'omc');
                push @reviewers, $rev;
            }
            $rc = $rev;
@@ -48,7 +49,7 @@ sub try_add_reviewer {
     } else {
        push @unknown_reviewers, $id
            unless grep {$_ eq $id} @unknown_reviewers;
-       unless ($id =~ m|^.*\@.*$| && $query->has_cla($id)) {
+       unless ($id =~ m|^.+\@.*$| && $query->has_cla($id)) {
            push @nocla_reviewers, $id
                unless grep {$_ eq $id} @nocla_reviewers;
        }
@@ -64,13 +65,16 @@ foreach (@ARGV) {
            my $rev = $query->find_person_tag($email_id, 'rev');
            my $omc = $query->is_member_of($email_id, 'omc');
            next unless $query->has_cla($rev);
-           my @ids = sort grep { $_ =~ m|^[a-z][-a-z]*$| } map {
-               if (ref($_) eq "HASH") {
-                   values %$_;
-               } else {
-                   $_;
-               }
-           } @$_;
+           my @ids =
+               sort grep { $_ =~ /^[a-z]+$/ || $_ =~ /^\@(?:\w|\w-\w)+$/ }
+               map {
+                   if (ref($_) eq "HASH") {
+                       my %h = %$_;
+                       map { $_ eq "github" ? '@'.$h{$_} : $h{$_} } %h;
+                   } else {
+                       $_;
+                   }
+               } @$_;
            foreach (@ids) {
                $list{$_} = { tag => $rev, omc => $omc };
            }
_____
openssl-commits mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits

Reply via email to