def rollback(mirror, since_ms): """ :param mirror: Mirror to perform rollback on :param start_time: Time mirror was started; all changes after will be undone :return: """ repository_ref = registry_model.lookup_repository( mirror.repository.namespace_user.username, mirror.repository.name) tags, has_more = registry_model.list_repository_tag_history( repository_ref, 1, 100, since_time_ms=since_ms) for tag in tags: logger.debug("Repo mirroring rollback tag '%s'" % tag) # If the tag has an end time, it was either deleted or moved. if tag.lifetime_end_ms: # If a future entry exists with a start time equal to the end time for this tag, # then the action was a move, rather than a delete and a create. newer_tag = filter( lambda t: tag != t and tag.name == t.name and tag. lifetime_end_ms and t.lifetime_start_ms == tag.lifetime_end_ms, tags, )[0] if newer_tag: logger.debug("Repo mirroring rollback revert tag '%s'" % tag) retarget_tag(tag.name, tag.manifest._db_id, is_reversion=True) else: logger.debug("Repo mirroring recreate tag '%s'" % tag) retarget_tag(tag.name, tag.manifest._db_id, is_reversion=True) # If the tag has a start time, it was created. elif tag.lifetime_start_ms: logger.debug("Repo mirroring rollback delete tag '%s'" % tag) delete_tag(mirror.repository, tag.name)
def delete_obsolete_tags(mirror, tags): existing_tags = lookup_alive_tags_shallow(mirror.repository.id) obsolete_tags = list([tag for tag in existing_tags if tag.name not in tags]) for tag in obsolete_tags: delete_tag(mirror.repository, tag.name) return obsolete_tags
def delete_obsolete_tags(mirror, tags): existing_tags = lookup_alive_tags_shallow(mirror.repository.id) obsolete_tags = list(filter(lambda tag: tag.name not in tags, existing_tags)) for tag in obsolete_tags: delete_tag(mirror.repository, tag.name) return obsolete_tags
def delete_obsolete_tags(mirror, tags): existing_tags = lookup_alive_tags_shallow(mirror.repository.id) obsolete_tags = list( [tag for tag in existing_tags if tag.name not in tags]) for tag in obsolete_tags: logger.debug("Repo mirroring delete obsolete tag '%s'" % tag.name) delete_tag(mirror.repository, tag.name) return obsolete_tags
def rollback(mirror, since_ms): """ :param mirror: Mirror to perform rollback on :param start_time: Time mirror was started; all changes after will be undone :return: """ repository_ref = registry_model.lookup_repository( mirror.repository.namespace_user.username, mirror.repository.name) tags = [] index = 1 has_more = True while has_more: tags_page, has_more = registry_model.list_repository_tag_history( repository_ref, index, TAG_ROLLBACK_PAGE_SIZE, since_time_ms=since_ms) tags.extend(tags_page) index = index + 1 for tag in tags: logger.debug("Repo mirroring rollback tag '%s'" % tag) # If the tag has an end time, it was either deleted or moved. if tag.lifetime_end_ms: # If a future entry exists with a start time equal to the end time for this tag, # then the action was a move, rather than a delete and a create. tag_list = list( filter( lambda t: tag != t and tag.name == t.name and tag. lifetime_end_ms and t.lifetime_start_ms == tag. lifetime_end_ms, tags, )) if len(tag_list) > 0: logger.debug("Repo mirroring rollback revert tag '%s'" % tag) retarget_tag(tag.name, tag.manifest._db_id, is_reversion=True) else: logger.debug("Repo mirroring recreate tag '%s'" % tag) retarget_tag(tag.name, tag.manifest._db_id, is_reversion=True) # If the tag has a start time, it was created. elif tag.lifetime_start_ms: logger.debug("Repo mirroring rollback delete tag '%s'" % tag) delete_tag(mirror.repository, tag.name)
def test_delete_tag(initialized_db): found = False for tag in list(filter_to_visible_tags(filter_to_alive_tags(Tag.select()))): repo = tag.repository assert get_tag(repo, tag.name) == tag assert tag.lifetime_end_ms is None with assert_query_count(3): assert delete_tag(repo, tag.name) == tag assert get_tag(repo, tag.name) is None found = True assert found