| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -310,7 +310,7 @@ class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): | |||
| 310 | 310 | re_comment = re.compile(r"^\s*[#;]") | |
| 311 | 311 | # } END configuration | |
| 312 | 312 | ||
| 313 | - optvalueonly_source = r"\s*(?P<option>[^:=\s][^:=]*)" | ||
| 313 | + optvalueonly_source = r"\s*(?P<option>[^:=\s#;][^:=#;]*)" | ||
| 314 | 314 | ||
| 315 | 315 | OPTVALUEONLY = re.compile(optvalueonly_source) | |
| 316 | 316 | ||
@@ -594,7 +594,7 @@ def parse_value(value: str) -> str: | |||
| 594 | 594 | cursect.add(optname, optval) | |
| 595 | 595 | else: | |
| 596 | 596 | # A valueless option is an implicit boolean true, not an empty value. | |
| 597 | - mo = self.OPTVALUEONLY.match(line) | ||
| 597 | + mo = self.OPTVALUEONLY.fullmatch(line) | ||
| 598 | 598 | if mo: | |
| 599 | 599 | optname = self.optionxform(mo.group("option").rstrip()) | |
| 600 | 600 | cursect.add(optname, None) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -917,6 +917,39 @@ def test_implicit_boolean_round_trip(self, rw_dir): | |||
| 917 | 917 | self.assertIs(config.getboolean("flag", "empty"), False) | |
| 918 | 918 | self.assertEqual(dict(config.items_all("flag"))["multiple"], ["false", None, "", None]) | |
| 919 | 919 | ||
| 920 | + @with_rw_directory | ||
| 921 | + def test_implicit_boolean_rejects_comments_like_git(self, rw_dir): | ||
| 922 | + config_path = osp.join(rw_dir, "config") | ||
| 923 | + comments = ( | ||
| 924 | + " # comment", | ||
| 925 | + " ; comment", | ||
| 926 | + "# comment = value", | ||
| 927 | + "; comment = value", | ||
| 928 | + "\t# comment: value", | ||
| 929 | + "\t; comment: value", | ||
| 930 | + ) | ||
| 931 | + for comment in comments: | ||
| 932 | + with self.subTest(comment=comment): | ||
| 933 | + content = ("[flag]\n\tenabled%s\n" % comment).encode(defenc) | ||
| 934 | + with open(config_path, "wb") as config_file: | ||
| 935 | + config_file.write(content) | ||
| 936 | + | ||
| 937 | + result = subprocess.run( | ||
| 938 | + ["git", "config", "--file", config_path, "--bool", "flag.enabled"], | ||
| 939 | + stdout=subprocess.PIPE, | ||
| 940 | + stderr=subprocess.PIPE, | ||
| 941 | + ) | ||
| 942 | + self.assertEqual(result.returncode, 128, result.stderr) | ||
| 943 | + with GitConfigParser(config_path) as config: | ||
| 944 | + with self.assertRaises(cp.ParsingError): | ||
| 945 | + config.getboolean("flag", "enabled") | ||
| 946 | + with GitConfigParser(config_path, read_only=False) as config: | ||
| 947 | + with self.assertRaises(cp.ParsingError): | ||
| 948 | + config.set_value("other", "value", "updated") | ||
| 949 | + | ||
| 950 | + with open(config_path, "rb") as config_file: | ||
| 951 | + self.assertEqual(config_file.read(), content) | ||
| 952 | + | ||
| 920 | 953 | def test_config_with_quotes(self): | |
| 921 | 954 | cr = GitConfigParser(fixture_path("git_config_with_quotes"), read_only=True) | |
| 922 | 955 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments