[PATCH] Gtihub #660 - Fixing .repo file with no repos handling

yumparser module will not add a {None: None} dict to the repositories listing when reading a .repo file which has no repositories declarations. Signed-off-by: Daniel Henrique Barboza <dhbarboza82@gmail.com> --- src/kimchi/yumparser.py | 5 +++-- tests/test_yumparser.py | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/kimchi/yumparser.py b/src/kimchi/yumparser.py index ce6ba9d..ac4ee02 100644 --- a/src/kimchi/yumparser.py +++ b/src/kimchi/yumparser.py @@ -109,8 +109,9 @@ def _get_repos_from_file(repo_file): value = value.strip() current_repo.set_attribute(key, value) - # add the last repo from file - repos_from_file[current_repo_id] = current_repo + # add the last repo from file. + if current_repo is not None: + repos_from_file[current_repo_id] = current_repo return repos_from_file diff --git a/tests/test_yumparser.py b/tests/test_yumparser.py index 8645a65..d17e647 100644 --- a/tests/test_yumparser.py +++ b/tests/test_yumparser.py @@ -22,6 +22,7 @@ import tempfile import unittest from kimchi.model import model +from kimchi.rollbackcontext import RollbackContext from kimchi.yumparser import delete_repo_from_file, get_repo_files from kimchi.yumparser import get_yum_repositories, write_repo_to_file from kimchi.yumparser import YumRepoObject @@ -45,6 +46,21 @@ def _create_fake_repos(repo_file_name): return repos +def _create_empty_repo_file(): + data = """ +# +# This is a repository file with no repositories at all +# No repositories must be added after reading this file. +# + """ + _, tmp_file_name = tempfile.mkstemp(suffix='.repo', + dir='/etc/yum.repos.d') + with open(tmp_file_name, 'w') as f: + f.writelines(data) + + return tmp_file_name + + def _create_fake_repos_file(): _, tmp_file_name = tempfile.mkstemp(suffix='.repo', dir='/etc/yum.repos.d') @@ -79,6 +95,14 @@ class YumParserTests(unittest.TestCase): repo_objects = get_yum_repositories() self.assertGreaterEqual(len(repo_objects), len(repo_files)) + def test_empty_repo_file(self): + with RollbackContext() as rollback: + repos = get_yum_repositories() + tmp_file_name = _create_empty_repo_file() + rollback.prependDefer(os.remove, tmp_file_name) + repos_after = get_yum_repositories() + self.assertEqual(len(repos_after), len(repos)) + def test_update_repo_attributes(self): repos = get_yum_repositories() fake_repo_2 = repos['fake-repo-2'] -- 2.1.0

Reviewed-By: Ramon Medeiros <ramonn@br.ibm.com> Tested-By: Ramon Medeiros <ramonn@br.ibm.com> On 06/12/2015 09:06 AM, Daniel Henrique Barboza wrote:
yumparser module will not add a {None: None} dict to the repositories listing when reading a .repo file which has no repositories declarations.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82@gmail.com> --- src/kimchi/yumparser.py | 5 +++-- tests/test_yumparser.py | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/yumparser.py b/src/kimchi/yumparser.py index ce6ba9d..ac4ee02 100644 --- a/src/kimchi/yumparser.py +++ b/src/kimchi/yumparser.py @@ -109,8 +109,9 @@ def _get_repos_from_file(repo_file): value = value.strip() current_repo.set_attribute(key, value)
- # add the last repo from file - repos_from_file[current_repo_id] = current_repo + # add the last repo from file. + if current_repo is not None: + repos_from_file[current_repo_id] = current_repo
return repos_from_file
diff --git a/tests/test_yumparser.py b/tests/test_yumparser.py index 8645a65..d17e647 100644 --- a/tests/test_yumparser.py +++ b/tests/test_yumparser.py @@ -22,6 +22,7 @@ import tempfile import unittest
from kimchi.model import model +from kimchi.rollbackcontext import RollbackContext from kimchi.yumparser import delete_repo_from_file, get_repo_files from kimchi.yumparser import get_yum_repositories, write_repo_to_file from kimchi.yumparser import YumRepoObject @@ -45,6 +46,21 @@ def _create_fake_repos(repo_file_name): return repos
+def _create_empty_repo_file(): + data = """ +# +# This is a repository file with no repositories at all +# No repositories must be added after reading this file. +# + """ + _, tmp_file_name = tempfile.mkstemp(suffix='.repo', + dir='/etc/yum.repos.d') + with open(tmp_file_name, 'w') as f: + f.writelines(data) + + return tmp_file_name + + def _create_fake_repos_file(): _, tmp_file_name = tempfile.mkstemp(suffix='.repo', dir='/etc/yum.repos.d') @@ -79,6 +95,14 @@ class YumParserTests(unittest.TestCase): repo_objects = get_yum_repositories() self.assertGreaterEqual(len(repo_objects), len(repo_files))
+ def test_empty_repo_file(self): + with RollbackContext() as rollback: + repos = get_yum_repositories() + tmp_file_name = _create_empty_repo_file() + rollback.prependDefer(os.remove, tmp_file_name) + repos_after = get_yum_repositories() + self.assertEqual(len(repos_after), len(repos)) + def test_update_repo_attributes(self): repos = get_yum_repositories() fake_repo_2 = repos['fake-repo-2']
-- Ramon Nunes Medeiros Kimchi Developer Linux Technology Center Brazil IBM Systems & Technology Group Phone : +55 19 2132 7878 ramonn@br.ibm.com
participants (3)
-
Aline Manera
-
Daniel Henrique Barboza
-
Ramon Medeiros