diff options
author | dklawren <dklawren@users.noreply.github.com> | 2017-11-29 19:54:22 +0100 |
---|---|---|
committer | Dylan William Hardison <dylan@hardison.net> | 2017-11-29 19:54:22 +0100 |
commit | 7da8e374e0c96e10077690935e829b0c04fc82f4 (patch) | |
tree | 44a92ccdee16c45badd35e9c986294fd40beec12 /extensions/PhabBugz/bin | |
parent | 64ce7cb12deee5f394a869d9ec6b5e46cd2679f0 (diff) | |
download | bugzilla-7da8e374e0c96e10077690935e829b0c04fc82f4.tar.gz bugzilla-7da8e374e0c96e10077690935e829b0c04fc82f4.tar.xz |
Bug 1409957 - Create polling daemon to query Phabricator for recent transcations and update bug data according to revision changes
Diffstat (limited to 'extensions/PhabBugz/bin')
-rwxr-xr-x | extensions/PhabBugz/bin/phabbugz_feed.pl | 50 | ||||
-rwxr-xr-x | extensions/PhabBugz/bin/update_project_members.pl | 41 |
2 files changed, 73 insertions, 18 deletions
diff --git a/extensions/PhabBugz/bin/phabbugz_feed.pl b/extensions/PhabBugz/bin/phabbugz_feed.pl new file mode 100755 index 000000000..9db491bd0 --- /dev/null +++ b/extensions/PhabBugz/bin/phabbugz_feed.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use 5.10.1; +use strict; +use warnings; + +use lib qw(. lib local/lib/perl5); + +BEGIN { + use Bugzilla; + Bugzilla->extensions; +} + +use Bugzilla::Extension::PhabBugz::Daemon; +Bugzilla::Extension::PhabBugz::Daemon->start(); + +=head1 NAME + +phabbugz_feed.pl - Query Phabricator for interesting changes and update bugs related to revisions. + +=head1 SYNOPSIS + + phabbugz_feed.pl [OPTIONS] COMMAND + + OPTIONS: + -f Run in the foreground (don't detach) + -d Output a lot of debugging information + -p file Specify the file where phabbugz_feed.pl should store its current + process id. Defaults to F<data/phabbugz_feed.pl.pid>. + -n name What should this process call itself in the system log? + Defaults to the full path you used to invoke the script. + + COMMANDS: + start Starts a new phabbugz_feed daemon if there isn't one running already + stop Stops a running phabbugz_feed daemon + restart Stops a running phabbugz_feed if one is running, and then + starts a new one. + check Report the current status of the daemon. + install On some *nix systems, this automatically installs and + configures phabbugz_feed.pl as a system service so that it will + start every time the machine boots. + uninstall Removes the system service for phabbugz_feed.pl. + help Display this usage info diff --git a/extensions/PhabBugz/bin/update_project_members.pl b/extensions/PhabBugz/bin/update_project_members.pl index bdc054e1a..06cc55626 100755 --- a/extensions/PhabBugz/bin/update_project_members.pl +++ b/extensions/PhabBugz/bin/update_project_members.pl @@ -20,11 +20,9 @@ use Bugzilla::Constants; use Bugzilla::Error; use Bugzilla::Group; +use Bugzilla::Extension::PhabBugz::Project; use Bugzilla::Extension::PhabBugz::Util qw( - create_project - get_members_by_bmo_id - get_project_phid - set_project_members + get_phab_bmo_ids ); Bugzilla->usage_mode(USAGE_MODE_CMDLINE); @@ -55,23 +53,22 @@ unless ($phab_sync_groups = Bugzilla->params->{phabricator_sync_groups}) { my $sync_groups = Bugzilla::Group->match({ name => [ split('[,\s]+', $phab_sync_groups) ] }); foreach my $group (@$sync_groups) { - my @users = get_group_members($group); - # Create group project if one does not yet exist my $phab_project_name = 'bmo-' . $group->name; - my $project_phid = get_project_phid($phab_project_name); - if (!$project_phid) { - $project_phid = create_project($phab_project_name, 'BMO Security Group for ' . $group->name); + my $project = Bugzilla::Extension::PhabBugz::Project->new({ + name => $phab_project_name + }); + if (!$project->id) { + $project = Bugzilla::Extension::PhabBugz::Project->create({ + name => $phab_project_name, + description => 'BMO Security Group for ' . $group->name + }); } - # Get the internal user ids for the bugzilla group members - my $phab_user_ids = []; - if (@users) { - $phab_user_ids = get_members_by_bmo_id(\@users); - } + my @group_members = get_group_members($group); - # Set the project members to the exact list - set_project_members($project_phid, $phab_user_ids); + $project->set_members(\@group_members); + $project->update(); } sub get_group_members { @@ -84,5 +81,13 @@ sub get_group_members { $users{$user->id} = $user; } } - return values %users; -} + + # Look up the phab ids for these users + my $phab_users = get_phab_bmo_ids({ ids => [ keys %users ] }); + foreach my $phab_user (@{ $phab_users }) { + $users{$phab_user->{id}}->{phab_phid} = $phab_user->{phid}; + } + + # We only need users who have accounts in phabricator + return grep { $_->phab_phid } values %users; +}
\ No newline at end of file |