[Rt-commit] rt branch, 4.4/shredder-single-member-group-resolver-avoid-duplicates, created. rt-4.4.2-133-g07cdc1760
? sunnavy
sunnavy at bestpractical.com
Thu Apr 19 08:13:25 EDT 2018
The branch, 4.4/shredder-single-member-group-resolver-avoid-duplicates has been created
at 07cdc17602f1f212493a4891e64e811a9a1482dc (commit)
- Log -----------------------------------------------------------------
commit 07cdc17602f1f212493a4891e64e811a9a1482dc
Author: sunnavy <sunnavy at bestpractical.com>
Date: Thu Apr 12 21:44:11 2018 +0800
Avoid duplicated single member group resolvers
There is no need to add the same resolver multiple times. Duplicated
resolvers could result in errors like:
Couldn't wipeout object: Group already has member: Nobody
diff --git a/lib/RT/GroupMember.pm b/lib/RT/GroupMember.pm
index 581666b8f..295d3a49e 100644
--- a/lib/RT/GroupMember.pm
+++ b/lib/RT/GroupMember.pm
@@ -536,32 +536,36 @@ sub __DependsOn {
TargetObjects => $group,
Shredder => $args{'Shredder'}
);
- $args{'Shredder'}->PutResolver(
- BaseClass => ref $self,
- TargetClass => ref $group,
- Code => sub {
- my %args = (@_);
- my $group = $args{'TargetObject'};
- return if $args{'Shredder'}->GetState( Object => $group )
- & (RT::Shredder::Constants::WIPED|RT::Shredder::Constants::IN_WIPING);
- return unless ($group->Name || '') eq 'Owner';
- return unless ($group->Domain || '') eq 'RT::Ticket-Role';
- return if $group->MembersObj->Count > 1;
+ if ( !$args{Shredder}->{_resolver_mark}{SingleMemberGroupResolver} ) {
+ $args{'Shredder'}->PutResolver(
+ BaseClass => ref $self,
+ TargetClass => ref $group,
+ Code => sub {
+ my %args = ( @_ );
+ my $group = $args{'TargetObject'};
+ return if $args{'Shredder'}->GetState( Object => $group )
+ & ( RT::Shredder::Constants::WIPED | RT::Shredder::Constants::IN_WIPING );
+ return unless ( $group->Name || '' ) eq 'Owner';
+ return unless ( $group->Domain || '' ) eq 'RT::Ticket-Role';
- my $group_member = $args{'BaseObject'};
+ return if $group->MembersObj->Count > 1;
- if( $group_member->MemberObj->id == RT->Nobody->id ) {
- RT::Shredder::Exception->throw( "Couldn't delete Nobody from owners role group" );
- }
+ my $group_member = $args{'BaseObject'};
- my( $status, $msg ) = $group->AddMember( RT->Nobody->id );
+ if ( $group_member->MemberObj->id == RT->Nobody->id ) {
+ RT::Shredder::Exception->throw( "Couldn't delete Nobody from owners role group" );
+ }
- RT::Shredder::Exception->throw( $msg ) unless $status;
+ my ( $status, $msg ) = $group->AddMember( RT->Nobody->id );
- return;
- },
- );
+ RT::Shredder::Exception->throw( $msg ) unless $status;
+
+ return;
+ },
+ );
+ $args{Shredder}->{_resolver_mark}{SingleMemberGroupResolver} = 1;
+ }
return $self->SUPER::__DependsOn( %args );
}
-----------------------------------------------------------------------
More information about the rt-commit
mailing list