From c7fd0908bd85bc5761aa28fe9c893f93394bfd4b Mon Sep 17 00:00:00 2001 From: Piotr Zalewa Date: Wed, 28 Feb 2018 23:13:43 +0100 Subject: Bug 1440239 - PhabBugz - Assign a secure-revision --- extensions/PhabBugz/lib/Feed.pm | 7 ++++++- extensions/PhabBugz/lib/Project.pm | 14 ++++++++++++++ extensions/PhabBugz/lib/Revision.pm | 33 ++++++++++++++++++++++++++++++++- extensions/PhabBugz/lib/Util.pm | 27 +++++++++++++++++---------- 4 files changed, 69 insertions(+), 12 deletions(-) (limited to 'extensions/PhabBugz') diff --git a/extensions/PhabBugz/lib/Feed.pm b/extensions/PhabBugz/lib/Feed.pm index c7d6d0a29..3b158d2d6 100644 --- a/extensions/PhabBugz/lib/Feed.pm +++ b/extensions/PhabBugz/lib/Feed.pm @@ -23,11 +23,11 @@ use Bugzilla::Extension::PhabBugz::Revision; use Bugzilla::Extension::PhabBugz::User; use Bugzilla::Extension::PhabBugz::Util qw( add_security_sync_comments - create_private_revision_policy create_revision_attachment edit_revision_policy get_bug_role_phids get_phab_bmo_ids + get_project_phid get_security_sync_groups is_attachment_phab_revision make_revision_public @@ -183,6 +183,8 @@ sub process_revision_change { $self->logger->debug('Bug is public so setting view/edit public'); $revision->set_policy('view', 'public'); $revision->set_policy('edit', 'users'); + my $secure_project_phid = get_project_phid('secure-revision'); + $revision->remove_project($secure_project_phid); } # else bug is private. else { @@ -225,6 +227,9 @@ sub process_revision_change { $revision->set_policy('edit', $new_policy->phid); } + my $secure_project_phid = get_project_phid('secure-revision'); + $revision->add_project($secure_project_phid); + my $subscribers = get_bug_role_phids($bug); $revision->set_subscribers($subscribers); } diff --git a/extensions/PhabBugz/lib/Project.pm b/extensions/PhabBugz/lib/Project.pm index 91dc2133d..fd09cbecf 100644 --- a/extensions/PhabBugz/lib/Project.pm +++ b/extensions/PhabBugz/lib/Project.pm @@ -232,6 +232,20 @@ sub update { } } + if ($self->{add_projects}) { + push(@{ $data->{transactions} }, { + type => 'projects.add', + value => $self->{add_projects} + }); + } + + if ($self->{remove_projects}) { + push(@{ $data->{transactions} }, { + type => 'projects.remove', + value => $self->{remove_projects} + }); + } + my $result = request( 'project.edit', $data ); return $result; diff --git a/extensions/PhabBugz/lib/Revision.pm b/extensions/PhabBugz/lib/Revision.pm index a897acf31..c114de78c 100644 --- a/extensions/PhabBugz/lib/Revision.pm +++ b/extensions/PhabBugz/lib/Revision.pm @@ -9,6 +9,7 @@ package Bugzilla::Extension::PhabBugz::Revision; use 5.10.1; use Moo; + use Scalar::Util qw(blessed); use Types::Standard -all; use Type::Utils; @@ -249,6 +250,20 @@ sub update { } } + if ($self->{add_projects}) { + push(@{ $data->{transactions} }, { + type => 'projects.add', + value => $self->{add_projects} + }); + } + + if ($self->{remove_projects}) { + push(@{ $data->{transactions} }, { + type => 'projects.remove', + value => $self->{remove_projects} + }); + } + my $result = request( 'differential.revision.edit', $data ); return $result; @@ -390,4 +405,20 @@ sub set_policy { $self->{set_policy}->{$name} = $policy; } -1; \ No newline at end of file +sub add_project { + my ( $self, $project ) = @_; + $self->{add_projects} ||= []; + my $project_phid = blessed $project ? $project->phid : $project; + return undef unless $project_phid; + push @{ $self->{add_projects} }, $project_phid; +} + +sub remove_project { + my ( $self, $project ) = @_; + $self->{remove_projects} ||= []; + my $project_phid = blessed $project ? $project->phid : $project; + return undef unless $project_phid; + push @{ $self->{remove_projects} }, $project_phid; +} + +1; diff --git a/extensions/PhabBugz/lib/Util.pm b/extensions/PhabBugz/lib/Util.pm index 838283f97..5658ac9d8 100644 --- a/extensions/PhabBugz/lib/Util.pm +++ b/extensions/PhabBugz/lib/Util.pm @@ -273,19 +273,26 @@ sub add_comment_to_revision { sub get_project_phid { my $project = shift; + my $memcache = Bugzilla->memcached; - my $data = { - queryKey => 'all', - constraints => { - name => $project - } - }; + # Check memcache + my $project_phid = $memcache->get_config({ key => "phab_project_phid_" . $project }); + if (!$project_phid) { + my $data = { + queryKey => 'all', + constraints => { + name => $project + } + }; - my $result = request('project.search', $data); - return undef - unless (exists $result->{result}{data} && @{ $result->{result}{data} }); + my $result = request('project.search', $data); + return undef + unless (exists $result->{result}{data} && @{ $result->{result}{data} }); - return $result->{result}{data}[0]{phid}; + $project_phid = $result->{result}{data}[0]{phid}; + $memcache->set_config({ key => "phab_project_phid_" . $project, data => $project_phid }); + } + return $project_phid; } sub create_project { -- cgit v1.2.3-24-g4f1b