@@ -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