diff --git a/runbot/models/build.py b/runbot/models/build.py index 32f6d7ce4..87c681a14 100644 --- a/runbot/models/build.py +++ b/runbot/models/build.py @@ -504,7 +504,7 @@ def _filter_to_clean(self, dest_list, label): if build.local_state == 'done': full = build.gc_date + datetime.timedelta(days=(full_gc_days)) < fields.datetime.now() for db in dest_by_builds_ids[build.id]: - yield (db, full) + yield (db, full, build) elif build.local_state != 'running': _logger.warning('db (%s) not deleted because state is not done', " ".join(dest_by_builds_ids[build.id])) @@ -522,7 +522,7 @@ def filter_ids(dest_list, label): for dest in dest_list: build = self._build_from_dest(dest) if build and build in self: - yield (dest, full) + yield (dest, full, build) elif not build: _logger.info('%s (%s) skipped because not dest format', label, dest) _filter = filter_ids @@ -531,9 +531,16 @@ def filter_ids(dest_list, label): existing_db = list_local_dbs(additionnal_conditions=additionnal_conditions) - for db, _ in _filter(dest_list=existing_db, label='db'): + dropped_db_builds_ids = [] + for db, _, build in _filter(dest_list=existing_db, label='db'): self._logger('Removing database') self._local_pg_dropdb(db) + dropped_db_builds_ids.append(build.id) + + gced_builds = self.browse(dropped_db_builds_ids) + gced_builds.database_ids = False + for gced_build in gced_builds: + gced_build._log('build', 'Build was garbage collected') builds_dir = Path(self.env['runbot.runbot']._root()) / 'build' @@ -542,7 +549,7 @@ def filter_ids(dest_list, label): else: dests = _filter(dest_list=builds_dir.iterdir(), label='workspace') - for dest, full in dests: + for dest, full, _ in dests: build_dir = Path(builds_dir) / dest if full: _logger.info('Removing build dir "%s"', dest)