Skip to content

Commit f837cf4

Browse files
committed
Fixes #1391
1 parent 346bfdb commit f837cf4

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

sonar/portfolios.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
"visibility",
7575
"permissions",
7676
"projects",
77+
"projectsList",
7778
"portfolios",
7879
"subPortfolios",
7980
"applications",
@@ -359,11 +360,14 @@ def to_json(self, export_settings: types.ConfigSettings) -> types.ObjectJsonRepr
359360
if mode and "none" not in mode:
360361
json_data["projects"] = mode
361362
json_data["applications"] = self._applications
363+
if export_settings.get("MODE", "") == "MIGRATION":
364+
json_data["projectsList"] = self.get_project_list()
362365
return json_data
363366

364367
def export(self, export_settings: types.ConfigSettings) -> types.ObjectJsonRepr:
365368
"""Exports a portfolio (for sonar-config)"""
366369
log.info("Exporting %s", str(self))
370+
exp = self.to_json(export_settings)
367371
return util.remove_nones(util.filter_export(self.to_json(export_settings), _IMPORTABLE_PROPERTIES, export_settings["FULL_EXPORT"]))
368372

369373
def permissions(self) -> pperms.PortfolioPermissions:
@@ -563,6 +567,30 @@ def recompute(self) -> bool:
563567
key = self._root_portfolio.key if self._root_portfolio else self.key
564568
return self.post("views/refresh", params={"key": key}).ok
565569

570+
def get_project_list(self) -> list[str]:
571+
log.debug("Search %s projects list", str(self))
572+
proj_key_list = []
573+
page = 0
574+
params = {"component": self.key, "ps": 500, "qualifiers": "TRK", "strategy": "leaves", "metricKeys": "ncloc"}
575+
while True:
576+
page += 1
577+
params["p"] = page
578+
try:
579+
data = json.loads(self.get("api/measures/component_tree", params=params).text)
580+
nbr_projects = util.nbr_total_elements(data)
581+
proj_key_list += [c["refKey"] for c in data["components"]]
582+
except HTTPError as e:
583+
log.critical("HTTP Error %s while collecting projects from %s, proceeding anyway", str(e), str(self))
584+
continue
585+
nbr_pages = util.nbr_pages(data)
586+
log.debug("Number of projects: %d - Page: %d/%d", nbr_projects, page, nbr_pages)
587+
if nbr_projects > 10000:
588+
log.critical("Can't collect more than 10000 projects from %s", str(self))
589+
if page >= nbr_pages:
590+
break
591+
log.debug("%s projects list = %s", str(self), str(proj_key_list))
592+
return proj_key_list
593+
566594
def update(self, data: dict[str, str], recurse: bool) -> None:
567595
"""Updates a portfolio with sonar-config JSON data, if recurse is true, this recurses in sub portfolios"""
568596
log.debug("Updating %s with %s", str(self), util.json_dump(data))

0 commit comments

Comments
 (0)