Merge lp:~jameinel/bzr/2.3-commit-to-stacked into lp:bzr

Proposed by John A Meinel on 2010-12-03
Status: Merged
Approved by: Vincent Ladeuil on 2011-01-11
Approved revision: 5571
Merged at revision: 5599
Proposed branch: lp:~jameinel/bzr/2.3-commit-to-stacked
Merge into: lp:bzr
Diff against target: 2161 lines (+511/-206)
170 files modified
bzrlib/bzrdir.py (+1/-1)
bzrlib/commit.py (+1/-1)
bzrlib/conflicts.py (+1/-1)
bzrlib/controldir.py (+1/-1)
bzrlib/errors.py (+1/-1)
bzrlib/fetch.py (+1/-1)
bzrlib/graph.py (+1/-1)
bzrlib/mutabletree.py (+1/-1)
bzrlib/plugins/launchpad/__init__.py (+1/-1)
bzrlib/plugins/launchpad/test_lp_directory.py (+1/-1)
bzrlib/plugins/launchpad/test_lp_service.py (+1/-1)
bzrlib/remote.py (+1/-1)
bzrlib/repository.py (+74/-19)
bzrlib/tag.py (+1/-1)
bzrlib/tests/EncodingAdapter.py (+1/-1)
bzrlib/tests/TestUtil.py (+1/-1)
bzrlib/tests/__init__.py (+1/-1)
bzrlib/tests/blackbox/test_add.py (+1/-1)
bzrlib/tests/blackbox/test_branch.py (+1/-1)
bzrlib/tests/blackbox/test_commit.py (+1/-1)
bzrlib/tests/blackbox/test_diff.py (+1/-1)
bzrlib/tests/blackbox/test_dpush.py (+1/-1)
bzrlib/tests/blackbox/test_exceptions.py (+1/-1)
bzrlib/tests/blackbox/test_init.py (+1/-1)
bzrlib/tests/blackbox/test_non_ascii.py (+1/-1)
bzrlib/tests/blackbox/test_push.py (+1/-1)
bzrlib/tests/blackbox/test_resolve.py (+1/-1)
bzrlib/tests/blackbox/test_send.py (+1/-1)
bzrlib/tests/blackbox/test_serve.py (+1/-1)
bzrlib/tests/blackbox/test_shared_repository.py (+1/-1)
bzrlib/tests/blackbox/test_tags.py (+1/-1)
bzrlib/tests/blackbox/test_too_much.py (+1/-1)
bzrlib/tests/blackbox/test_upgrade.py (+1/-1)
bzrlib/tests/blackbox/test_version.py (+1/-1)
bzrlib/tests/blackbox/test_whoami.py (+1/-1)
bzrlib/tests/doc_generate/__init__.py (+1/-1)
bzrlib/tests/doc_generate/builders/test_texinfo.py (+1/-1)
bzrlib/tests/doc_generate/writers/test_texinfo.py (+1/-1)
bzrlib/tests/features.py (+1/-1)
bzrlib/tests/http_server.py (+1/-1)
bzrlib/tests/http_utils.py (+1/-1)
bzrlib/tests/https_server.py (+1/-1)
bzrlib/tests/per_branch/test_branch.py (+1/-1)
bzrlib/tests/per_branch/test_parent.py (+1/-1)
bzrlib/tests/per_controldir/test_controldir.py (+1/-1)
bzrlib/tests/per_interrepository/test_interrepository.py (+1/-1)
bzrlib/tests/per_merger.py (+1/-1)
bzrlib/tests/per_pack_repository.py (+1/-1)
bzrlib/tests/per_repository/test_check.py (+1/-1)
bzrlib/tests/per_repository/test_commit_builder.py (+11/-7)
bzrlib/tests/per_repository/test_repository.py (+1/-1)
bzrlib/tests/per_repository/test_write_group.py (+30/-1)
bzrlib/tests/per_repository_reference/__init__.py (+4/-16)
bzrlib/tests/per_repository_reference/test_commit_with_stacking.py (+220/-0)
bzrlib/tests/per_transport.py (+1/-1)
bzrlib/tests/per_uifactory/__init__.py (+1/-1)
bzrlib/tests/per_workingtree/test_add_reference.py (+1/-1)
bzrlib/tests/per_workingtree/test_workingtree.py (+1/-1)
bzrlib/tests/script.py (+1/-1)
bzrlib/tests/stub_sftp.py (+1/-1)
bzrlib/tests/test__annotator.py (+1/-1)
bzrlib/tests/test__chk_map.py (+1/-1)
bzrlib/tests/test__dirstate_helpers.py (+1/-1)
bzrlib/tests/test__groupcompress.py (+1/-1)
bzrlib/tests/test__known_graph.py (+1/-1)
bzrlib/tests/test__simple_set.py (+1/-1)
bzrlib/tests/test__static_tuple.py (+1/-1)
bzrlib/tests/test_ancestry.py (+1/-1)
bzrlib/tests/test_annotate.py (+1/-1)
bzrlib/tests/test_bad_files.py (+1/-1)
bzrlib/tests/test_bisect_multi.py (+1/-1)
bzrlib/tests/test_branch.py (+1/-1)
bzrlib/tests/test_branchbuilder.py (+1/-1)
bzrlib/tests/test_btree_index.py (+1/-1)
bzrlib/tests/test_bundle.py (+1/-1)
bzrlib/tests/test_bzrdir.py (+1/-1)
bzrlib/tests/test_chk_serializer.py (+1/-1)
bzrlib/tests/test_clean_tree.py (+1/-1)
bzrlib/tests/test_commands.py (+1/-1)
bzrlib/tests/test_commit.py (+1/-1)
bzrlib/tests/test_commit_merge.py (+1/-1)
bzrlib/tests/test_config.py (+1/-1)
bzrlib/tests/test_conflicts.py (+1/-1)
bzrlib/tests/test_crash.py (+1/-1)
bzrlib/tests/test_diff.py (+1/-1)
bzrlib/tests/test_dirstate.py (+1/-1)
bzrlib/tests/test_eol_filters.py (+1/-1)
bzrlib/tests/test_errors.py (+1/-1)
bzrlib/tests/test_extract.py (+1/-1)
bzrlib/tests/test_fetch.py (+1/-1)
bzrlib/tests/test_foreign.py (+1/-1)
bzrlib/tests/test_ftp_transport.py (+1/-1)
bzrlib/tests/test_generate_docs.py (+1/-1)
bzrlib/tests/test_generate_ids.py (+1/-1)
bzrlib/tests/test_globbing.py (+1/-1)
bzrlib/tests/test_gpg.py (+1/-1)
bzrlib/tests/test_graph.py (+1/-1)
bzrlib/tests/test_groupcompress.py (+1/-1)
bzrlib/tests/test_hashcache.py (+1/-1)
bzrlib/tests/test_help.py (+1/-1)
bzrlib/tests/test_http.py (+1/-1)
bzrlib/tests/test_https_ca_bundle.py (+1/-1)
bzrlib/tests/test_ignores.py (+1/-1)
bzrlib/tests/test_import_tariff.py (+1/-1)
bzrlib/tests/test_info.py (+1/-1)
bzrlib/tests/test_inv.py (+1/-1)
bzrlib/tests/test_inventory_delta.py (+1/-1)
bzrlib/tests/test_lazy_import.py (+1/-1)
bzrlib/tests/test_library_state.py (+1/-1)
bzrlib/tests/test_lock.py (+1/-1)
bzrlib/tests/test_lockable_files.py (+1/-1)
bzrlib/tests/test_lockdir.py (+1/-1)
bzrlib/tests/test_lsprof.py (+1/-1)
bzrlib/tests/test_merge3.py (+1/-1)
bzrlib/tests/test_merge_core.py (+1/-1)
bzrlib/tests/test_missing.py (+1/-1)
bzrlib/tests/test_msgeditor.py (+1/-1)
bzrlib/tests/test_multiparent.py (+1/-1)
bzrlib/tests/test_nonascii.py (+1/-1)
bzrlib/tests/test_options.py (+1/-1)
bzrlib/tests/test_osutils_encodings.py (+1/-1)
bzrlib/tests/test_permissions.py (+1/-1)
bzrlib/tests/test_plugins.py (+1/-1)
bzrlib/tests/test_progress.py (+1/-1)
bzrlib/tests/test_read_bundle.py (+1/-1)
bzrlib/tests/test_reconcile.py (+1/-1)
bzrlib/tests/test_registry.py (+1/-1)
bzrlib/tests/test_remote.py (+1/-1)
bzrlib/tests/test_revision.py (+1/-1)
bzrlib/tests/test_revisionspec.py (+1/-1)
bzrlib/tests/test_revisiontree.py (+1/-1)
bzrlib/tests/test_rio.py (+1/-1)
bzrlib/tests/test_rules.py (+1/-1)
bzrlib/tests/test_selftest.py (+1/-1)
bzrlib/tests/test_server.py (+1/-1)
bzrlib/tests/test_setup.py (+1/-1)
bzrlib/tests/test_sftp_transport.py (+1/-1)
bzrlib/tests/test_smart.py (+1/-1)
bzrlib/tests/test_smart_transport.py (+1/-1)
bzrlib/tests/test_smtp_connection.py (+1/-1)
bzrlib/tests/test_store.py (+1/-1)
bzrlib/tests/test_strace.py (+1/-1)
bzrlib/tests/test_subsume.py (+1/-1)
bzrlib/tests/test_switch.py (+1/-1)
bzrlib/tests/test_symbol_versioning.py (+1/-1)
bzrlib/tests/test_test_server.py (+1/-1)
bzrlib/tests/test_timestamp.py (+1/-1)
bzrlib/tests/test_trace.py (+1/-1)
bzrlib/tests/test_transactions.py (+1/-1)
bzrlib/tests/test_transform.py (+1/-1)
bzrlib/tests/test_transport.py (+1/-1)
bzrlib/tests/test_transport_log.py (+1/-1)
bzrlib/tests/test_tree.py (+1/-1)
bzrlib/tests/test_ui.py (+1/-1)
bzrlib/tests/test_upgrade.py (+1/-1)
bzrlib/tests/test_upgrade_stacked.py (+1/-1)
bzrlib/tests/test_version.py (+1/-1)
bzrlib/tests/test_version_info.py (+1/-1)
bzrlib/tests/test_weave.py (+1/-1)
bzrlib/tests/test_whitebox.py (+1/-1)
bzrlib/tests/test_win32utils.py (+1/-1)
bzrlib/tests/test_workingtree.py (+1/-1)
bzrlib/tests/test_wsgi.py (+1/-1)
bzrlib/tests/test_xml.py (+1/-1)
bzrlib/timestamp.py (+1/-1)
bzrlib/transform.py (+1/-1)
bzrlib/transport/http/_urllib2_wrappers.py (+1/-1)
bzrlib/upgrade.py (+1/-1)
doc/en/release-notes/bzr-2.3.txt (+4/-0)
doc/en/whats-new/whats-new-in-2.3.txt (+5/-0)
To merge this branch: bzr merge lp:~jameinel/bzr/2.3-commit-to-stacked
Reviewer Review Type Date Requested Status
Andrew Bennetts 2010-12-03 Approve on 2011-01-11
Review via email: mp+42698@code.launchpad.net

Commit Message

Allow commits to stacked branches

Description of the Change

This is mostly a proposal for intermediate review. I'd like to get some feedback on how this is turning out. I think the code needs a few more test cases to check for how it handles failures, etc.

This implements commit-to-stacked-branch. It does so by checking at commit time if the inventories for parents-of-the-new-revision are present. If not, it starts a new StreamSource.get_stream_for_missing_keys() from the fallback repository, and fills them in. This is what we currently use when pushing up a new revision to a destination, so it should handle the cases we care about.

This doesn't handle delta chains for file content, so we may want to restrict this support to only 2a formats.

The one thing I don't really like is the write-group handling. StreamSink.insert_stream() takes out its own write_group, possibly with some resume tokens, and either suspends it again (if it couldn't satisfy all keys) or it commits it. Which means that during commit it will be:

 start a write group
   fill out the new inventory
   fill in new texts
   stage it into the repo
 suspend the write group
 start a new independent write group **
   fill in the basis inventories
 commit write group ##
 resume original write group
   add revision info
 commit write group

I could change ** to resume the current write group, the problem is ##. Specifically, insert_stream() will commit its current write group, forcing the temporary content to go live, before we have the associated inventory or revision added.

What I think would be nicer would be to add a StreamSink.insert_stream_reusing_write_group().
This would
 a) Not take out a new write group
 b) Not commit the write group

This would allow me to add more data into the current commit, all of which would be atomically added or rolled back.

Then again, worst case we just filled in some basis inventories, which should be ok to have around. You're likely to want them anyway, and it isn't a more cruft. (It is the same data you would have had if you committed to a non-stacked branch, and then pushed to the stacked branch.) It is only 'cruft' if the commit aborts and you change the branch tip before the next commit. (could happen if you were committing to a stacked-and-bound branch.)

I also think I need to add specific permutations of committing when the stacked branch, and/or its fallback is remote, just to guard against interactions of stacking + remote. Especially in the fallback-of-fallback cases.

I'd also like someone to look at my test cases, and see if there are any other obvious ones that come to mind.

To post a comment you must log in.
Andrew Bennetts (spiv) wrote :
Download full text (6.8 KiB)

Looking good so far!

[...]
> This implements commit-to-stacked-branch. It does so by checking at
> commit time if the inventories for parents-of-the-new-revision are
> present. If not, it starts a new
> StreamSource.get_stream_for_missing_keys() from the fallback
> repository, and fills them in. This is what we currently use when
> pushing up a new revision to a destination, so it should handle the
> cases we care about.

Sounds good.

> This doesn't handle delta chains for file content, so we may want to
> restrict this support to only 2a formats.

Hmm. This is probably where I got stuck trying this approach a while
back. Restricting to 2a seems reasonable.

> The one thing I don't really like is the write-group handling.
[...]
> What I think would be nicer would be to add a StreamSink.insert_stream_reusing_write_group().
> This would
> a) Not take out a new write group
> b) Not commit the write group
>
> This would allow me to add more data into the current commit, all of which would be atomically added or rolled back.

That proposal sounds good to me.

> Then again, worst case we just filled in some basis inventories, which
> should be ok to have around. You're likely to want them anyway, and it
> isn't a more cruft. (It is the same data you would have had if you
> committed to a non-stacked branch, and then pushed to the stacked
> branch.) It is only 'cruft' if the commit aborts and you change the
> branch tip before the next commit. (could happen if you were
> committing to a stacked-and-bound branch.)

It'll be wasteful in terms of round-trips though, and I don't like waste
:)

> I also think I need to add specific permutations of committing when
> the stacked branch, and/or its fallback is remote, just to guard
> against interactions of stacking + remote. Especially in the
> fallback-of-fallback cases.

Yes, history suggests this is a good idea.

> I'd also like someone to look at my test cases, and see if there are
> any other obvious ones that come to mind.

Maybe some tests involving ghosts, and commits of unchanged inventories
vs. a parent.

> === modified file 'bzrlib/commit.py'
> --- bzrlib/commit.py 2010-11-10 02:01:33 +0000
> +++ bzrlib/commit.py 2010-12-03 22:21:52 +0000
> @@ -432,6 +432,7 @@
> self.rev_id = self.builder.commit(self.message)
>
> except Exception, e:
> + import pdb; pdb.set_trace()

You probably want to revert this bit ;)

> mutter("aborting commit write group because of exception:")
> trace.log_exception_quietly()
> note("aborting commit write group: %r" % (e,))
>
> === modified file 'bzrlib/repository.py'
> --- bzrlib/repository.py 2010-12-02 10:41:05 +0000
> +++ bzrlib/repository.py 2010-12-03 22:21:52 +0000
> @@ -176,11 +176,50 @@
> self._validate_unicode_text(value,
> 'revision property (%s)' % (key,))
>
> + def _ensure_fallback_inventories(self):
> + """Ensure that appropriate inventories are available.
> +
> + This only applies to repositories that are stacked, and is about
> + enusring the stacking invariants. Namely, that for any revision that...

Read more...

John A Meinel (jameinel) wrote :

Many updates. commit-to-stacked is now forbidden against older format repositories (mostly we didn't audit that it works correct with text deltas, etc.).

It now also doesn't create an intermediate suspended write group just to commit the one that is active.

And it checks that you don't create a new ghost in commit when you are in a stacked branch.

Andrew Bennetts (spiv) wrote :

The copyright year updates look unrelated to this feature, if not entirely spurious...

Otherwise I'm happy.

review: Approve
Vincent Ladeuil (vila) wrote :

sent to pqm by email

John A Meinel (jameinel) wrote :

sent to pqm by email

5572. By John A Meinel on 2011-01-12

Merge bzr.dev 5597 to resolve NEWS, aka bzr-2.3.txt

5573. By John A Meinel on 2011-01-12

Merge bzr.dev 5598 for NEWS/bzr-2.3.txt

John A Meinel (jameinel) wrote :

sent to pqm by email

John A Meinel (jameinel) wrote :

sent to pqm by email

5574. By John A Meinel on 2011-01-12

Fix the test case that was checking we refused to create a commit_builder
for specific formats.

5575. By John A Meinel on 2011-01-12

Add to What's New

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bzrlib/bzrdir.py'
2--- bzrlib/bzrdir.py 2010-12-20 12:01:56 +0000
3+++ bzrlib/bzrdir.py 2011-01-12 16:51:15 +0000
4@@ -1,4 +1,4 @@
5-# Copyright (C) 2006-2010 Canonical Ltd
6+# Copyright (C) 2006-2011 Canonical Ltd
7 #
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10
11=== modified file 'bzrlib/commit.py'
12--- bzrlib/commit.py 2010-11-10 02:01:33 +0000
13+++ bzrlib/commit.py 2011-01-12 16:51:15 +0000
14@@ -1,4 +1,4 @@
15-# Copyright (C) 2005-2010 Canonical Ltd
16+# Copyright (C) 2005-2011 Canonical Ltd
17 #
18 # This program is free software; you can redistribute it and/or modify
19 # it under the terms of the GNU General Public License as published by
20
21=== modified file 'bzrlib/conflicts.py'
22--- bzrlib/conflicts.py 2010-11-10 16:24:31 +0000
23+++ bzrlib/conflicts.py 2011-01-12 16:51:15 +0000
24@@ -1,4 +1,4 @@
25-# Copyright (C) 2005, 2006, 2007, 2009, 2010 Canonical Ltd
26+# Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 Canonical Ltd
27 #
28 # This program is free software; you can redistribute it and/or modify
29 # it under the terms of the GNU General Public License as published by
30
31=== modified file 'bzrlib/controldir.py'
32--- bzrlib/controldir.py 2010-12-14 00:41:05 +0000
33+++ bzrlib/controldir.py 2011-01-12 16:51:15 +0000
34@@ -1,4 +1,4 @@
35-# Copyright (C) 2010 Canonical Ltd
36+# Copyright (C) 2010, 2011 Canonical Ltd
37 #
38 # This program is free software; you can redistribute it and/or modify
39 # it under the terms of the GNU General Public License as published by
40
41=== modified file 'bzrlib/errors.py'
42--- bzrlib/errors.py 2010-12-16 20:41:47 +0000
43+++ bzrlib/errors.py 2011-01-12 16:51:15 +0000
44@@ -1,4 +1,4 @@
45-# Copyright (C) 2005-2010 Canonical Ltd
46+# Copyright (C) 2005-2011 Canonical Ltd
47 #
48 # This program is free software; you can redistribute it and/or modify
49 # it under the terms of the GNU General Public License as published by
50
51=== modified file 'bzrlib/fetch.py'
52--- bzrlib/fetch.py 2010-12-14 09:21:14 +0000
53+++ bzrlib/fetch.py 2011-01-12 16:51:15 +0000
54@@ -1,4 +1,4 @@
55-# Copyright (C) 2005-2010 Canonical Ltd
56+# Copyright (C) 2005-2011 Canonical Ltd
57 #
58 # This program is free software; you can redistribute it and/or modify
59 # it under the terms of the GNU General Public License as published by
60
61=== modified file 'bzrlib/graph.py'
62--- bzrlib/graph.py 2010-12-11 22:06:52 +0000
63+++ bzrlib/graph.py 2011-01-12 16:51:15 +0000
64@@ -1,4 +1,4 @@
65-# Copyright (C) 2007-2010 Canonical Ltd
66+# Copyright (C) 2007-2011 Canonical Ltd
67 #
68 # This program is free software; you can redistribute it and/or modify
69 # it under the terms of the GNU General Public License as published by
70
71=== modified file 'bzrlib/mutabletree.py'
72--- bzrlib/mutabletree.py 2010-12-16 20:41:47 +0000
73+++ bzrlib/mutabletree.py 2011-01-12 16:51:15 +0000
74@@ -1,4 +1,4 @@
75-# Copyright (C) 2006-2010 Canonical Ltd
76+# Copyright (C) 2006-2011 Canonical Ltd
77 #
78 # This program is free software; you can redistribute it and/or modify
79 # it under the terms of the GNU General Public License as published by
80
81=== modified file 'bzrlib/plugins/launchpad/__init__.py'
82--- bzrlib/plugins/launchpad/__init__.py 2010-12-07 09:06:39 +0000
83+++ bzrlib/plugins/launchpad/__init__.py 2011-01-12 16:51:15 +0000
84@@ -1,4 +1,4 @@
85-# Copyright (C) 2006-2010 Canonical Ltd
86+# Copyright (C) 2006-2011 Canonical Ltd
87 #
88 # This program is free software; you can redistribute it and/or modify
89 # it under the terms of the GNU General Public License as published by
90
91=== modified file 'bzrlib/plugins/launchpad/test_lp_directory.py'
92--- bzrlib/plugins/launchpad/test_lp_directory.py 2010-12-16 11:31:14 +0000
93+++ bzrlib/plugins/launchpad/test_lp_directory.py 2011-01-12 16:51:15 +0000
94@@ -1,4 +1,4 @@
95-# Copyright (C) 2007-2010 Canonical Ltd
96+# Copyright (C) 2007-2011 Canonical Ltd
97 #
98 # This program is free software; you can redistribute it and/or modify
99 # it under the terms of the GNU General Public License as published by
100
101=== modified file 'bzrlib/plugins/launchpad/test_lp_service.py'
102--- bzrlib/plugins/launchpad/test_lp_service.py 2010-12-16 11:31:14 +0000
103+++ bzrlib/plugins/launchpad/test_lp_service.py 2011-01-12 16:51:15 +0000
104@@ -1,4 +1,4 @@
105-# Copyright (C) 2008 Canonical Ltd
106+# Copyright (C) 2008-2011 Canonical Ltd
107 #
108 # This program is free software; you can redistribute it and/or modify
109 # it under the terms of the GNU General Public License as published by
110
111=== modified file 'bzrlib/remote.py'
112--- bzrlib/remote.py 2010-12-14 23:14:44 +0000
113+++ bzrlib/remote.py 2011-01-12 16:51:15 +0000
114@@ -1,4 +1,4 @@
115-# Copyright (C) 2006-2010 Canonical Ltd
116+# Copyright (C) 2006-2011 Canonical Ltd
117 #
118 # This program is free software; you can redistribute it and/or modify
119 # it under the terms of the GNU General Public License as published by
120
121=== modified file 'bzrlib/repository.py'
122--- bzrlib/repository.py 2011-01-11 20:21:53 +0000
123+++ bzrlib/repository.py 2011-01-12 16:51:15 +0000
124@@ -176,6 +176,41 @@
125 self._validate_unicode_text(value,
126 'revision property (%s)' % (key,))
127
128+ def _ensure_fallback_inventories(self):
129+ """Ensure that appropriate inventories are available.
130+
131+ This only applies to repositories that are stacked, and is about
132+ enusring the stacking invariants. Namely, that for any revision that is
133+ present, we either have all of the file content, or we have the parent
134+ inventory and the delta file content.
135+ """
136+ if not self.repository._fallback_repositories:
137+ return
138+ if not self.repository._format.supports_chks:
139+ raise errors.BzrError("Cannot commit directly to a stacked branch"
140+ " in pre-2a formats. See "
141+ "https://bugs.launchpad.net/bzr/+bug/375013 for details.")
142+ # This is a stacked repo, we need to make sure we have the parent
143+ # inventories for the parents.
144+ parent_keys = [(p,) for p in self.parents]
145+ parent_map = self.repository.inventories._index.get_parent_map(parent_keys)
146+ missing_parent_keys = set([pk for pk in parent_keys
147+ if pk not in parent_map])
148+ fallback_repos = list(reversed(self.repository._fallback_repositories))
149+ missing_keys = [('inventories', pk[0])
150+ for pk in missing_parent_keys]
151+ resume_tokens = []
152+ while missing_keys and fallback_repos:
153+ fallback_repo = fallback_repos.pop()
154+ source = fallback_repo._get_source(self.repository._format)
155+ sink = self.repository._get_sink()
156+ stream = source.get_stream_for_missing_keys(missing_keys)
157+ missing_keys = sink.insert_stream_without_locking(stream,
158+ self.repository._format)
159+ if missing_keys:
160+ raise errors.BzrError('Unable to fill in parent inventories for a'
161+ ' stacked branch')
162+
163 def commit(self, message):
164 """Make the actual commit.
165
166@@ -193,6 +228,7 @@
167 rev.parent_ids = self.parents
168 self.repository.add_revision(self._new_revision_id, rev,
169 self.new_inventory, self._config)
170+ self._ensure_fallback_inventories()
171 self.repository.commit_write_group()
172 return self._new_revision_id
173
174@@ -1761,9 +1797,9 @@
175 :param revprops: Optional dictionary of revision properties.
176 :param revision_id: Optional revision id.
177 """
178- if self._fallback_repositories:
179- raise errors.BzrError("Cannot commit from a lightweight checkout "
180- "to a stacked branch. See "
181+ if self._fallback_repositories and not self._format.supports_chks:
182+ raise errors.BzrError("Cannot commit directly to a stacked branch"
183+ " in pre-2a formats. See "
184 "https://bugs.launchpad.net/bzr/+bug/375013 for details.")
185 result = self._commit_builder_class(self, parents, config,
186 timestamp, timezone, committer, revprops, revision_id)
187@@ -4054,15 +4090,46 @@
188 is_resume = False
189 try:
190 # locked_insert_stream performs a commit|suspend.
191- return self._locked_insert_stream(stream, src_format,
192- is_resume)
193+ missing_keys = self.insert_stream_without_locking(stream,
194+ src_format, is_resume)
195+ if missing_keys:
196+ # suspend the write group and tell the caller what we is
197+ # missing. We know we can suspend or else we would not have
198+ # entered this code path. (All repositories that can handle
199+ # missing keys can handle suspending a write group).
200+ write_group_tokens = self.target_repo.suspend_write_group()
201+ return write_group_tokens, missing_keys
202+ hint = self.target_repo.commit_write_group()
203+ to_serializer = self.target_repo._format._serializer
204+ src_serializer = src_format._serializer
205+ if (to_serializer != src_serializer and
206+ self.target_repo._format.pack_compresses):
207+ self.target_repo.pack(hint=hint)
208+ return [], set()
209 except:
210 self.target_repo.abort_write_group(suppress_errors=True)
211 raise
212 finally:
213 self.target_repo.unlock()
214
215- def _locked_insert_stream(self, stream, src_format, is_resume):
216+ def insert_stream_without_locking(self, stream, src_format,
217+ is_resume=False):
218+ """Insert a stream's content into the target repository.
219+
220+ This assumes that you already have a locked repository and an active
221+ write group.
222+
223+ :param src_format: a bzr repository format.
224+ :param is_resume: Passed down to get_missing_parent_inventories to
225+ indicate if we should be checking for missing texts at the same
226+ time.
227+
228+ :return: A set of keys that are missing.
229+ """
230+ if not self.target_repo.is_write_locked():
231+ raise errors.ObjectNotLocked(self)
232+ if not self.target_repo.is_in_write_group():
233+ raise errors.BzrError('you must already be in a write group')
234 to_serializer = self.target_repo._format._serializer
235 src_serializer = src_format._serializer
236 new_pack = None
237@@ -4147,19 +4214,7 @@
238 # cannot even attempt suspending, and missing would have failed
239 # during stream insertion.
240 missing_keys = set()
241- else:
242- if missing_keys:
243- # suspend the write group and tell the caller what we is
244- # missing. We know we can suspend or else we would not have
245- # entered this code path. (All repositories that can handle
246- # missing keys can handle suspending a write group).
247- write_group_tokens = self.target_repo.suspend_write_group()
248- return write_group_tokens, missing_keys
249- hint = self.target_repo.commit_write_group()
250- if (to_serializer != src_serializer and
251- self.target_repo._format.pack_compresses):
252- self.target_repo.pack(hint=hint)
253- return [], set()
254+ return missing_keys
255
256 def _extract_and_insert_inventory_deltas(self, substream, serializer):
257 target_rich_root = self.target_repo._format.rich_root_data
258
259=== modified file 'bzrlib/tag.py'
260--- bzrlib/tag.py 2011-01-10 21:49:51 +0000
261+++ bzrlib/tag.py 2011-01-12 16:51:15 +0000
262@@ -1,4 +1,4 @@
263-# Copyright (C) 2007-2010 Canonical Ltd
264+# Copyright (C) 2007-2011 Canonical Ltd
265 #
266 # This program is free software; you can redistribute it and/or modify
267 # it under the terms of the GNU General Public License as published by
268
269=== modified file 'bzrlib/tests/EncodingAdapter.py'
270--- bzrlib/tests/EncodingAdapter.py 2010-12-24 22:40:27 +0000
271+++ bzrlib/tests/EncodingAdapter.py 2011-01-12 16:51:15 +0000
272@@ -1,4 +1,4 @@
273-# Copyright (C) 2006, 2009, 2010 Canonical Ltd
274+# Copyright (C) 2006, 2009, 2010, 2011 Canonical Ltd
275 # -*- coding: utf-8 -*-
276 #
277 # This program is free software; you can redistribute it and/or modify
278
279=== modified file 'bzrlib/tests/TestUtil.py'
280--- bzrlib/tests/TestUtil.py 2010-12-18 10:21:52 +0000
281+++ bzrlib/tests/TestUtil.py 2011-01-12 16:51:15 +0000
282@@ -1,4 +1,4 @@
283-# Copyright (C) 2005-2010 Canonical Ltd
284+# Copyright (C) 2005-2011 Canonical Ltd
285 # Author: Robert Collins <robert.collins@canonical.com>
286 #
287 # This program is free software; you can redistribute it and/or modify
288
289=== modified file 'bzrlib/tests/__init__.py'
290--- bzrlib/tests/__init__.py 2011-01-07 11:13:50 +0000
291+++ bzrlib/tests/__init__.py 2011-01-12 16:51:15 +0000
292@@ -1,4 +1,4 @@
293-# Copyright (C) 2005-2010 Canonical Ltd
294+# Copyright (C) 2005-2011 Canonical Ltd
295 #
296 # This program is free software; you can redistribute it and/or modify
297 # it under the terms of the GNU General Public License as published by
298
299=== modified file 'bzrlib/tests/blackbox/test_add.py'
300--- bzrlib/tests/blackbox/test_add.py 2010-12-16 20:41:47 +0000
301+++ bzrlib/tests/blackbox/test_add.py 2011-01-12 16:51:15 +0000
302@@ -1,4 +1,4 @@
303-# Copyright (C) 2006, 2007, 2009, 2010 Canonical Ltd
304+# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
305 #
306 # This program is free software; you can redistribute it and/or modify
307 # it under the terms of the GNU General Public License as published by
308
309=== modified file 'bzrlib/tests/blackbox/test_branch.py'
310--- bzrlib/tests/blackbox/test_branch.py 2010-12-14 23:14:44 +0000
311+++ bzrlib/tests/blackbox/test_branch.py 2011-01-12 16:51:15 +0000
312@@ -1,4 +1,4 @@
313-# Copyright (C) 2006-2010 Canonical Ltd
314+# Copyright (C) 2006-2011 Canonical Ltd
315 #
316 # This program is free software; you can redistribute it and/or modify
317 # it under the terms of the GNU General Public License as published by
318
319=== modified file 'bzrlib/tests/blackbox/test_commit.py'
320--- bzrlib/tests/blackbox/test_commit.py 2010-12-16 15:29:10 +0000
321+++ bzrlib/tests/blackbox/test_commit.py 2011-01-12 16:51:15 +0000
322@@ -1,4 +1,4 @@
323-# Copyright (C) 2006-2010 Canonical Ltd
324+# Copyright (C) 2006-2011 Canonical Ltd
325 #
326 # This program is free software; you can redistribute it and/or modify
327 # it under the terms of the GNU General Public License as published by
328
329=== modified file 'bzrlib/tests/blackbox/test_diff.py'
330--- bzrlib/tests/blackbox/test_diff.py 2010-12-16 13:15:42 +0000
331+++ bzrlib/tests/blackbox/test_diff.py 2011-01-12 16:51:15 +0000
332@@ -1,4 +1,4 @@
333-# Copyright (C) 2006-2010 Canonical Ltd
334+# Copyright (C) 2006-2011 Canonical Ltd
335 #
336 # This program is free software; you can redistribute it and/or modify
337 # it under the terms of the GNU General Public License as published by
338
339=== modified file 'bzrlib/tests/blackbox/test_dpush.py'
340--- bzrlib/tests/blackbox/test_dpush.py 2010-12-09 04:26:53 +0000
341+++ bzrlib/tests/blackbox/test_dpush.py 2011-01-12 16:51:15 +0000
342@@ -1,4 +1,4 @@
343-# Copyright (C) 2009, 2010 Canonical Ltd
344+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
345 #
346 # This program is free software; you can redistribute it and/or modify
347 # it under the terms of the GNU General Public License as published by
348
349=== modified file 'bzrlib/tests/blackbox/test_exceptions.py'
350--- bzrlib/tests/blackbox/test_exceptions.py 2011-01-11 21:27:02 +0000
351+++ bzrlib/tests/blackbox/test_exceptions.py 2011-01-12 16:51:15 +0000
352@@ -1,4 +1,4 @@
353-# Copyright (C) 2006, 2007, 2009, 2010 Canonical Ltd
354+# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
355 #
356 # This program is free software; you can redistribute it and/or modify
357 # it under the terms of the GNU General Public License as published by
358
359=== modified file 'bzrlib/tests/blackbox/test_init.py'
360--- bzrlib/tests/blackbox/test_init.py 2010-12-16 15:29:10 +0000
361+++ bzrlib/tests/blackbox/test_init.py 2011-01-12 16:51:15 +0000
362@@ -1,4 +1,4 @@
363-# Copyright (C) 2006-2010 Canonical Ltd
364+# Copyright (C) 2006-2011 Canonical Ltd
365 #
366 # This program is free software; you can redistribute it and/or modify
367 # it under the terms of the GNU General Public License as published by
368
369=== modified file 'bzrlib/tests/blackbox/test_non_ascii.py'
370--- bzrlib/tests/blackbox/test_non_ascii.py 2010-12-16 13:15:42 +0000
371+++ bzrlib/tests/blackbox/test_non_ascii.py 2011-01-12 16:51:15 +0000
372@@ -1,4 +1,4 @@
373-# Copyright (C) 2006-2010 Canonical Ltd
374+# Copyright (C) 2006-2011 Canonical Ltd
375 #
376 # This program is free software; you can redistribute it and/or modify
377 # it under the terms of the GNU General Public License as published by
378
379=== modified file 'bzrlib/tests/blackbox/test_push.py'
380--- bzrlib/tests/blackbox/test_push.py 2010-12-14 09:21:14 +0000
381+++ bzrlib/tests/blackbox/test_push.py 2011-01-12 16:51:15 +0000
382@@ -1,4 +1,4 @@
383-# Copyright (C) 2006-2010 Canonical Ltd
384+# Copyright (C) 2006-2011 Canonical Ltd
385 #
386 # This program is free software; you can redistribute it and/or modify
387 # it under the terms of the GNU General Public License as published by
388
389=== modified file 'bzrlib/tests/blackbox/test_resolve.py'
390--- bzrlib/tests/blackbox/test_resolve.py 2010-11-10 18:17:06 +0000
391+++ bzrlib/tests/blackbox/test_resolve.py 2011-01-12 16:51:15 +0000
392@@ -1,4 +1,4 @@
393-# Copyright (C) 2010 Canonical Ltd
394+# Copyright (C) 2010, 2011 Canonical Ltd
395 #
396 # This program is free software; you can redistribute it and/or modify
397 # it under the terms of the GNU General Public License as published by
398
399=== modified file 'bzrlib/tests/blackbox/test_send.py'
400--- bzrlib/tests/blackbox/test_send.py 2010-12-09 04:26:53 +0000
401+++ bzrlib/tests/blackbox/test_send.py 2011-01-12 16:51:15 +0000
402@@ -1,4 +1,4 @@
403-# Copyright (C) 2006-2010 Canonical Ltd
404+# Copyright (C) 2006-2011 Canonical Ltd
405 # Authors: Aaron Bentley
406 #
407 # This program is free software; you can redistribute it and/or modify
408
409=== modified file 'bzrlib/tests/blackbox/test_serve.py'
410--- bzrlib/tests/blackbox/test_serve.py 2010-12-16 11:31:14 +0000
411+++ bzrlib/tests/blackbox/test_serve.py 2011-01-12 16:51:15 +0000
412@@ -1,4 +1,4 @@
413-# Copyright (C) 2006-2010 Canonical Ltd
414+# Copyright (C) 2006-2011 Canonical Ltd
415 #
416 # This program is free software; you can redistribute it and/or modify
417 # it under the terms of the GNU General Public License as published by
418
419=== modified file 'bzrlib/tests/blackbox/test_shared_repository.py'
420--- bzrlib/tests/blackbox/test_shared_repository.py 2010-12-16 15:29:10 +0000
421+++ bzrlib/tests/blackbox/test_shared_repository.py 2011-01-12 16:51:15 +0000
422@@ -1,4 +1,4 @@
423-# Copyright (C) 2006-2010 Canonical Ltd
424+# Copyright (C) 2006-2011 Canonical Ltd
425 #
426 # This program is free software; you can redistribute it and/or modify
427 # it under the terms of the GNU General Public License as published by
428
429=== modified file 'bzrlib/tests/blackbox/test_tags.py'
430--- bzrlib/tests/blackbox/test_tags.py 2011-01-10 21:49:51 +0000
431+++ bzrlib/tests/blackbox/test_tags.py 2011-01-12 16:51:15 +0000
432@@ -1,4 +1,4 @@
433-# Copyright (C) 2007-2010 Canonical Ltd
434+# Copyright (C) 2007-2011 Canonical Ltd
435 #
436 # This program is free software; you can redistribute it and/or modify
437 # it under the terms of the GNU General Public License as published by
438
439=== modified file 'bzrlib/tests/blackbox/test_too_much.py'
440--- bzrlib/tests/blackbox/test_too_much.py 2010-12-16 13:15:42 +0000
441+++ bzrlib/tests/blackbox/test_too_much.py 2011-01-12 16:51:15 +0000
442@@ -1,4 +1,4 @@
443-# Copyright (C) 2005-2010 Canonical Ltd
444+# Copyright (C) 2005-2011 Canonical Ltd
445 #
446 # This program is free software; you can redistribute it and/or modify
447 # it under the terms of the GNU General Public License as published by
448
449=== modified file 'bzrlib/tests/blackbox/test_upgrade.py'
450--- bzrlib/tests/blackbox/test_upgrade.py 2010-12-17 11:35:28 +0000
451+++ bzrlib/tests/blackbox/test_upgrade.py 2011-01-12 16:51:15 +0000
452@@ -1,4 +1,4 @@
453-# Copyright (C) 2006-2010 Canonical Ltd
454+# Copyright (C) 2006-2011 Canonical Ltd
455 #
456 # This program is free software; you can redistribute it and/or modify
457 # it under the terms of the GNU General Public License as published by
458
459=== modified file 'bzrlib/tests/blackbox/test_version.py'
460--- bzrlib/tests/blackbox/test_version.py 2010-12-16 12:13:32 +0000
461+++ bzrlib/tests/blackbox/test_version.py 2011-01-12 16:51:15 +0000
462@@ -1,4 +1,4 @@
463-# Copyright (C) 2007, 2008 Canonical Ltd
464+# Copyright (C) 2007, 2008, 2009, 2011 Canonical Ltd
465 #
466 # This program is free software; you can redistribute it and/or modify
467 # it under the terms of the GNU General Public License as published by
468
469=== modified file 'bzrlib/tests/blackbox/test_whoami.py'
470--- bzrlib/tests/blackbox/test_whoami.py 2010-12-16 15:29:10 +0000
471+++ bzrlib/tests/blackbox/test_whoami.py 2011-01-12 16:51:15 +0000
472@@ -1,4 +1,4 @@
473-# Copyright (C) 2006, 2007, 2009, 2010 Canonical Ltd
474+# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
475 #
476 # This program is free software; you can redistribute it and/or modify
477 # it under the terms of the GNU General Public License as published by
478
479=== modified file 'bzrlib/tests/doc_generate/__init__.py'
480--- bzrlib/tests/doc_generate/__init__.py 2010-12-09 21:34:01 +0000
481+++ bzrlib/tests/doc_generate/__init__.py 2011-01-12 16:51:15 +0000
482@@ -1,4 +1,4 @@
483-# Copyright (C) 2010 Canonical Ltd
484+# Copyright (C) 2010, 2011 Canonical Ltd
485 #
486 # This program is free software; you can redistribute it and/or modify
487 # it under the terms of the GNU General Public License as published by
488
489=== modified file 'bzrlib/tests/doc_generate/builders/test_texinfo.py'
490--- bzrlib/tests/doc_generate/builders/test_texinfo.py 2010-12-09 15:04:24 +0000
491+++ bzrlib/tests/doc_generate/builders/test_texinfo.py 2011-01-12 16:51:15 +0000
492@@ -1,4 +1,4 @@
493-# Copyright (C) 2010 Canonical Ltd
494+# Copyright (C) 2010, 2011 Canonical Ltd
495 #
496 # This program is free software; you can redistribute it and/or modify
497 # it under the terms of the GNU General Public License as published by
498
499=== modified file 'bzrlib/tests/doc_generate/writers/test_texinfo.py'
500--- bzrlib/tests/doc_generate/writers/test_texinfo.py 2010-12-09 15:04:24 +0000
501+++ bzrlib/tests/doc_generate/writers/test_texinfo.py 2011-01-12 16:51:15 +0000
502@@ -1,4 +1,4 @@
503-# Copyright (C) 2010 Canonical Ltd
504+# Copyright (C) 2010, 2011 Canonical Ltd
505 #
506 # This program is free software; you can redistribute it and/or modify
507 # it under the terms of the GNU General Public License as published by
508
509=== modified file 'bzrlib/tests/features.py'
510--- bzrlib/tests/features.py 2010-12-24 22:40:27 +0000
511+++ bzrlib/tests/features.py 2011-01-12 16:51:15 +0000
512@@ -1,4 +1,4 @@
513-# Copyright (C) 2009, 2010 Canonical Ltd
514+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
515 #
516 # This program is free software; you can redistribute it and/or modify
517 # it under the terms of the GNU General Public License as published by
518
519=== modified file 'bzrlib/tests/http_server.py'
520--- bzrlib/tests/http_server.py 2010-12-24 22:40:27 +0000
521+++ bzrlib/tests/http_server.py 2011-01-12 16:51:15 +0000
522@@ -1,4 +1,4 @@
523-# Copyright (C) 2006-2010 Canonical Ltd
524+# Copyright (C) 2006-2011 Canonical Ltd
525 #
526 # This program is free software; you can redistribute it and/or modify
527 # it under the terms of the GNU General Public License as published by
528
529=== modified file 'bzrlib/tests/http_utils.py'
530--- bzrlib/tests/http_utils.py 2010-12-24 22:40:27 +0000
531+++ bzrlib/tests/http_utils.py 2011-01-12 16:51:15 +0000
532@@ -1,4 +1,4 @@
533-# Copyright (C) 2005-2010 Canonical Ltd
534+# Copyright (C) 2005-2011 Canonical Ltd
535 #
536 # This program is free software; you can redistribute it and/or modify
537 # it under the terms of the GNU General Public License as published by
538
539=== modified file 'bzrlib/tests/https_server.py'
540--- bzrlib/tests/https_server.py 2010-12-07 16:18:50 +0000
541+++ bzrlib/tests/https_server.py 2011-01-12 16:51:15 +0000
542@@ -1,4 +1,4 @@
543-# Copyright (C) 2007-2010 Canonical Ltd
544+# Copyright (C) 2007-2011 Canonical Ltd
545 #
546 # This program is free software; you can redistribute it and/or modify
547 # it under the terms of the GNU General Public License as published by
548
549=== modified file 'bzrlib/tests/per_branch/test_branch.py'
550--- bzrlib/tests/per_branch/test_branch.py 2010-12-07 09:06:39 +0000
551+++ bzrlib/tests/per_branch/test_branch.py 2011-01-12 16:51:15 +0000
552@@ -1,4 +1,4 @@
553-# Copyright (C) 2005-2010 Canonical Ltd
554+# Copyright (C) 2005-2011 Canonical Ltd
555 #
556 # This program is free software; you can redistribute it and/or modify
557 # it under the terms of the GNU General Public License as published by
558
559=== modified file 'bzrlib/tests/per_branch/test_parent.py'
560--- bzrlib/tests/per_branch/test_parent.py 2010-12-07 09:06:39 +0000
561+++ bzrlib/tests/per_branch/test_parent.py 2011-01-12 16:51:15 +0000
562@@ -1,4 +1,4 @@
563-# Copyright (C) 2005, 2006, 2007, 2009, 2010 Canonical Ltd
564+# Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 Canonical Ltd
565 #
566 # This program is free software; you can redistribute it and/or modify
567 # it under the terms of the GNU General Public License as published by
568
569=== modified file 'bzrlib/tests/per_controldir/test_controldir.py'
570--- bzrlib/tests/per_controldir/test_controldir.py 2010-12-24 22:40:27 +0000
571+++ bzrlib/tests/per_controldir/test_controldir.py 2011-01-12 16:51:15 +0000
572@@ -1,4 +1,4 @@
573-# Copyright (C) 2006-2010 Canonical Ltd
574+# Copyright (C) 2006-2011 Canonical Ltd
575 #
576 # This program is free software; you can redistribute it and/or modify
577 # it under the terms of the GNU General Public License as published by
578
579=== modified file 'bzrlib/tests/per_interrepository/test_interrepository.py'
580--- bzrlib/tests/per_interrepository/test_interrepository.py 2011-01-11 21:27:02 +0000
581+++ bzrlib/tests/per_interrepository/test_interrepository.py 2011-01-12 16:51:15 +0000
582@@ -1,4 +1,4 @@
583-# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
584+# Copyright (C) 2006-2009, 2011 Canonical Ltd
585 #
586 # This program is free software; you can redistribute it and/or modify
587 # it under the terms of the GNU General Public License as published by
588
589=== modified file 'bzrlib/tests/per_merger.py'
590--- bzrlib/tests/per_merger.py 2010-12-24 22:40:27 +0000
591+++ bzrlib/tests/per_merger.py 2011-01-12 16:51:15 +0000
592@@ -1,4 +1,4 @@
593-# Copyright (C) 2009, 2010 Canonical Ltd
594+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
595 #
596 # This program is free software; you can redistribute it and/or modify
597 # it under the terms of the GNU General Public License as published by
598
599=== modified file 'bzrlib/tests/per_pack_repository.py'
600--- bzrlib/tests/per_pack_repository.py 2010-12-24 22:40:27 +0000
601+++ bzrlib/tests/per_pack_repository.py 2011-01-12 16:51:15 +0000
602@@ -1,4 +1,4 @@
603-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
604+# Copyright (C) 2008-2011 Canonical Ltd
605 #
606 # This program is free software; you can redistribute it and/or modify
607 # it under the terms of the GNU General Public License as published by
608
609=== modified file 'bzrlib/tests/per_repository/test_check.py'
610--- bzrlib/tests/per_repository/test_check.py 2010-12-16 13:15:42 +0000
611+++ bzrlib/tests/per_repository/test_check.py 2011-01-12 16:51:15 +0000
612@@ -1,4 +1,4 @@
613-# Copyright (C) 2007-2010 Canonical Ltd
614+# Copyright (C) 2007-2011 Canonical Ltd
615 #
616 # This program is free software; you can redistribute it and/or modify
617 # it under the terms of the GNU General Public License as published by
618
619=== modified file 'bzrlib/tests/per_repository/test_commit_builder.py'
620--- bzrlib/tests/per_repository/test_commit_builder.py 2010-12-16 13:15:42 +0000
621+++ bzrlib/tests/per_repository/test_commit_builder.py 2011-01-12 16:51:15 +0000
622@@ -1,4 +1,4 @@
623-# Copyright (C) 2006-2010 Canonical Ltd
624+# Copyright (C) 2006-2011 Canonical Ltd
625 #
626 # This program is free software; you can redistribute it and/or modify
627 # it under the terms of the GNU General Public License as published by
628@@ -1300,8 +1300,8 @@
629
630 def test_stacked_repositories_reject_commit_builder(self):
631 # As per bug 375013, committing to stacked repositories is currently
632- # broken, so repositories with fallbacks refuse to hand out a commit
633- # builder.
634+ # broken if we aren't in a chk repository. So old repositories with
635+ # fallbacks refuse to hand out a commit builder.
636 repo_basis = self.make_repository('basis')
637 branch = self.make_branch('local')
638 repo_local = branch.repository
639@@ -1309,10 +1309,14 @@
640 repo_local.add_fallback_repository(repo_basis)
641 except errors.UnstackableRepositoryFormat:
642 raise tests.TestNotApplicable("not a stackable format.")
643- repo_local.lock_write()
644- self.addCleanup(repo_local.unlock)
645- self.assertRaises(errors.BzrError, repo_local.get_commit_builder,
646- branch, [], branch.get_config())
647+ self.addCleanup(repo_local.lock_write().unlock)
648+ if not repo_local._format.supports_chks:
649+ self.assertRaises(errors.BzrError, repo_local.get_commit_builder,
650+ branch, [], branch.get_config())
651+ else:
652+ builder = repo_local.get_commit_builder(branch, [],
653+ branch.get_config())
654+ builder.abort()
655
656 def test_committer_no_username(self):
657 # Ensure that when no username is available but a committer is
658
659=== modified file 'bzrlib/tests/per_repository/test_repository.py'
660--- bzrlib/tests/per_repository/test_repository.py 2011-01-11 21:27:02 +0000
661+++ bzrlib/tests/per_repository/test_repository.py 2011-01-12 16:51:15 +0000
662@@ -1,4 +1,4 @@
663-# Copyright (C) 2006-2010 Canonical Ltd
664+# Copyright (C) 2006-2011 Canonical Ltd
665 #
666 # This program is free software; you can redistribute it and/or modify
667 # it under the terms of the GNU General Public License as published by
668
669=== modified file 'bzrlib/tests/per_repository/test_write_group.py'
670--- bzrlib/tests/per_repository/test_write_group.py 2010-02-11 09:27:55 +0000
671+++ bzrlib/tests/per_repository/test_write_group.py 2011-01-12 16:51:15 +0000
672@@ -1,4 +1,4 @@
673-# Copyright (C) 2007-2010 Canonical Ltd
674+# Copyright (C) 2007-2011 Canonical Ltd
675 #
676 # This program is free software; you can redistribute it and/or modify
677 # it under the terms of the GNU General Public License as published by
678@@ -363,6 +363,35 @@
679 sink.insert_stream((), repo._format, tokens)
680 self.assertEqual([True], call_log)
681
682+ def test_insert_stream_without_locking_fails_without_lock(self):
683+ repo = self.make_repository('test-repo')
684+ sink = repo._get_sink()
685+ stream = [('texts', [versionedfile.FulltextContentFactory(
686+ ('file-id', 'rev-id'), (), None, 'lines\n')])]
687+ self.assertRaises(errors.ObjectNotLocked,
688+ sink.insert_stream_without_locking, stream, repo._format)
689+
690+ def test_insert_stream_without_locking_fails_without_write_group(self):
691+ repo = self.make_repository('test-repo')
692+ self.addCleanup(repo.lock_write().unlock)
693+ sink = repo._get_sink()
694+ stream = [('texts', [versionedfile.FulltextContentFactory(
695+ ('file-id', 'rev-id'), (), None, 'lines\n')])]
696+ self.assertRaises(errors.BzrError,
697+ sink.insert_stream_without_locking, stream, repo._format)
698+
699+ def test_insert_stream_without_locking(self):
700+ repo = self.make_repository('test-repo')
701+ self.addCleanup(repo.lock_write().unlock)
702+ repo.start_write_group()
703+ sink = repo._get_sink()
704+ stream = [('texts', [versionedfile.FulltextContentFactory(
705+ ('file-id', 'rev-id'), (), None, 'lines\n')])]
706+ missing_keys = sink.insert_stream_without_locking(stream, repo._format)
707+ repo.commit_write_group()
708+ self.assertEqual(set(), missing_keys)
709+
710+
711
712 class TestResumeableWriteGroup(per_repository.TestCaseWithRepository):
713
714
715=== modified file 'bzrlib/tests/per_repository_reference/__init__.py'
716--- bzrlib/tests/per_repository_reference/__init__.py 2010-08-25 10:20:41 +0000
717+++ bzrlib/tests/per_repository_reference/__init__.py 2011-01-12 16:51:15 +0000
718@@ -1,4 +1,4 @@
719-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
720+# Copyright (C) 2008-2011 Canonical Ltd
721 #
722 # This program is free software; you can redistribute it and/or modify
723 # it under the terms of the GNU General Public License as published by
724@@ -24,12 +24,9 @@
725
726 from bzrlib import (
727 errors,
728- repository,
729 remote,
730 )
731-from bzrlib.branch import BzrBranchFormat7
732 from bzrlib.bzrdir import BzrDir
733-from bzrlib.repofmt.pack_repo import RepositoryFormatKnitPack6
734 from bzrlib.tests import multiply_tests
735 from bzrlib.tests.per_repository import (
736 all_repository_format_scenarios,
737@@ -89,18 +86,8 @@
738 result = []
739 for test_name, scenario_info in all_repository_format_scenarios():
740 format = scenario_info['repository_format']
741- if isinstance(format, remote.RemoteRepositoryFormat):
742- # This is a RemoteRepositoryFormat scenario. Force the scenario to
743- # use real branch and repository formats that support references.
744- scenario_info = dict(scenario_info)
745- format = remote.RemoteRepositoryFormat()
746- format._custom_format = RepositoryFormatKnitPack6()
747- scenario_info['repository_format'] = format
748- bzrdir_format = remote.RemoteBzrDirFormat()
749- bzrdir_format.repository_format = format
750- bzrdir_format.set_branch_format(BzrBranchFormat7())
751- scenario_info['bzrdir_format'] = bzrdir_format
752- if format.supports_external_lookups:
753+ if (isinstance(format, remote.RemoteRepositoryFormat)
754+ or format.supports_external_lookups):
755 result.append((test_name, scenario_info))
756 return result
757
758@@ -113,6 +100,7 @@
759 'bzrlib.tests.per_repository_reference.test_all_revision_ids',
760 'bzrlib.tests.per_repository_reference.test_break_lock',
761 'bzrlib.tests.per_repository_reference.test_check',
762+ 'bzrlib.tests.per_repository_reference.test_commit_with_stacking',
763 'bzrlib.tests.per_repository_reference.test_default_stacking',
764 'bzrlib.tests.per_repository_reference.test_fetch',
765 'bzrlib.tests.per_repository_reference.test_get_record_stream',
766
767=== added file 'bzrlib/tests/per_repository_reference/test_commit_with_stacking.py'
768--- bzrlib/tests/per_repository_reference/test_commit_with_stacking.py 1970-01-01 00:00:00 +0000
769+++ bzrlib/tests/per_repository_reference/test_commit_with_stacking.py 2011-01-12 16:51:15 +0000
770@@ -0,0 +1,220 @@
771+# Copyright (C) 2010, 2011 Canonical Ltd
772+#
773+# This program is free software; you can redistribute it and/or modify
774+# it under the terms of the GNU General Public License as published by
775+# the Free Software Foundation; either version 2 of the License, or
776+# (at your option) any later version.
777+#
778+# This program is distributed in the hope that it will be useful,
779+# but WITHOUT ANY WARRANTY; without even the implied warranty of
780+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
781+# GNU General Public License for more details.
782+#
783+# You should have received a copy of the GNU General Public License
784+# along with this program; if not, write to the Free Software
785+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
786+
787+
788+from bzrlib import (
789+ errors,
790+ remote,
791+ tests,
792+ urlutils,
793+ )
794+from bzrlib.tests.per_repository import TestCaseWithRepository
795+
796+
797+class TestCaseWithStackedTarget(TestCaseWithRepository):
798+
799+ r1_key = ('rev1-id',)
800+ r2_key = ('rev2-id',)
801+
802+ def make_stacked_target(self):
803+ base_tree = self.make_branch_and_tree('base')
804+ self.build_tree(['base/f1.txt'])
805+ base_tree.add(['f1.txt'], ['f1.txt-id'])
806+ base_tree.commit('initial', rev_id=self.r1_key[0])
807+ self.build_tree(['base/f2.txt'])
808+ base_tree.add(['f2.txt'], ['f2.txt-id'])
809+ base_tree.commit('base adds f2', rev_id=self.r2_key[0])
810+ stacked_url = urlutils.join(base_tree.branch.base, '../stacked')
811+ stacked_bzrdir = base_tree.bzrdir.sprout(stacked_url,
812+ stacked=True)
813+ if isinstance(stacked_bzrdir, remote.RemoteBzrDir):
814+ stacked_branch = stacked_bzrdir.open_branch()
815+ stacked_tree = stacked_branch.create_checkout('stacked',
816+ lightweight=True)
817+ else:
818+ stacked_tree = stacked_bzrdir.open_workingtree()
819+ return base_tree, stacked_tree
820+
821+
822+class TestCommitWithStacking(TestCaseWithStackedTarget):
823+
824+ def setUp(self):
825+ super(TestCommitWithStacking, self).setUp()
826+ format = self.repository_format
827+ if (not (isinstance(format, remote.RemoteRepositoryFormat)
828+ or format.supports_chks)):
829+ raise tests.TestNotApplicable('stacked commit only supported'
830+ ' for chk repositories')
831+
832+ def get_only_repo(self, tree):
833+ """Open just the repository used by this tree.
834+
835+ This returns a read locked Repository object without any stacking
836+ fallbacks.
837+ """
838+ repo = tree.branch.repository.bzrdir.open_repository()
839+ repo.lock_read()
840+ self.addCleanup(repo.unlock)
841+ return repo
842+
843+ def assertPresent(self, expected, vf, keys):
844+ """Check which of the supplied keys are present."""
845+ parent_map = vf.get_parent_map(keys)
846+ self.assertEqual(sorted(expected), sorted(parent_map))
847+
848+ def test_simple_commit(self):
849+ base_tree, stacked_tree = self.make_stacked_target()
850+ self.assertEqual(1,
851+ len(stacked_tree.branch.repository._fallback_repositories))
852+ self.build_tree_contents([('stacked/f1.txt', 'new content\n')])
853+ stacked_tree.commit('new content', rev_id='new-rev-id')
854+ # We open the repository without fallbacks to ensure the data is
855+ # locally true
856+ stacked_only_repo = self.get_only_repo(stacked_tree)
857+ # We should have the immediate parent inventory available, but not the
858+ # grandparent's
859+ self.assertPresent([self.r2_key],
860+ stacked_only_repo.inventories, [self.r1_key, self.r2_key])
861+ # And we should be able to pull this revision into another stacked
862+ # branch
863+ stacked2_branch = base_tree.bzrdir.sprout('stacked2',
864+ stacked=True).open_branch()
865+ stacked2_branch.repository.fetch(stacked_only_repo,
866+ revision_id='new-rev-id')
867+
868+ def test_merge_commit(self):
869+ base_tree, stacked_tree = self.make_stacked_target()
870+ self.build_tree_contents([('base/f1.txt', 'new content\n')])
871+ r3_key = ('rev3-id',)
872+ base_tree.commit('second base', rev_id=r3_key[0])
873+ to_be_merged_tree = base_tree.bzrdir.sprout('merged'
874+ ).open_workingtree()
875+ self.build_tree(['merged/f2.txt'])
876+ to_be_merged_tree.add(['f2.txt'], ['f2.txt-id'])
877+ to_merge_key = ('to-merge-rev-id',)
878+ to_be_merged_tree.commit('new-to-be-merged', rev_id=to_merge_key[0])
879+ stacked_tree.merge_from_branch(to_be_merged_tree.branch)
880+ merged_key = ('merged-rev-id',)
881+ stacked_tree.commit('merge', rev_id=merged_key[0])
882+ # to-merge isn't in base, so it should be in stacked.
883+ # rev3-id is a parent of a revision we have, so we should have the
884+ # inventory, but not the revision.
885+ # merged has a parent of r2, so we should also have r2's
886+ # inventory-but-not-revision.
887+ # Nothing has r1 directly, so we shouldn't have anything present for it
888+ stacked_only_repo = self.get_only_repo(stacked_tree)
889+ all_keys = [self.r1_key, self.r2_key, r3_key, to_merge_key, merged_key]
890+ self.assertPresent([to_merge_key, merged_key],
891+ stacked_only_repo.revisions, all_keys)
892+ self.assertPresent([self.r2_key, r3_key, to_merge_key, merged_key],
893+ stacked_only_repo.inventories, all_keys)
894+
895+ def test_merge_from_master(self):
896+ base_tree, stacked_tree = self.make_stacked_target()
897+ self.build_tree_contents([('base/f1.txt', 'new content\n')])
898+ r3_key = ('rev3-id',)
899+ base_tree.commit('second base', rev_id=r3_key[0])
900+ stacked_tree.merge_from_branch(base_tree.branch)
901+ merged_key = ('merged-rev-id',)
902+ stacked_tree.commit('merge', rev_id=merged_key[0])
903+ all_keys = [self.r1_key, self.r2_key, r3_key, merged_key]
904+ # We shouldn't have any of the base revisions in the local repo, but we
905+ # should have both base inventories.
906+ stacked_only_repo = self.get_only_repo(stacked_tree)
907+ self.assertPresent([merged_key],
908+ stacked_only_repo.revisions, all_keys)
909+ self.assertPresent([self.r2_key, r3_key, merged_key],
910+ stacked_only_repo.inventories, all_keys)
911+
912+ def test_multi_stack(self):
913+ """base + stacked + stacked-on-stacked"""
914+ base_tree, stacked_tree = self.make_stacked_target()
915+ self.build_tree(['stacked/f3.txt'])
916+ stacked_tree.add(['f3.txt'], ['f3.txt-id'])
917+ stacked_key = ('stacked-rev-id',)
918+ stacked_tree.commit('add f3', rev_id=stacked_key[0])
919+ stacked_only_repo = self.get_only_repo(stacked_tree)
920+ self.assertPresent([self.r2_key], stacked_only_repo.inventories,
921+ [self.r1_key, self.r2_key])
922+ # This ensures we get a Remote URL, rather than a local one.
923+ stacked2_url = urlutils.join(base_tree.branch.base, '../stacked2')
924+ stacked2_bzrdir = stacked_tree.bzrdir.sprout(stacked2_url,
925+ revision_id=self.r1_key[0],
926+ stacked=True)
927+ if isinstance(stacked2_bzrdir, remote.RemoteBzrDir):
928+ stacked2_branch = stacked2_bzrdir.open_branch()
929+ stacked2_tree = stacked2_branch.create_checkout('stacked2',
930+ lightweight=True)
931+ else:
932+ stacked2_tree = stacked2_bzrdir.open_workingtree()
933+ # stacked2 is stacked on stacked, but its content is rev1, so
934+ # it needs to pull the basis information from a fallback-of-fallback.
935+ self.build_tree(['stacked2/f3.txt'])
936+ stacked2_only_repo = self.get_only_repo(stacked2_tree)
937+ self.assertPresent([], stacked2_only_repo.inventories,
938+ [self.r1_key, self.r2_key])
939+ stacked2_tree.add(['f3.txt'], ['f3.txt-id'])
940+ stacked2_tree.commit('add f3', rev_id='stacked2-rev-id')
941+ # We added data to this read-locked repo, so refresh it
942+ stacked2_only_repo.refresh_data()
943+ self.assertPresent([self.r1_key], stacked2_only_repo.inventories,
944+ [self.r1_key, self.r2_key])
945+
946+ def test_commit_with_ghosts_fails(self):
947+ base_tree, stacked_tree = self.make_stacked_target()
948+ stacked_tree.set_parent_ids([stacked_tree.last_revision(),
949+ 'ghost-rev-id'])
950+ self.assertRaises(errors.BzrError,
951+ stacked_tree.commit, 'failed_commit')
952+
953+ def test_commit_with_ghost_in_ancestry(self):
954+ base_tree, stacked_tree = self.make_stacked_target()
955+ self.build_tree_contents([('base/f1.txt', 'new content\n')])
956+ r3_key = ('rev3-id',)
957+ base_tree.commit('second base', rev_id=r3_key[0])
958+ to_be_merged_tree = base_tree.bzrdir.sprout('merged'
959+ ).open_workingtree()
960+ self.build_tree(['merged/f2.txt'])
961+ to_be_merged_tree.add(['f2.txt'], ['f2.txt-id'])
962+ ghost_key = ('ghost-rev-id',)
963+ to_be_merged_tree.set_parent_ids([r3_key[0], ghost_key[0]])
964+ to_merge_key = ('to-merge-rev-id',)
965+ to_be_merged_tree.commit('new-to-be-merged', rev_id=to_merge_key[0])
966+ stacked_tree.merge_from_branch(to_be_merged_tree.branch)
967+ merged_key = ('merged-rev-id',)
968+ stacked_tree.commit('merge', rev_id=merged_key[0])
969+ # vs test_merge_commit, the fetch for 'merge_from_branch' should
970+ # already have handled that 'ghost-rev-id' is a ghost, and commit
971+ # should not try to fill it in at this point.
972+ stacked_only_repo = self.get_only_repo(stacked_tree)
973+ all_keys = [self.r1_key, self.r2_key, r3_key, to_merge_key, merged_key,
974+ ghost_key]
975+ self.assertPresent([to_merge_key, merged_key],
976+ stacked_only_repo.revisions, all_keys)
977+ self.assertPresent([self.r2_key, r3_key, to_merge_key, merged_key],
978+ stacked_only_repo.inventories, all_keys)
979+
980+
981+class TestCommitStackedFailsAppropriately(TestCaseWithStackedTarget):
982+
983+ def test_stacked_commit_fails_on_old_formats(self):
984+ base_tree, stacked_tree = self.make_stacked_target()
985+ format = stacked_tree.branch.repository._format
986+ if format.supports_chks:
987+ stacked_tree.commit('should succeed')
988+ else:
989+ self.assertRaises(errors.BzrError,
990+ stacked_tree.commit, 'unsupported format')
991
992=== modified file 'bzrlib/tests/per_transport.py'
993--- bzrlib/tests/per_transport.py 2010-12-16 11:31:14 +0000
994+++ bzrlib/tests/per_transport.py 2011-01-12 16:51:15 +0000
995@@ -1,4 +1,4 @@
996-# Copyright (C) 2005-2010 Canonical Ltd
997+# Copyright (C) 2005-2011 Canonical Ltd
998 #
999 # This program is free software; you can redistribute it and/or modify
1000 # it under the terms of the GNU General Public License as published by
1001
1002=== modified file 'bzrlib/tests/per_uifactory/__init__.py'
1003--- bzrlib/tests/per_uifactory/__init__.py 2010-12-16 11:31:14 +0000
1004+++ bzrlib/tests/per_uifactory/__init__.py 2011-01-12 16:51:15 +0000
1005@@ -1,4 +1,4 @@
1006-# Copyright (C) 2009, 2010 Canonical Ltd
1007+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1008 #
1009 # This program is free software; you can redistribute it and/or modify
1010 # it under the terms of the GNU General Public License as published by
1011
1012=== modified file 'bzrlib/tests/per_workingtree/test_add_reference.py'
1013--- bzrlib/tests/per_workingtree/test_add_reference.py 2011-01-11 21:27:02 +0000
1014+++ bzrlib/tests/per_workingtree/test_add_reference.py 2011-01-12 16:51:15 +0000
1015@@ -1,4 +1,4 @@
1016-# Copyright (C) 2006, 2007 Canonical Ltd
1017+# Copyright (C) 2006-2009, 2011 Canonical Ltd
1018 #
1019 # This program is free software; you can redistribute it and/or modify
1020 # it under the terms of the GNU General Public License as published by
1021
1022=== modified file 'bzrlib/tests/per_workingtree/test_workingtree.py'
1023--- bzrlib/tests/per_workingtree/test_workingtree.py 2011-01-11 21:27:02 +0000
1024+++ bzrlib/tests/per_workingtree/test_workingtree.py 2011-01-12 16:51:15 +0000
1025@@ -1,4 +1,4 @@
1026-# Copyright (C) 2006-2010 Canonical Ltd
1027+# Copyright (C) 2006-2011 Canonical Ltd
1028 # Authors: Robert Collins <robert.collins@canonical.com>
1029 # and others
1030 #
1031
1032=== modified file 'bzrlib/tests/script.py'
1033--- bzrlib/tests/script.py 2010-12-24 22:40:27 +0000
1034+++ bzrlib/tests/script.py 2011-01-12 16:51:15 +0000
1035@@ -1,4 +1,4 @@
1036-# Copyright (C) 2009, 2010 Canonical Ltd
1037+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1038 #
1039 # This program is free software; you can redistribute it and/or modify
1040 # it under the terms of the GNU General Public License as published by
1041
1042=== modified file 'bzrlib/tests/stub_sftp.py'
1043--- bzrlib/tests/stub_sftp.py 2010-12-24 22:40:27 +0000
1044+++ bzrlib/tests/stub_sftp.py 2011-01-12 16:51:15 +0000
1045@@ -1,4 +1,4 @@
1046-# Copyright (C) 2005, 2006, 2008, 2009, 2010 Robey Pointer <robey@lag.net>, Canonical Ltd
1047+# Copyright (C) 2005, 2006, 2008-2011 Robey Pointer <robey@lag.net>, Canonical Ltd
1048 #
1049 # This program is free software; you can redistribute it and/or modify
1050 # it under the terms of the GNU General Public License as published by
1051
1052=== modified file 'bzrlib/tests/test__annotator.py'
1053--- bzrlib/tests/test__annotator.py 2010-12-24 22:40:27 +0000
1054+++ bzrlib/tests/test__annotator.py 2011-01-12 16:51:15 +0000
1055@@ -1,4 +1,4 @@
1056-# Copyright (C) 2009, 2010 Canonical Ltd
1057+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1058 #
1059 # This program is free software; you can redistribute it and/or modify
1060 # it under the terms of the GNU General Public License as published by
1061
1062=== modified file 'bzrlib/tests/test__chk_map.py'
1063--- bzrlib/tests/test__chk_map.py 2010-12-24 22:40:27 +0000
1064+++ bzrlib/tests/test__chk_map.py 2011-01-12 16:51:15 +0000
1065@@ -1,4 +1,4 @@
1066-# Copyright (C) 2009, 2010 Canonical Ltd
1067+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1068 #
1069 # This program is free software; you can redistribute it and/or modify
1070 # it under the terms of the GNU General Public License as published by
1071
1072=== modified file 'bzrlib/tests/test__dirstate_helpers.py'
1073--- bzrlib/tests/test__dirstate_helpers.py 2010-12-09 04:26:53 +0000
1074+++ bzrlib/tests/test__dirstate_helpers.py 2011-01-12 16:51:15 +0000
1075@@ -1,4 +1,4 @@
1076-# Copyright (C) 2007-2010 Canonical Ltd
1077+# Copyright (C) 2007-2011 Canonical Ltd
1078 #
1079 # This program is free software; you can redistribute it and/or modify
1080 # it under the terms of the GNU General Public License as published by
1081
1082=== modified file 'bzrlib/tests/test__groupcompress.py'
1083--- bzrlib/tests/test__groupcompress.py 2010-12-24 22:40:27 +0000
1084+++ bzrlib/tests/test__groupcompress.py 2011-01-12 16:51:15 +0000
1085@@ -1,4 +1,4 @@
1086-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1087+# Copyright (C) 2008-2011 Canonical Ltd
1088 #
1089 # This program is free software; you can redistribute it and/or modify
1090 # it under the terms of the GNU General Public License as published by
1091
1092=== modified file 'bzrlib/tests/test__known_graph.py'
1093--- bzrlib/tests/test__known_graph.py 2010-12-24 22:40:27 +0000
1094+++ bzrlib/tests/test__known_graph.py 2011-01-12 16:51:15 +0000
1095@@ -1,4 +1,4 @@
1096-# Copyright (C) 2009, 2010 Canonical Ltd
1097+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1098 #
1099 # This program is free software; you can redistribute it and/or modify
1100 # it under the terms of the GNU General Public License as published by
1101
1102=== modified file 'bzrlib/tests/test__simple_set.py'
1103--- bzrlib/tests/test__simple_set.py 2010-12-24 22:40:27 +0000
1104+++ bzrlib/tests/test__simple_set.py 2011-01-12 16:51:15 +0000
1105@@ -1,4 +1,4 @@
1106-# Copyright (C) 2009, 2010 Canonical Ltd
1107+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1108 #
1109 # This program is free software; you can redistribute it and/or modify
1110 # it under the terms of the GNU General Public License as published by
1111
1112=== modified file 'bzrlib/tests/test__static_tuple.py'
1113--- bzrlib/tests/test__static_tuple.py 2010-12-24 22:40:27 +0000
1114+++ bzrlib/tests/test__static_tuple.py 2011-01-12 16:51:15 +0000
1115@@ -1,4 +1,4 @@
1116-# Copyright (C) 2009, 2010 Canonical Ltd
1117+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1118 #
1119 # This program is free software; you can redistribute it and/or modify
1120 # it under the terms of the GNU General Public License as published by
1121
1122=== modified file 'bzrlib/tests/test_ancestry.py'
1123--- bzrlib/tests/test_ancestry.py 2010-12-24 22:40:27 +0000
1124+++ bzrlib/tests/test_ancestry.py 2011-01-12 16:51:15 +0000
1125@@ -1,4 +1,4 @@
1126-# Copyright (C) 2005, 2007 Canonical Ltd
1127+# Copyright (C) 2005-2009, 2011 Canonical Ltd
1128 #
1129 # This program is free software; you can redistribute it and/or modify
1130 # it under the terms of the GNU General Public License as published by
1131
1132=== modified file 'bzrlib/tests/test_annotate.py'
1133--- bzrlib/tests/test_annotate.py 2010-12-24 22:40:27 +0000
1134+++ bzrlib/tests/test_annotate.py 2011-01-12 16:51:15 +0000
1135@@ -1,4 +1,4 @@
1136-# Copyright (C) 2006 Canonical Ltd
1137+# Copyright (C) 2006-2009, 2011 Canonical Ltd
1138 #
1139 # This program is free software; you can redistribute it and/or modify
1140 # it under the terms of the GNU General Public License as published by
1141
1142=== modified file 'bzrlib/tests/test_bad_files.py'
1143--- bzrlib/tests/test_bad_files.py 2010-12-24 22:40:27 +0000
1144+++ bzrlib/tests/test_bad_files.py 2011-01-12 16:51:15 +0000
1145@@ -1,4 +1,4 @@
1146-# Copyright (C) 2005, 2007 Canonical Ltd
1147+# Copyright (C) 2005, 2006, 2007, 2009, 2011 Canonical Ltd
1148 #
1149 # This program is free software; you can redistribute it and/or modify
1150 # it under the terms of the GNU General Public License as published by
1151
1152=== modified file 'bzrlib/tests/test_bisect_multi.py'
1153--- bzrlib/tests/test_bisect_multi.py 2010-12-24 22:40:27 +0000
1154+++ bzrlib/tests/test_bisect_multi.py 2011-01-12 16:51:15 +0000
1155@@ -1,4 +1,4 @@
1156-# Copyright (C) 2007 Canonical Ltd
1157+# Copyright (C) 2007, 2009, 2011 Canonical Ltd
1158 #
1159 # This program is free software; you can redistribute it and/or modify
1160 # it under the terms of the GNU General Public License as published by
1161
1162=== modified file 'bzrlib/tests/test_branch.py'
1163--- bzrlib/tests/test_branch.py 2010-12-14 23:14:44 +0000
1164+++ bzrlib/tests/test_branch.py 2011-01-12 16:51:15 +0000
1165@@ -1,4 +1,4 @@
1166-# Copyright (C) 2006-2010 Canonical Ltd
1167+# Copyright (C) 2006-2011 Canonical Ltd
1168 #
1169 # This program is free software; you can redistribute it and/or modify
1170 # it under the terms of the GNU General Public License as published by
1171
1172=== modified file 'bzrlib/tests/test_branchbuilder.py'
1173--- bzrlib/tests/test_branchbuilder.py 2010-12-24 22:40:27 +0000
1174+++ bzrlib/tests/test_branchbuilder.py 2011-01-12 16:51:15 +0000
1175@@ -1,4 +1,4 @@
1176-# Copyright (C) 2007, 2009 Canonical Ltd
1177+# Copyright (C) 2007-2011 Canonical Ltd
1178 #
1179 # This program is free software; you can redistribute it and/or modify
1180 # it under the terms of the GNU General Public License as published by
1181
1182=== modified file 'bzrlib/tests/test_btree_index.py'
1183--- bzrlib/tests/test_btree_index.py 2010-12-09 04:26:53 +0000
1184+++ bzrlib/tests/test_btree_index.py 2011-01-12 16:51:15 +0000
1185@@ -1,4 +1,4 @@
1186-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1187+# Copyright (C) 2008-2011 Canonical Ltd
1188 #
1189 # This program is free software; you can redistribute it and/or modify
1190 # it under the terms of the GNU General Public License as published by
1191
1192=== modified file 'bzrlib/tests/test_bundle.py'
1193--- bzrlib/tests/test_bundle.py 2010-12-24 22:40:27 +0000
1194+++ bzrlib/tests/test_bundle.py 2011-01-12 16:51:15 +0000
1195@@ -1,4 +1,4 @@
1196-# Copyright (C) 2005-2010 Canonical Ltd
1197+# Copyright (C) 2005-2011 Canonical Ltd
1198 #
1199 # This program is free software; you can redistribute it and/or modify
1200 # it under the terms of the GNU General Public License as published by
1201
1202=== modified file 'bzrlib/tests/test_bzrdir.py'
1203--- bzrlib/tests/test_bzrdir.py 2010-12-15 00:38:15 +0000
1204+++ bzrlib/tests/test_bzrdir.py 2011-01-12 16:51:15 +0000
1205@@ -1,4 +1,4 @@
1206-# Copyright (C) 2006-2010 Canonical Ltd
1207+# Copyright (C) 2006-2011 Canonical Ltd
1208 #
1209 # This program is free software; you can redistribute it and/or modify
1210 # it under the terms of the GNU General Public License as published by
1211
1212=== modified file 'bzrlib/tests/test_chk_serializer.py'
1213--- bzrlib/tests/test_chk_serializer.py 2010-12-24 22:40:27 +0000
1214+++ bzrlib/tests/test_chk_serializer.py 2011-01-12 16:51:15 +0000
1215@@ -1,4 +1,4 @@
1216-# Copyright (C) 2009 Canonical Ltd
1217+# Copyright (C) 2009, 2011 Canonical Ltd
1218 #
1219 # This program is free software; you can redistribute it and/or modify
1220 # it under the terms of the GNU General Public License as published by
1221
1222=== modified file 'bzrlib/tests/test_clean_tree.py'
1223--- bzrlib/tests/test_clean_tree.py 2010-12-24 22:40:27 +0000
1224+++ bzrlib/tests/test_clean_tree.py 2011-01-12 16:51:15 +0000
1225@@ -1,4 +1,4 @@
1226-# Copyright (C) 2009, 2010 Canonical Ltd
1227+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1228 #
1229 # This program is free software; you can redistribute it and/or modify
1230 # it under the terms of the GNU General Public License as published by
1231
1232=== modified file 'bzrlib/tests/test_commands.py'
1233--- bzrlib/tests/test_commands.py 2010-12-24 22:40:27 +0000
1234+++ bzrlib/tests/test_commands.py 2011-01-12 16:51:15 +0000
1235@@ -1,4 +1,4 @@
1236-# Copyright (C) 2005-2010 Canonical Ltd
1237+# Copyright (C) 2005-2011 Canonical Ltd
1238 #
1239 # This program is free software; you can redistribute it and/or modify
1240 # it under the terms of the GNU General Public License as published by
1241
1242=== modified file 'bzrlib/tests/test_commit.py'
1243--- bzrlib/tests/test_commit.py 2010-12-24 22:40:27 +0000
1244+++ bzrlib/tests/test_commit.py 2011-01-12 16:51:15 +0000
1245@@ -1,4 +1,4 @@
1246-# Copyright (C) 2005-2010 Canonical Ltd
1247+# Copyright (C) 2005-2011 Canonical Ltd
1248 #
1249 # This program is free software; you can redistribute it and/or modify
1250 # it under the terms of the GNU General Public License as published by
1251
1252=== modified file 'bzrlib/tests/test_commit_merge.py'
1253--- bzrlib/tests/test_commit_merge.py 2010-12-24 22:40:27 +0000
1254+++ bzrlib/tests/test_commit_merge.py 2011-01-12 16:51:15 +0000
1255@@ -1,4 +1,4 @@
1256-# Copyright (C) 2005, 2006 Canonical Ltd
1257+# Copyright (C) 2005, 2006, 2007, 2009, 2011 Canonical Ltd
1258 #
1259 # This program is free software; you can redistribute it and/or modify
1260 # it under the terms of the GNU General Public License as published by
1261
1262=== modified file 'bzrlib/tests/test_config.py'
1263--- bzrlib/tests/test_config.py 2010-12-16 13:15:42 +0000
1264+++ bzrlib/tests/test_config.py 2011-01-12 16:51:15 +0000
1265@@ -1,4 +1,4 @@
1266-# Copyright (C) 2005-2010 Canonical Ltd
1267+# Copyright (C) 2005-2011 Canonical Ltd
1268 #
1269 # This program is free software; you can redistribute it and/or modify
1270 # it under the terms of the GNU General Public License as published by
1271
1272=== modified file 'bzrlib/tests/test_conflicts.py'
1273--- bzrlib/tests/test_conflicts.py 2010-12-24 22:40:27 +0000
1274+++ bzrlib/tests/test_conflicts.py 2011-01-12 16:51:15 +0000
1275@@ -1,4 +1,4 @@
1276-# Copyright (C) 2005-2010 Canonical Ltd
1277+# Copyright (C) 2005-2011 Canonical Ltd
1278 #
1279 # This program is free software; you can redistribute it and/or modify
1280 # it under the terms of the GNU General Public License as published by
1281
1282=== modified file 'bzrlib/tests/test_crash.py'
1283--- bzrlib/tests/test_crash.py 2010-12-24 22:40:27 +0000
1284+++ bzrlib/tests/test_crash.py 2011-01-12 16:51:15 +0000
1285@@ -1,4 +1,4 @@
1286-# Copyright (C) 2009, 2010 Canonical Ltd
1287+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1288 #
1289 # This program is free software; you can redistribute it and/or modify
1290 # it under the terms of the GNU General Public License as published by
1291
1292=== modified file 'bzrlib/tests/test_diff.py'
1293--- bzrlib/tests/test_diff.py 2010-12-16 13:15:42 +0000
1294+++ bzrlib/tests/test_diff.py 2011-01-12 16:51:15 +0000
1295@@ -1,4 +1,4 @@
1296-# Copyright (C) 2005-2010 Canonical Ltd
1297+# Copyright (C) 2005-2011 Canonical Ltd
1298 #
1299 # This program is free software; you can redistribute it and/or modify
1300 # it under the terms of the GNU General Public License as published by
1301
1302=== modified file 'bzrlib/tests/test_dirstate.py'
1303--- bzrlib/tests/test_dirstate.py 2010-12-24 22:40:27 +0000
1304+++ bzrlib/tests/test_dirstate.py 2011-01-12 16:51:15 +0000
1305@@ -1,4 +1,4 @@
1306-# Copyright (C) 2006-2010 Canonical Ltd
1307+# Copyright (C) 2006-2011 Canonical Ltd
1308 #
1309 # This program is free software; you can redistribute it and/or modify
1310 # it under the terms of the GNU General Public License as published by
1311
1312=== modified file 'bzrlib/tests/test_eol_filters.py'
1313--- bzrlib/tests/test_eol_filters.py 2010-12-24 22:40:27 +0000
1314+++ bzrlib/tests/test_eol_filters.py 2011-01-12 16:51:15 +0000
1315@@ -1,4 +1,4 @@
1316-# Copyright (C) 2009 Canonical Ltd
1317+# Copyright (C) 2009, 2011 Canonical Ltd
1318 #
1319 # This program is free software; you can redistribute it and/or modify
1320 # it under the terms of the GNU General Public License as published by
1321
1322=== modified file 'bzrlib/tests/test_errors.py'
1323--- bzrlib/tests/test_errors.py 2010-12-24 22:40:27 +0000
1324+++ bzrlib/tests/test_errors.py 2011-01-12 16:51:15 +0000
1325@@ -1,4 +1,4 @@
1326-# Copyright (C) 2006-2010 Canonical Ltd
1327+# Copyright (C) 2006-2011 Canonical Ltd
1328 #
1329 # This program is free software; you can redistribute it and/or modify
1330 # it under the terms of the GNU General Public License as published by
1331
1332=== modified file 'bzrlib/tests/test_extract.py'
1333--- bzrlib/tests/test_extract.py 2010-12-24 22:40:27 +0000
1334+++ bzrlib/tests/test_extract.py 2011-01-12 16:51:15 +0000
1335@@ -1,4 +1,4 @@
1336-# Copyright (C) 2006 Canonical Ltd
1337+# Copyright (C) 2006, 2007, 2009, 2011 Canonical Ltd
1338 #
1339 # This program is free software; you can redistribute it and/or modify
1340 # it under the terms of the GNU General Public License as published by
1341
1342=== modified file 'bzrlib/tests/test_fetch.py'
1343--- bzrlib/tests/test_fetch.py 2010-12-24 22:40:27 +0000
1344+++ bzrlib/tests/test_fetch.py 2011-01-12 16:51:15 +0000
1345@@ -1,4 +1,4 @@
1346-# Copyright (C) 2005, 2007, 2010 Canonical Ltd
1347+# Copyright (C) 2005-2011 Canonical Ltd
1348 #
1349 # This program is free software; you can redistribute it and/or modify
1350 # it under the terms of the GNU General Public License as published by
1351
1352=== modified file 'bzrlib/tests/test_foreign.py'
1353--- bzrlib/tests/test_foreign.py 2010-12-20 12:01:56 +0000
1354+++ bzrlib/tests/test_foreign.py 2011-01-12 16:51:15 +0000
1355@@ -1,4 +1,4 @@
1356-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1357+# Copyright (C) 2008-2011 Canonical Ltd
1358 #
1359 # This program is free software; you can redistribute it and/or modify
1360 # it under the terms of the GNU General Public License as published by
1361
1362=== modified file 'bzrlib/tests/test_ftp_transport.py'
1363--- bzrlib/tests/test_ftp_transport.py 2010-12-24 22:40:27 +0000
1364+++ bzrlib/tests/test_ftp_transport.py 2011-01-12 16:51:15 +0000
1365@@ -1,4 +1,4 @@
1366-# Copyright (C) 2006, 2010 Canonical Ltd
1367+# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
1368 #
1369 # This program is free software; you can redistribute it and/or modify
1370 # it under the terms of the GNU General Public License as published by
1371
1372=== modified file 'bzrlib/tests/test_generate_docs.py'
1373--- bzrlib/tests/test_generate_docs.py 2010-12-24 22:40:27 +0000
1374+++ bzrlib/tests/test_generate_docs.py 2011-01-12 16:51:15 +0000
1375@@ -1,4 +1,4 @@
1376-# Copyright (C) 2007 Canonical Ltd
1377+# Copyright (C) 2007, 2009, 2011 Canonical Ltd
1378 #
1379 # This program is free software; you can redistribute it and/or modify
1380 # it under the terms of the GNU General Public License as published by
1381
1382=== modified file 'bzrlib/tests/test_generate_ids.py'
1383--- bzrlib/tests/test_generate_ids.py 2010-12-24 22:40:27 +0000
1384+++ bzrlib/tests/test_generate_ids.py 2011-01-12 16:51:15 +0000
1385@@ -1,4 +1,4 @@
1386-# Copyright (C) 2006 Canonical Ltd
1387+# Copyright (C) 2006, 2007, 2009, 2011 Canonical Ltd
1388 #
1389 # This program is free software; you can redistribute it and/or modify
1390 # it under the terms of the GNU General Public License as published by
1391
1392=== modified file 'bzrlib/tests/test_globbing.py'
1393--- bzrlib/tests/test_globbing.py 2010-12-24 22:40:27 +0000
1394+++ bzrlib/tests/test_globbing.py 2011-01-12 16:51:15 +0000
1395@@ -1,4 +1,4 @@
1396-# Copyright (C) 2006-2010 Canonical Ltd
1397+# Copyright (C) 2006-2011 Canonical Ltd
1398 # -*- coding: utf-8 -*-
1399 #
1400 # This program is free software; you can redistribute it and/or modify
1401
1402=== modified file 'bzrlib/tests/test_gpg.py'
1403--- bzrlib/tests/test_gpg.py 2010-12-24 22:40:27 +0000
1404+++ bzrlib/tests/test_gpg.py 2011-01-12 16:51:15 +0000
1405@@ -1,4 +1,4 @@
1406-# Copyright (C) 2005 Canonical Ltd
1407+# Copyright (C) 2005, 2006, 2007, 2009, 2011 Canonical Ltd
1408 # Authors: Robert Collins <robert.collins@canonical.com>
1409 #
1410 # This program is free software; you can redistribute it and/or modify
1411
1412=== modified file 'bzrlib/tests/test_graph.py'
1413--- bzrlib/tests/test_graph.py 2010-12-24 22:40:27 +0000
1414+++ bzrlib/tests/test_graph.py 2011-01-12 16:51:15 +0000
1415@@ -1,4 +1,4 @@
1416-# Copyright (C) 2007-2010 Canonical Ltd
1417+# Copyright (C) 2007-2011 Canonical Ltd
1418 #
1419 # This program is free software; you can redistribute it and/or modify
1420 # it under the terms of the GNU General Public License as published by
1421
1422=== modified file 'bzrlib/tests/test_groupcompress.py'
1423--- bzrlib/tests/test_groupcompress.py 2010-12-09 04:26:53 +0000
1424+++ bzrlib/tests/test_groupcompress.py 2011-01-12 16:51:15 +0000
1425@@ -1,4 +1,4 @@
1426-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1427+# Copyright (C) 2008-2011 Canonical Ltd
1428 #
1429 # This program is free software; you can redistribute it and/or modify
1430 # it under the terms of the GNU General Public License as published by
1431
1432=== modified file 'bzrlib/tests/test_hashcache.py'
1433--- bzrlib/tests/test_hashcache.py 2010-12-24 22:40:27 +0000
1434+++ bzrlib/tests/test_hashcache.py 2011-01-12 16:51:15 +0000
1435@@ -1,4 +1,4 @@
1436-# Copyright (C) 2005, 2006 Canonical Ltd
1437+# Copyright (C) 2005-2009, 2011 Canonical Ltd
1438 #
1439 # This program is free software; you can redistribute it and/or modify
1440 # it under the terms of the GNU General Public License as published by
1441
1442=== modified file 'bzrlib/tests/test_help.py'
1443--- bzrlib/tests/test_help.py 2010-12-24 22:40:27 +0000
1444+++ bzrlib/tests/test_help.py 2011-01-12 16:51:15 +0000
1445@@ -1,4 +1,4 @@
1446-# Copyright (C) 2007-2010 Canonical Ltd
1447+# Copyright (C) 2007-2011 Canonical Ltd
1448 #
1449 # This program is free software; you can redistribute it and/or modify
1450 # it under the terms of the GNU General Public License as published by
1451
1452=== modified file 'bzrlib/tests/test_http.py'
1453--- bzrlib/tests/test_http.py 2010-12-16 17:17:39 +0000
1454+++ bzrlib/tests/test_http.py 2011-01-12 16:51:15 +0000
1455@@ -1,4 +1,4 @@
1456-# Copyright (C) 2005-2010 Canonical Ltd
1457+# Copyright (C) 2005-2011 Canonical Ltd
1458 #
1459 # This program is free software; you can redistribute it and/or modify
1460 # it under the terms of the GNU General Public License as published by
1461
1462=== modified file 'bzrlib/tests/test_https_ca_bundle.py'
1463--- bzrlib/tests/test_https_ca_bundle.py 2010-12-24 22:40:27 +0000
1464+++ bzrlib/tests/test_https_ca_bundle.py 2011-01-12 16:51:15 +0000
1465@@ -1,4 +1,4 @@
1466-# Copyright (C) 2007 Canonical Ltd
1467+# Copyright (C) 2007, 2009, 2010, 2011 Canonical Ltd
1468 #
1469 # This program is free software; you can redistribute it and/or modify
1470 # it under the terms of the GNU General Public License as published by
1471
1472=== modified file 'bzrlib/tests/test_ignores.py'
1473--- bzrlib/tests/test_ignores.py 2010-12-24 22:40:27 +0000
1474+++ bzrlib/tests/test_ignores.py 2011-01-12 16:51:15 +0000
1475@@ -1,4 +1,4 @@
1476-# Copyright (C) 2006-2010 Canonical Ltd
1477+# Copyright (C) 2006-2011 Canonical Ltd
1478 #
1479 # This program is free software; you can redistribute it and/or modify
1480 # it under the terms of the GNU General Public License as published by
1481
1482=== modified file 'bzrlib/tests/test_import_tariff.py'
1483--- bzrlib/tests/test_import_tariff.py 2010-12-16 12:12:16 +0000
1484+++ bzrlib/tests/test_import_tariff.py 2011-01-12 16:51:15 +0000
1485@@ -1,4 +1,4 @@
1486-# Copyright (C) 2010 Canonical Ltd
1487+# Copyright (C) 2010, 2011 Canonical Ltd
1488 #
1489 # This program is free software; you can redistribute it and/or modify
1490 # it under the terms of the GNU General Public License as published by
1491
1492=== modified file 'bzrlib/tests/test_info.py'
1493--- bzrlib/tests/test_info.py 2010-12-24 22:40:27 +0000
1494+++ bzrlib/tests/test_info.py 2011-01-12 16:51:15 +0000
1495@@ -1,4 +1,4 @@
1496-# Copyright (C) 2007-2010 Canonical Ltd
1497+# Copyright (C) 2007-2011 Canonical Ltd
1498 #
1499 # This program is free software; you can redistribute it and/or modify
1500 # it under the terms of the GNU General Public License as published by
1501
1502=== modified file 'bzrlib/tests/test_inv.py'
1503--- bzrlib/tests/test_inv.py 2010-12-24 22:40:27 +0000
1504+++ bzrlib/tests/test_inv.py 2011-01-12 16:51:15 +0000
1505@@ -1,4 +1,4 @@
1506-# Copyright (C) 2005-2010 Canonical Ltd
1507+# Copyright (C) 2005-2011 Canonical Ltd
1508 #
1509 # This program is free software; you can redistribute it and/or modify
1510 # it under the terms of the GNU General Public License as published by
1511
1512=== modified file 'bzrlib/tests/test_inventory_delta.py'
1513--- bzrlib/tests/test_inventory_delta.py 2010-12-24 22:40:27 +0000
1514+++ bzrlib/tests/test_inventory_delta.py 2011-01-12 16:51:15 +0000
1515@@ -1,4 +1,4 @@
1516-# Copyright (C) 2009, 2010 Canonical Ltd
1517+# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1518 #
1519 # This program is free software; you can redistribute it and/or modify
1520 # it under the terms of the GNU General Public License as published by
1521
1522=== modified file 'bzrlib/tests/test_lazy_import.py'
1523--- bzrlib/tests/test_lazy_import.py 2010-12-24 22:40:27 +0000
1524+++ bzrlib/tests/test_lazy_import.py 2011-01-12 16:51:15 +0000
1525@@ -1,4 +1,4 @@
1526-# Copyright (C) 2006-2010 Canonical Ltd
1527+# Copyright (C) 2006-2011 Canonical Ltd
1528 #
1529 # This program is free software; you can redistribute it and/or modify
1530 # it under the terms of the GNU General Public License as published by
1531
1532=== modified file 'bzrlib/tests/test_library_state.py'
1533--- bzrlib/tests/test_library_state.py 2010-12-24 22:40:27 +0000
1534+++ bzrlib/tests/test_library_state.py 2011-01-12 16:51:15 +0000
1535@@ -1,4 +1,4 @@
1536-# Copyright (C) 2010 Canonical Ltd
1537+# Copyright (C) 2010, 2011 Canonical Ltd
1538 #
1539 # This program is free software; you can redistribute it and/or modify
1540 # it under the terms of the GNU General Public License as published by
1541
1542=== modified file 'bzrlib/tests/test_lock.py'
1543--- bzrlib/tests/test_lock.py 2010-12-09 04:26:53 +0000
1544+++ bzrlib/tests/test_lock.py 2011-01-12 16:51:15 +0000
1545@@ -1,4 +1,4 @@
1546-# Copyright (C) 2009, 2010 Canonical Ltd
1547+# Copyright (C) 2009, 2011 Canonical Ltd
1548 #
1549 # This program is free software; you can redistribute it and/or modify
1550 # it under the terms of the GNU General Public License as published by
1551
1552=== modified file 'bzrlib/tests/test_lockable_files.py'
1553--- bzrlib/tests/test_lockable_files.py 2010-12-24 22:40:27 +0000
1554+++ bzrlib/tests/test_lockable_files.py 2011-01-12 16:51:15 +0000
1555@@ -1,4 +1,4 @@
1556-# Copyright (C) 2005-2010 Canonical Ltd
1557+# Copyright (C) 2005-2011 Canonical Ltd
1558 #
1559 # This program is free software; you can redistribute it and/or modify
1560 # it under the terms of the GNU General Public License as published by
1561
1562=== modified file 'bzrlib/tests/test_lockdir.py'
1563--- bzrlib/tests/test_lockdir.py 2010-12-24 22:40:27 +0000
1564+++ bzrlib/tests/test_lockdir.py 2011-01-12 16:51:15 +0000
1565@@ -1,4 +1,4 @@
1566-# Copyright (C) 2006-2010 Canonical Ltd
1567+# Copyright (C) 2006-2011 Canonical Ltd
1568 #
1569 # This program is free software; you can redistribute it and/or modify
1570 # it under the terms of the GNU General Public License as published by
1571
1572=== modified file 'bzrlib/tests/test_lsprof.py'
1573--- bzrlib/tests/test_lsprof.py 2010-12-24 22:40:27 +0000
1574+++ bzrlib/tests/test_lsprof.py 2011-01-12 16:51:15 +0000
1575@@ -1,4 +1,4 @@
1576-# Copyright (C) 2007, 2009, 2010 Canonical Ltd
1577+# Copyright (C) 2007, 2009, 2010, 2011 Canonical Ltd
1578 #
1579 # This program is free software; you can redistribute it and/or modify
1580 # it under the terms of the GNU General Public License as published by
1581
1582=== modified file 'bzrlib/tests/test_merge3.py'
1583--- bzrlib/tests/test_merge3.py 2010-12-24 22:40:27 +0000
1584+++ bzrlib/tests/test_merge3.py 2011-01-12 16:51:15 +0000
1585@@ -1,4 +1,4 @@
1586-# Copyright (C) 2005-2010 Canonical Ltd
1587+# Copyright (C) 2005-2011 Canonical Ltd
1588 #
1589 # This program is free software; you can redistribute it and/or modify
1590 # it under the terms of the GNU General Public License as published by
1591
1592=== modified file 'bzrlib/tests/test_merge_core.py'
1593--- bzrlib/tests/test_merge_core.py 2010-12-24 22:40:27 +0000
1594+++ bzrlib/tests/test_merge_core.py 2011-01-12 16:51:15 +0000
1595@@ -1,4 +1,4 @@
1596-# Copyright (C) 2005-2010 Canonical Ltd
1597+# Copyright (C) 2005-2011 Canonical Ltd
1598 #
1599 # This program is free software; you can redistribute it and/or modify
1600 # it under the terms of the GNU General Public License as published by
1601
1602=== modified file 'bzrlib/tests/test_missing.py'
1603--- bzrlib/tests/test_missing.py 2010-12-24 22:40:27 +0000
1604+++ bzrlib/tests/test_missing.py 2011-01-12 16:51:15 +0000
1605@@ -1,4 +1,4 @@
1606-# Copyright (C) 2005 Canonical Ltd
1607+# Copyright (C) 2005-2009, 2011 Canonical Ltd
1608 #
1609 # This program is free software; you can redistribute it and/or modify
1610 # it under the terms of the GNU General Public License as published by
1611
1612=== modified file 'bzrlib/tests/test_msgeditor.py'
1613--- bzrlib/tests/test_msgeditor.py 2010-12-24 22:40:27 +0000
1614+++ bzrlib/tests/test_msgeditor.py 2011-01-12 16:51:15 +0000
1615@@ -1,4 +1,4 @@
1616-# Copyright (C) 2005-2010 Canonical Ltd
1617+# Copyright (C) 2005-2011 Canonical Ltd
1618 #
1619 # This program is free software; you can redistribute it and/or modify
1620 # it under the terms of the GNU General Public License as published by
1621
1622=== modified file 'bzrlib/tests/test_multiparent.py'
1623--- bzrlib/tests/test_multiparent.py 2010-12-24 22:40:27 +0000
1624+++ bzrlib/tests/test_multiparent.py 2011-01-12 16:51:15 +0000
1625@@ -1,4 +1,4 @@
1626-# Copyright (C) 2007 Canonical Ltd
1627+# Copyright (C) 2007, 2009, 2011 Canonical Ltd
1628 #
1629 # This program is free software; you can redistribute it and/or modify
1630 # it under the terms of the GNU General Public License as published by
1631
1632=== modified file 'bzrlib/tests/test_nonascii.py'
1633--- bzrlib/tests/test_nonascii.py 2010-12-24 22:40:27 +0000
1634+++ bzrlib/tests/test_nonascii.py 2011-01-12 16:51:15 +0000
1635@@ -1,4 +1,4 @@
1636-# Copyright (C) 2005 Canonical Ltd
1637+# Copyright (C) 2005, 2006, 2008, 2009, 2011 Canonical Ltd
1638 #
1639 # This program is free software; you can redistribute it and/or modify
1640 # it under the terms of the GNU General Public License as published by
1641
1642=== modified file 'bzrlib/tests/test_options.py'
1643--- bzrlib/tests/test_options.py 2010-12-24 22:40:27 +0000
1644+++ bzrlib/tests/test_options.py 2011-01-12 16:51:15 +0000
1645@@ -1,4 +1,4 @@
1646-# Copyright (C) 2005-2010 Canonical Ltd
1647+# Copyright (C) 2005-2011 Canonical Ltd
1648 #
1649 # This program is free software; you can redistribute it and/or modify
1650 # it under the terms of the GNU General Public License as published by
1651
1652=== modified file 'bzrlib/tests/test_osutils_encodings.py'
1653--- bzrlib/tests/test_osutils_encodings.py 2010-12-24 22:40:27 +0000
1654+++ bzrlib/tests/test_osutils_encodings.py 2011-01-12 16:51:15 +0000
1655@@ -1,4 +1,4 @@
1656-# Copyright (C) 2006-2010 Canonical Ltd
1657+# Copyright (C) 2006-2011 Canonical Ltd
1658 #
1659 # This program is free software; you can redistribute it and/or modify
1660 # it under the terms of the GNU General Public License as published by
1661
1662=== modified file 'bzrlib/tests/test_permissions.py'
1663--- bzrlib/tests/test_permissions.py 2010-12-24 22:40:27 +0000
1664+++ bzrlib/tests/test_permissions.py 2011-01-12 16:51:15 +0000
1665@@ -1,4 +1,4 @@
1666-# Copyright (C) 2005-2010 Canonical Ltd
1667+# Copyright (C) 2005-2011 Canonical Ltd
1668 # -*- coding: utf-8 -*-
1669 #
1670 # This program is free software; you can redistribute it and/or modify
1671
1672=== modified file 'bzrlib/tests/test_plugins.py'
1673--- bzrlib/tests/test_plugins.py 2010-12-16 15:29:10 +0000
1674+++ bzrlib/tests/test_plugins.py 2011-01-12 16:51:15 +0000
1675@@ -1,4 +1,4 @@
1676-# Copyright (C) 2005-2010 Canonical Ltd
1677+# Copyright (C) 2005-2011 Canonical Ltd
1678 #
1679 # This program is free software; you can redistribute it and/or modify
1680 # it under the terms of the GNU General Public License as published by
1681
1682=== modified file 'bzrlib/tests/test_progress.py'
1683--- bzrlib/tests/test_progress.py 2010-12-24 22:40:27 +0000
1684+++ bzrlib/tests/test_progress.py 2011-01-12 16:51:15 +0000
1685@@ -1,4 +1,4 @@
1686-# Copyright (C) 2006-2010 Canonical Ltd
1687+# Copyright (C) 2006-2011 Canonical Ltd
1688 #
1689 # This program is free software; you can redistribute it and/or modify
1690 # it under the terms of the GNU General Public License as published by
1691
1692=== modified file 'bzrlib/tests/test_read_bundle.py'
1693--- bzrlib/tests/test_read_bundle.py 2010-12-24 22:40:27 +0000
1694+++ bzrlib/tests/test_read_bundle.py 2011-01-12 16:51:15 +0000
1695@@ -1,4 +1,4 @@
1696-# Copyright (C) 2006 Canonical Ltd
1697+# Copyright (C) 2006-2011 Canonical Ltd
1698 #
1699 # This program is free software; you can redistribute it and/or modify
1700 # it under the terms of the GNU General Public License as published by
1701
1702=== modified file 'bzrlib/tests/test_reconcile.py'
1703--- bzrlib/tests/test_reconcile.py 2010-12-24 22:40:27 +0000
1704+++ bzrlib/tests/test_reconcile.py 2011-01-12 16:51:15 +0000
1705@@ -1,4 +1,4 @@
1706-# Copyright (C) 2006, 2008, 2009, 2010 Canonical Ltd
1707+# Copyright (C) 2006, 2008-2011 Canonical Ltd
1708 #
1709 # This program is free software; you can redistribute it and/or modify
1710 # it under the terms of the GNU General Public License as published by
1711
1712=== modified file 'bzrlib/tests/test_registry.py'
1713--- bzrlib/tests/test_registry.py 2010-12-24 22:40:27 +0000
1714+++ bzrlib/tests/test_registry.py 2011-01-12 16:51:15 +0000
1715@@ -1,4 +1,4 @@
1716-# Copyright (C) 2006, 2008, 2009, 2010 Canonical Ltd
1717+# Copyright (C) 2006, 2008-2011 Canonical Ltd
1718 #
1719 # This program is free software; you can redistribute it and/or modify
1720 # it under the terms of the GNU General Public License as published by
1721
1722=== modified file 'bzrlib/tests/test_remote.py'
1723--- bzrlib/tests/test_remote.py 2010-12-24 22:40:27 +0000
1724+++ bzrlib/tests/test_remote.py 2011-01-12 16:51:15 +0000
1725@@ -1,4 +1,4 @@
1726-# Copyright (C) 2006-2010 Canonical Ltd
1727+# Copyright (C) 2006-2011 Canonical Ltd
1728 #
1729 # This program is free software; you can redistribute it and/or modify
1730 # it under the terms of the GNU General Public License as published by
1731
1732=== modified file 'bzrlib/tests/test_revision.py'
1733--- bzrlib/tests/test_revision.py 2010-12-24 22:40:27 +0000
1734+++ bzrlib/tests/test_revision.py 2011-01-12 16:51:15 +0000
1735@@ -1,4 +1,4 @@
1736-# Copyright (C) 2005 Canonical Ltd
1737+# Copyright (C) 2005-2011 Canonical Ltd
1738 #
1739 # This program is free software; you can redistribute it and/or modify
1740 # it under the terms of the GNU General Public License as published by
1741
1742=== modified file 'bzrlib/tests/test_revisionspec.py'
1743--- bzrlib/tests/test_revisionspec.py 2010-12-24 22:40:27 +0000
1744+++ bzrlib/tests/test_revisionspec.py 2011-01-12 16:51:15 +0000
1745@@ -1,4 +1,4 @@
1746-# Copyright (C) 2005-2010 Canonical Ltd
1747+# Copyright (C) 2005-2011 Canonical Ltd
1748 #
1749 # This program is free software; you can redistribute it and/or modify
1750 # it under the terms of the GNU General Public License as published by
1751
1752=== modified file 'bzrlib/tests/test_revisiontree.py'
1753--- bzrlib/tests/test_revisiontree.py 2010-12-24 22:40:27 +0000
1754+++ bzrlib/tests/test_revisiontree.py 2011-01-12 16:51:15 +0000
1755@@ -1,4 +1,4 @@
1756-# Copyright (C) 2006, 2008, 2009, 2010 Canonical Ltd
1757+# Copyright (C) 2006, 2008-2011 Canonical Ltd
1758 # Authors: Robert Collins <robert.collins@canonical.com>
1759 #
1760 # This program is free software; you can redistribute it and/or modify
1761
1762=== modified file 'bzrlib/tests/test_rio.py'
1763--- bzrlib/tests/test_rio.py 2010-12-24 22:40:27 +0000
1764+++ bzrlib/tests/test_rio.py 2011-01-12 16:51:15 +0000
1765@@ -1,4 +1,4 @@
1766-# Copyright (C) 2005, 2006, 2007, 2009, 2010 Canonical Ltd
1767+# Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 Canonical Ltd
1768 #
1769 # This program is free software; you can redistribute it and/or modify
1770 # it under the terms of the GNU General Public License as published by
1771
1772=== modified file 'bzrlib/tests/test_rules.py'
1773--- bzrlib/tests/test_rules.py 2010-12-24 22:40:27 +0000
1774+++ bzrlib/tests/test_rules.py 2011-01-12 16:51:15 +0000
1775@@ -1,4 +1,4 @@
1776-# Copyright (C) 2008 Canonical Ltd
1777+# Copyright (C) 2008-2011 Canonical Ltd
1778 #
1779 # This program is free software; you can redistribute it and/or modify
1780 # it under the terms of the GNU General Public License as published by
1781
1782=== modified file 'bzrlib/tests/test_selftest.py'
1783--- bzrlib/tests/test_selftest.py 2011-01-11 07:01:27 +0000
1784+++ bzrlib/tests/test_selftest.py 2011-01-12 16:51:15 +0000
1785@@ -1,4 +1,4 @@
1786-# Copyright (C) 2005-2010 Canonical Ltd
1787+# Copyright (C) 2005-2011 Canonical Ltd
1788 #
1789 # This program is free software; you can redistribute it and/or modify
1790 # it under the terms of the GNU General Public License as published by
1791
1792=== modified file 'bzrlib/tests/test_server.py'
1793--- bzrlib/tests/test_server.py 2010-12-24 22:40:27 +0000
1794+++ bzrlib/tests/test_server.py 2011-01-12 16:51:15 +0000
1795@@ -1,4 +1,4 @@
1796-# Copyright (C) 2010 Canonical Ltd
1797+# Copyright (C) 2010, 2011 Canonical Ltd
1798 #
1799 # This program is free software; you can redistribute it and/or modify
1800 # it under the terms of the GNU General Public License as published by
1801
1802=== modified file 'bzrlib/tests/test_setup.py'
1803--- bzrlib/tests/test_setup.py 2010-12-24 22:40:27 +0000
1804+++ bzrlib/tests/test_setup.py 2011-01-12 16:51:15 +0000
1805@@ -1,4 +1,4 @@
1806-# Copyright (C) 2005, 2006, 2008, 2009, 2010 Canonical Ltd
1807+# Copyright (C) 2005, 2006, 2008-2011 Canonical Ltd
1808 #
1809 # This program is free software; you can redistribute it and/or modify
1810 # it under the terms of the GNU General Public License as published by
1811
1812=== modified file 'bzrlib/tests/test_sftp_transport.py'
1813--- bzrlib/tests/test_sftp_transport.py 2010-12-24 22:40:27 +0000
1814+++ bzrlib/tests/test_sftp_transport.py 2011-01-12 16:51:15 +0000
1815@@ -1,4 +1,4 @@
1816-# Copyright (C) 2005-2010 Robey Pointer <robey@lag.net>
1817+# Copyright (C) 2005-2011 Robey Pointer <robey@lag.net>
1818 # Copyright (C) 2005, 2006, 2007 Canonical Ltd
1819 #
1820 # This program is free software; you can redistribute it and/or modify
1821
1822=== modified file 'bzrlib/tests/test_smart.py'
1823--- bzrlib/tests/test_smart.py 2010-12-24 22:40:27 +0000
1824+++ bzrlib/tests/test_smart.py 2011-01-12 16:51:15 +0000
1825@@ -1,4 +1,4 @@
1826-# Copyright (C) 2006-2010 Canonical Ltd
1827+# Copyright (C) 2006-2011 Canonical Ltd
1828 #
1829 # This program is free software; you can redistribute it and/or modify
1830 # it under the terms of the GNU General Public License as published by
1831
1832=== modified file 'bzrlib/tests/test_smart_transport.py'
1833--- bzrlib/tests/test_smart_transport.py 2010-12-16 11:31:14 +0000
1834+++ bzrlib/tests/test_smart_transport.py 2011-01-12 16:51:15 +0000
1835@@ -1,4 +1,4 @@
1836-# Copyright (C) 2006-2010 Canonical Ltd
1837+# Copyright (C) 2006-2011 Canonical Ltd
1838 #
1839 # This program is free software; you can redistribute it and/or modify
1840 # it under the terms of the GNU General Public License as published by
1841
1842=== modified file 'bzrlib/tests/test_smtp_connection.py'
1843--- bzrlib/tests/test_smtp_connection.py 2010-12-24 22:40:27 +0000
1844+++ bzrlib/tests/test_smtp_connection.py 2011-01-12 16:51:15 +0000
1845@@ -1,4 +1,4 @@
1846-# Copyright (C) 2007, 2009, 2010 Canonical Ltd
1847+# Copyright (C) 2007, 2009, 2010, 2011 Canonical Ltd
1848 #
1849 # This program is free software; you can redistribute it and/or modify
1850 # it under the terms of the GNU General Public License as published by
1851
1852=== modified file 'bzrlib/tests/test_store.py'
1853--- bzrlib/tests/test_store.py 2010-12-24 22:40:27 +0000
1854+++ bzrlib/tests/test_store.py 2011-01-12 16:51:15 +0000
1855@@ -1,4 +1,4 @@
1856-# Copyright (C) 2005, 2007 Canonical Ltd
1857+# Copyright (C) 2005-2009, 2011 Canonical Ltd
1858 #
1859 # This program is free software; you can redistribute it and/or modify
1860 # it under the terms of the GNU General Public License as published by
1861
1862=== modified file 'bzrlib/tests/test_strace.py'
1863--- bzrlib/tests/test_strace.py 2010-12-24 22:40:27 +0000
1864+++ bzrlib/tests/test_strace.py 2011-01-12 16:51:15 +0000
1865@@ -1,4 +1,4 @@
1866-# Copyright (C) 2007-2010 Canonical Ltd
1867+# Copyright (C) 2007-2011 Canonical Ltd
1868 #
1869 # This program is free software; you can redistribute it and/or modify
1870 # it under the terms of the GNU General Public License as published by
1871
1872=== modified file 'bzrlib/tests/test_subsume.py'
1873--- bzrlib/tests/test_subsume.py 2010-12-24 22:40:27 +0000
1874+++ bzrlib/tests/test_subsume.py 2011-01-12 16:51:15 +0000
1875@@ -1,4 +1,4 @@
1876-# Copyright (C) 2006 Canonical Ltd
1877+# Copyright (C) 2006-2009, 2011 Canonical Ltd
1878 #
1879 # This program is free software; you can redistribute it and/or modify
1880 # it under the terms of the GNU General Public License as published by
1881
1882=== modified file 'bzrlib/tests/test_switch.py'
1883--- bzrlib/tests/test_switch.py 2010-12-24 22:40:27 +0000
1884+++ bzrlib/tests/test_switch.py 2011-01-12 16:51:15 +0000
1885@@ -1,4 +1,4 @@
1886-# Copyright (C) 2007-2010 Canonical Ltd
1887+# Copyright (C) 2007-2011 Canonical Ltd
1888 #
1889 # This program is free software; you can redistribute it and/or modify
1890 # it under the terms of the GNU General Public License as published by
1891
1892=== modified file 'bzrlib/tests/test_symbol_versioning.py'
1893--- bzrlib/tests/test_symbol_versioning.py 2010-12-24 22:40:27 +0000
1894+++ bzrlib/tests/test_symbol_versioning.py 2011-01-12 16:51:15 +0000
1895@@ -1,4 +1,4 @@
1896-# Copyright (C) 2006-2010 Canonical Ltd
1897+# Copyright (C) 2006-2011 Canonical Ltd
1898 #
1899 # This program is free software; you can redistribute it and/or modify
1900 # it under the terms of the GNU General Public License as published by
1901
1902=== modified file 'bzrlib/tests/test_test_server.py'
1903--- bzrlib/tests/test_test_server.py 2010-12-09 04:26:53 +0000
1904+++ bzrlib/tests/test_test_server.py 2011-01-12 16:51:15 +0000
1905@@ -1,4 +1,4 @@
1906-# Copyright (C) 2010 Canonical Ltd
1907+# Copyright (C) 2010, 2011 Canonical Ltd
1908 #
1909 # This program is free software; you can redistribute it and/or modify
1910 # it under the terms of the GNU General Public License as published by
1911
1912=== modified file 'bzrlib/tests/test_timestamp.py'
1913--- bzrlib/tests/test_timestamp.py 2010-12-24 23:15:44 +0000
1914+++ bzrlib/tests/test_timestamp.py 2011-01-12 16:51:15 +0000
1915@@ -1,4 +1,4 @@
1916-# Copyright (C) 2007 Canonical Ltd
1917+# Copyright (C) 2007, 2009, 2011 Canonical Ltd
1918 #
1919 # This program is free software; you can redistribute it and/or modify
1920 # it under the terms of the GNU General Public License as published by
1921
1922=== modified file 'bzrlib/tests/test_trace.py'
1923--- bzrlib/tests/test_trace.py 2010-12-16 13:15:42 +0000
1924+++ bzrlib/tests/test_trace.py 2011-01-12 16:51:15 +0000
1925@@ -1,4 +1,4 @@
1926-# Copyright (C) 2005-2010 Canonical Ltd
1927+# Copyright (C) 2005-2011 Canonical Ltd
1928 #
1929 # This program is free software; you can redistribute it and/or modify
1930 # it under the terms of the GNU General Public License as published by
1931
1932=== modified file 'bzrlib/tests/test_transactions.py'
1933--- bzrlib/tests/test_transactions.py 2010-12-24 22:40:27 +0000
1934+++ bzrlib/tests/test_transactions.py 2011-01-12 16:51:15 +0000
1935@@ -1,4 +1,4 @@
1936-# Copyright (C) 2005 Canonical Ltd
1937+# Copyright (C) 2005, 2006, 2009, 2011 Canonical Ltd
1938 # Authors: Robert Collins <robert.collins@canonical.com>
1939 #
1940 # This program is free software; you can redistribute it and/or modify
1941
1942=== modified file 'bzrlib/tests/test_transform.py'
1943--- bzrlib/tests/test_transform.py 2010-12-24 22:40:27 +0000
1944+++ bzrlib/tests/test_transform.py 2011-01-12 16:51:15 +0000
1945@@ -1,4 +1,4 @@
1946-# Copyright (C) 2006-2010 Canonical Ltd
1947+# Copyright (C) 2006-2011 Canonical Ltd
1948 #
1949 # This program is free software; you can redistribute it and/or modify
1950 # it under the terms of the GNU General Public License as published by
1951
1952=== modified file 'bzrlib/tests/test_transport.py'
1953--- bzrlib/tests/test_transport.py 2010-12-24 22:40:27 +0000
1954+++ bzrlib/tests/test_transport.py 2011-01-12 16:51:15 +0000
1955@@ -1,4 +1,4 @@
1956-# Copyright (C) 2005-2010 Canonical Ltd
1957+# Copyright (C) 2005-2011 Canonical Ltd
1958 #
1959 # This program is free software; you can redistribute it and/or modify
1960 # it under the terms of the GNU General Public License as published by
1961
1962=== modified file 'bzrlib/tests/test_transport_log.py'
1963--- bzrlib/tests/test_transport_log.py 2010-12-24 22:40:27 +0000
1964+++ bzrlib/tests/test_transport_log.py 2011-01-12 16:51:15 +0000
1965@@ -1,4 +1,4 @@
1966-# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1967+# Copyright (C) 2008-2011 Canonical Ltd
1968 #
1969 # This program is free software; you can redistribute it and/or modify
1970 # it under the terms of the GNU General Public License as published by
1971
1972=== modified file 'bzrlib/tests/test_tree.py'
1973--- bzrlib/tests/test_tree.py 2010-12-24 22:40:27 +0000
1974+++ bzrlib/tests/test_tree.py 2011-01-12 16:51:15 +0000
1975@@ -1,4 +1,4 @@
1976-# Copyright (C) 2006, 2008 Canonical Ltd
1977+# Copyright (C) 2006-2009, 2011 Canonical Ltd
1978 #
1979 # This program is free software; you can redistribute it and/or modify
1980 # it under the terms of the GNU General Public License as published by
1981
1982=== modified file 'bzrlib/tests/test_ui.py'
1983--- bzrlib/tests/test_ui.py 2010-12-24 22:40:27 +0000
1984+++ bzrlib/tests/test_ui.py 2011-01-12 16:51:15 +0000
1985@@ -1,4 +1,4 @@
1986-# Copyright (C) 2005-2010 Canonical Ltd
1987+# Copyright (C) 2005-2011 Canonical Ltd
1988 #
1989 # This program is free software; you can redistribute it and/or modify
1990 # it under the terms of the GNU General Public License as published by
1991
1992=== modified file 'bzrlib/tests/test_upgrade.py'
1993--- bzrlib/tests/test_upgrade.py 2010-12-20 12:01:56 +0000
1994+++ bzrlib/tests/test_upgrade.py 2011-01-12 16:51:15 +0000
1995@@ -1,4 +1,4 @@
1996-# Copyright (C) 2005-2010 Canonical Ltd
1997+# Copyright (C) 2005-2011 Canonical Ltd
1998 #
1999 # This program is free software; you can redistribute it and/or modify
2000 # it under the terms of the GNU General Public License as published by
2001
2002=== modified file 'bzrlib/tests/test_upgrade_stacked.py'
2003--- bzrlib/tests/test_upgrade_stacked.py 2010-12-09 04:26:53 +0000
2004+++ bzrlib/tests/test_upgrade_stacked.py 2011-01-12 16:51:15 +0000
2005@@ -1,4 +1,4 @@
2006-# Copyright (C) 2008 Canonical Ltd
2007+# Copyright (C) 2008, 2009, 2011 Canonical Ltd
2008 #
2009 # This program is free software; you can redistribute it and/or modify
2010 # it under the terms of the GNU General Public License as published by
2011
2012=== modified file 'bzrlib/tests/test_version.py'
2013--- bzrlib/tests/test_version.py 2010-12-24 22:40:27 +0000
2014+++ bzrlib/tests/test_version.py 2011-01-12 16:51:15 +0000
2015@@ -1,4 +1,4 @@
2016-# Copyright (C) 2006, 2009, 2010 Canonical Ltd
2017+# Copyright (C) 2006, 2009, 2010, 2011 Canonical Ltd
2018 #
2019 # This program is free software; you can redistribute it and/or modify
2020 # it under the terms of the GNU General Public License as published by
2021
2022=== modified file 'bzrlib/tests/test_version_info.py'
2023--- bzrlib/tests/test_version_info.py 2010-12-24 22:40:27 +0000
2024+++ bzrlib/tests/test_version_info.py 2011-01-12 16:51:15 +0000
2025@@ -1,4 +1,4 @@
2026-# Copyright (C) 2005, 2006 Canonical Ltd
2027+# Copyright (C) 2005-2011 Canonical Ltd
2028 #
2029 # This program is free software; you can redistribute it and/or modify
2030 # it under the terms of the GNU General Public License as published by
2031
2032=== modified file 'bzrlib/tests/test_weave.py'
2033--- bzrlib/tests/test_weave.py 2010-12-24 22:40:27 +0000
2034+++ bzrlib/tests/test_weave.py 2011-01-12 16:51:15 +0000
2035@@ -1,4 +1,4 @@
2036-# Copyright (C) 2005 Canonical Ltd
2037+# Copyright (C) 2005-2009, 2011 Canonical Ltd
2038 #
2039 # This program is free software; you can redistribute it and/or modify
2040 # it under the terms of the GNU General Public License as published by
2041
2042=== modified file 'bzrlib/tests/test_whitebox.py'
2043--- bzrlib/tests/test_whitebox.py 2010-12-24 22:40:27 +0000
2044+++ bzrlib/tests/test_whitebox.py 2011-01-12 16:51:15 +0000
2045@@ -1,4 +1,4 @@
2046-# Copyright (C) 2005, 2006 Canonical Ltd
2047+# Copyright (C) 2005, 2006, 2008, 2009, 2011 Canonical Ltd
2048 #
2049 # This program is free software; you can redistribute it and/or modify
2050 # it under the terms of the GNU General Public License as published by
2051
2052=== modified file 'bzrlib/tests/test_win32utils.py'
2053--- bzrlib/tests/test_win32utils.py 2010-12-24 22:40:27 +0000
2054+++ bzrlib/tests/test_win32utils.py 2011-01-12 16:51:15 +0000
2055@@ -1,4 +1,4 @@
2056-# Copyright (C) 2007-2010 Canonical Ltd
2057+# Copyright (C) 2007-2011 Canonical Ltd
2058 #
2059 # This program is free software; you can redistribute it and/or modify
2060 # it under the terms of the GNU General Public License as published by
2061
2062=== modified file 'bzrlib/tests/test_workingtree.py'
2063--- bzrlib/tests/test_workingtree.py 2010-12-24 22:40:27 +0000
2064+++ bzrlib/tests/test_workingtree.py 2011-01-12 16:51:15 +0000
2065@@ -1,4 +1,4 @@
2066-# Copyright (C) 2005-2010 Canonical Ltd
2067+# Copyright (C) 2005-2011 Canonical Ltd
2068 # Authors: Robert Collins <robert.collins@canonical.com>
2069 #
2070 # This program is free software; you can redistribute it and/or modify
2071
2072=== modified file 'bzrlib/tests/test_wsgi.py'
2073--- bzrlib/tests/test_wsgi.py 2010-12-24 22:40:27 +0000
2074+++ bzrlib/tests/test_wsgi.py 2011-01-12 16:51:15 +0000
2075@@ -1,4 +1,4 @@
2076-# Copyright (C) 2006 Canonical Ltd
2077+# Copyright (C) 2006-2009, 2011 Canonical Ltd
2078 #
2079 # This program is free software; you can redistribute it and/or modify
2080 # it under the terms of the GNU General Public License as published by
2081
2082=== modified file 'bzrlib/tests/test_xml.py'
2083--- bzrlib/tests/test_xml.py 2010-12-24 22:40:27 +0000
2084+++ bzrlib/tests/test_xml.py 2011-01-12 16:51:15 +0000
2085@@ -1,4 +1,4 @@
2086-# Copyright (C) 2005-2010 Canonical Ltd
2087+# Copyright (C) 2005-2011 Canonical Ltd
2088 #
2089 # This program is free software; you can redistribute it and/or modify
2090 # it under the terms of the GNU General Public License as published by
2091
2092=== modified file 'bzrlib/timestamp.py'
2093--- bzrlib/timestamp.py 2010-12-24 23:15:44 +0000
2094+++ bzrlib/timestamp.py 2011-01-12 16:51:15 +0000
2095@@ -1,4 +1,4 @@
2096-# Copyright (C) 2005, 2006, 2007 Canonical Ltd
2097+# Copyright (C) 2007, 2008, 2009, 2011 Canonical Ltd
2098 #
2099 # This program is free software; you can redistribute it and/or modify
2100 # it under the terms of the GNU General Public License as published by
2101
2102=== modified file 'bzrlib/transform.py'
2103--- bzrlib/transform.py 2010-12-24 22:40:27 +0000
2104+++ bzrlib/transform.py 2011-01-12 16:51:15 +0000
2105@@ -1,4 +1,4 @@
2106-# Copyright (C) 2006-2010 Canonical Ltd
2107+# Copyright (C) 2006-2011 Canonical Ltd
2108 #
2109 # This program is free software; you can redistribute it and/or modify
2110 # it under the terms of the GNU General Public License as published by
2111
2112=== modified file 'bzrlib/transport/http/_urllib2_wrappers.py'
2113--- bzrlib/transport/http/_urllib2_wrappers.py 2010-12-24 17:48:14 +0000
2114+++ bzrlib/transport/http/_urllib2_wrappers.py 2011-01-12 16:51:15 +0000
2115@@ -1,4 +1,4 @@
2116-# Copyright (C) 2006-2010 Canonical Ltd
2117+# Copyright (C) 2006-2011 Canonical Ltd
2118 #
2119 # This program is free software; you can redistribute it and/or modify
2120 # it under the terms of the GNU General Public License as published by
2121
2122=== modified file 'bzrlib/upgrade.py'
2123--- bzrlib/upgrade.py 2011-01-11 21:27:02 +0000
2124+++ bzrlib/upgrade.py 2011-01-12 16:51:15 +0000
2125@@ -1,4 +1,4 @@
2126-# Copyright (C) 2005, 2006, 2008, 2009, 2010 Canonical Ltd
2127+# Copyright (C) 2005, 2006, 2008-2011 Canonical Ltd
2128 #
2129 # This program is free software; you can redistribute it and/or modify
2130 # it under the terms of the GNU General Public License as published by
2131
2132=== modified file 'doc/en/release-notes/bzr-2.3.txt'
2133--- doc/en/release-notes/bzr-2.3.txt 2011-01-12 00:58:05 +0000
2134+++ doc/en/release-notes/bzr-2.3.txt 2011-01-12 16:51:15 +0000
2135@@ -77,6 +77,10 @@
2136 * The BZR_COLUMNS environment variable can be set to 0 to indicate no
2137 limitation on the width of the terminal. (Neil Martinsen-Burrell, #675652)
2138
2139+* You are now able to commit directly to a stacked branch. Any needed
2140+ parent inventories will be filled in as part of the commit process.
2141+ (John Arbash Meinel, #375013)
2142+
2143 Documentation
2144 *************
2145
2146
2147=== modified file 'doc/en/whats-new/whats-new-in-2.3.txt'
2148--- doc/en/whats-new/whats-new-in-2.3.txt 2010-12-20 12:01:56 +0000
2149+++ doc/en/whats-new/whats-new-in-2.3.txt 2011-01-12 16:51:15 +0000
2150@@ -20,6 +20,11 @@
2151 Changed Behaviour
2152 *****************
2153
2154+* Committing a new revision in a stacked branch is now supported, as long as
2155+ you are using the current repository format (2a). It will preserve the
2156+ stacking invariants, etc, so that fetching after commit is guaranteed to
2157+ work. (John Arbash Meinel, #375013)
2158+
2159 * Support for some old development formats have been removed:
2160 ``development-rich-root``, ``development6-rich-root``, and
2161 ``development7-rich-root``. These formats were always labelled experimental