diff -Nru bzrtools-2.4.1/bzrtools.py bzrtools-2.5/bzrtools.py --- bzrtools-2.4.1/bzrtools.py 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/bzrtools.py 2012-01-20 02:07:41.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2005, 2006, 2007 Aaron Bentley +# Copyright (C) 2005-2009, 2011-2012 Aaron Bentley # Copyright (C) 2007 John Arbash Meinel # # This program is free software; you can redistribute it and/or modify @@ -14,325 +14,17 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -import codecs -import errno -import os import re -import tempfile -import shutil -from subprocess import Popen, PIPE -import sys -import bzrlib -from bzrlib import revision as _mod_revision, trace, urlutils +from bzrlib import urlutils from bzrlib.errors import ( BzrCommandError, - BzrError, NotBranchError, NoSuchFile, ) from bzrlib.bzrdir import BzrDir from bzrlib.transport import get_transport -def temp_tree(): - dirname = tempfile.mkdtemp("temp-branch") - return BzrDir.create_standalone_workingtree(dirname) - -def rm_tree(tree): - shutil.rmtree(tree.basedir) - -def is_clean(cur_tree): - """ - Return true if no files are modifed or unknown - """ - old_tree = cur_tree.basis_tree() - new_tree = cur_tree - non_source = [] - new_tree.lock_read() - try: - for path, file_class, kind, file_id, entry in new_tree.list_files(): - if file_class in ('?', 'I'): - non_source.append(path) - delta = new_tree.changes_from(old_tree, want_unchanged=False) - finally: - new_tree.unlock() - return not delta.has_changed(), non_source - -def set_push_data(tree, location): - tree.branch._transport.put_bytes("x-push-data", "%s\n" % location) - -def get_push_data(tree): - """ - >>> tree = temp_tree() - >>> get_push_data(tree) is None - True - >>> set_push_data(tree, 'http://somewhere') - >>> get_push_data(tree) - u'http://somewhere' - >>> rm_tree(tree) - """ - try: - location = tree.branch._transport.get('x-push-data').read() - except NoSuchFile: - return None - location = location.decode('utf-8') - return location.rstrip('\n') - -""" ->>> shell_escape('hello') -'\h\e\l\l\o' -""" -def shell_escape(arg): - return "".join(['\\'+c for c in arg]) - -def safe_system(args): - """ - >>> real_system = os.system - >>> os.system = sys.stdout.write - >>> safe_system(['a', 'b', 'cd']) - \\a \\b \\c\\d - >>> os.system = real_system - """ - arg_str = " ".join([shell_escape(a) for a in args]) - return os.system(arg_str) - -class RsyncUnknownStatus(Exception): - def __init__(self, status): - Exception.__init__(self, "Unknown status: %d" % status) - -class NoRsync(Exception): - def __init__(self, rsync_name): - Exception.__init__(self, "%s not found." % rsync_name) - - -def rsync(source, target, ssh=False, excludes=(), silent=False, - rsync_name="rsync"): - cmd = [rsync_name, "-av", "--delete"] - if ssh: - cmd.extend(('-e', 'ssh')) - if len(excludes) > 0: - cmd.extend(('--exclude-from', '-')) - cmd.extend((source, target)) - if silent: - stderr = PIPE - stdout = PIPE - else: - stderr = None - stdout = None - try: - proc = Popen(cmd, stdin=PIPE, stderr=stderr, stdout=stdout) - except OSError, e: - if e.errno == errno.ENOENT: - raise NoRsync(rsync_name) - - proc.stdin.write('\n'.join(excludes)+'\n') - proc.stdin.close() - if silent: - proc.stderr.read() - proc.stderr.close() - proc.stdout.read() - proc.stdout.close() - proc.wait() - if proc.returncode == 12: - raise RsyncStreamIO() - elif proc.returncode == 23: - raise RsyncNoFile(source) - elif proc.returncode != 0: - raise RsyncUnknownStatus(proc.returncode) - return cmd - - -def rsync_ls(source, ssh=False, silent=True): - cmd = ["rsync"] - if ssh: - cmd.extend(('-e', 'ssh')) - cmd.append(source) - if silent: - stderr = PIPE - else: - stderr = None - proc = Popen(cmd, stderr=stderr, stdout=PIPE) - result = proc.stdout.read() - proc.stdout.close() - if silent: - proc.stderr.read() - proc.stderr.close() - proc.wait() - if proc.returncode == 12: - raise RsyncStreamIO() - elif proc.returncode == 23: - raise RsyncNoFile(source) - elif proc.returncode != 0: - raise RsyncUnknownStatus(proc.returncode) - return [l.split(' ')[-1].rstrip('\n') for l in result.splitlines(True)] - -exclusions = ('.bzr/x-push-data', '.bzr/branch/x-push/data', '.bzr/parent', - '.bzr/branch/parent', '.bzr/x-pull-data', '.bzr/x-pull', - '.bzr/pull', '.bzr/stat-cache', '.bzr/x-rsync-data', - '.bzr/basis-inventory', '.bzr/inventory.backup.weave') - - -def read_revision_history(fname): - return [l.rstrip('\r\n') for l in - codecs.open(fname, 'rb', 'utf-8').readlines()] - - -def read_revision_info(path): - """Parse a last_revision file to determine revision_info""" - line = open(path, 'rb').readlines()[0].strip('\n') - revno, revision_id = line.split(' ', 1) - revno = int(revno) - return revno, revision_id - - -class RsyncNoFile(Exception): - def __init__(self, path): - Exception.__init__(self, "No such file %s" % path) - -class RsyncStreamIO(Exception): - def __init__(self): - Exception.__init__(self, "Error in rsync protocol data stream.") - - -class NotStandalone(BzrError): - - _fmt = '%(location)s is not a standalone tree.' - _internal = False - - def __init__(self, location): - BzrError.__init__(self, location=location) - - -def get_revision_history(location, _rsync): - tempdir = tempfile.mkdtemp('push') - my_rsync = _rsync - if my_rsync is None: - my_rsync = rsync - try: - history_fname = os.path.join(tempdir, 'revision-history') - try: - cmd = my_rsync(location+'.bzr/revision-history', history_fname, - silent=True) - except RsyncNoFile: - cmd = rsync(location+'.bzr/branch/revision-history', history_fname, - silent=True) - history = read_revision_history(history_fname) - finally: - shutil.rmtree(tempdir) - return history - - -def get_revision_info(location, _rsync): - """Get the revsision_info for an rsync-able branch""" - tempdir = tempfile.mkdtemp('push') - my_rsync = _rsync - if my_rsync is None: - my_rsync = rsync - try: - info_fname = os.path.join(tempdir, 'last-revision') - cmd = rsync(location+'.bzr/branch/last-revision', info_fname, - silent=True) - return read_revision_info(info_fname) - finally: - shutil.rmtree(tempdir) - - -def history_subset(location, branch, _rsync=None): - local_history = branch.revision_history() - try: - remote_history = get_revision_history(location, _rsync) - except RsyncNoFile: - revno, revision_id = get_revision_info(location, _rsync) - if revision_id == _mod_revision.NULL_REVISION: - return True - return bool(revision_id.decode('utf-8') in local_history) - else: - if len(remote_history) > len(local_history): - return False - for local, remote in zip(remote_history, local_history): - if local != remote: - return False - return True - - -def empty_or_absent(location): - try: - files = rsync_ls(location) - return files == ['.'] - except RsyncNoFile: - return True - -def rspush(tree, location=None, overwrite=False, working_tree=True, - _rsync=None): - tree.lock_write() - try: - my_rsync = _rsync - if my_rsync is None: - my_rsync = rsync - if (tree.bzrdir.root_transport.base != - tree.branch.bzrdir.root_transport.base): - raise NotStandalone(tree.bzrdir.root_transport.base) - if (tree.branch.get_bound_location() is not None): - raise NotStandalone(tree.bzrdir.root_transport.base) - if (tree.branch.repository.is_shared()): - raise NotStandalone(tree.bzrdir.root_transport.base) - push_location = get_push_data(tree) - if location is not None: - if not location.endswith('/'): - location += '/' - push_location = location - - if push_location is None: - raise BzrCommandError("No rspush location known or specified.") - - if (push_location.find('::') != -1): - usessh=False - else: - usessh=True - - if (push_location.find('://') != -1 or - push_location.find(':') == -1): - raise BzrCommandError("Invalid rsync path %r." % push_location) - - if working_tree: - clean, non_source = is_clean(tree) - if not clean: - raise BzrCommandError( - 'This tree has uncommitted changes or unknown' - ' (?) files. Use "bzr status" to list them.') - sys.exit(1) - final_exclusions = non_source[:] - else: - wt = tree - final_exclusions = [] - for path, status, kind, file_id, entry in wt.list_files(): - final_exclusions.append(path) - - final_exclusions.extend(exclusions) - if not overwrite: - try: - if not history_subset(push_location, tree.branch, - _rsync=my_rsync): - raise BzrCommandError( - "Local branch is not a newer version of remote" - " branch.") - except RsyncNoFile: - if not empty_or_absent(push_location): - raise BzrCommandError( - "Remote location is not a bzr branch (or empty" - " directory)") - except RsyncStreamIO: - raise BzrCommandError("Rsync could not use the" - " specified location. Please ensure that" - ' "%s" is of the form "machine:/path".' % push_location) - trace.note("Pushing to %s", push_location) - my_rsync(tree.basedir+'/', push_location, ssh=usessh, - excludes=final_exclusions) - - set_push_data(tree, push_location) - finally: - tree.unlock() - def short_committer(committer): new_committer = re.sub('<.*>', '', committer).strip(' ') diff -Nru bzrtools-2.4.1/command_classes.py bzrtools-2.5/command_classes.py --- bzrtools-2.4.1/command_classes.py 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/command_classes.py 2012-01-20 02:07:41.000000000 +0000 @@ -21,7 +21,7 @@ from bzrlib.lazy_import import lazy_import lazy_import(globals(), """ from bzrlib import help, urlutils -import shelf +from bzrlib.plugins.bzrtools import shelf """) from bzrlib.plugins import bzrtools diff -Nru bzrtools-2.4.1/debian/changelog bzrtools-2.5/debian/changelog --- bzrtools-2.4.1/debian/changelog 2011-11-04 14:14:24.000000000 +0000 +++ bzrtools-2.5/debian/changelog 2012-03-11 01:08:58.000000000 +0000 @@ -1,8 +1,22 @@ -bzrtools (2.4.1-1~bazaar1~lucid1) lucid; urgency=low +bzrtools (2.5-1~bazaar1~lucid1) lucid; urgency=low * Rebuild in PPA. - -- Max Bowsher <_@maxb.eu> Fri, 04 Nov 2011 14:14:24 +0000 + -- Max Bowsher <_@maxb.eu> Sun, 11 Mar 2012 01:08:58 +0000 + +bzrtools (2.5-1) unstable; urgency=low + + * Use DEP5 for copyright file. + * New upstream release. + + -- Jelmer Vernooij Fri, 20 Jan 2012 03:29:11 +0100 + +bzrtools (2.4.1-2) unstable; urgency=low + + * Add 01_revhistory: cope with deprecated Branch.revision_history method in + bzr 2.5. + + -- Jelmer Vernooij Mon, 21 Nov 2011 22:46:09 +0100 bzrtools (2.4.1-1) unstable; urgency=low diff -Nru bzrtools-2.4.1/debian/control bzrtools-2.5/debian/control --- bzrtools-2.4.1/debian/control 2011-09-25 12:16:05.000000000 +0000 +++ bzrtools-2.5/debian/control 2012-01-20 02:29:11.000000000 +0000 @@ -7,7 +7,7 @@ Jelmer Vernooij , James Westby Build-Depends: debhelper (>> 7.0.50~), python (>= 2.6.6-3) -Build-Depends-Indep: bzr (<< 2.5.0), bzr (>= 2.4~), python-bzrlib.tests | bzr (<< 2.4.0~beta1-2), python-subunit, rsync +Build-Depends-Indep: bzr (<< 2.6.0), bzr (>= 2.5~), python-bzrlib.tests | bzr (<< 2.4.0~beta1-2), python-subunit, rsync Vcs-Bzr: http://bzr.debian.org/pkg-bazaar/bzrtools/2.4 Homepage: http://bazaar-vcs.org/BzrTools Standards-Version: 3.9.2 @@ -16,7 +16,7 @@ Package: bzrtools Architecture: all -Depends: bzr (<< 2.5.0), bzr (>= 2.4~), patch, ${misc:Depends}, ${python:Depends} +Depends: bzr (<< 2.6.0), bzr (>= 2.5~), patch, ${misc:Depends}, ${python:Depends} Recommends: rsync Suggests: graphviz, librsvg2-bin Breaks: ${python:Breaks} diff -Nru bzrtools-2.4.1/debian/copyright bzrtools-2.5/debian/copyright --- bzrtools-2.4.1/debian/copyright 2011-07-14 12:00:42.000000000 +0000 +++ bzrtools-2.5/debian/copyright 2012-01-20 02:28:42.000000000 +0000 @@ -1,35 +1,54 @@ -This package was debianized by Jeff Bailey on -Wed, 8 Jun 2005 21:21:37 +0000. It is now maintained by the pkg-bazaar -team on alioth since May 2007 and co-maintained by: - -Gustavo Franco -Arnaud Fontaine -Reinhard Tartler -Adeodato Simó - -It was downloaded from http://bazaar-vcs.org/BzrTools. - -Copyright (C) 2004-2008 Aaron Bentley -Copyright (C) 2005-2006 Canonical Limited. -Copyright (C) 2006 Michael Ellerman -Copyright (C) 2007 John Arbash Meinel - -License: - - This package is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This package is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA - -On Debian systems, the complete text of the GNU General Public License -can be found in /usr/share/common-licenses/GPL-2 file. +Format: http://dep.debian.net/deps/dep5 +Upstream-Name: bzrtools +Upstream-Contact: Aaron Bentley +Source: http://bazaar-vcs.org/BzrTools. + +Files: * +Copyright: 2004-2008 Aaron Bentley +Copyright: 2005-2006 Canonical Limited. +Copyright: 2006 Michael Ellerman +Copyright: 2007 John Arbash Meinel +License: GPL-2+ + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA + . + On Debian systems, the complete text of the GNU General Public License + can be found in /usr/share/common-licenses/GPL-2 file. + +Files: debian/* +Copyright: 2005 Jeff Bailey +Copyright: 2007 Gustavo Franco +Copyright: 2007 Arnaud Fontaine +Copyright: 2009 Reinhard Tartler +Copyright: 2008-2009 Adeodato Simó +Copyright: 2008-2011 Jelmer Vernooij +License: GPL-2+ + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA + . + On Debian systems, the complete text of the GNU General Public License + can be found in /usr/share/common-licenses/GPL-2 file. diff -Nru bzrtools-2.4.1/__init__.py bzrtools-2.5/__init__.py --- bzrtools-2.4.1/__init__.py 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/__init__.py 2012-01-20 02:07:41.000000000 +0000 @@ -82,14 +82,12 @@ from unittest import TestSuite import bzrtools import tests.test_dotgraph - import tests.is_clean import tests.test_cbranch import tests.test_conflict_diff from bzrlib.plugins.bzrtools.tests import test_fetch_ghosts import tests.test_graph import tests.test_link_tree import tests.test_patch - import tests.test_rspush import tests.test_mirror import tests.upstream_import import zap @@ -103,12 +101,10 @@ result.addTest(TestLoader().loadTestsFromModule(tests.upstream_import)) result.addTest(zap.test_suite()) result.addTest(TestLoader().loadTestsFromModule(tests.test_dotgraph)) - result.addTest(TestLoader().loadTestsFromModule(tests.is_clean)) result.addTest(TestLoader().loadTestsFromModule(test_fetch_ghosts)) result.addTest(TestLoader().loadTestsFromModule(tests.test_graph)) result.addTest(TestLoader().loadTestsFromModule(tests.test_link_tree)) result.addTest(TestLoader().loadTestsFromModule(tests.test_patch)) - result.addTest(TestLoader().loadTestsFromModule(tests.test_rspush)) result.addTest(TestLoader().loadTestsFromModule(tests.test_cbranch)) result.addTest(TestLoader().loadTestsFromModule(tests.test_conflict_diff)) result.addTest(TestLoader().loadTestsFromModule(tests.test_mirror)) diff -Nru bzrtools-2.4.1/NEWS bzrtools-2.5/NEWS --- bzrtools-2.4.1/NEWS 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/NEWS 2012-01-20 02:07:41.000000000 +0000 @@ -1,3 +1,8 @@ +January 19 2012 +* Fix compatibility with final beta before bzr 2.5 +* Remove rspush command due to deprecation of Branch.revision_history +* RELEASE: bzrtools 2.5.0 + September 24 2011 * Fix compatibility with bzr.dev (Jelmer Vernoij) * Remove unused imports (Jelmer Vernoij) diff -Nru bzrtools-2.4.1/tests/is_clean.py bzrtools-2.5/tests/is_clean.py --- bzrtools-2.4.1/tests/is_clean.py 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/tests/is_clean.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -import os.path - -from bzrlib import tests -from bzrlib.plugins.bzrtools.bzrtools import is_clean - -class TestIsClean(tests.TestCaseWithTransport): - - def test_is_clean(self): - tree = self.make_branch_and_tree('.') - self.assertEqual((True, []), is_clean(tree)) - fooname = os.path.join(tree.basedir, "foo") - file(fooname, "wb").write("bar") - self.assertEqual((True, [u'foo']), is_clean(tree)) - tree.smart_add([tree.basedir]) - self.assertEqual((False, []), is_clean(tree)) - tree.commit("added file", rev_id='commit-id') - self.assertEqual((True, []), is_clean(tree)) diff -Nru bzrtools-2.4.1/tests/test_rspush.py bzrtools-2.5/tests/test_rspush.py --- bzrtools-2.4.1/tests/test_rspush.py 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/tests/test_rspush.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -# Copyright (C) 2007 Aaron Bentley -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -import os - -from bzrlib.bzrdir import BzrDir -from bzrlib.tests import TestCaseWithTransport, TestSkipped - -from bzrlib.plugins.bzrtools.bzrtools import ( - history_subset, - NoRsync, - NotStandalone, - rspush, - rsync, - RsyncNoFile, -) - - -class MockRSync(object): - - def __init__(self): - self.calls = [] - - def __call__(self, source, target, **kwargs): - self.calls.append((source, target, kwargs)) - if target.endswith('revision-history'): - output = open(target, 'wb') - output.close() - - -class TestRSPush(TestCaseWithTransport): - - def test_rsync(self): - cwd = os.getcwd() - try: - self.assertRaises(RsyncNoFile, rsync, "a", "b", silent=True) - except NoRsync: - raise TestSkipped('rsync not installed') - self.assertRaises(RsyncNoFile, rsync, cwd + "/a", cwd + "/b", - excludes=("*.py",), silent=True) - self.assertRaises(NoRsync, rsync, cwd + "/a", cwd + "/b", - excludes=("*.py",), silent=True, - rsync_name="rsyncc") - - def test_rspush_locking(self): - tree = self.make_branch_and_tree('tree', format='dirstate-tags') - tree.commit('some changes') - mock_rsync = MockRSync() - rspush(tree, 'example.org:foo', _rsync=mock_rsync) - rspush(tree, 'example.org:foo', working_tree = False, - _rsync=mock_rsync) - tree2 = self.make_branch_and_tree('tree2', - format='pack-0.92') - rspush(tree2, 'example.org:foo', _rsync=mock_rsync) - - def test_refuse_lightweight_checkout(self): - branch = self.make_branch('tree') - checkout = branch.create_checkout('checkout', lightweight=True) - checkout.commit('some changes') - mock_rsync = MockRSync() - e = self.assertRaises(NotStandalone, rspush, checkout, - 'example.org:foo', _rsync=mock_rsync) - self.assertContainsRe(str(e), '/checkout/ is not a standalone tree.$') - - def test_refuse_checkout(self): - branch = self.make_branch('tree') - checkout = branch.create_checkout('checkout') - checkout.commit('some changes') - mock_rsync = MockRSync() - self.assertRaises(NotStandalone, rspush, checkout, 'example.org:foo', - _rsync=mock_rsync) - - def test_refuse_shared(self): - repo = self.make_repository('repo', shared=True) - bzrdir = BzrDir.open('repo') - bzrdir.create_branch() - bzrdir.create_workingtree() - tree = bzrdir.open_workingtree() - tree.commit('some changes') - mock_rsync = MockRSync() - self.assertRaises(NotStandalone, rspush, tree, 'example.org:foo', - _rsync=mock_rsync) - - def do_history_subset(self, format): - tree_a = self.make_branch_and_tree('tree_a', format=format) - tree_a.lock_write() - self.addCleanup(tree_a.unlock) - tree_a.commit('foo') - tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree() - tree_a.commit('bar') - try: - self.assertTrue(history_subset('tree_b/', tree_a.branch)) - except NoRsync: - raise TestSkipped('rsync not installed') - self.assertFalse(history_subset('tree_a/', tree_b.branch)) - - def do_history_subset_no_commits(self, format): - tree_a = self.make_branch_and_tree('tree_a', format=format) - tree_b = self.make_branch_and_tree('tree_b', format=format) - try: - self.assertTrue(history_subset('tree_b/', tree_a.branch)) - except NoRsync: - raise TestSkipped('rsync not installed') - - def test_history_subset_dirstate(self): - self.do_history_subset('dirstate') - - def test_history_subset_no_commits_dirstate(self): - self.do_history_subset_no_commits('dirstate') - - def test_history_subset_pack(self): - self.do_history_subset('pack-0.92') - - def test_history_subset_no_commits_pack(self): - self.do_history_subset_no_commits('pack-0.92') diff -Nru bzrtools-2.4.1/version.py bzrtools-2.5/version.py --- bzrtools-2.4.1/version.py 2011-09-25 03:21:29.000000000 +0000 +++ bzrtools-2.5/version.py 2012-01-20 02:07:41.000000000 +0000 @@ -75,5 +75,5 @@ return main_version + sub_string -version_info = (2, 4, 1) +version_info = (2, 5, 0) __version__ = _format_version_tuple(version_info)