Mercurial vs. Bazaar speedtest clone and log - update: hg 1.1 vs. bzr 1.10

Arne Babenhauserheide arne_bab at web.de
Mon Dec 15 04:40:24 CST 2008


Am Montag 15 Dezember 2008 01:14:17 schrieb Alexander Belchenko:
> I'm curious why you have this warning message in your test.sh output:
>
> No handlers could be found for logger "bzr"
>
> It seems like your system lacks something. Is it intended?
> Or you just don't have desire to get bzr working right?

I just don't use bzr in production, so i simply use what my installation 
provides me. 

But I now did a quick check and found this bzr bug: 

- https://bugs.launchpad.net/pqm/+bug/191393

> Also, it will be nice to know does you run pre-packaged version of bzr
> (actually I'd like to make sure that you run bzr with compiled 
> C-extensions) and what version of python you're using. AFAIK bzr is not
> completelly ported to Python 2.6 (but I could be wrong here).

What I use: 

###############################################################

### Bazaar ###
# eix dev-util/bzr$
[I] dev-util/bzr
     Available versions:  1.5 1.6.1 ~1.6.1[1] ~1.7.1 ~1.8 ~1.8-r1 ~1.9 (~)1.10 
{bash-completion curl doc emacs sftp test}
     Installed versions:  1.10(10:51:42 13.12.2008)(bash-completion curl emacs 
-doc -sftp -test)
     License:             GPL-2
     Homepage:            http://bazaar-vcs.org/
     Find open bugs:      http://bugs.gentoo.org/buglist.cgi?quicksearch=dev-
util%2Fbzr
     Description:         Bazaar is a next generation distributed version 
control system.

[1] "zugaina" /usr/portage/local/layman/zugaina

#############################

### Python ###
# eix dev-lang/python$
[I] dev-lang/python
     Available versions:
        (2.4)   2.4.4-r5 2.4.4-r6 2.4.4-r14 ~2.4.4-r15
        (2.5)   2.5.2-r7 (~)2.5.2-r8
        (2.6)   [M]~2.6-r5
        {berkdb bootstrap build cxx doc elibc_uclibc examples expat gdbm ipv6 
ncurses nocxx nothreads readline sqlite ssl threads tk ucs2 wininst}
     Installed versions:  2.5.2-r8(2.5)(04:14:48 12.12.2008)(berkdb doc 
examples expat gdbm ipv6 ncurses readline sqlite ssl threads tk -build -
elibc_uclibc -ucs2 -wininst)
     License:             PSF-2.2
     Homepage:            http://www.python.org/
     Find open bugs:      http://bugs.gentoo.org/buglist.cgi?quicksearch=dev-
lang%2Fpython
     Description:         Python is an interpreted, interactive, object-
oriented programming language.


#############################

### How Bazaar gets installed ###

# cat /usr/portage/dev-util/bzr/bzr-1.10.ebuild
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-util/bzr/bzr-1.10.ebuild,v 1.1 
2008/12/08 14:50:56 pva Exp $

NEED_PYTHON=2.4

inherit distutils bash-completion elisp-common eutils versionator

MY_PV=${PV/_rc/rc}
MY_P=${PN}-${MY_PV}
SERIES=$(get_version_component_range 1-2)

DESCRIPTION="Bazaar is a next generation distributed version control system."
HOMEPAGE="http://bazaar-vcs.org/"
#SRC_URI="http://bazaar-vcs.org/releases/src/${MY_P}.tar.gz"
SRC_URI="http://launchpad.net/bzr/${SERIES}/${MY_PV}/+download/${MY_P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~ia64 ~ppc ~sparc ~x86 ~x86-fbsd"
IUSE="curl doc emacs sftp test"

RDEPEND="|| ( dev-python/celementtree >=dev-lang/python-2.5 )
        curl? ( dev-python/pycurl )
        sftp? ( dev-python/paramiko )"

DEPEND="emacs? ( virtual/emacs )
        test? (
                $RDEPEND
                dev-python/medusa
        )"

S="${WORKDIR}/${MY_P}"
PYTHON_MODNAME="bzrlib"
SITEFILE=71bzr-gentoo.el
DOCS="doc/*.txt"

src_unpack() {
        distutils_src_unpack

        # Don't regenerate .c files from .pyx when pyrex is found.
        epatch "${FILESDIR}/${PN}-1.8-no-pyrex.patch"
        # Don't run lock permission tests when running as root
        epatch "${FILESDIR}/${PN}-0.90-tests-fix_root.patch"
        # Fix permission errors when run under directories with setgid set.
        epatch "${FILESDIR}/${PN}-0.90-tests-sgid.patch"
}

src_compile() {
        distutils_src_compile

        if use emacs; then
                elisp-compile contrib/emacs/bzr-mode.el || die "Emacs modules 
failed!"
        fi
}

src_install() {
        distutils_src_install --install-data /usr/share

        if use doc; then
                docinto developers
                dodoc doc/developers/* || die "dodoc failed"
                for doc in mini-tutorial tutorials user-{guide,reference}; do
                        docinto $doc
                        dodoc doc/en/$doc/* || die "dodoc failed"
                done
        fi

        if use emacs; then
                elisp-install ${PN} contrib/emacs/*.el* || die "elisp-install 
failed"
                elisp-site-file-install "${FILESDIR}/${SITEFILE}" || die 
"elisp-site-file-install failed"

                # don't add automatically to the load-path, so the sitefile
                # can do a conditional loading
                touch "${D}${SITELISP}/${PN}/.nosearch"
        fi

        insinto /usr/share/zsh/site-functions
        doins contrib/zsh/_bzr
        dobashcompletion contrib/bash/bzr
}

pkg_postinst() {
        distutils_pkg_postinst
        bash-completion_pkg_postinst

        if use emacs; then
                elisp-site-regen
                elog "If you are using a GNU Emacs version greater than 22.1, 
bzr support"
                elog "is already included.  This ebuild does not automatically 
activate bzr support"
                elog "in versions below, but prepares it in a way you can load 
it from your ~/.emacs"
                elog "file by adding"
                elog "       (load \"bzr-mode\")"
        fi
}

pkg_postrm() {
        distutils_pkg_postrm
        use emacs && elisp-site-regen
}

src_test() {
        export LC_ALL=C
        # Some tests expect the usual pyc compiling behaviour.
        python_enable_pyc
        "${python}" bzr --no-plugins selftest || die "bzr selftest failed"
        # Just to make sure we don't hit any errors on later stages.
        python_disable_pyc
}

###############################################################

Since Portage by default builds C extensions (it just uses distutils), they 
should be included. 

(I like Gentoo for being able to do this damn extensive reply with ease ;)

> To make local cloning of of bzr much faster you'd need to use shared
> repositories. So you can change your steps for bzr as following.
>
> 1) Initial cloning:
>
> time bzr init-repo .
> time bzr branch http://code.python.org/python/trunk python-bzr-trunk

Can I also do

time bzr init-repo bzr
time bzr branch http://code.python.org/python/trunk bzr/python-bzr-trunk

That would better blend in with the workflow of my test. 

> 2) Repo size
> bzr pack
> 3) Local clone will be faster if you do it in shared repo (that have been
> created in step 1):
> time bzr branch python-bzr-trunk python-bzr-trunk2 --hardlink

> I understand that your intent is to show that hg is much faster,
> but even with my hints it still will be faster than bzr, but I guess
> difference will be much smaller (not 6x-7x times).

My desire is to do a good test. 

The current tests are just standard operations with the default installation 
and without any optimizations, but I'll gladly add a test with the operations 
optimized for bzr. 

I much prefer Mercurial to Bazaar, and my desire is to see Mercurial as DVCS 
for Python, but I have no intention of violating my values of what constitutes 
a good test because of that. 


But I don't intend to do much debugging of the tools for that since debugging 
shouldn't be part of the regular workflow (and newcomers in a project won't 
want to do debugging of the VCS tool). 

For example I don't want to debug this: 

$ bzr init-repo bzr
$ cd bzr
$ bzr branch http://code.python.org/python/trunk python-bzr-trunk
No handlers could be found for logger "bzr"
bzr: ERROR: 
KnitPackRepository('file:///home/arne/Dokumente/eigenes/Programme/Mercurial/tests/hg-
vs-bazaar-speedtest/bzr/.bzr/repository/')
is not compatible with
KnitPackRepository('http://code.python.org/python/.bzr/repository/')
different rich-root support


You can now see a shared repo test in the file test.sh at 
- http://freehg.org/u/ArneBab/hg-vs-bzr-unscientific/

Currently it is commented out because it doesn't work. 

Tell me how to get this running (or just send me a patch or bundle - or clone 
and share a hg repository with improved tests) and I'll include it. 

Best wishes, 
Arne
-- 
-- My stuff: http://draketo.de - stories, songs, poems, programs and stuff :)
-- Infinite Hands: http://infinite-hands.draketo.de - singing a part of the 
history of free software.
-- Ein Würfel System: http://1w6.org - einfach saubere (Rollenspiel-) Regeln.

-- PGP/GnuPG: http://draketo.de/inhalt/ich/pubkey.txt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
Url : http://selenic.com/pipermail/mercurial/attachments/20081215/ec5af49a/attachment.pgp 


More information about the Mercurial mailing list