[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Emacs Bazaar repository
From: |
Toshio Kuratomi |
Subject: |
Re: Emacs Bazaar repository |
Date: |
Sun, 16 Mar 2008 16:47:37 -0500 |
User-agent: |
Thunderbird 2.0.0.12 (X11/20080226) |
Stefan Monnier wrote:
After a few false starts I have been successful (at least as far as I
can tell) in importing the Emacs CVS repository into Bazaar. If anyone
is interested in playing with the results you can check out the HEAD of
the CVS repository with:
Another piece of information that I find missing is all the tags.
It seems they are present in the form of
http://bzr.notengoamigos.org/emacs/tags pseudo branches, but they're not
present in the form of actual Bzr tags.
I wrote a patch about six months to a year ago to deal with this.
https://bugs.launchpad.net/bzr-cvsps-import/+bug/128326
I'm attaching the patch -- but it might need to be updated.
-Toshio
=== modified file '__init__.py'
--- __init__.py 2007-01-19 17:03:04 +0000
+++ __init__.py 2007-07-25 16:36:34 +0000
@@ -64,10 +64,14 @@
help='Use cvs to extract texts.'),
option.Option('use-rcs',
help='Use rcs to extract texts. (default)'),
+ option.Option('use-dirstate-tags',
+ help='Use bzr metadata tags rather than'
+ ' a branch per tag'),
]
def run(self, cvsroot=None, module=None, output=None, cvsps_dump=None,
- encoding=None, verify=True, use_cvs=False, use_rcs=False):
+ encoding=None, verify=True, use_cvs=False, use_rcs=False,
+ use_dirstate_tags=False):
from cvsps import importer
if cvsroot.startswith(':pserver:') or cvsroot.startswith(':ext:'):
@@ -78,11 +82,18 @@
if not use_cvs and not use_rcs:
# Default is to use rcs, since it is slightly faster.
use_cvs = False
+
+ if use_dirstate_tags:
+ tag_style = 'dirstate'
+ else:
+ tag_style = 'branch'
+
importer = importer.Importer(cvsroot, module, output,
cvsps_dump=cvsps_dump,
encoding=encoding,
verify=verify,
- use_cvs_for_text=use_cvs)
+ use_cvs_for_text=use_cvs,
+ tag_style=tag_style)
importer.process()
=== modified file 'cvsps/importer.py'
--- cvsps/importer.py 2007-02-12 18:03:03 +0000
+++ cvsps/importer.py 2007-07-25 18:14:22 +0000
@@ -597,11 +597,12 @@
"""
def __init__(self, bzr_repo, cvs_root, cvs_module, map_file,
- verify=True, use_cvs_for_text=True):
+ verify=True, use_cvs_for_text=True, tag_style=None):
self._bzr_repo = bzr_repo
self._map_file = map_file
self._cvs_root = cvs_root
self._cvs_module = cvs_module
+ self._tag_style = tag_style or 'branch'
self._working_path = osutils.pathjoin(
self._bzr_repo.bzrdir.root_transport.local_abspath('.'),
@@ -623,7 +624,7 @@
self._n_existing_patches = 0
self._n_tags = 0
- def handle_patchset(self, patchset):
+ def handle_patchset(self, patchset, pb):
"""Handle one of the patchsets from cvs to bzr"""
revision_id = self._map_file.get(patchset.num)
@@ -653,7 +654,11 @@
self._n_patches += 1
if patchset.tag is not None:
- self._handle_tag(patchset, revision_id)
+ if self._tag_style == 'dirstate':
+ self._handle_tag_dirstate(patchset, revision_id, pb)
+ else:
+ self._handle_tag_branch(patchset, revision_id)
+
action += '+tag'
return revision_id, action
@@ -830,8 +835,13 @@
os.makedirs(branch_path)
# Create a new one
+ format = bzrdir.BzrDirFormat.get_default_format()
+ if self._tag_style == 'dirstate' and not
format.get_branch_format().supports_tags():
+ format = bzrdir.format_registry.get('dirstate-tags')()
+
target_branch = bzrdir.BzrDir.create_branch_convenience(branch_path,
- force_new_tree=False)
+ force_new_tree=False,
+ format=format)
self._set_repo(target_branch)
target_branch.lock_write()
self._cache_branch(patchset.branch, target_branch)
@@ -875,7 +885,23 @@
return revision_id
- def _handle_tag(self, patchset, revision_id):
+ def _handle_tag_dirstate(self, patchset, revision_id, pb):
+ """Create a tag with the given revision id."""
+ # TODO: toshio 20070725 We probably want to check that the branch
+ # format supports tags and convert it if it doesn't. However, the
+ # repository is locked at this point so it's not as simple as the
+ # below code.
+ #
+ # Currently, I'm making sure that the branches support tags when
+ # we create them.
+ #if not self._cur_bzr_branch.supports_tags():
+ # newFormat = bzrdir.format_registry.get('dirstate-tags')()
+ # converter =
self._cur_bzr_branch.bzrdir._format.get_converter(newFormat)
+ # self._cur_bzr_branch =
converter.convert(self._cur_bzr_branch.bzrdir, pb)
+ self._cur_bzr_branch.tags.set_tag(patchset.tag, revision_id)
+ self._n_tags += 1
+
+ def _handle_tag_branch(self, patchset, revision_id):
"""Create a tag with the given revision id."""
tag_branch_path = self._get_tag_branch_path(patchset.tag)
try:
@@ -969,10 +995,12 @@
"""Import a CVS project into bzr."""
def __init__(self, cvsroot, cvs_module, output_base, cvsps_dump=None,
- encoding=None, verify=True, use_cvs_for_text=True):
+ encoding=None, verify=True, use_cvs_for_text=True,
+ tag_style=None):
self._cvs_root = osutils.abspath(cvsroot)
self._cvs_module = cvs_module
self._use_cvs_for_text = use_cvs_for_text
+ self._tag_style = tag_style or 'branch'
self._verify = verify
self.output_base = output_base
@@ -1016,7 +1044,7 @@
os.makedirs(path)
self._paths_created = True
- def open_or_create_bzr_repo(self):
+ def open_or_create_bzr_repo(self, pb):
"""Open the bzr repository, creating it if needed."""
self.setup_directories()
bzr_repo_transport = transport.get_transport(self._repo_path)
@@ -1024,6 +1052,11 @@
a_bzrdir = bzrdir.BzrDir.open_from_transport(bzr_repo_transport)
except errors.NotBranchError:
return self._create_bzr_repo(bzr_repo_transport)
+ if self._tag_style == 'dirstate' and (
+ not a_bzrdir.find_branch_format().supports_tags()):
+ newFormat = bzrdir.format_registry.get('dirstate-tags')()
+ converter = a_bzrdir._format.get_converter(newFormat)
+ a_bzrdir = converter.convert(a_bzrdir, pb)
return a_bzrdir.open_repository()
def _create_bzr_repo(self, a_transport):
@@ -1033,6 +1066,10 @@
except errors.FileExists:
pass
fmt = bzrdir.BzrDirFormat.get_default_format()
+ if self._tag_style == 'dirstate' and not (
+ fmt.get_branch_format().supports_tags()):
+ fmt = bzrdir.format_registry.get('dirstate-tags')()
+
control = fmt.initialize_on_transport(a_transport)
repo = control.create_repository(shared=True)
repo.set_make_working_trees(False)
@@ -1065,7 +1102,7 @@
n_patchsets = len(patchsets)
for i, patchset in enumerate(patchsets):
try:
- rev_id, action = cvs_to_bzr.handle_patchset(patchset)
+ rev_id, action = cvs_to_bzr.handle_patchset(patchset, pb)
except KeyboardInterrupt:
if pb is not None:
pb.clear()
@@ -1101,7 +1138,11 @@
def process(self):
"""Start converting the repository."""
- repo = self.open_or_create_bzr_repo()
+ pb = ui.ui_factory.nested_progress_bar()
+ try:
+ repo = self.open_or_create_bzr_repo(pb=pb)
+ finally:
+ pb.finished()
# Maintain a repository wide lock for the whole transaction
# that should help cache stuff.
# TODO: jam 20061121 This may actually cache *too* much. Consider
@@ -1115,7 +1156,8 @@
try:
cvs_to_bzr = CVSToBzr(repo, self._cvs_root, self._cvs_module,
map_file, verify=self._verify,
- use_cvs_for_text=self._use_cvs_for_text)
+ use_cvs_for_text=self._use_cvs_for_text,
+ tag_style=self._tag_style)
start_time = time.time()
pb = ui.ui_factory.nested_progress_bar()
try:
signature.asc
Description: OpenPGP digital signature
- Re: Emacs Bazaar repository, (continued)
Re: Emacs Bazaar repository, Goffredo Baroncelli, 2008/03/14
Re: Emacs Bazaar repository, Stefan Monnier, 2008/03/16
Re: Emacs Bazaar repository,
Toshio Kuratomi <=
Emacs repository benchmark: bzr and git, Teemu Likonen, 2008/03/18
- Re: Emacs repository benchmark: bzr and git, Lennart Borgman (gmail), 2008/03/18
- Re: Emacs repository benchmark: bzr and git, dhruva, 2008/03/18
- Re: Emacs repository benchmark: bzr and git, Richard Stallman, 2008/03/18
- Re: Emacs repository benchmark: bzr and git, Jonathan Lange, 2008/03/26
- Re: Emacs repository benchmark: bzr and git, Stephen J. Turnbull, 2008/03/26
- Re: Emacs repository benchmark: bzr and git, Stefan Monnier, 2008/03/26
- Re: Emacs repository benchmark: bzr and git, dhruva, 2008/03/27
- Re: Emacs repository benchmark: bzr and git, Vincent Ladeuil, 2008/03/27
- Re: Emacs repository benchmark: bzr and git, Stefan Monnier, 2008/03/28