Skip to content

Commit

Permalink
convert-svnexternals: fix parsing of wrongly transformed SVN revisions
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Elijah Newren <[email protected]>
  • Loading branch information
marcows authored and newren committed Apr 12, 2023
1 parent c8767ea commit 4bc9022
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion contrib/filter-repo-demos/convert-svnexternals
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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
Expand Down

0 comments on commit 4bc9022

Please sign in to comment.