Convert integer marks to string in fast-export

Jelmer Vernooij jelmer at jelmer.uk
Sat Jul 4 16:41:46 UTC 2020


Hi Björn,

Thanks for the bug report - I've committed a fix to the 3.1 branch
that should address this issue; the fix is slightly different from
yours in that it makes the format of marks dicts consistent across the
fastimport plugin.

Cheers,

Jelmer

On Tue, Jun 30, 2020 at 06:15:44PM +0700, Björn Lindström wrote:
> Hello,
> 
> when using `fast-export --export-marks` I would get an error like this
> 
> ```
> bkhl at toolbox:.../foo/custom$ brz fast-export --export-marks=../marks.bzr
> ../bzr/trunk/ > /dev/null
> 16:59:32 Calculating the revisions to include ...
> 16:59:32 Starting export of 1108 revisions ...
> 16:59:34 1000/1108 commits exported at 32153/minute
> brz: ERROR: AttributeError: 'int' object has no attribute 'lstrip'
> 
> Traceback (most recent call last):
>  […]
>  File
> "/usr/lib64/python3.8/site-packages/breezy/plugins/fastimport/exporter.py",
> line 306, in _save_marks
>    marks_file.export_marks(self.export_marks_file, revision_ids)
>  File
> "/usr/lib64/python3.8/site-packages/breezy/plugins/fastimport/marks_file.py",
> line 83, in export_marks
>    f.write(':%s %s\n' % (mark.lstrip(b':').decode('utf-8'),
> AttributeError: 'int' object has no attribute 'lstrip'
> 
> brz 3.0.2 on python 3.8.2rc2 (Linux-5.6.19-300.fc32.x86_64-x86_64-with-
>    glibc2.2.5)
> arguments: ['/usr/bin/brz', 'fast-export', '--export-marks=../marks.bzr',
> ```
> 
> This patch converts incoming `bytes` or `int` objects to strings
> appropriately, as far as I can tell:
> 
> 
> === modified file 'breezy/plugins/fastimport/marks_file.py'
> --- old/breezy/plugins/fastimport/marks_file.py	2020-06-01 23:15:18 +0000
> +++ new/breezy/plugins/fastimport/marks_file.py	2020-06-30 10:28:48 +0000
> @@ -76,7 +76,11 @@
>     try:
>         # Write the revision info
>         for mark in revision_ids:
> -            f.write(':%s %s\n' % (mark.lstrip(b':').decode('utf-8'),
> +            if isinstance(mark, int):
> +                mark_name = str(mark)
> +            elif isinstance(mark, bytes):
> +                mark_name = mark.lstrip(b':').decode('utf-8')
> +            f.write(':%s %s\n' % (mark_name,
>                                   revision_ids[mark].decode('utf-8')))
>     finally:
>         f.close()
> 
> 
> Not sure if this is necessary though. Can we maybe just assume the marks are
> always going to be `int`s?
> 
> I first made a GitHub "PR" for this over here
> https://github.com/breezy-team/breezy/pull/117, before being told on the IRC
> chat that it would be more appropriate to send a patch tot he mailing list.
> 
> Best wishes,
> Björn
> 
> 
> 

-- 
Jelmer Vernooij <jelmer at jelmer.uk>
PGP Key: https://www.jelmer.uk/D729A457.asc



More information about the bazaar mailing list