diff options
-rw-r--r-- | gd_diff.py | 30 | ||||
-rw-r--r-- | tests/test_gd_diff.py | 44 |
2 files changed, 74 insertions, 0 deletions
@@ -7,6 +7,7 @@ # <https://creativecommons.org/publicdomain/zero/1.0> import os +import re import shlex import sys @@ -143,3 +144,32 @@ def read_gns_readme(release, pkg, local_dir): readme_content = read_file(readme_path) return readme_content + + +def slurp_fields_from_readme(content): + """Returns dict containing fields slurped from `content` + + - If a field is not defined or if its value is empty in the + `content`, then its corresponding value in the dict will be None. + + """ + # list of recognized fields. + field_list = [ + 'Change-Type', + 'Changed-From-Debian', + ] + + field_values = {} + for field in field_list: + pattern = r'{}:[ ]*(.+)'.format(field) + field_pattern = re.compile(pattern) + field_match = field_pattern.search(content) + + if (field_match and + field_match.group(1) and + field_match.group(1).strip()): + field_values[field] = field_match.group(1).strip() + else: + field_values[field] = None + + return field_values diff --git a/tests/test_gd_diff.py b/tests/test_gd_diff.py index d377439..145461f 100644 --- a/tests/test_gd_diff.py +++ b/tests/test_gd_diff.py @@ -154,6 +154,50 @@ class TestGdDiff(object): assert_equal(antlr_readme_content, expected_antlr_readme_content) + def test_slurp_fields_from_readme(self): + readme_content = '' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], None) + assert_equal(field_values['Changed-From-Debian'], None) + + readme_content = 'Changed-From-Debian: \n' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], None) + assert_equal(field_values['Changed-From-Debian'], None) + + readme_content = 'Change-Type: Deblob\n' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], 'Deblob') + assert_equal(field_values['Changed-From-Debian'], None) + + readme_content = 'Changed-From-Debian: \nChange-Type: \n' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], None) + assert_equal(field_values['Changed-From-Debian'], None) + + readme_content = 'Changed-From-Debian: Branding. \nChange-Type: \n' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], None) + assert_equal(field_values['Changed-From-Debian'], 'Branding.') + + readme_content = 'Changed-From-Debian: \nChange-Type: Modified' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], 'Modified') + assert_equal(field_values['Changed-From-Debian'], None) + + readme_content = 'Changed-From-Debian:Fixed ambiguous use of the word free.\n\n\nChange-Type:Deblob\n' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], 'Deblob') + assert_equal(field_values['Changed-From-Debian'], + 'Fixed ambiguous use of the word free.') + + readme_content = 'Changed-From-Debian: Removed example with non-free files.\nChange-Type: Modified\n\nFor gNewSense, the non-free unicode.IDENTs files are *actually* removed (see\nalso README.source). See gNewSense bug #34218 for details.\n' + field_values = slurp_fields_from_readme(readme_content) + assert_equal(field_values['Change-Type'], 'Modified') + assert_equal(field_values['Changed-From-Debian'], + 'Removed example with non-free files.') + + def teardown(self): """Teardown method for this class.""" if(path.exists(self.gns_pkgs_dir)): |