3131from requests import RequestException
3232from cli import options
3333import sonar .logging as log
34- from sonar import platform , tokens , users , projects , branches , version , errcodes
34+ from sonar import platform , tokens , users , projects , branches , pull_requests , version , errcodes
35+ from sonar .util import types
3536import sonar .util .constants as c
3637import sonar .utilities as util
3738import sonar .exceptions as ex
4445def get_project_problems (settings : dict [str , str ], endpoint : object ) -> list [problem .Problem ]:
4546 """Returns the list of problems that would require housekeeping for a given project"""
4647 problems = []
47- if settings [PROJ_MAX_AGE ] < 90 :
48+ if settings [PROJ_MAX_AGE ] != 0 and settings [ PROJ_MAX_AGE ] < 90 :
4849 log .error ("As a safety measure, can't delete projects more recent than 90 days" )
4950 return problems
5051
@@ -90,10 +91,6 @@ def get_user_problems(settings: dict[str, str], endpoint: platform.Platform) ->
9091
9192def _parse_arguments () -> object :
9293 """Parses CLI arguments"""
93- _DEFAULT_PROJECT_OBSOLESCENCE = 365
94- _DEFAULT_BRANCH_OBSOLESCENCE = 90
95- _DEFAULT_PR_OBSOLESCENCE = 30
96- _DEFAULT_TOKEN_OBSOLESCENCE = 365
9794 parser = options .set_common_args ("Deletes projects, branches, PR, user tokens not used since a given number of days" )
9895 parser = options .set_output_file_args (parser , allowed_formats = ("csv" ,))
9996 parser = options .add_thread_arg (parser , "auditing before housekeeping" )
@@ -112,16 +109,16 @@ def _parse_arguments() -> object:
112109 "--projectsMaxAge" ,
113110 required = False ,
114111 type = int ,
115- default = _DEFAULT_PROJECT_OBSOLESCENCE ,
116- help = f "Deletes projects not analyzed since a given number of days, by default { _DEFAULT_PROJECT_OBSOLESCENCE } days" ,
112+ default = 0 ,
113+ help = "Deletes projects not analyzed since a given number of days" ,
117114 )
118115 parser .add_argument (
119116 "-B" ,
120117 "--branchesMaxAge" ,
121118 required = False ,
122119 type = int ,
123- default = _DEFAULT_BRANCH_OBSOLESCENCE ,
124- help = f "Deletes branches not to be kept and not analyzed since a given number of days, by default { _DEFAULT_BRANCH_OBSOLESCENCE } days" ,
120+ default = 0 ,
121+ help = "Deletes branches not to be kept and not analyzed since a given number of days" ,
125122 )
126123 parser .add_argument (
127124 "--keepWhenInactive" ,
@@ -134,21 +131,21 @@ def _parse_arguments() -> object:
134131 "--pullrequestsMaxAge" ,
135132 required = False ,
136133 type = int ,
137- default = _DEFAULT_BRANCH_OBSOLESCENCE ,
138- help = f "Deletes pull requests not analyzed since a given number of days, by default { _DEFAULT_PR_OBSOLESCENCE } days" ,
134+ default = 0 ,
135+ help = "Deletes pull requests not analyzed since a given number of days" ,
139136 )
140137 parser .add_argument (
141138 "-T" ,
142139 "--tokensMaxAge" ,
143140 required = False ,
144141 type = int ,
145- default = _DEFAULT_TOKEN_OBSOLESCENCE ,
146- help = f "Deletes user tokens older than a certain number of days, by default { _DEFAULT_TOKEN_OBSOLESCENCE } days" ,
142+ default = 0 ,
143+ help = "Deletes user tokens older than a certain number of days" ,
147144 )
148145 return options .parse_and_check (parser = parser , logger_name = TOOL_NAME )
149146
150147
151- def _delete_objects (problems : problem .Problem , mode : str ) -> tuple [int , int , int , int , int ]:
148+ def _delete_objects (problems : problem .Problem , mode : str , settings : types . ConfigSettings ) -> tuple [int , int , int , int , int ]:
152149 """Deletes objects (that should be housekept)"""
153150 revoked_token_count = 0
154151 deleted_projects = {}
@@ -171,12 +168,13 @@ def _delete_objects(problems: problem.Problem, mode: str) -> tuple[int, int, int
171168 deleted_loc += loc
172169 if isinstance (obj , (tokens .UserToken , users .User )) and (mode != "delete" or obj .revoke ()):
173170 revoked_token_count += 1
174- elif obj .project ().key in deleted_projects :
171+ elif settings [ PROJ_MAX_AGE ] > 0 and obj .project ().key in deleted_projects :
175172 log .info ("%s deleted, so no need to delete %s" , str (obj .project ()), str (obj ))
176173 elif mode != "delete" or obj .delete ():
174+ log .info ("%s to delete" , str (obj ))
177175 if isinstance (obj , branches .Branch ):
178176 deleted_branch_count += 1
179- else :
177+ elif isinstance ( obj , pull_requests . PullRequest ) :
180178 deleted_pr_count += 1
181179
182180 except ex .ObjectNotFound :
@@ -211,7 +209,6 @@ def main() -> None:
211209 settings = {
212210 "audit.tokens.maxAge" : token_age ,
213211 "audit.tokens.maxUnusedAge" : 90 ,
214- # "audit.groups.empty": True,
215212 PROJ_MAX_AGE : proj_age ,
216213 "audit.projects.branches.maxLastAnalysisAge" : branch_age ,
217214 "audit.projects.pullRequests.maxLastAnalysisAge" : pr_age ,
@@ -232,12 +229,16 @@ def main() -> None:
232229 op = "to delete"
233230 if mode == "delete" :
234231 op = "deleted"
235- (deleted_proj , deleted_loc , deleted_branches , deleted_prs , revoked_tokens ) = _delete_objects (problems , mode )
236-
237- log .info ("%d projects older than %d days (%d LoCs) %s" , deleted_proj , proj_age , deleted_loc , op )
238- log .info ("%d branches older than %d days %s" , deleted_branches , branch_age , op )
239- log .info ("%d pull requests older than %d days %s" , deleted_prs , pr_age , op )
240- log .info ("%d tokens older than %d days %s" , revoked_tokens , token_age , "revoked" if mode == "deleted" else "to revoke" )
232+ (deleted_proj , deleted_loc , deleted_branches , deleted_prs , revoked_tokens ) = _delete_objects (problems , mode , settings = settings )
233+
234+ if proj_age > 0 :
235+ log .info ("%d projects older than %d days (%d LoCs) %s" , deleted_proj , proj_age , deleted_loc , op )
236+ if branch_age > 0 :
237+ log .info ("%d branches older than %d days %s" , deleted_branches , branch_age , op )
238+ if pr_age > 0 :
239+ log .info ("%d pull requests older than %d days %s" , deleted_prs , pr_age , op )
240+ if token_age > 0 :
241+ log .info ("%d tokens older than %d days %s" , revoked_tokens , token_age , "revoked" if mode == "deleted" else "to revoke" )
241242
242243 except (PermissionError , FileNotFoundError ) as e :
243244 util .final_exit (errcodes .OS_ERROR , f"OS error while housekeeping: { str (e )} " )
0 commit comments