Greg
Using the free Bitkeeper client
Greg's home page
Programs home page
HOWTO home page
Greg's diary
Greg's photos
Greg's links
Google
In early 2005, Bitkeeper announced that they were no longer providing free licenses for their Bitkeeper version control system, sparking panic and a plethora of ad-hoc replacements in the Linux community. They have, however, announced a free client for read-only access to repositories. I found it useful to access the MySQL repository. Unfortunately, there isn't much documentation; this HOWTO should help.

Installation

The bkbits client comes as a shar archive, presently called bk-client.shar. To unpack it, simply run it as a shell script:
=== root@echunga (/dev/ttyp5) /src/bk 136 -> sh bk-client.shar
x - creating lock directory
x - creating directory bk_client-1.1
x - extracting bk_client-1.1/demo.sh (text)
x - extracting bk_client-1.1/Makefile (text)
x - extracting bk_client-1.1/update.c (text)
x - extracting bk_client-1.1/sfioball.c (text)
x - extracting bk_client-1.1/sfio.c (text)
x - extracting bk_client-1.1/system.h (text)
=== root@echunga (/dev/ttyp5) /src/bk 137 -> cd bk_client-1.1/
=== root@echunga (/dev/ttyp5) /src/bk/bk_client-1.1 138 -> make
cc -O2 -o sfio -lz sfio.c
cc -O2  sfioball.c  -o sfioball
cc -O2  update.c  -o update
=== root@echunga (/dev/ttyp5) /src/bk/bk_client-1.1 139 ->

This builds the three programs sfio, sfioball and update. There is no install target to the Makefile, and in view of the names of the programs, it's probably better to install them somewhere non-standard. There is also no documentation beyond the source; look at demo.sh for a brief idea.

Initial checkout

Perform initial checkout with sfioball. The parameters are the name of the directory in the remote repository, and the name of the local directory in which to store the checked out data. The local directory must not exist; this is in contrast to the normal Bitkeeper client, where the directory must exist (so I'm told, anyway).
=== root@echunga (/dev/ttyp6) /src/MySQL 95 -> sfioball bk://mysql.bkbits.net/mysql-4.1 4.1
OK-root OK
INFO-generating ChangeLog
INFO-generating sfioball
INFO-sfioball coming...
(long pause)
If the remote directory doesn't exist, you'll get an error message like this one:
=== root@echunga (/dev/ttyp6) /src/MySQL 90 -> sfioball bk://mysql.bkbits.net/mysql-5.1 5.1
ERROR-cannot cd to mysql-5.1 (illegal, nonexistant, or not package root)

Updating a repo

Use update. The parameters are, again, the URL of the remote repo and the pathname of the local directory:
=== root@echunga (/dev/ttyp6) /src/MySQL 87 -> update bk://mysql.bkbits.net/mysql-5.0 5.0
OK-root OK
INFO-generating patch, please wait...
OK-patch coming, 346894 bytes...
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
In my experience, there are still problems:
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -Naru a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
|--- a/mysql-test/r/query_cache.result  2005-07-27 20:14:31 -07:00
|+++ b/mysql-test/r/query_cache.result  2005-07-27 20:14:31 -07:00
--------------------------
Patching file mysql-test/r/query_cache.result using Plan A...
Hunk #1 succeeded at 852.
patch: **** malformed patch at line 11685: nmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbOK-patch transferred, enjoy!
cannot create BitKeeper/tmp/ChangeLog: No such file or directory
At the end of this, update thinks it has done its job. I wonder if it has.


Greg's diary Greg's photos Greg's links Greg's home page
Valid XHTML 1.0! $Id: bitkeeper-free-client.html,v 1.4 2005/07/29 02:28:26 grog Exp $