git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 6/6] git-p4: Resolve RCS keywords in binary

From
Joel Holdsworth <jholdsworth@nvidia.com>
Date
Dec 9, 2021, 20:10 UTC
Message-ID
<20211209201029.136886-7-jholdsworth@nvidia.com>
In-Reply-To
<20211209201029.136886-1-jholdsworth@nvidia.com>
Signed-off-by: Joel Holdsworth <jholdsworth@nvidia.com>
---
 git-p4.py | 31 ++++++++++---------------------
 1 file changed, 10 insertions(+), 21 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index c362a5fa38..87e6685eb6 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -46,6 +46,9 @@
 
 p4_access_checked = False
 
+re_ko_keywords = re.compile(rb'\$(Id|Header)(:[^$\n]+)?\$')
+re_k_keywords = re.compile(rb'\$(Id|Header|Author|Date|DateTime|Change|File|Revision)(:[^$\n]+)?\$')
+
 def p4_build_cmd(cmd):
     """Build a suitable p4 command line.
 
@@ -532,20 +535,12 @@ def p4_type(f):
 #
 def p4_keywords_regexp_for_type(base, type_mods):
     if base in ("text", "unicode", "binary"):
-        kwords = None
         if "ko" in type_mods:
-            kwords = 'Id|Header'
+            return re_ko_keywords
         elif "k" in type_mods:
-            kwords = 'Id|Header|Author|Date|DateTime|Change|File|Revision'
+            return re_k_keywords
         else:
             return None
-        pattern = r"""
-            \$              # Starts with a dollar, followed by...
-            (%s)            # one of the keywords, followed by...
-            (:[^$\n]+)?     # possibly an old expansion, followed by...
-            \$              # another dollar
-            """ % kwords
-        return pattern
     else:
         return None
 
@@ -2035,11 +2030,10 @@ def applyCommit(self, id):
                 kwfiles = {}
                 for file in editedFiles | filesToDelete:
                     # did this file's delta contain RCS keywords?
-                    pattern = p4_keywords_regexp_for_file(file)
+                    regexp = p4_keywords_regexp_for_file(file)
 
-                    if pattern:
+                    if regexp:
                         # this file is a possibility...look for RCS keywords.
-                        regexp = re.compile(pattern, re.VERBOSE)
                         for line in read_pipe_lines(["git", "diff", "%s^..%s" % (id, id), file]):
                             if regexp.search(line):
                                 if verbose:
@@ -2968,14 +2962,9 @@ def streamOneP4File(self, file, contents):
             print("\nIgnoring apple filetype file %s" % file['depotFile'])
             return
 
-        # Note that we do not try to de-mangle keywords on utf16 files,
-        # even though in theory somebody may want that.
-        pattern = p4_keywords_regexp_for_type(type_base, type_mods)
-        if pattern:
-            regexp = re.compile(pattern, re.VERBOSE)
-            text = ''.join(c.decode() for c in contents)
-            text = regexp.sub(r'$\1$', text)
-            contents = [text.encode()]
+        regexp = p4_keywords_regexp_for_type(type_base, type_mods)
+        if regexp:
+            contents = [regexp.sub(rb'$\1$', c) for c in contents]
 
         if self.largeFileSystem:
             (git_mode, contents) = self.largeFileSystem.processContent(git_mode, relPath, contents)
-- 
2.33.0
Previous: Joel HoldsworthNext: Luke Diamand
Message 16 of 31 in “Transition git-p4.py to support Python 3 only”
  1. 0/6 Transition git-p4.py to support Python 3 onlyJoel Holdsworth, Dec 9, 2021
  2. 1/6 git-p4: Always pass cmd arguments to subprocess as a python listsJoel Holdsworth, Dec 9, 2021
  3. Junio C HamanoDec 9, 2021
  4. 2/6 git-p4: Don't print shell commands as python listsJoel Holdsworth, Dec 9, 2021
  5. 3/6 git-p4: Removed support for Python 2Joel Holdsworth, Dec 9, 2021
  6. Junio C HamanoDec 9, 2021
  7. rsbecker@nexbridge.comDec 9, 2021
  8. David AguilarDec 10, 2021
  9. Joel HoldsworthDec 10, 2021
  10. 4/6 git-p4: Decode byte strings before printingJoel Holdsworth, Dec 9, 2021
  11. Junio C HamanoDec 9, 2021
  12. Fabian StelzerDec 10, 2021
  13. Joel HoldsworthDec 10, 2021
  14. Joel HoldsworthDec 10, 2021
  15. 5/6 git-p4: Eliminate decode_stream and encode_streamJoel Holdsworth, Dec 9, 2021
  16. 6/6 git-p4: Resolve RCS keywords in binaryJoel Holdsworth, Dec 9, 2021
  17. Luke DiamandDec 10, 2021
  18. Joel HoldsworthDec 10, 2021
  19. Ævar Arnfjörð BjarmasonDec 10, 2021
  20. Joel HoldsworthDec 10, 2021
  21. Ævar Arnfjörð BjarmasonDec 10, 2021
  22. Junio C HamanoDec 10, 2021
  23. rsbecker@nexbridge.comDec 10, 2021
  24. Elijah NewrenDec 11, 2021
  25. Luke DiamandDec 12, 2021
  26. Luke DiamandDec 10, 2021
  27. Joel HoldsworthDec 10, 2021
  28. Luke DiamandDec 11, 2021
  29. Joel HoldsworthDec 13, 2021
  30. Junio C HamanoDec 13, 2021
  31. Joel HoldsworthDec 13, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.