aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'cvs2svn_lib/svn_commit_creator.py')
-rw-r--r--cvs2svn_lib/svn_commit_creator.py217
1 files changed, 0 insertions, 217 deletions
diff --git a/cvs2svn_lib/svn_commit_creator.py b/cvs2svn_lib/svn_commit_creator.py
deleted file mode 100644
index c87db38..0000000
--- a/cvs2svn_lib/svn_commit_creator.py
+++ /dev/null
@@ -1,217 +0,0 @@
-# (Be in -*- python -*- mode.)
-#
-# ====================================================================
-# Copyright (c) 2000-2008 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/.
-# ====================================================================
-
-"""This module contains the SVNCommitCreator class."""
-
-
-import time
-
-from cvs2svn_lib.common import InternalError
-from cvs2svn_lib.log import Log
-from cvs2svn_lib.context import Ctx
-from cvs2svn_lib.cvs_item import CVSRevisionNoop
-from cvs2svn_lib.cvs_item import CVSBranchNoop
-from cvs2svn_lib.cvs_item import CVSTagNoop
-from cvs2svn_lib.changeset import OrderedChangeset
-from cvs2svn_lib.changeset import BranchChangeset
-from cvs2svn_lib.changeset import TagChangeset
-from cvs2svn_lib.svn_commit import SVNInitialProjectCommit
-from cvs2svn_lib.svn_commit import SVNPrimaryCommit
-from cvs2svn_lib.svn_commit import SVNPostCommit
-from cvs2svn_lib.svn_commit import SVNBranchCommit
-from cvs2svn_lib.svn_commit import SVNTagCommit
-from cvs2svn_lib.key_generator import KeyGenerator
-
-
-class SVNCommitCreator:
- """This class creates and yields SVNCommits via process_changeset()."""
-
- def __init__(self):
- # The revision number to assign to the next new SVNCommit.
- self.revnum_generator = KeyGenerator()
-
- # A set containing the Projects that have already been
- # initialized:
- self._initialized_projects = set()
-
- def _post_commit(self, cvs_revs, motivating_revnum, timestamp):
- """Generate any SVNCommits needed to follow CVS_REVS.
-
- That is, handle non-trunk default branches. A revision on a CVS
- non-trunk default branch is visible in a default CVS checkout of
- HEAD. So we copy such commits over to Subversion's trunk so that
- checking out SVN trunk gives the same output as checking out of
- CVS's default branch."""
-
- cvs_revs = [
- cvs_rev
- for cvs_rev in cvs_revs
- if cvs_rev.ntdbr and not isinstance(cvs_rev, CVSRevisionNoop)
- ]
-
- if cvs_revs:
- cvs_revs.sort(
- lambda a, b: cmp(a.cvs_file.filename, b.cvs_file.filename)
- )
- # Generate an SVNCommit for all of our default branch cvs_revs.
- yield SVNPostCommit(
- motivating_revnum, cvs_revs, timestamp,
- self.revnum_generator.gen_id(),
- )
-
- def _process_revision_changeset(self, changeset, timestamp):
- """Process CHANGESET, using TIMESTAMP as the commit time.
-
- Create and yield one or more SVNCommits in the process. CHANGESET
- must be an OrderedChangeset. TIMESTAMP is used as the timestamp
- for any resulting SVNCommits."""
-
- if not changeset.cvs_item_ids:
- Log().warn('Changeset has no items: %r' % changeset)
- return
-
- Log().verbose('-' * 60)
- Log().verbose('CVS Revision grouping:')
- Log().verbose(' Time: %s' % time.ctime(timestamp))
-
- # Generate an SVNCommit unconditionally. Even if the only change in
- # this group of CVSRevisions is a deletion of an already-deleted
- # file (that is, a CVS revision in state 'dead' whose predecessor
- # was also in state 'dead'), the conversion will still generate a
- # Subversion revision containing the log message for the second dead
- # revision, because we don't want to lose that information.
-
- cvs_revs = list(changeset.iter_cvs_items())
- if cvs_revs:
- cvs_revs.sort(lambda a, b: cmp(a.cvs_file.filename, b.cvs_file.filename))
- svn_commit = SVNPrimaryCommit(
- cvs_revs, timestamp, self.revnum_generator.gen_id()
- )
-
- yield svn_commit
-
- for cvs_rev in cvs_revs:
- Ctx()._symbolings_logger.log_revision(cvs_rev, svn_commit.revnum)
-
- # Generate an SVNPostCommit if we have default branch revs. If
- # some of the revisions in this commit happened on a non-trunk
- # default branch, then those files have to be copied into trunk
- # manually after being changed on the branch (because the RCS
- # "default branch" appears as head, i.e., trunk, in practice).
- # Unfortunately, Subversion doesn't support copies with sources
- # in the current txn. All copies must be based in committed
- # revisions. Therefore, we generate the copies in a new
- # revision.
- for svn_post_commit in self._post_commit(
- cvs_revs, svn_commit.revnum, timestamp
- ):
- yield svn_post_commit
-
- def _process_tag_changeset(self, changeset, timestamp):
- """Process TagChangeset CHANGESET, producing a SVNTagCommit.
-
- Filter out CVSTagNoops. If no CVSTags are left, don't generate a
- SVNTagCommit."""
-
- if Ctx().trunk_only:
- raise InternalError(
- 'TagChangeset encountered during a --trunk-only conversion')
-
- cvs_tag_ids = [
- cvs_tag.id
- for cvs_tag in changeset.iter_cvs_items()
- if not isinstance(cvs_tag, CVSTagNoop)
- ]
- if cvs_tag_ids:
- yield SVNTagCommit(
- changeset.symbol, cvs_tag_ids, timestamp,
- self.revnum_generator.gen_id(),
- )
- else:
- Log().debug(
- 'Omitting %r because it contains only CVSTagNoops' % (changeset,)
- )
-
- def _process_branch_changeset(self, changeset, timestamp):
- """Process BranchChangeset CHANGESET, producing a SVNBranchCommit.
-
- Filter out CVSBranchNoops. If no CVSBranches are left, don't
- generate a SVNBranchCommit."""
-
- if Ctx().trunk_only:
- raise InternalError(
- 'BranchChangeset encountered during a --trunk-only conversion')
-
- cvs_branches = [
- cvs_branch
- for cvs_branch in changeset.iter_cvs_items()
- if not isinstance(cvs_branch, CVSBranchNoop)
- ]
- if cvs_branches:
- svn_commit = SVNBranchCommit(
- changeset.symbol,
- [cvs_branch.id for cvs_branch in cvs_branches],
- timestamp,
- self.revnum_generator.gen_id(),
- )
- yield svn_commit
- for cvs_branch in cvs_branches:
- Ctx()._symbolings_logger.log_branch_revision(
- cvs_branch, svn_commit.revnum
- )
- else:
- Log().debug(
- 'Omitting %r because it contains only CVSBranchNoops' % (changeset,)
- )
-
- def process_changeset(self, changeset, timestamp):
- """Process CHANGESET, using TIMESTAMP for all of its entries.
-
- Return a generator that generates the resulting SVNCommits.
-
- The changesets must be fed to this function in proper dependency
- order."""
-
- # First create any new projects that might be opened by the
- # changeset:
- projects_opened = \
- changeset.get_projects_opened() - self._initialized_projects
- if projects_opened:
- if Ctx().cross_project_commits:
- yield SVNInitialProjectCommit(
- timestamp, projects_opened, self.revnum_generator.gen_id()
- )
- else:
- for project in projects_opened:
- yield SVNInitialProjectCommit(
- timestamp, [project], self.revnum_generator.gen_id()
- )
- self._initialized_projects.update(projects_opened)
-
- if isinstance(changeset, OrderedChangeset):
- for svn_commit \
- in self._process_revision_changeset(changeset, timestamp):
- yield svn_commit
- elif isinstance(changeset, TagChangeset):
- for svn_commit in self._process_tag_changeset(changeset, timestamp):
- yield svn_commit
- elif isinstance(changeset, BranchChangeset):
- for svn_commit in self._process_branch_changeset(changeset, timestamp):
- yield svn_commit
- else:
- raise TypeError('Illegal changeset %r' % changeset)
-
-