Skip to content

Commit c8e4aa0

Browse files
committed
Refactor quote parsing, to prepare for more checks
This refactors ConfigParser double-quote parsing near the single line double-quoted value parsing code, so that: - Code that parses the name is less intermixed with code that parses the value. - Conditional logic is less duplicated. - The `END` comment notation appears next to the code it describes. - The final `else` can be turned into one or more `elif` followed by `else` to cover different cases of `"..."` differently. (But those are not added here. This commit is purely a refactoring.) (The `pass` suite when `len(optval) < 2 or optval[0] != '"'` is awkward and not really justified right now, but it looks like it may be able to help with readabilty and help keep nesting down when new `elif` cases are added.)
1 parent 646dc16 commit c8e4aa0

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

git/config.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -496,18 +496,23 @@ def string_decode(v: str) -> str:
496496
if mo:
497497
# We might just have handled the last line, which could contain a quotation we want to remove.
498498
optname, vi, optval = mo.group("option", "vi", "value")
499+
optname = self.optionxform(optname.rstrip())
500+
499501
if vi in ("=", ":") and ";" in optval and not optval.strip().startswith('"'):
500502
pos = optval.find(";")
501503
if pos != -1 and optval[pos - 1].isspace():
502504
optval = optval[:pos]
503505
optval = optval.strip()
504-
optname = self.optionxform(optname.rstrip())
505-
if len(optval) > 1 and optval[0] == '"' and optval[-1] != '"':
506+
507+
if len(optval) < 2 or optval[0] != '"':
508+
pass # Nothing to treat as opening quotation.
509+
elif optval[-1] != '"':
506510
is_multi_line = True
507511
optval = string_decode(optval[1:])
508-
elif len(optval) > 1 and optval[0] == '"' and optval[-1] == '"':
509-
optval = optval[1:-1]
510512
# END handle multi-line
513+
else:
514+
optval = optval[1:-1]
515+
511516
# Preserves multiple values for duplicate optnames.
512517
cursect.add(optname, optval)
513518
else:

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy