Cheaper branching under consideration?
Magnus Therning
magnus at therning.org
Sat Aug 27 07:33:55 BST 2005
On Tue, Aug 23, 2005 at 09:31:00AM +0100, Magnus Therning wrote:
>On Tue, Aug 23, 2005 at 09:51:07AM +0200, Jan Hudec wrote:
>>On Mon, Aug 22, 2005 at 23:00:09 +0100, Magnus Therning wrote:
>>> This might very well have been discussed already. Just thought I'd ask
>>> anyway.
>>>
>>> Is cheaper branching, regarding space, being considered?
>>
>>Did you notice te threads mentioning centralized storage (plans)? There have
>>been at least two in last two days. In short, it should be possible to have
>>one common storage for several branches, so it would store all common
>>revisions just once. Would that fullfil your needs?
>
>It sure sounds like it would. I'll have to read through the thread.
>Thanks for the pointer.
Yes it will fulfill my needs.
However, until it's implemented I've cooked together a small plugin that
does a "shallow branch", a branch with only the last revision. Bzr seems
to work just fine, even though the revno is decreased to 1.
My idea was to use it to make micro-branching cheaper. (Also I wanted to
play with bzr :-)
/M
*** added file '.bzrignore'
--- /dev/null
+++ .bzrignore
@@ -0,0 +1,1 @@
+*.pyc
*** added file '__init__.py'
--- /dev/null
+++ __init__.py
@@ -0,0 +1,9 @@
+import bzrlib.commands
+
+import shallow_branch
+
+_commands = [shallow_branch.cmd_shallow_branch]
+
+if hasattr(bzrlib.commands, 'register_command'):
+ for cmd in _commands:
+ bzrlib.commands.register_command(cmd)
*** added file 'shallow_branch.py'
--- /dev/null
+++ shallow_branch.py
@@ -0,0 +1,47 @@
+from bzrlib.commands import Command
+
+class cmd_shallow_branch(Command):
+ '''Make a shallow branch.
+
+ A shallow branch is a branch without any history.
+
+ If TO_LOCATION is omitted, the last component of FROM_LOCATION will be
+ used. In other words, "shallow-branch ../foo/bar" will attempt to create
+ "./bar".
+
+ To retrieve a shallow branch of a particular revision, supply the
+ --revision parameter, as in "shallow-branch foo/bar --revision 5".
+ '''
+
+ takes_args = ['from_location', 'to_location?']
+ takes_options = ['revision']
+
+ def run(self, from_location, to_location=None, revision=[-1]):
+ import os
+ from bzrlib.branch import Branch
+ from bzrlib.merge import merge
+
+ if to_location == None:
+ to_location = os.path.basename(from_location.rstrip("/\\"))
+
+ try:
+ os.mkdir(to_location)
+ except OSError, e:
+ if e.errno == errno.EEXIST:
+ raise BzrCommandError('Target directory "%s" already'
+ ' exists.' % to_location)
+ elif e.errno == errno.ENOENT:
+ raise BzrCommandError('Parent of "%s" does not exist.'
+ % to_location)
+ else:
+ raise
+
+ br_to = Branch(to_location, init=True)
+ br_from = Branch(from_location)
+
+ revno, rev_id = br_from.get_revision_info(revision[0])
+ br_to.install_revisions(br_from, [rev_id], None)
+ br_to.append_revision(rev_id)
+
+ merge((to_location, -1), (to_location, None),
+ this_dir=to_location, check_clean=False)
--
Magnus Therning (OpenPGP: 0xAB4DFBA4)
magnus at therning.org
http://therning.org/magnus
Software is not manufactured, it is something you write and publish.
Keep Europe free from software patents, we do not want censorship
by patent law on written works.
I should be able to whisper something in your ear, even if your ear is
1000 miles away, and the government disagrees with that. GQ [magazine
in England] quoted me on that -- they changed one letter. It said I
should be able to whisper something in your *car*, even though I am
1000 miles away. I wonder what the people in England think of me.
-- Philip Zimmermann
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20050827/2d120db0/attachment.pgp
More information about the bazaar
mailing list