Rev 4307: (andrew) Check for missing parent inventories in StreamSink. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Tue Apr 28 01:42:39 BST 2009
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 4307
revision-id: pqm at pqm.ubuntu.com-20090428004234-6j7ndsmvsx3hsrqo
parent: pqm at pqm.ubuntu.com-20090427220703-oy9b0mxobrksvuyq
parent: andrew.bennetts at canonical.com-20090427232600-687yit723104gf4j
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Tue 2009-04-28 01:42:34 +0100
message:
(andrew) Check for missing parent inventories in StreamSink.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/per_repository/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
bzrlib/tests/test_knit.py test_knit.py-20051212171302-95d4c00dd5f11f2b
------------------------------------------------------------
revno: 4257.4.19
revision-id: andrew.bennetts at canonical.com-20090427232600-687yit723104gf4j
parent: andrew.bennetts at canonical.com-20090427231542-lg5si40qfier9pi4
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-28 09:26:00 +1000
message:
Add NEWS entry.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
------------------------------------------------------------
revno: 4257.4.18
revision-id: andrew.bennetts at canonical.com-20090427231542-lg5si40qfier9pi4
parent: andrew.bennetts at canonical.com-20090427231400-htifkzm2zvwp3lax
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-28 09:15:42 +1000
message:
Alphabetically sort the latest Bug Fixes entries in NEWS.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
------------------------------------------------------------
revno: 4257.4.17
revision-id: andrew.bennetts at canonical.com-20090427231400-htifkzm2zvwp3lax
parent: andrew.bennetts at canonical.com-20090427225941-w7rrc4k9lvcl3ig8
parent: pqm at pqm.ubuntu.com-20090427220703-oy9b0mxobrksvuyq
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-28 09:14:00 +1000
message:
Merge from bzr.dev.
added:
bzrlib/tests/blackbox/test_dpush.py test_dpush.py-20090108125928-st1td6le59g0vyv2-1
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/_groupcompress_py.py _groupcompress_py.py-20090324110021-j63s399f4icrgw4p-1
bzrlib/branch.py branch.py-20050309040759-e4baf4e0d046576e
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/config.py config.py-20051011043216-070c74f4e9e338e8
bzrlib/errors.py errors.py-20050309040759-20512168c4e14fbd
bzrlib/filters/__init__.py __init__.py-20080416080515-mkxl29amuwrf6uir-2
bzrlib/filters/eol.py eol.py-20090327060429-todzdjmqt3bpv5r8-1
bzrlib/foreign.py foreign.py-20081112170002-olsxmandkk8qyfuq-1
bzrlib/groupcompress.py groupcompress.py-20080705181503-ccbxd6xuy1bdnrpu-8
bzrlib/hashcache.py hashcache.py-20050706091756-fe3a8cc1143ff24f
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/log.py log.py-20050505065812-c40ce11702fe5fb1
bzrlib/lru_cache.py lru_cache.py-20070119165515-tlw203kuwh0id5gv-1
bzrlib/mail_client.py mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
bzrlib/merge.py merge.py-20050513021216-953b65a438527106
bzrlib/merge_directive.py merge_directive.py-20070228184838-ja62280spt1g7f4x-1
bzrlib/plugins/launchpad/__init__.py __init__.py-20060315182712-2d5feebd2a1032dc
bzrlib/plugins/launchpad/account.py account.py-20071011033320-50y6vfftywf4yllw-1
bzrlib/plugins/netrc_credential_store/__init__.py __init__.py-20081006090402-hd75m8kcrrm0vlz1-1
bzrlib/push.py push.py-20080606021927-5fe39050e8xne9un-1
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repofmt/groupcompress_repo.py repofmt.py-20080715094215-wp1qfvoo7093c8qr-1
bzrlib/revision.py revision.py-20050309040759-e77802c08f3999d5
bzrlib/smart/branch.py branch.py-20061124031907-mzh3pla28r83r97f-1
bzrlib/smart/bzrdir.py bzrdir.py-20061122024551-ol0l0o0oofsu9b3t-1
bzrlib/smart/message.py message.py-20080222013625-ncqmh3nrxjkxab87-1
bzrlib/smart/request.py request.py-20061108095550-gunadhxmzkdjfeek-1
bzrlib/smtp_connection.py smtp_connection.py-20070618204456-nu6wag1ste4biuk2-1
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
bzrlib/tests/blackbox/test_add.py test_add.py-20060518072250-857e4f86f54a30b2
bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
bzrlib/tests/blackbox/test_push.py test_push.py-20060329002750-929af230d5d22663
bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
bzrlib/tests/branch_implementations/test_create_clone.py test_create_clone.py-20090225031440-8ybpkzojo7cvourv-1
bzrlib/tests/branch_implementations/test_locking.py test_locking.py-20060707151933-tav3o2hpibwi53u4-4
bzrlib/tests/branch_implementations/test_parent.py test_parent.py-20050830052751-5e62766623c32222
bzrlib/tests/bzrdir_implementations/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
bzrlib/tests/lock_helpers.py LockHelpers.py-20060707151933-tav3o2hpibwi53u4-1
bzrlib/tests/test__groupcompress.py test__groupcompress_-20080724145854-koifwb7749cfzrvj-1
bzrlib/tests/test_branch.py test_branch.py-20060116013032-97819aa07b8ab3b5
bzrlib/tests/test_bundle.py test.py-20050630184834-092aa401ab9f039c
bzrlib/tests/test_config.py testconfig.py-20051011041908-742d0c15d8d8c8eb
bzrlib/tests/test_dirstate.py test_dirstate.py-20060728012006-d6mvoihjb3je9peu-2
bzrlib/tests/test_errors.py test_errors.py-20060210110251-41aba2deddf936a8
bzrlib/tests/test_foreign.py test_foreign.py-20081125004048-ywb901edgp9lluxo-1
bzrlib/tests/test_ftp_transport.py test_aftp_transport.-20060823221619-98mwjzxtwtkt527k-1
bzrlib/tests/test_groupcompress.py test_groupcompress.p-20080705181503-ccbxd6xuy1bdnrpu-13
bzrlib/tests/test_http.py testhttp.py-20051018020158-b2eef6e867c514d9
bzrlib/tests/test_log.py testlog.py-20050728115707-1a514809d7d49309
bzrlib/tests/test_lru_cache.py test_lru_cache.py-20070119165535-hph6rk4h9rzy4180-1
bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/tests/test_pack_repository.py test_pack_repository-20080801043947-eaw0e6h2gu75kwmy-1
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
bzrlib/tests/test_revision.py testrevision.py-20050804210559-46f5e1eb67b01289
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
bzrlib/tests/test_sftp_transport.py testsftp.py-20051027032739-247570325fec7e7e
bzrlib/tests/test_shelf.py test_prepare_shelf.p-20081005181341-n74qe6gu1e65ad4v-2
bzrlib/tests/test_smart.py test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
bzrlib/tests/test_smart_request.py test_smart_request.p-20090211070731-o38wayv3asm25d6a-1
bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
bzrlib/tests/test_ui.py test_ui.py-20051130162854-458e667a7414af09
bzrlib/tests/test_upgrade.py test_upgrade.py-20051004040251-555fe1d2bae1bc71
bzrlib/tests/test_urlutils.py test_urlutils.py-20060502192900-46b1f9579987cf9c
bzrlib/tests/test_workingtree_4.py test_workingtree_4.p-20070223025758-531n3tznl3zacv2o-1
bzrlib/tests/tree_implementations/__init__.py __init__.py-20060717075546-420s7b0bj9hzeowi-2
bzrlib/tests/tree_implementations/test_get_symlink_target.py test_get_symlink_tar-20070225165554-ickod3w3t7u0zzqh-1
bzrlib/tests/tree_implementations/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1
bzrlib/tests/tree_implementations/test_path_content_summary.py test_path_content_su-20070904100855-3vrwedz6akn34kl5-1
bzrlib/tests/tree_implementations/test_test_trees.py test_tree_trees.py-20060720091921-3nwi5h21lf06vf5p-1
bzrlib/tests/tree_implementations/test_walkdirs.py test_walkdirs.py-20060729160421-gmjnkotqgxdh98ce-1
bzrlib/tests/workingtree_implementations/__init__.py __init__.py-20060203003124-b2aa5aca21a8bfad
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
bzrlib/transport/ftp/__init__.py ftp.py-20051116161804-58dc9506548c2a53
bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
bzrlib/transport/ssh.py ssh.py-20060824042150-0s9787kng6zv1nwq-1
bzrlib/ui/__init__.py ui.py-20050824083933-8cf663c763ba53a9
bzrlib/ui/text.py text.py-20051130153916-2e438cffc8afc478
bzrlib/urlutils.py urlutils.py-20060502195429-e8a161ecf8fac004
------------------------------------------------------------
revno: 4257.4.16
revision-id: andrew.bennetts at canonical.com-20090427225941-w7rrc4k9lvcl3ig8
parent: andrew.bennetts at canonical.com-20090422070051-u1v1th1yqv1ui7ps
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-28 08:59:41 +1000
message:
Add comment, remove unnecessary vertical whitespace.
modified:
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 4257.4.15
revision-id: andrew.bennetts at canonical.com-20090422070051-u1v1th1yqv1ui7ps
parent: andrew.bennetts at canonical.com-20090422063808-3ekqwfdry8wj5arm
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Wed 2009-04-22 17:00:51 +1000
message:
Add another test for _KnitGraphIndex.get_missing_parents().
modified:
bzrlib/tests/test_knit.py test_knit.py-20051212171302-95d4c00dd5f11f2b
------------------------------------------------------------
revno: 4257.4.14
revision-id: andrew.bennetts at canonical.com-20090422063808-3ekqwfdry8wj5arm
parent: andrew.bennetts at canonical.com-20090422061403-825ggudqlc0mkeha
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Wed 2009-04-22 16:38:08 +1000
message:
Add a unit test for _KnitGraphIndex.get_missing_parents, fix bug that it reveals.
modified:
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/tests/test_knit.py test_knit.py-20051212171302-95d4c00dd5f11f2b
------------------------------------------------------------
revno: 4257.4.13
revision-id: andrew.bennetts at canonical.com-20090422061403-825ggudqlc0mkeha
parent: andrew.bennetts at canonical.com-20090422061323-24y1t0xc10u6q7kn
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Wed 2009-04-22 16:14:03 +1000
message:
Tweak comment.
modified:
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
------------------------------------------------------------
revno: 4257.4.12
revision-id: andrew.bennetts at canonical.com-20090422061323-24y1t0xc10u6q7kn
parent: andrew.bennetts at canonical.com-20090421072204-doovtdbxri1ouray
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Wed 2009-04-22 16:13:23 +1000
message:
Move _parent_inventories helper to RepoFetcher.
modified:
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 4257.4.11
revision-id: andrew.bennetts at canonical.com-20090421072204-doovtdbxri1ouray
parent: andrew.bennetts at canonical.com-20090421041812-cfaqr21l0jftw4gv
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-21 17:22:04 +1000
message:
Polish the patch.
modified:
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/per_repository/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
------------------------------------------------------------
revno: 4257.4.10
revision-id: andrew.bennetts at canonical.com-20090421041812-cfaqr21l0jftw4gv
parent: andrew.bennetts at canonical.com-20090416074719-jzqwwhgqtk9a77jd
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-21 14:18:12 +1000
message:
Observe new revisions in _KnitGraphIndex.add_record rather than iterating all the uncommitted packs' indices.
modified:
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/per_repository/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
------------------------------------------------------------
revno: 4257.4.9
revision-id: andrew.bennetts at canonical.com-20090416074719-jzqwwhgqtk9a77jd
parent: andrew.bennetts at canonical.com-20090416074215-vc3t59ftwupjy7cz
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 17:47:19 +1000
message:
Add more test coverage, but make a long test even longer in the process.
modified:
bzrlib/tests/per_repository/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
------------------------------------------------------------
revno: 4257.4.8
revision-id: andrew.bennetts at canonical.com-20090416074215-vc3t59ftwupjy7cz
parent: andrew.bennetts at canonical.com-20090416074128-x8ts7b92a4mp91rt
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 17:42:15 +1000
message:
Add a (messy) test for get_missing_parent_inventories.
modified:
bzrlib/tests/per_repository/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
------------------------------------------------------------
revno: 4257.4.7
revision-id: andrew.bennetts at canonical.com-20090416074128-x8ts7b92a4mp91rt
parent: andrew.bennetts at canonical.com-20090416063124-6zhzjp9bj8arow4u
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 17:41:28 +1000
message:
Remove a little more cruft
modified:
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 4257.4.6
revision-id: andrew.bennetts at canonical.com-20090416063124-6zhzjp9bj8arow4u
parent: andrew.bennetts at canonical.com-20090416060544-dmi7v8lfjgtgml8l
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 16:31:24 +1000
message:
Make get_missing_parent_inventories work for all repo formats (it's a no-op for unstackable formats).
modified:
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/per_repository/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
------------------------------------------------------------
revno: 4257.4.5
revision-id: andrew.bennetts at canonical.com-20090416060544-dmi7v8lfjgtgml8l
parent: andrew.bennetts at canonical.com-20090416052537-hkvzp9tt8gfioe65
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 16:05:44 +1000
message:
Refactor a little.
modified:
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 4257.4.4
revision-id: andrew.bennetts at canonical.com-20090416052537-hkvzp9tt8gfioe65
parent: andrew.bennetts at canonical.com-20090416003244-9we04co80kga34h5
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 15:25:37 +1000
message:
Remove some cruft.
modified:
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 4257.4.3
revision-id: andrew.bennetts at canonical.com-20090416003244-9we04co80kga34h5
parent: andrew.bennetts at canonical.com-20090414075251-1o9xn3z27y4rrz5v
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-16 10:32:44 +1000
message:
SinkStream.insert_stream checks for missing parent inventories, and reports them as missing_keys.
modified:
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 4257.4.2
revision-id: andrew.bennetts at canonical.com-20090414075251-1o9xn3z27y4rrz5v
parent: andrew.bennetts at canonical.com-20090409090707-uls0l21tpq1b9jx0
parent: andrew.bennetts at canonical.com-20090414022613-g4t18jvbsvyrmohf
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Tue 2009-04-14 17:52:51 +1000
message:
Merge from stacking-inventory (client-side fix).
added:
bzrlib/_chk_map_py.py _chk_map_py.py-20090309114220-1kurz7oez2gwqtcf-1
bzrlib/_chk_map_pyx.pyx _chk_map_pyx.pyx-20090309111231-peyz7p2azr0dzdrb-1
bzrlib/_groupcompress_py.py _groupcompress_py.py-20090324110021-j63s399f4icrgw4p-1
bzrlib/_groupcompress_pyx.pyx _groupcompress_c.pyx-20080724041824-yelg6ii7c7zxt4z0-1
bzrlib/chk_map.py chk_map.py-20081001014447-ue6kkuhofvdecvxa-1
bzrlib/chk_serializer.py chk_serializer.py-20081002064345-2tofdfj2eqq01h4b-1
bzrlib/delta.h delta.h-20090227173129-qsu3u43vowf1q3ay-1
bzrlib/diff-delta.c diffdelta.c-20090226042143-l9wzxynyuxnb5hus-1
bzrlib/groupcompress.py groupcompress.py-20080705181503-ccbxd6xuy1bdnrpu-8
bzrlib/repofmt/groupcompress_repo.py repofmt.py-20080715094215-wp1qfvoo7093c8qr-1
bzrlib/tests/per_repository_chk/ per_repository_chk-20080925061730-e4g24t5xstp2n2vp-1
bzrlib/tests/per_repository_chk/__init__.py __init__.py-20080925061730-e4g24t5xstp2n2vp-2
bzrlib/tests/per_repository_chk/test_supported.py test_supported.py-20080925063728-k65ry0n2rhta6t34-1
bzrlib/tests/per_repository_chk/test_unsupported.py test_unsupported.py-20080925063728-k65ry0n2rhta6t34-2
bzrlib/tests/test__chk_map.py test__chk_map.py-20090309114220-1kurz7oez2gwqtcf-2
bzrlib/tests/test__groupcompress.py test__groupcompress_-20080724145854-koifwb7749cfzrvj-1
bzrlib/tests/test_chk_map.py test_chk_map.py-20081001014447-ue6kkuhofvdecvxa-2
bzrlib/tests/test_groupcompress.py test_groupcompress.p-20080705181503-ccbxd6xuy1bdnrpu-13
modified:
.bzrignore bzrignore-20050311232317-81f7b71efa2db11a
NEWS NEWS-20050323055033-4e00b5db738777ff
bzr bzr.py-20050313053754-5485f144c7006fa6
bzrlib/__init__.py __init__.py-20050309040759-33e65acf91bbcd5d
bzrlib/_btree_serializer_c.pyx _parse_btree_c.pyx-20080703034413-3q25bklkenti3p8p-2
bzrlib/annotate.py annotate.py-20050922133147-7c60541d2614f022
bzrlib/branchbuilder.py branchbuilder.py-20070427022007-zlxpqz2lannhk6y8-1
bzrlib/btree_index.py index.py-20080624222253-p0x5f92uyh5hw734-7
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/dirstate.py dirstate.py-20060728012006-d6mvoihjb3je9peu-1
bzrlib/filters/__init__.py __init__.py-20080416080515-mkxl29amuwrf6uir-2
bzrlib/filters/eol.py eol.py-20090327060429-todzdjmqt3bpv5r8-1
bzrlib/hooks.py hooks.py-20070325015548-ix4np2q0kd8452au-1
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/option.py option.py-20051014052914-661fb36e76e7362f
bzrlib/osutils.py osutils.py-20050309040759-eeaff12fbf77ac86
bzrlib/plugins/launchpad/__init__.py __init__.py-20060315182712-2d5feebd2a1032dc
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/revisiontree.py revisiontree.py-20060724012533-bg8xyryhxd0o0i0h-1
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/test_add.py test_add.py-20060518072250-857e4f86f54a30b2
bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
bzrlib/tests/blackbox/test_export.py test_export.py-20051229024010-e6c26658e460fb1c
bzrlib/tests/blackbox/test_filesystem_cicp.py test_filesystem_cicp-20081028010456-vclkg401m81keaxc-1
bzrlib/tests/blackbox/test_filtered_view_ops.py test_filtered_view_o-20081110012645-5t7ogtola0l33lkg-1
bzrlib/tests/blackbox/test_ls.py test_ls.py-20060712232047-0jraqpecwngee12y-1
bzrlib/tests/blackbox/test_push.py test_push.py-20060329002750-929af230d5d22663
bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
bzrlib/tests/blackbox/test_view.py test_view.py-20080731135100-66o8o32heop7augi-1
bzrlib/tests/interrepository_implementations/__init__.py __init__.py-20060220054744-baf49a1f88f17b1a
bzrlib/tests/interrepository_implementations/test_fetch.py test_fetch.py-20080425213627-j60cjh782ufm83ry-1
bzrlib/tests/intertree_implementations/__init__.py __init__.py-20060724101752-09ysswo1a92uqyoz-3
bzrlib/tests/intertree_implementations/test_compare.py test_compare.py-20060724101752-09ysswo1a92uqyoz-2
bzrlib/tests/inventory_implementations/basics.py basics.py-20070903044446-kdjwbiu1p1zi9phs-1
bzrlib/tests/per_repository/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
bzrlib/tests/test_branch.py test_branch.py-20060116013032-97819aa07b8ab3b5
bzrlib/tests/test_commands.py test_command.py-20051019190109-3b17be0f52eaa7a8
bzrlib/tests/test_export.py test_export.py-20090220201010-tpbxssdnezsvu9pk-1
bzrlib/tests/test_filters.py test_filters.py-20080417120614-tc3zok0vvvprsc99-1
bzrlib/tests/test_hooks.py test_hooks.py-20070628030849-89rtsbe5dmer5npz-1
bzrlib/tests/test_inv.py testinv.py-20050722220913-1dc326138d1a5892
bzrlib/tests/test_options.py testoptions.py-20051014093702-96457cfc86319a8f
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/tests/test_pack_repository.py test_pack_repository-20080801043947-eaw0e6h2gu75kwmy-1
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
bzrlib/tests/test_ui.py test_ui.py-20051130162854-458e667a7414af09
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/ui/__init__.py ui.py-20050824083933-8cf663c763ba53a9
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
bzrlib/workingtree_4.py workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
doc/developers/development-repo.txt developmentrepo.txt-20080102200205-raj42k61dch8pjmj-1
setup.py setup.py-20050314065409-02f8a0a6e3f9bc70
------------------------------------------------------------
revno: 4257.4.1
revision-id: andrew.bennetts at canonical.com-20090409090707-uls0l21tpq1b9jx0
parent: andrew.bennetts at canonical.com-20090408053448-awacfn10peec2vkm
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: stacking-inventory-part-2
timestamp: Thu 2009-04-09 19:07:07 +1000
message:
Make insert_stream ask for missing inventories of parents of the added revisions. This will cause 1.13 HPSS clients that insert_stream to this server to push correct stacked branches (so that the get_stream RPC will work).
modified:
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
=== modified file 'NEWS'
--- a/NEWS 2009-04-27 22:07:03 +0000
+++ b/NEWS 2009-04-27 23:26:00 +0000
@@ -35,24 +35,29 @@
Bug Fixes
*********
+* Adding now works properly when path contains a symbolic link.
+ (Geoff Bache, #183831)
+
+* ``bzr send`` works to send emails again using MAPI.
+ (Neil Martinsen-Burrell, #346998)
+
+* Check for missing parent inventories in StreamSink. This prevents
+ incomplete stacked branches being created by 1.13 bzr:// and
+ bzr+ssh:// clients (which have bug #354036). Instead, the server now
+ causes those clients to send the missing records. (Andrew Bennetts)
+
* End-Of-Line content filters are now loaded correctly.
(Ian Clatworthy, Brian de Alwis, #355280)
+* Fix a bug in the pure-python ``GroupCompress`` code when handling copies
+ longer than 64KiB. (John Arbash Meinel, #364900)
+
* Fix TypeError in running ``bzr break-lock`` on some URLs.
(Alexander Belchenko, Martin Pool, #365891)
-* ``bzr send`` works to send emails again using MAPI.
- (Neil Martinsen-Burrell, #346998)
-
* Non-recursive ``bzr ls`` now works properly when a path is specified.
(Jelmer Vernooij, #357863)
-* Fix a bug in the pure-python ``GroupCompress`` code when handling copies
- longer than 64KiB. (John Arbash Meinel, #364900)
-
-* Adding now works properly when path contains a symbolic link.
- (Geoff Bache, #183831)
-
Documentation
*************
=== modified file 'bzrlib/fetch.py'
--- a/bzrlib/fetch.py 2009-04-20 08:37:32 +0000
+++ b/bzrlib/fetch.py 2009-04-27 23:14:00 +0000
@@ -137,17 +137,8 @@
resume_tokens, missing_keys = self.sink.insert_stream(
stream, from_format, [])
if self.to_repository._fallback_repositories:
- # Find all the parent revisions referenced by the stream, but
- # not present in the stream, and make sure we have their
- # inventories.
- revision_ids = search.get_keys()
- parent_maps = self.to_repository.get_parent_map(revision_ids)
- parents = set()
- map(parents.update, parent_maps.itervalues())
- parents.difference_update(revision_ids)
- parents.discard(NULL_REVISION)
missing_keys.update(
- ('inventories', rev_id) for rev_id in parents)
+ self._parent_inventories(search.get_keys()))
if missing_keys:
pb.update("Missing keys")
stream = source.get_stream_for_missing_keys(missing_keys)
@@ -189,6 +180,18 @@
except errors.NoSuchRevision, e:
raise InstallFailed([self._last_revision])
+ def _parent_inventories(self, revision_ids):
+ # Find all the parent revisions referenced by the stream, but
+ # not present in the stream, and make sure we send their
+ # inventories.
+ parent_maps = self.to_repository.get_parent_map(revision_ids)
+ parents = set()
+ map(parents.update, parent_maps.itervalues())
+ parents.discard(NULL_REVISION)
+ parents.difference_update(revision_ids)
+ missing_keys = set(('inventories', rev_id) for rev_id in parents)
+ return missing_keys
+
class Inter1and2Helper(object):
"""Helper for operations that convert data from model 1 and 2
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2009-04-08 16:33:19 +0000
+++ b/bzrlib/knit.py 2009-04-27 23:14:00 +0000
@@ -2692,7 +2692,7 @@
"""A KnitVersionedFiles index layered on GraphIndex."""
def __init__(self, graph_index, is_locked, deltas=False, parents=True,
- add_callback=None):
+ add_callback=None, track_external_parent_refs=False):
"""Construct a KnitGraphIndex on a graph_index.
:param graph_index: An implementation of bzrlib.index.GraphIndex.
@@ -2706,6 +2706,9 @@
[(node, value, node_refs), ...]
:param is_locked: A callback, returns True if the index is locked and
thus usable.
+ :param track_external_parent_refs: If True, record all external parent
+ references parents from added records. These can be retrieved
+ later by calling get_missing_parents().
"""
self._add_callback = add_callback
self._graph_index = graph_index
@@ -2719,6 +2722,10 @@
self.has_graph = parents
self._is_locked = is_locked
self._missing_compression_parents = set()
+ if track_external_parent_refs:
+ self._external_parent_refs = set()
+ else:
+ self._external_parent_refs = None
def __repr__(self):
return "%s(%r)" % (self.__class__.__name__, self._graph_index)
@@ -2748,9 +2755,13 @@
keys = {}
compression_parents = set()
+ parent_refs = self._external_parent_refs
for (key, options, access_memo, parents) in records:
if self._parents:
parents = tuple(parents)
+ if parent_refs is not None:
+ parent_refs.update(parents)
+ parent_refs.discard(key)
index, pos, size = access_memo
if 'no-eol' in options:
value = 'N'
@@ -2818,6 +2829,12 @@
new_missing = graph_index.external_references(ref_list_num=1)
new_missing.difference_update(self.get_parent_map(new_missing))
self._missing_compression_parents.update(new_missing)
+ if self._external_parent_refs is not None:
+ # Add parent refs from graph_index (and discard parent refs that
+ # the graph_index has).
+ for node in graph_index.iter_all_entries():
+ self._external_parent_refs.update(node[3][0])
+ self._external_parent_refs.discard(node[1])
def get_missing_compression_parents(self):
"""Return the keys of missing compression parents.
@@ -2827,6 +2844,13 @@
"""
return frozenset(self._missing_compression_parents)
+ def get_missing_parents(self):
+ """Return the keys of missing parents."""
+ # We may have false positives, so filter those out.
+ self._external_parent_refs.difference_update(
+ self.get_parent_map(self._external_parent_refs))
+ return frozenset(self._external_parent_refs)
+
def _check_read(self):
"""raise if reads are not permitted."""
if not self._is_locked():
=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py 2009-04-27 03:47:55 +0000
+++ b/bzrlib/remote.py 2009-04-27 23:14:00 +0000
@@ -667,6 +667,10 @@
self._ensure_real()
return self._real_repository.suspend_write_group()
+ def get_missing_parent_inventories(self):
+ self._ensure_real()
+ return self._real_repository.get_missing_parent_inventories()
+
def _ensure_real(self):
"""Ensure that there is a _real_repository set.
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2009-04-09 20:23:07 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2009-04-27 23:14:00 +0000
@@ -2150,7 +2150,8 @@
self.revisions = KnitVersionedFiles(
_KnitGraphIndex(self._pack_collection.revision_index.combined_index,
add_callback=self._pack_collection.revision_index.add_callback,
- deltas=False, parents=True, is_locked=self.is_locked),
+ deltas=False, parents=True, is_locked=self.is_locked,
+ track_external_parent_refs=True),
data_access=self._pack_collection.revision_index.data_access,
max_delta_chain=0)
self.signatures = KnitVersionedFiles(
@@ -2272,6 +2273,8 @@
def _resume_write_group(self, tokens):
self._start_write_group()
self._pack_collection._resume_write_group(tokens)
+ for pack in self._pack_collection._resumed_packs:
+ self.revisions._index.scan_unvalidated_index(pack.revision_index)
def get_transaction(self):
if self._write_lock_count:
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2009-04-20 08:37:32 +0000
+++ b/bzrlib/repository.py 2009-04-27 23:14:00 +0000
@@ -1424,6 +1424,34 @@
def suspend_write_group(self):
raise errors.UnsuspendableWriteGroup(self)
+ def get_missing_parent_inventories(self):
+ """Return the keys of missing inventory parents for revisions added in
+ this write group.
+
+ A revision is not complete if the inventory delta for that revision
+ cannot be calculated. Therefore if the parent inventories of a
+ revision are not present, the revision is incomplete, and e.g. cannot
+ be streamed by a smart server. This method finds missing inventory
+ parents for revisions added in this write group.
+ """
+ if not self._format.supports_external_lookups:
+ # This is only an issue for stacked repositories
+ return set()
+ if not self.is_in_write_group():
+ raise AssertionError('not in a write group')
+
+ # XXX: We assume that every added revision already has its
+ # corresponding inventory, so we only check for parent inventories that
+ # might be missing, rather than all inventories.
+ parents = set(self.revisions._index.get_missing_parents())
+ parents.discard(_mod_revision.NULL_REVISION)
+ unstacked_inventories = self.inventories._index
+ present_inventories = unstacked_inventories.get_parent_map(
+ key[-1:] for key in parents)
+ parents.difference_update(present_inventories)
+ missing_keys = set(('inventories', rev_id) for (rev_id,) in parents)
+ return missing_keys
+
def refresh_data(self):
"""Re-read any data needed to to synchronise with disk.
@@ -3998,8 +4026,9 @@
self.target_repo.signatures.insert_record_stream(substream)
else:
raise AssertionError('kaboom! %s' % (substream_type,))
+ # Find all the new revisions (including ones from resume_tokens)
+ missing_keys = self.target_repo.get_missing_parent_inventories()
try:
- missing_keys = set()
for prefix, versioned_file in (
('texts', self.target_repo.texts),
('inventories', self.target_repo.inventories),
=== modified file 'bzrlib/tests/per_repository/test_write_group.py'
--- a/bzrlib/tests/per_repository/test_write_group.py 2009-03-23 14:59:43 +0000
+++ b/bzrlib/tests/per_repository/test_write_group.py 2009-04-21 07:22:04 +0000
@@ -18,9 +18,11 @@
import sys
-from bzrlib import errors
+from bzrlib import bzrdir, errors, graph, memorytree, remote
+from bzrlib.branch import BzrBranchFormat7
+from bzrlib.inventory import InventoryDirectory
from bzrlib.transport import local, memory
-from bzrlib.tests import TestNotApplicable
+from bzrlib.tests import KnownFailure, TestNotApplicable
from bzrlib.tests.per_repository import TestCaseWithRepository
@@ -118,6 +120,97 @@
if token is not None:
repo.leave_lock_in_place()
+ def test_empty_get_missing_parent_inventories(self):
+ """A new write group has no missing parent inventories."""
+ repo = self.make_repository('.')
+ repo.lock_write()
+ repo.start_write_group()
+ try:
+ self.assertEqual(set(), set(repo.get_missing_parent_inventories()))
+ finally:
+ repo.commit_write_group()
+ repo.unlock()
+
+ def test_get_missing_parent_inventories(self):
+ # Make a trunk with one commit.
+ if isinstance(self.repository_format, remote.RemoteRepositoryFormat):
+ # RemoteRepository by default builds a default format real
+ # repository, but the default format is unstackble. So explicitly
+ # make a stackable real repository and use that.
+ repo = self.make_repository('trunk', format='1.9')
+ repo = bzrdir.BzrDir.open(self.get_url('trunk')).open_repository()
+ else:
+ repo = self.make_repository('trunk')
+ if not repo._format.supports_external_lookups:
+ raise TestNotApplicable('format not stackable')
+ repo.bzrdir._format.set_branch_format(BzrBranchFormat7())
+ trunk = repo.bzrdir.create_branch()
+ trunk_repo = repo
+ tree = memorytree.MemoryTree.create_on_branch(trunk)
+ tree.lock_write()
+ if repo._format.rich_root_data:
+ # The tree needs a root
+ tree._inventory.add(InventoryDirectory('the-root-id', '', None))
+ tree.commit('Trunk commit', rev_id='rev-1')
+ tree.unlock()
+ # Branch the trunk, add a new commit.
+ tree = self.make_branch_and_tree('branch')
+ trunk_repo.lock_read()
+ self.addCleanup(trunk_repo.unlock)
+ tree.branch.repository.fetch(trunk_repo, revision_id='rev-1')
+ tree.set_parent_ids(['rev-1'])
+ tree.commit('Branch commit', rev_id='rev-2')
+ branch_repo = tree.branch.repository
+ # Make a new repo stacked on trunk, and copy the new commit's revision
+ # and inventory records to it.
+ if isinstance(self.repository_format, remote.RemoteRepositoryFormat):
+ # RemoteRepository by default builds a default format real
+ # repository, but the default format is unstackble. So explicitly
+ # make a stackable real repository and use that.
+ repo = self.make_repository('stacked', format='1.9')
+ repo = bzrdir.BzrDir.open(self.get_url('stacked')).open_repository()
+ else:
+ repo = self.make_repository('stacked')
+ branch_repo.lock_read()
+ self.addCleanup(branch_repo.unlock)
+ repo.add_fallback_repository(trunk.repository)
+ repo.lock_write()
+ repo.start_write_group()
+ trunk_repo.lock_read()
+ repo.inventories.insert_record_stream(
+ branch_repo.inventories.get_record_stream(
+ [('rev-2',)], 'unordered', False))
+ repo.revisions.insert_record_stream(
+ branch_repo.revisions.get_record_stream(
+ [('rev-2',)], 'unordered', False))
+ self.assertEqual(
+ set([('inventories', 'rev-1')]),
+ repo.get_missing_parent_inventories())
+ # Revisions from resumed write groups can also cause missing parent
+ # inventories.
+ try:
+ resume_tokens = repo.suspend_write_group()
+ except errors.UnsuspendableWriteGroup:
+ # If we got this far, and this repo does not support resuming write
+ # groups, then get_missing_parent_inventories works in all
+ # cases this repo supports.
+ repo.unlock()
+ return
+ repo.unlock()
+ reopened_repo = repo.bzrdir.open_repository()
+ reopened_repo.lock_write()
+ self.addCleanup(reopened_repo.unlock)
+ reopened_repo.resume_write_group(resume_tokens)
+ self.assertEqual(
+ set([('inventories', 'rev-1')]),
+ reopened_repo.get_missing_parent_inventories())
+ reopened_repo.inventories.insert_record_stream(
+ branch_repo.inventories.get_record_stream(
+ [('rev-1',)], 'unordered', False))
+ self.assertEqual(
+ set(), reopened_repo.get_missing_parent_inventories())
+ reopened_repo.abort_write_group()
+
class TestResumeableWriteGroup(TestCaseWithRepository):
=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py 2009-03-23 14:59:43 +0000
+++ b/bzrlib/tests/test_knit.py 2009-04-22 07:00:51 +0000
@@ -1637,6 +1637,14 @@
([('missing-parent', ), ('ghost', )], [('missing-parent', )]))])
return graph_index
+ def make_g_index_missing_parent(self):
+ graph_index = self.make_g_index('missing_parent', 2,
+ [(('parent', ), ' 100 78', ([], [])),
+ (('tip', ), ' 100 78',
+ ([('parent', ), ('missing-parent', )], [('parent', )])),
+ ])
+ return graph_index
+
def make_g_index_no_external_refs(self):
graph_index = self.make_g_index('no_external_refs', 2,
[(('rev', ), ' 100 78',
@@ -1650,7 +1658,7 @@
index.scan_unvalidated_index(unvalidated)
self.assertEqual(frozenset(), index.get_missing_compression_parents())
- def test_add_incomplete_unvalidated_index(self):
+ def test_add_missing_compression_parent_unvalidated_index(self):
unvalidated = self.make_g_index_missing_compression_parent()
combined = CombinedGraphIndex([unvalidated])
index = _KnitGraphIndex(combined, lambda: True, deltas=True)
@@ -1662,6 +1670,28 @@
frozenset([('missing-parent',)]),
index.get_missing_compression_parents())
+ def test_add_missing_noncompression_parent_unvalidated_index(self):
+ unvalidated = self.make_g_index_missing_parent()
+ combined = CombinedGraphIndex([unvalidated])
+ index = _KnitGraphIndex(combined, lambda: True, deltas=True,
+ track_external_parent_refs=True)
+ index.scan_unvalidated_index(unvalidated)
+ self.assertEqual(
+ frozenset([('missing-parent',)]), index.get_missing_parents())
+
+ def test_track_external_parent_refs(self):
+ g_index = self.make_g_index('empty', 2, [])
+ combined = CombinedGraphIndex([g_index])
+ index = _KnitGraphIndex(combined, lambda: True, deltas=True,
+ add_callback=self.catch_add, track_external_parent_refs=True)
+ self.caught_entries = []
+ index.add_records([
+ (('new-key',), 'fulltext,no-eol', (None, 50, 60),
+ [('parent-1',), ('parent-2',)])])
+ self.assertEqual(
+ frozenset([('parent-1',), ('parent-2',)]),
+ index.get_missing_parents())
+
def test_add_unvalidated_index_with_present_external_references(self):
index = self.two_graph_index(deltas=True)
# Ugly hack to get at one of the underlying GraphIndex objects that
More information about the bazaar-commits
mailing list