aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'cvs2svn_lib/git_revision_recorder.py')
-rw-r--r--cvs2svn_lib/git_revision_recorder.py114
1 files changed, 0 insertions, 114 deletions
diff --git a/cvs2svn_lib/git_revision_recorder.py b/cvs2svn_lib/git_revision_recorder.py
deleted file mode 100644
index 604f8ac..0000000
--- a/cvs2svn_lib/git_revision_recorder.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# (Be in -*- python -*- mode.)
-#
-# ====================================================================
-# Copyright (c) 2007-2009 CollabNet. All rights reserved.
-#
-# This software is licensed as described in the file COPYING, which
-# you should have received as part of this distribution. The terms
-# are also available at http://subversion.tigris.org/license-1.html.
-# If newer versions of this license are posted there, you may use a
-# newer version instead, at your option.
-#
-# This software consists of voluntary contributions made by many
-# individuals. For exact contribution history, see the revision
-# history and logs, available at http://cvs2svn.tigris.org/.
-# ====================================================================
-
-"""Write file contents to a stream of git-fast-import blobs."""
-
-import itertools
-
-from cvs2svn_lib.symbol import Trunk
-from cvs2svn_lib.cvs_item import CVSRevisionDelete
-from cvs2svn_lib.cvs_item import CVSSymbol
-from cvs2svn_lib.fulltext_revision_recorder import FulltextRevisionRecorder
-from cvs2svn_lib.key_generator import KeyGenerator
-
-
-class GitRevisionRecorder(FulltextRevisionRecorder):
- """Output file revisions to git-fast-import."""
-
- def __init__(self, blob_filename):
- self.blob_filename = blob_filename
-
- def start(self):
- self.dump_file = open(self.blob_filename, 'wb')
- self._mark_generator = KeyGenerator()
-
- def start_file(self, cvs_file_items):
- self._cvs_file_items = cvs_file_items
-
- def _get_original_source(self, cvs_rev):
- """Return the original source of the contents of CVS_REV.
-
- Return the first non-delete CVSRevision with the same contents as
- CVS_REV. 'First' here refers to deltatext order; i.e., the very
- first revision is HEAD on trunk, then backwards to the root of a
- branch, then out to the tip of a branch.
-
- The candidates are all revisions along the CVS delta-dependency
- chain until the next one that has a deltatext (inclusive). Of the
- candidates, CVSRevisionDeletes are disqualified because, even
- though CVS records their contents, it is impossible to extract
- their fulltext using commands like 'cvs checkout -p'.
-
- If there is no other CVSRevision that has the same content, return
- CVS_REV itself."""
-
- # Keep track of the "best" source CVSRevision found so far:
- best_source_rev = None
-
- for cvs_rev in itertools.chain(
- [cvs_rev], self._cvs_file_items.iter_deltatext_ancestors(cvs_rev)
- ):
- if not isinstance(cvs_rev, CVSRevisionDelete):
- best_source_rev = cvs_rev
-
- if cvs_rev.deltatext_exists:
- break
-
- return best_source_rev
-
- def record_fulltext(self, cvs_rev, log, fulltext):
- """Write the fulltext to a blob if it is original and not a delete.
-
- The reason we go to this trouble is to avoid writing the same file
- contents multiple times for a string of revisions that don't have
- deltatexts (as, for example, happens with dead revisions and
- imported revisions)."""
-
- if isinstance(cvs_rev, CVSRevisionDelete):
- # There is no need to record a delete revision, and its token
- # will never be needed:
- return None
-
- source = self._get_original_source(cvs_rev)
-
- if source.id == cvs_rev.id:
- # Revision is its own source; write it out:
- mark = self._mark_generator.gen_id()
- self.dump_file.write('blob\n')
- self.dump_file.write('mark :%d\n' % (mark,))
- self.dump_file.write('data %d\n' % (len(fulltext),))
- self.dump_file.write(fulltext)
- self.dump_file.write('\n')
- return mark
- else:
- # Return as revision_recorder_token the CVSRevision.id of the
- # original source revision:
- return source.revision_recorder_token
-
- def finish_file(self, cvs_file_items):
- # Determine the original source of each CVSSymbol, and store it as
- # the symbol's revision_recorder_token.
- for cvs_item in cvs_file_items.values():
- if isinstance(cvs_item, CVSSymbol):
- cvs_source = cvs_item.get_cvs_revision_source(cvs_file_items)
- cvs_item.revision_recorder_token = cvs_source.revision_recorder_token
-
- del self._cvs_file_items
-
- def finish(self):
- self.dump_file.close()
-
-