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

[filter-repo PATCH] convert-svnexternals: fix parsing of wrongly transformed SVN revisions

From
Markus Heidelberg <markus.heidelberg@web.de>
Date
Apr 12, 2023, 13:41 UTC
Message-ID
<20230412134119.28257-1-markus.heidelberg@web.de>

SVN revision numbers from svn:externals property, which are a multiple of 1024 (2^10), are transformed by SubGit to contain a binary suffix ("k", "m" and "g" have been checked) in .gitsvnextmodules file. These aren't valid revision numbers in SVN either.

Examples:
  1024 -> 1k
  2048 -> 2k
  1048576 -> 1m
  1049600 -> 1025k
  1073741824 -> 1g
This led to the following error:
    svn_rev = int(parsed_config[section]['revision'])
ValueError: invalid literal for int() with base 10: '1k'
Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
 contrib/filter-repo-demos/convert-svnexternals | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/contrib/filter-repo-demos/convert-svnexternals b/contrib/filter-repo-demos/convert-svnexternals
index 0c81507..39ff288 100644
--- a/contrib/filter-repo-demos/convert-svnexternals
+++ b/contrib/filter-repo-demos/convert-svnexternals
@@ -254,6 +254,21 @@ def get_absolute_svn_url(svnext_url, svn_root_url):

   return True, svnext_url

+def parse_revision_value(value):
+  """
+  Parse the value of key 'revision' from a .gitsvnextmodules file and return it
+  as integer.
+
+  Used to handle non-numeric values like 1k, 2k, 3k etc. added by SubGit
+  instead of 1024, 2048, 3072 etc., likewise 1m, 2m, ..., 1g, ...
+  """
+  suffix = value[-1]
+  if suffix in "kmg":
+    mult = {"k": 1024, "m": 1024**2, "g": 1024**3}
+    return int(value[0:-1]) * mult[suffix]
+  else:
+    return int(value)
+
 def add_submodule_tree_entry(commit, parsed_config, section):
   """
   Add a submodule entry to the tree of a Git commit.
@@ -271,7 +286,7 @@ def add_submodule_tree_entry(commit, parsed_config, section):

   # Get SVN revision
   if parsed_config.has_option(section, 'revision'):
-    svn_rev = int(parsed_config[section]['revision'])
+    svn_rev = parse_revision_value(parsed_config[section]['revision'])
   else:
     # TODO: revision has to be guessed according to commit timestamp, skip for now
     return False
--
2.40.0
Next: Elijah Newren
Message 1 of 4 in “convert-svnexternals: fix parsing of wrongly transformed SVN revisions”
  1. convert-svnexternals: fix parsing of wrongly transformed SVN revisionsMarkus Heidelberg, Apr 12, 2023
  2. Elijah NewrenApr 12, 2023
  3. Junio C HamanoApr 12, 2023
  4. Markus HeidelbergApr 13, 2023

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.