diff --git a/netkan/netkan/auto_freezer.py b/netkan/netkan/auto_freezer.py index fcdebec9..767a4283 100644 --- a/netkan/netkan/auto_freezer.py +++ b/netkan/netkan/auto_freezer.py @@ -34,6 +34,19 @@ def freeze_idle_mods(self, days_limit): self._submit_pr(self.BRANCH_NAME, days_limit) self.netkan_repo.heads.master.checkout() + def mark_frozen_mods(self): + with ModStatus.batch_write() as batch: + logging.info('Marking frozen mods...') + for mod in ModStatus.scan(rate_limit=5): + if not mod.frozen and self._is_frozen(mod.ModIdentifier): + logging.info('Marking frozen: %s', mod.ModIdentifier) + mod.frozen = True + batch.save(mod) + logging.info('Done!') + + def _is_frozen(self, ident): + return not Path(self.netkan_repo.working_dir, 'NetKAN', f'{ident}.netkan').exists() + def _checkout_branch(self, name): try: self.netkan_repo.remotes.origin.fetch(name) diff --git a/netkan/netkan/cli.py b/netkan/netkan/cli.py index 5024f06b..9094c28e 100644 --- a/netkan/netkan/cli.py +++ b/netkan/netkan/cli.py @@ -292,10 +292,12 @@ def ticket_closer(token, days_limit): ) def auto_freezer(netkan_remote, token, repo, user, days_limit, key): init_ssh(key, '/home/netkan/.ssh') - AutoFreezer( + af = AutoFreezer( init_repo(netkan_remote, '/tmp/NetKAN'), GitHubPR(token, repo, user) - ).freeze_idle_mods(days_limit) + ) + af.freeze_idle_mods(days_limit) + af.mark_frozen_mods() netkan.add_command(indexer) diff --git a/netkan/netkan/indexer.py b/netkan/netkan/indexer.py index d014f8cb..0f64466c 100644 --- a/netkan/netkan/indexer.py +++ b/netkan/netkan/indexer.py @@ -125,6 +125,8 @@ def status_attrs(self, new=False): # If we have perfomed an inflation, we certainly # have checked the mod! 'last_checked': inflation_time, + # If we're inflating it, it's not frozen + 'frozen': False, } resources = getattr(self.ckan, 'resources', None) if resources: diff --git a/netkan/netkan/status.py b/netkan/netkan/status.py index 34b6e707..c92dad0d 100644 --- a/netkan/netkan/status.py +++ b/netkan/netkan/status.py @@ -35,6 +35,7 @@ class Meta: last_indexed = UTCDateTimeAttribute(null=True) last_inflated = UTCDateTimeAttribute(null=True) success = BooleanAttribute() + frozen = BooleanAttribute(default=False) resources = MapAttribute(default={}) def mod_attrs(self):