Skip to content

Commit 6fc4782

Browse files
Add non zero exit 2 when diff is found (#9)
1 parent 2d7e982 commit 6fc4782

1 file changed

Lines changed: 31 additions & 6 deletions

File tree

main.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -876,8 +876,12 @@ def print_diff(
876876
header_to_add: str,
877877
header_to_remove: str,
878878
header_to_change: str,
879-
) -> None:
879+
) -> bool:
880+
has_diff = False
881+
880882
if len(self.to_add) > 0:
883+
has_diff = True
884+
881885
print(header_to_add)
882886
for entry in self.to_add:
883887
print()
@@ -886,6 +890,8 @@ def print_diff(
886890
print()
887891

888892
if len(self.to_remove) > 0:
893+
has_diff = True
894+
889895
print(header_to_remove)
890896
for entry in self.to_remove:
891897
print()
@@ -894,6 +900,8 @@ def print_diff(
894900
print()
895901

896902
if len(self.to_change) > 0:
903+
has_diff = True
904+
897905
print(header_to_change)
898906
for change in self.to_change:
899907
print()
@@ -904,36 +912,48 @@ def print_diff(
904912

905913
print()
906914

915+
return has_diff
907916

908917
def print_team_members_diff(
909918
*,
910919
team_name: str,
911920
target_fname: str,
912921
target_members: Set[TeamMember],
913922
actual_members: Set[TeamMember],
914-
) -> None:
923+
) -> bool:
924+
has_diff = False
915925
members_diff = Diff.new(
916926
target=target_members,
917927
actual=actual_members,
918928
)
929+
919930
if len(members_diff.to_remove) > 0:
931+
has_diff = True
932+
920933
print(
921934
f"The following members of team '{team_name}' are not specified "
922935
f"in {target_fname}, but are present on GitHub:\n"
923936
)
924937
for member in sorted(members_diff.to_remove):
925938
print(f" {member.user_name}")
939+
926940
print()
927941

928942
if len(members_diff.to_add) > 0:
943+
has_diff = True
944+
929945
print(
930946
f"The following members of team '{team_name}' are specified "
931947
f"in {target_fname}, but are not present on GitHub:\n"
932948
)
933949
for member in sorted(members_diff.to_add):
934950
print(f" {member.user_name}")
951+
935952
print()
936953

954+
return has_diff
955+
956+
937957

938958
def main() -> None:
939959
if "--help" in sys.argv:
@@ -951,6 +971,7 @@ def main() -> None:
951971
print("See also --help.")
952972
sys.exit(1)
953973

974+
has_changes = False
954975
target_fname = sys.argv[1]
955976
target = Configuration.from_toml_file(target_fname)
956977
org_name = target.organization.name
@@ -962,7 +983,7 @@ def main() -> None:
962983
target.get_repository_target(r) for r in actual_repos
963984
}
964985
repos_diff = Diff.new(target=target_repos, actual=actual_repos)
965-
repos_diff.print_diff(
986+
has_changes |= repos_diff.print_diff(
966987
f"The following repositories are specified in {target_fname} but not present on GitHub:",
967988
# Even though we generate the targets form the actuals using the default
968989
# settings, it can happen that we match on repository name but not id
@@ -974,6 +995,7 @@ def main() -> None:
974995

975996
current_org = client.get_organization(org_name)
976997
if current_org != target.organization:
998+
has_changes = True
977999
print("The organization-level settings need to be changed as follows:\n")
9781000
print_simple_diff(
9791001
actual=current_org.format_toml(),
@@ -982,15 +1004,15 @@ def main() -> None:
9821004

9831005
current_members = set(client.get_organization_members(org_name))
9841006
members_diff = Diff.new(target=target.members, actual=current_members)
985-
members_diff.print_diff(
1007+
has_changes |= members_diff.print_diff(
9861008
f"The following members are specified in {target_fname} but not a member of the GitHub organization:",
9871009
f"The following members are not specified in {target_fname} but are a member of the GitHub organization:",
9881010
f"The following members on GitHub need to be changed to match {target_fname}:",
9891011
)
9901012

9911013
current_teams = set(client.get_organization_teams(org_name))
9921014
teams_diff = Diff.new(target=target.teams, actual=current_teams)
993-
teams_diff.print_diff(
1015+
has_changes |= teams_diff.print_diff(
9941016
f"The following teams specified in {target_fname} are not present on GitHub:",
9951017
f"The following teams are not specified in {target_fname} but are present on GitHub:",
9961018
f"The following teams on GitHub need to be changed to match {target_fname}:",
@@ -1004,7 +1026,7 @@ def main() -> None:
10041026
team for team in current_teams if team.name in target_team_names
10051027
]
10061028
for team in existing_desired_teams:
1007-
print_team_members_diff(
1029+
has_changes |= print_team_members_diff(
10081030
team_name=team.name,
10091031
target_fname=target_fname,
10101032
target_members={
@@ -1013,6 +1035,9 @@ def main() -> None:
10131035
actual_members=set(client.get_team_members(org_name, team)),
10141036
)
10151037

1038+
if has_changes:
1039+
sys.exit(2)
1040+
10161041

10171042
if __name__ == "__main__":
10181043
main()

0 commit comments

Comments
 (0)