raise BackendDBError("Error loading yaml: %s" % err)
db_repos = self.get_repos()
- db_list = db_repos.keys() # save set of repos before loading new repos
- names = set([])
+ db_obsrepomap = self.get_obs_repo_map()
+
+ # save set of repos and mappings before loading new repos
+ db_list = db_repos.keys()
+ db_map_list = db_obsrepomap.keys()
+
+ names = set()
+ mapkeys = set()
for repo in repos:
name = repo.pop('Name')
names.add(name)
db_repos[name] = repo
- # Cleanup entries, which are present in db_list,
- # but don't present in names
+ mapkey = repo['Project']
+ mapkeys.add(mapkey)
+ db_obsrepomap[mapkey] = name
+
+ # Cleanup old entries from repos
for name in db_list.difference(names):
db_repos.delete(name)
+ # and from obsrepomaps
+ for mapping in db_map_list.difference(mapkeys):
+ db_obsrepomap.delete(mapping)
+
def get_release_ids(self):
"""Return release id entity object."""
bdb = BackendDB()
bdb.read_repos(REPOS)
repos = bdb.get_repos()
+ maps = bdb.get_obs_repo_map()
self.assertEqual(repos.keys(), set(['Repo1', 'Repo2', 'Repo3']))
+ self.assertEqual(maps.keys(), set(['Project:Repo1', 'Project:Repo2',
+ 'Tizen:non-oss']))
+ self.assertEqual(maps['Project:Repo1'], 'Repo1')
+ self.assertEqual(maps['Project:Repo2'], 'Repo2')
+ self.assertEqual(maps['Tizen:non-oss'], 'Repo3')
+
+ def test_repos_cleanup(self):
+ """Set some repos and see if they'll be cleaned up by read_repos."""
+ bdb = BackendDB()
+ # Clean all repos and maps
+ repos = bdb.get_repos()
+ for repo in repos:
+ repos.delete(repo)
+ maps = bdb.get_obs_repo_map()
+ for mapping in maps:
+ maps.delete(mapping)
+ # check if they're cleaned
+ self.assertEqual(repos.keys(), set([]))
+ self.assertEqual(maps.keys(), set([]))
+ # set some junk repos and maps
+ repos['tobedeletedrepo'] = {'Architectures': []}
+ maps['tobedeletedobs'] = 'tobedeleletdrepo'
+ # read repos
+ bdb.read_repos(REPOS)
+ # check if junk repos and maps have been cleaned up
+ self.assertFalse('tobedeletedrepo' in repos)
+ self.assertFalse('tobedeletedobs' in maps)
def test_reading_repos_from_fileobj(self):
"""Read repos from file object."""