Skip to content

Commit cb08731

Browse files
committed
fix bug of falsely reporting about newly added users without a team
1 parent 66bf0da commit cb08731

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

gh_org_mgr/_gh_org.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class GHorg: # pylint: disable=too-many-instance-attributes, too-many-lines
3030
org_members: list[NamedUser] = field(default_factory=list)
3131
current_teams: dict[Team, dict] = field(default_factory=dict)
3232
configured_teams: dict[str, dict | None] = field(default_factory=dict)
33+
newly_added_users: list[NamedUser] = field(default_factory=list)
3334
current_repos_teams: dict[Repository, dict[Team, str]] = field(default_factory=dict)
3435
current_repos_collaborators: dict[Repository, dict[str, str]] = field(default_factory=dict)
3536
configured_repos_collaborators: dict[str, dict[str, str]] = field(default_factory=dict)
@@ -485,6 +486,13 @@ def _get_current_team_members(self, team: Team) -> dict[NamedUser, str]:
485486

486487
return current_users
487488

489+
def _add_or_update_user_in_team(self, team: Team, user: NamedUser, role: str):
490+
"""Add or update membership of a user in a team"""
491+
team.add_membership(member=user, role=role)
492+
# Document that the user has just been added to a team. Relevant when we
493+
# will later find users without team membership
494+
self.newly_added_users.append(user)
495+
488496
def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-many-branches
489497
"""Check the configured members of each team, add missing ones and delete unconfigured"""
490498
logging.debug("Starting to sync team members")
@@ -571,7 +579,7 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
571579
config_role,
572580
)
573581
if not dry:
574-
team.add_membership(member=gh_user, role=config_role)
582+
self._add_or_update_user_in_team(team=team, user=gh_user, role=config_role)
575583

576584
# Update roles if they differ from old role
577585
elif config_role != current_team_members.get(config_user, ""):
@@ -585,7 +593,7 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
585593
config_role,
586594
)
587595
if not dry:
588-
team.add_membership(member=gh_user, role=config_role)
596+
self._add_or_update_user_in_team(team=team, user=gh_user, role=config_role)
589597

590598
# Loop through all current members. Remove them if they are not configured
591599
for current_user in current_team_members:
@@ -618,11 +626,12 @@ def get_members_without_team(self) -> None:
618626
all_org_members = set(self.org_members + self.current_org_owners)
619627

620628
# Get all members of all teams
621-
all_team_members_lst = []
629+
all_team_members_lst: list[NamedUser] = []
622630
for _, team_attrs in self.current_teams.items():
623631
for member in team_attrs.get("members", {}):
624632
all_team_members_lst.append(member)
625-
all_team_members = set(all_team_members_lst)
633+
# Also add users that have just been added to a team, and unify them
634+
all_team_members: set[NamedUser] = set(all_team_members_lst + self.newly_added_users)
626635

627636
# Find members that are in org_members but not team_members
628637
members_without_team = all_org_members.difference(all_team_members)

0 commit comments

Comments
 (0)