]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1478540 - Update User.pm to load more than 100 users by using the paging function...
authordklawren <dklawren@users.noreply.github.com>
Fri, 27 Jul 2018 14:17:50 +0000 (10:17 -0400)
committerGitHub <noreply@github.com>
Fri, 27 Jul 2018 14:17:50 +0000 (10:17 -0400)
extensions/PhabBugz/lib/Feed.pm
extensions/PhabBugz/lib/User.pm

index d238c6a4386f60d459fdd33359603fe8fbc6d8fc..7d6b4e0ed4e1310109e3e967a400a6f140527ecf 100644 (file)
@@ -322,20 +322,27 @@ sub group_query {
 
         # Make sure phab-bot also a member of the new project group so that it can
         # make policy changes to the private revisions
-        INFO("Setting project members for " . $project->name);
-        my $set_members          = $self->get_group_members( $group );
-        my @set_member_phids     = uniq map { $_->phid } (@$set_members, $phab_user);
+        INFO( "Checking project members for " . $project->name );
+        my $set_members          = $self->get_group_members($group);
+        my @set_member_phids     = uniq map { $_->phid } ( @$set_members, $phab_user );
         my @current_member_phids = uniq map { $_->phid } @{ $project->members };
-        my ($added, $removed)    = diff_arrays(\@set_member_phids, \@current_member_phids);
+        my ( $removed, $added )  = diff_arrays( \@current_member_phids, \@set_member_phids );
 
-        INFO('Adding members: ' . join( ',', @$added ));
-        $project->add_member( $_ ) foreach @$added;
-        INFO('Removing members: ' . join( ',', @$removed ));
-        $project->remove_member( $_  ) foreach @$removed;
+        if (@$added) {
+            INFO( 'Adding project members: ' . join( ',', @$added ) );
+            $project->add_member($_) foreach @$added;
+        }
+
+        if (@$removed) {
+            INFO( 'Removing project members: ' . join( ',', @$removed ) );
+            $project->remove_member($_) foreach @$removed;
+        }
 
-        my $result = $project->update();
-        local Bugzilla::Logging->fields->{api_result} = $result;
-        INFO("Project " . $project->name . " updated");
+        if (@$added || @$removed) {
+            my $result = $project->update();
+            local Bugzilla::Logging->fields->{api_result} = $result;
+            INFO( "Project " . $project->name . " updated" );
+        }
     }
 }
 
index 9d4e9eef496a410f47efcbdadf0f98ddbe069296..1bf1a842db855d95efed55f99dfa87841e8dc968 100644 (file)
@@ -131,14 +131,18 @@ sub match {
         attachments => { 'external-accounts' => 1 }
     };
 
+    # We can only fetch 100 users at a time so we need to do this in lumps
     my $phab_users = [];
-    my $result = request( 'user.search', $data );
-
-    if ( exists $result->{result}{data} && @{ $result->{result}{data} } ) {
-        foreach my $user ( @{ $result->{result}{data} } ) {
-            push @$phab_users, $class->new($user);
+    my $result;
+    do {
+        $result = request( 'user.search', $data );
+        if ( exists $result->{result}{data} && @{ $result->{result}{data} } ) {
+            foreach my $user ( @{ $result->{result}{data} } ) {
+                push @$phab_users, $class->new($user);
+            }
         }
-    }
+        $data->{after} = $result->{cursor}->{after};
+    } while ($result->{cursor}->{after});
 
     return $phab_users;
 }