BzrSync

Software Screenshot:
BzrSync
Software Details:
Version: 0.2
Upload Date: 11 May 15
Developer: Marco Pantaleoni
Distribution Type: Freeware
Downloads: 13

Rating: 2.0/5 (Total Votes: 1)

BzrSync is an utility to help a developer using Bazaar on multiple machines. It automatically keeps selected repositories and branches synchronized across the machines. Bazaar itself is used for the synchronization (with "bzr pull"), ensuring consistency at all times.

Installation

To install the latest stable version of BzrSync, using pip:

pip install bzrsync

or using setuptools:

easy_install bzrsync

Otherwise, if neither pip nor setuptools are available, it is possible to download (eg. from PyPI) the source package, extract it and run the usual setup.py commands:

python setup.py install

Usage

Let's suppose you work from three different workstations, and their hostnames are alpha, beta and gamma. You want to keep your Bazaar repositories and branches synchronized between all three nodes using BzrSync. BzrSync is meant to be used with shared repositories, so if you are not using these, you should re-organize your branches to use shared repositories. It's easier to keep all the repositories inside the same directory. In our example our repositories will reside in ~/bzr and their names will end in ".bzr". In each shared repository, at the top level there should be a directory for each node. In our case alpha, beta and gamma. For example, let's imagine we have a repository named "project-foo.bzr". We are working on alpha, and have created a trunk and a feature-1 branch. We'll have:

~/bzr/project-foo.bzr/
~/bzr/project-foo.bzr/alpha
~/bzr/project-foo.bzr/alpha/trunk
~/bzr/project-foo.bzr/alpha/feature-1
~/bzr/project-foo.bzr/beta
~/bzr/project-foo.bzr/gamma


Let's suppose we also have a local.bzr repository we don't want to synchronize, in either direction.

BzrSync needs a YAML config file, by default ~/.bazaar/bzrsync.yaml, listing the repositories and the branches we. In this example its contents will be:

# remote nodes
# (a host can be specified with an optional port as HOST:PORT)
hosts:
- alpha
- beta
- gamma

# where repositories specified with a relative path/pattern are located
root: ~/bzr

# *all* repositories
repositories: "*.bzr"

# specific repositories to exclude from 'repositories'
exclude:
- local.bzr

# repositories to export to remote nodes
export: "*.bzr"

# specific repositories excluded from export
export_exclude:
- local.bzr

# repositories to sync from remotes
sync: "*.bzr"

# specific repositories excluded from sync
sync_exclude:
- local.bzr


We can use exactly this same configuration file on all three nodes.

BzrSync won't create the shared repositories for you, so before proceeding, do so now on all the nodes, remembering to create also the node subdirectories.

Then launch the BzrSync daemon on all the nodes:

alpha$ bzrsync serve

beta$ bzrsync serve


gamma$ bzrsync serve

Now let's sync project-foo.bzr from alpha to beta:

 beta$ bzrsync sync ~/bzr/project-foo.bzr

This will pull to beta all the branches from ~/bzr/project-foo.bzr/alpha/ on alpha, and all the branches from ~/bzr/project-foo.bzr/gamma/ on gamma. In our case, only alpha has branches right now, so in practice we'll get the branches alpha/trunk and alpha/feature-1 from alpha to beta, keeping them as alpha/trunk and alpha/feature-1.

If you want to work on beta, now branch from the newly synchronized branches to their counterparts inside the beta/ subdirectory:

beta$ bzr branch ~/bzr/project-foo.bzr/alpha/feature-1 ~/bzr/project-foo.bzr/beta/feature-1
beta$ bzr co ~/bzr/project-foo.bzr/beta/feature-1 foo-feature-1
beta$ cd foo-feature-1
...
hack hack hack
...
beta$ commit


Now on beta we'll have:

~/bzr/project-foo.bzr/
~/bzr/project-foo.bzr/alpha
~/bzr/project-foo.bzr/alpha/trunk
~/bzr/project-foo.bzr/alpha/feature-1
~/bzr/project-foo.bzr/beta
~/bzr/project-foo.bzr/beta/feature-1
~/bzr/project-foo.bzr/gamma


When you have finished working on beta, you can sync from alpha:

 alpha$ bzrsync sync ~/bzr/project-foo.bzr

and this will create beta/feature-1 on alpha too, which you can pull onto alpha/feature-1 if not diverged, or merge it otherwise, and start working from alpha again.

Please see the example bzrsync.yaml file for a more complete example, which includes also branch sets.

Features:

  • any number of machines are supported
  • consistency is guaranteed at all times

Requirements:

  • Python

Similar Software

raw-import
raw-import

14 Apr 15

leeroy
leeroy

20 Feb 15

Diffstat
Diffstat

20 Feb 15

Comments to BzrSync

Comments not found
Add Comment
Turn on images!