From: Ed Bartosh Date: Fri, 28 Jun 2013 12:17:25 +0000 (+0300) Subject: Fill obsrepomaps when reading repos.yaml X-Git-Tag: 0.14~109 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=88040921ec92d3767211f3e89e8a603d681db8e7;p=services%2Fjenkins-scripts.git Fill obsrepomaps when reading repos.yaml obsrepomaps is a mapping between OBS project name and repo name from repos.yaml. This change implements filling mappings while parsing repo.yaml in BackendDb::read_repos() Fixes: #1031 Change-Id: I01efb4b1717e5971a83a1984dc2e3245244977d5 Signed-off-by: Ed Bartosh --- diff --git a/common/backenddb.py b/common/backenddb.py index 090e6d0..3c7c4af 100644 --- a/common/backenddb.py +++ b/common/backenddb.py @@ -150,17 +150,30 @@ class BackendDB(): 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.""" diff --git a/tests/test_backenddb.py b/tests/test_backenddb.py index 4e02f82..a7e77e4 100644 --- a/tests/test_backenddb.py +++ b/tests/test_backenddb.py @@ -155,7 +155,35 @@ class BackendDBTest(unittest.TestCase): 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."""