From cd65c3b0fe3525fd9a6201c4246cab7d76813ee6 Mon Sep 17 00:00:00 2001 From: mhagger Date: Sun, 14 Oct 2012 06:24:12 +0000 Subject: [PATCH] generate_blobs.py: Be careful if deleting revision 1.1. It is possible that *no* revisions will be needed from an RCS file. For example, if there was never a commit on the main branch (so revision 1.1 is dead), and all branches revisions are excluded from the conversion, then no revisions will be needed from the file. This situation led to a problem in WriteBlobSink.tree_completed(), namely that when deleting revision 1.1, it tried to adjust the is_needed() status of its "base" revision. Since revision 1.1 doesn't have a base revision, the lookup failed with a KeyError. So, if the base revision of the revision being deleted is None, then skip further processing. Problem reported by: Sam Hanes (in a wonderfully thorough bug report). git-svn-id: http://cvs2svn.tigris.org/svn/cvs2svn/trunk@5405 be7e6eca-30d4-0310-a8e5-ac0d63af7087 --- CHANGES | 1 + cvs2svn_lib/generate_blobs.py | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index fd0a886b..a29a9103 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ Version ?.?.? (not yet released) Bugs fixed: * Handle non-ASCII, non-UTF8 filenames in .cvsignore files. + * ExternalBlobGenerator: Don't fail if no revisions are needed for a file. Version 2.4.0 (22 September 2012) diff --git a/cvs2svn_lib/generate_blobs.py b/cvs2svn_lib/generate_blobs.py index bbdd7c1f..38e89055 100755 --- a/cvs2svn_lib/generate_blobs.py +++ b/cvs2svn_lib/generate_blobs.py @@ -185,10 +185,11 @@ class WriteBlobSink(Sink): while revrecs_to_remove: revrec = revrecs_to_remove.pop() del self.revrecs[revrec.rev] - base_revrec = self[revrec.base] - base_revrec.refs.remove(revrec.rev) - if not base_revrec.is_needed(): - revrecs_to_remove.append(base_revrec) + if revrec.base is not None: + base_revrec = self[revrec.base] + base_revrec.refs.remove(revrec.rev) + if not base_revrec.is_needed(): + revrecs_to_remove.append(base_revrec) def set_revision_info(self, rev, log, text): revrec = self.revrecs.get(rev) -- 2.11.4.GIT