@matheusbsbs / matheus-bagliano / commits / ce425eb4e1
Fork 0

git-p4: simplify regex pattern generation for parsing diff-tree

It is not clear why a generator was used to create the regex used to parse git-diff-tree output; I assume an early implementation required it, but is not part of the mainline change. Simply use a lazily initialized global instead. Signed-off-by: Yang Zhao <yang.zhao@skyboxlabs.com> Reviewed-by: Ben Keene <seraphire@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Yang Zhao committed Dec 13, 2019 at 15:52 UTC ce425eb4e16e5038ffc322cbafc80d641b0ad5eb
1 file changed +6 -7
git-p4.py
+6 -7
@@ -544,12 +544,7 @@ def getGitTags():
544 gitTags.add(tag)
545 return gitTags
546
547 -def diffTreePattern():
548 - # This is a simple generator for the diff tree regex pattern. This could be
549 - # a class variable if this and parseDiffTreeEntry were a part of a class.
550 - pattern = re.compile(':(\d+) (\d+) (\w+) (\w+) ([A-Z])(\d+)?\t(.*?)((\t(.*))|$)')
551 - while True:
552 - yield pattern
547 +_diff_tree_pattern = None
548
549 def parseDiffTreeEntry(entry):
550 """Parses a single diff tree entry into its component elements.
@@ -570,7 +565,11 @@ def parseDiffTreeEntry(entry):
565
566 If the pattern is not matched, None is returned."""
567
573 - match = diffTreePattern().next().match(entry)
568 + global _diff_tree_pattern
569 + if not _diff_tree_pattern:
570 + _diff_tree_pattern = re.compile(':(\d+) (\d+) (\w+) (\w+) ([A-Z])(\d+)?\t(.*?)((\t(.*))|$)')
571 +
572 + match = _diff_tree_pattern.match(entry)
573 if match:
574 return {
575 'src_mode': match.group(1),