Rev 3180: Merge more-find-ghosts newer logic. in http://people.ubuntu.com/~robertc/baz2.0/remote.graph
Robert Collins
robertc at robertcollins.net
Mon Jan 14 05:16:15 GMT 2008
At http://people.ubuntu.com/~robertc/baz2.0/remote.graph
------------------------------------------------------------
revno: 3180
revision-id:robertc at robertcollins.net-20080114051607-8icqda4bvrc2u1xe
parent: robertc at robertcollins.net-20080114044608-bmse3mmsnp1663rf
parent: robertc at robertcollins.net-20080114030008-xdf5xvub5prv2zal
committer: Robert Collins <robertc at robertcollins.net>
branch nick: remote.graph
timestamp: Mon 2008-01-14 16:16:07 +1100
message:
Merge more-find-ghosts newer logic.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/debug.py debug.py-20061102062349-vdhrw9qdpck8cl35-1
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/reconfigure.py reconfigure.py-20070908040425-6ykgo7escxhyrg9p-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-2
------------------------------------------------------------
revno: 3172.2.1.1.4
revision-id:robertc at robertcollins.net-20080114030008-xdf5xvub5prv2zal
parent: robertc at robertcollins.net-20080114005859-0o83m18iul1xwy0v
committer: Robert Collins <robertc at robertcollins.net>
branch nick: more-find-ghosts
timestamp: Mon 2008-01-14 14:00:08 +1100
message:
Review feedback.
modified:
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
------------------------------------------------------------
revno: 3172.2.1.1.3
revision-id:robertc at robertcollins.net-20080114005859-0o83m18iul1xwy0v
parent: robertc at robertcollins.net-20080114000613-3zal7v1to7k9xp5b
parent: robertc at robertcollins.net-20080114005456-d4a5iief649hmtiy
committer: Robert Collins <robertc at robertcollins.net>
branch nick: more-find-ghosts
timestamp: Mon 2008-01-14 11:58:59 +1100
message:
More graph support kthanxbye.
modified:
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
------------------------------------------------------------
revno: 3172.1.7
revision-id:robertc at robertcollins.net-20080114005456-d4a5iief649hmtiy
parent: robertc at robertcollins.net-20080113235717-9a1w22q93j81nd0o
committer: Robert Collins <robertc at robertcollins.net>
branch nick: breadth-first-ghosts
timestamp: Mon 2008-01-14 11:54:56 +1100
message:
Update graph searchers stop_searching_any and start_searching for next_with_ghosts.
modified:
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
------------------------------------------------------------
revno: 3172.2.1.1.2
revision-id:robertc at robertcollins.net-20080114000613-3zal7v1to7k9xp5b
parent: robertc at robertcollins.net-20080111043302-0pi5csqyr1ugry00
parent: robertc at robertcollins.net-20080113235717-9a1w22q93j81nd0o
committer: Robert Collins <robertc at robertcollins.net>
branch nick: more-find-ghosts
timestamp: Mon 2008-01-14 11:06:13 +1100
message:
Merge next_with_ghosts support.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/debug.py debug.py-20061102062349-vdhrw9qdpck8cl35-1
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/reconfigure.py reconfigure.py-20070908040425-6ykgo7escxhyrg9p-1
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/smart/client.py client.py-20061116014825-2k6ada6xgulslami-1
bzrlib/smart/repository.py repository.py-20061128022038-vr5wy5bubyb8xttk-1
bzrlib/smart/request.py request.py-20061108095550-gunadhxmzkdjfeek-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-2
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
bzrlib/tests/test_smart.py test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
------------------------------------------------------------
revno: 3172.1.6
revision-id:robertc at robertcollins.net-20080113235717-9a1w22q93j81nd0o
parent: pqm at pqm.ubuntu.com-20080111214408-cpkslxu95eg5c45u
committer: Robert Collins <robertc at robertcollins.net>
branch nick: breadth-first-ghosts
timestamp: Mon 2008-01-14 10:57:17 +1100
message:
* New method ``next_with_ghosts`` on the Graph breadth-first-search objects
which will split out ghosts and present parents into two separate sets,
useful for code which needs to be aware of ghosts (e.g. fetching data
cares about ghosts during revision selection). (Robert Collins)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
------------------------------------------------------------
revno: 3172.1.5
revision-id:pqm at pqm.ubuntu.com-20080111214408-cpkslxu95eg5c45u
parent: pqm at pqm.ubuntu.com-20080111083251-et161scbblpkphri
parent: abentley at panoramicfeedback.com-20080111175920-dn202iylc1kfdfif
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2008-01-11 21:44:08 +0000
message:
Reconfigure can safely be interrupted while fetching (abentley,
#179316)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/reconfigure.py reconfigure.py-20070908040425-6ykgo7escxhyrg9p-1
bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-2
------------------------------------------------------------
revno: 2796.2.30
revision-id:abentley at panoramicfeedback.com-20080111175920-dn202iylc1kfdfif
parent: abentley at panoramicfeedback.com-20080111174159-ruc9j1mkhqj9m94l
committer: Aaron Bentley <abentley at panoramicfeedback.com>
branch nick: bzr.reconfigure
timestamp: Fri 2008-01-11 12:59:20 -0500
message:
Reconfigure can safely be interrupted while fetching (#179316)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/reconfigure.py reconfigure.py-20070908040425-6ykgo7escxhyrg9p-1
bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-2
------------------------------------------------------------
revno: 2796.2.29
revision-id:abentley at panoramicfeedback.com-20080111174159-ruc9j1mkhqj9m94l
parent: abentley at panoramicfeedback.com-20071214153828-wc2w1i8ey025bb8x
parent: pqm at pqm.ubuntu.com-20080111083251-et161scbblpkphri
committer: Aaron Bentley <abentley at panoramicfeedback.com>
branch nick: bzr.reconfigure
timestamp: Fri 2008-01-11 12:41:59 -0500
message:
Merge from bzr.dev
added:
bzrlib/help_topics/ help_topics-20071211013603-qz0sojhgxhiujm6a-1
bzrlib/help_topics/en/ bzrlibhelp-20071209214431-xzg3moksichjwyts-1
bzrlib/tests/repository_implementations/test_has_revisions.py test_has_revisions.p-20080111035443-xaupgdsx5fw1q54b-1
bzrlib/tests/test_http_implementations.py test_http_implementa-20071218210003-65nh81gglcfvurw6-1
bzrlib/version_info_formats/format_custom.py format_custom.py-20071029100350-ajovqhbpb5khf6gu-1
contrib/bzr_access bzr_access-20071210163004-c9lb1renhra2ncg0-1
doc/developers/inventory.txt inventory.txt-20080103013957-opkrhxy6lmywmx4i-1
doc/developers/lca-merge.txt lcamerge.txt-20080103061803-9isydn4ivgwrvorw-1
doc/en/tutorials/using_bazaar_with_launchpad.txt using_bazaar_with_lp-20071211073140-7msh8uf9a9h4y9hb-1
doc/en/user-reference/readme.txt readme.txt-20071211133352-guencaey6fpesv4j-1
renamed:
bzrlib/help_topics.py => bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/tests/HTTPTestUtil.py => bzrlib/tests/http_utils.py HTTPTestUtil.py-20050914180604-247d3aafb7a43343
bzrlib/tests/HttpServer.py => bzrlib/tests/http_server.py httpserver.py-20061012142527-m1yxdj1xazsf8d7s-1
doc/en/user-guide/authentication_conf.txt => bzrlib/help_topics/en/authentication.txt authentication_conf.-20071104135035-glfv0ri355tyg1nf-1
doc/en/user-guide/configuration.txt => bzrlib/help_topics/en/configuration.txt configuration.txt-20060314161707-868350809502af01
doc/en/user-guide/conflicts.txt => bzrlib/help_topics/en/conflicts.txt conflicts.txt-20070723221841-ns3jvwxdb4okn6fk-1
doc/en/user-reference/hooks.txt => bzrlib/help_topics/en/hooks.txt hooks.txt-20070830033044-xxu2rced13f72dka-1
modified:
.bzrignore bzrignore-20050311232317-81f7b71efa2db11a
Makefile Makefile-20050805140406-d96e3498bb61c5bb
NEWS NEWS-20050323055033-4e00b5db738777ff
README README-20050309040720-8f368abf9f346b9d
bzrlib/_patiencediff_c.c _patiencediff_c.c-20070721205602-q3imkipwlgagp3cy-1
bzrlib/branch.py branch.py-20050309040759-e4baf4e0d046576e
bzrlib/bugtracker.py bugtracker.py-20070410073305-vu1vu1qosjurg8kb-1
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/bundle/serializer/v4.py v10.py-20070611062757-5ggj7k18s9dej0fr-1
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/cmd_version_info.py __init__.py-20051228204928-697d01fdca29c99b
bzrlib/commands.py bzr.py-20050309040720-d10f4714595cf8c3
bzrlib/commit.py commit.py-20050511101309-79ec1a0168e0e825
bzrlib/conflicts.py conflicts.py-20051001061850-78ef952ba63d2b42
bzrlib/debug.py debug.py-20061102062349-vdhrw9qdpck8cl35-1
bzrlib/diff.py diff.py-20050309040759-26944fbbf2ebbf36
bzrlib/dirstate.py dirstate.py-20060728012006-d6mvoihjb3je9peu-1
bzrlib/errors.py errors.py-20050309040759-20512168c4e14fbd
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/index.py index.py-20070712131115-lolkarso50vjr64s-1
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/lockable_files.py control_files.py-20051111201905-bb88546e799d669f
bzrlib/merge.py merge.py-20050513021216-953b65a438527106
bzrlib/option.py option.py-20051014052914-661fb36e76e7362f
bzrlib/osutils.py osutils.py-20050309040759-eeaff12fbf77ac86
bzrlib/progress.py progress.py-20050610070202-df9faaab791964c0
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repofmt/knitrepo.py knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/revision.py revision.py-20050309040759-e77802c08f3999d5
bzrlib/smart/client.py client.py-20061116014825-2k6ada6xgulslami-1
bzrlib/smart/medium.py medium.py-20061103051856-rgu2huy59fkz902q-1
bzrlib/smart/repository.py repository.py-20061128022038-vr5wy5bubyb8xttk-1
bzrlib/smart/request.py request.py-20061108095550-gunadhxmzkdjfeek-1
bzrlib/smart/vfs.py vfs.py-20061108095550-gunadhxmzkdjfeek-2
bzrlib/symbol_versioning.py symbol_versioning.py-20060105104851-9ecf8af605d15a80
bzrlib/tests/TestUtil.py TestUtil.py-20050824080200-5f70140a2d938694
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/test_annotate.py testannotate.py-20051013044000-457f44801bfa9d39
bzrlib/tests/blackbox/test_checkout.py test_checkout.py-20060211231752-a5cde67cf70af854
bzrlib/tests/blackbox/test_diff.py test_diff.py-20060110203741-aa99ac93e633d971
bzrlib/tests/blackbox/test_ignore.py test_ignore.py-20060703063225-4tm8dc2pa7wwg2t3-1
bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
bzrlib/tests/blackbox/test_merge.py test_merge.py-20060323225809-9bc0459c19917f41
bzrlib/tests/blackbox/test_non_ascii.py test_non_ascii.py-20060105214030-68010be784a5d854
bzrlib/tests/blackbox/test_outside_wt.py test_outside_wt.py-20060116200058-98edd33e7db8bdde
bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
bzrlib/tests/blackbox/test_send.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
bzrlib/tests/blackbox/test_split.py test_split.py-20061008023421-qy0vdpzysh5rriu8-1
bzrlib/tests/blackbox/test_too_much.py blackbox.py-20050620052131-a7370d756399f615
bzrlib/tests/blackbox/test_upgrade.py test_upgrade.py-20060120060132-b41e5ed2f886ad28
bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
bzrlib/tests/branch_implementations/test_http.py test_http.py-20060731224648-2eef7ae5yja95rya-1
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/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
bzrlib/tests/inventory_implementations/__init__.py __init__.py-20070821044532-olbadbokgv3qv1yd-1
bzrlib/tests/repository_implementations/__init__.py __init__.py-20060131092037-9564957a7d4a841b
bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
bzrlib/tests/test_ancestry.py test_ancestry.py-20050913023709-69768e94848312c6
bzrlib/tests/test_bundle.py test.py-20050630184834-092aa401ab9f039c
bzrlib/tests/test_bzrdir.py test_bzrdir.py-20060131065654-deba40eef51cf220
bzrlib/tests/test_commit.py test_commit.py-20050914060732-279f057f8c295434
bzrlib/tests/test_conflicts.py test_conflicts.py-20051006031059-e2dad9bbeaa5891f
bzrlib/tests/test_diff.py testdiff.py-20050727164403-d1a3496ebb12e339
bzrlib/tests/test_extract.py test_extract.py-20061002214140-qdnnm67q1ov6x6pd-1
bzrlib/tests/test_fetch.py testfetch.py-20050825090644-f73e07e7dfb1765a
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
bzrlib/tests/test_help.py test_help.py-20070419045354-6q6rq15j9e2n5fna-1
bzrlib/tests/test_http.py testhttp.py-20051018020158-b2eef6e867c514d9
bzrlib/tests/test_http_response.py test_http_response.py-20060628233143-950b2a482a32505d
bzrlib/tests/test_lockable_files.py test_lockable_files.py-20051225183927-365c7fd99591caf1
bzrlib/tests/test_merge.py testmerge.py-20050905070950-c1b5aa49ff911024
bzrlib/tests/test_msgeditor.py test_msgeditor.py-20051202041359-920315ec6011ee51
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/tests/test_progress.py test_progress.py-20060308160359-978c397bc79b7fda
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
bzrlib/tests/test_revert.py test_revert.py-20060828180832-fqb1v6ecpyvnlitj-1
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_smart.py test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
bzrlib/tests/test_transport.py testtransport.py-20050718175618-e5cdb99f4555ddce
bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
bzrlib/tests/test_urlutils.py test_urlutils.py-20060502192900-46b1f9579987cf9c
bzrlib/tests/test_version_info.py test_version_info.py-20051228204928-2c364e30b702b41b
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/tests/test_win32utils.py test_win32utils.py-20070713181630-8xsrjymd3e8mgw23-108
bzrlib/tests/test_workingtree.py testworkingtree.py-20051004024258-b88d0fe8f101d468
bzrlib/tests/tree_implementations/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1
bzrlib/trace.py trace.py-20050309040759-c8ed824bdcd4748a
bzrlib/transform.py transform.py-20060105172343-dd99e54394d91687
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
bzrlib/transport/http/response.py _response.py-20060613154423-a2ci7hd4iw5c7fnt-1
bzrlib/transport/remote.py ssh.py-20060608202016-c25gvf1ob7ypbus6-1
bzrlib/tree.py tree.py-20050309040759-9d5f2496be663e77
bzrlib/urlutils.py urlutils.py-20060502195429-e8a161ecf8fac004
bzrlib/version_info_formats/__init__.py generate_version_info.py-20051228204928-8358edabcddcd97e
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
bzrlib/workingtree.py workingtree.py-20050511021032-29b6ec0a681e02e3
bzrlib/workingtree_4.py workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
bzrlib/xml_serializer.py xml.py-20050309040759-57d51586fdec365d
doc/developers/HACKING.txt HACKING-20050805200004-2a5dc975d870f78c
doc/developers/index.txt index.txt-20070508041241-qznziunkg0nffhiw-1
doc/en/user-guide/browsing_history.txt browsing_history.txt-20071121073725-0corxykv5irjal00-2
doc/en/user-guide/bug_trackers.txt bug_trackers.txt-20070713223459-khxdlcudraii95uv-1
doc/en/user-guide/configuring_bazaar.txt configuring_bazaar.t-20071128000722-ncxiua259xwbdbg7-1
doc/en/user-guide/hooks.txt hooks.txt-20070829200551-7nr6e5a1io6x78uf-1
doc/en/user-guide/index.txt index.txt-20060622101119-tgwtdci8z769bjb9-2
doc/en/user-guide/introducing_bazaar.txt introducing_bazaar.t-20071114035000-q36a9h57ps06uvnl-5
doc/en/user-guide/sending_changes.txt sending_changes.txt-20071123154453-dk2mjhrg1vpjm5w2-4
doc/en/user-guide/setting_up_email.txt setting_up_email.txt-20060314161707-fd242c8944346173
doc/en/user-guide/version_info.txt version_info.txt-20060921215543-gju6o5xdic8w25np-1
doc/index.txt index.txt-20070813101924-07gd9i9d2jt124bf-1
setup.py setup.py-20050314065409-02f8a0a6e3f9bc70
tools/doc_generate/autodoc_rstx.py autodoc_rstx.py-20060420024836-3e0d4a526452193c
tools/rst2html.py rst2html.py-20060817120932-gn177u8v0008txhu-1
bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/tests/http_utils.py HTTPTestUtil.py-20050914180604-247d3aafb7a43343
bzrlib/tests/http_server.py httpserver.py-20061012142527-m1yxdj1xazsf8d7s-1
bzrlib/help_topics/en/authentication.txt authentication_conf.-20071104135035-glfv0ri355tyg1nf-1
bzrlib/help_topics/en/configuration.txt configuration.txt-20060314161707-868350809502af01
bzrlib/help_topics/en/conflicts.txt conflicts.txt-20070723221841-ns3jvwxdb4okn6fk-1
bzrlib/help_topics/en/hooks.txt hooks.txt-20070830033044-xxu2rced13f72dka-1
------------------------------------------------------------
revno: 3172.1.4
revision-id:pqm at pqm.ubuntu.com-20080111083251-et161scbblpkphri
parent: pqm at pqm.ubuntu.com-20080111070636-jhozu5eo7wvh1k0o
parent: robertc at robertcollins.net-20080111054654-vn3mvu7ylqb6gfw3
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2008-01-11 08:32:51 +0000
message:
(robertc) Add Repository.has_revisions as part of improving pull.
(Robert Collins)
added:
bzrlib/tests/repository_implementations/test_has_revisions.py test_has_revisions.p-20080111035443-xaupgdsx5fw1q54b-1
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repofmt/knitrepo.py knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/repository_implementations/__init__.py __init__.py-20060131092037-9564957a7d4a841b
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
------------------------------------------------------------
revno: 3172.2.3
revision-id:robertc at robertcollins.net-20080111054654-vn3mvu7ylqb6gfw3
parent: robertc at robertcollins.net-20080111052846-oxt52a13l5mu73wj
committer: Robert Collins <robertc at robertcollins.net>
branch nick: integration
timestamp: Fri 2008-01-11 16:46:54 +1100
message:
Missed one occurence of None -> NULL_REVISION.
modified:
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
------------------------------------------------------------
revno: 3172.1.3
revision-id:pqm at pqm.ubuntu.com-20080111070636-jhozu5eo7wvh1k0o
parent: pqm at pqm.ubuntu.com-20080111050820-eendmy6xgfc6w0yc
parent: andrew.bennetts at canonical.com-20080111045553-g8rfanwmvy2bchtp
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2008-01-11 07:06:36 +0000
message:
(andrew) Enable use of smart revision streaming between repos with
compatible models.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/debug.py debug.py-20061102062349-vdhrw9qdpck8cl35-1
bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
------------------------------------------------------------
revno: 3172.3.1
revision-id:andrew.bennetts at canonical.com-20080111045553-g8rfanwmvy2bchtp
parent: pqm at pqm.ubuntu.com-20080110025628-6tl4b9cmdn335suw
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: remote-fetch-formats
timestamp: Fri 2008-01-11 15:55:53 +1100
message:
Enable use of smart revision streaming between repos with compatible models, not just between identical format repos.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/debug.py debug.py-20061102062349-vdhrw9qdpck8cl35-1
bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
=== modified file 'NEWS'
--- a/NEWS 2008-01-11 07:12:15 +0000
+++ b/NEWS 2008-01-14 05:16:07 +0000
@@ -54,6 +54,9 @@
at the start of the file, promoting linear reads for ``bzr log`` and the
like. This partially fixes #154129. (Robert Collins)
+ * Fetching between different repository formats with compatible models now
+ takes advantage of the smart method to stream revisions. (Andrew Bennetts)
+
* Merge directives now fetch prerequisites from the target branch if
needed. (Aaron Bentley)
@@ -116,6 +119,9 @@
* ``reconfigure`` is able to convert trees into lightweight checkouts.
(Aaron Bentley)
+ * ``reconfigure`` can safely be interrupted while fetching.
+ (Aaron Bentley, #179316)
+
* Reduce lockdir timeout to 0 when running ``bzr serve``. (Andrew Bennetts,
#148087)
@@ -169,6 +175,11 @@
inventories. This is primarily used by the ``revision_trees`` method, as
direct access to inventories is discouraged. (Robert Collins)
+ * New method ``next_with_ghosts`` on the Graph breadth-first-search objects
+ which will split out ghosts and present parents into two separate sets,
+ useful for code which needs to be aware of ghosts (e.g. fetching data
+ cares about ghosts during revision selection). (Robert Collins)
+
* Parent Providers should now implement ``get_parent_map`` returning a
dictionary instead of ``get_parents`` returning a list.
``Graph.get_parents`` is now deprecated. (John Arbash Meinel,
=== modified file 'bzrlib/debug.py'
--- a/bzrlib/debug.py 2008-01-09 07:04:23 +0000
+++ b/bzrlib/debug.py 2008-01-11 04:55:53 +0000
@@ -34,6 +34,7 @@
* hpss - trace smart protocol requests and responses
* http - trace http connections, requests and responses
* index - trace major index operations
+ * knit - trace knit operations
* lock - trace when lockdir locks are taken or released
* merge - emit information for debugging merges
* times - record timestamps from program start in trace file
=== modified file 'bzrlib/fetch.py'
--- a/bzrlib/fetch.py 2008-01-11 07:12:15 +0000
+++ b/bzrlib/fetch.py 2008-01-14 05:16:07 +0000
@@ -336,6 +336,8 @@
:param revs: A list of revision ids
"""
+ # In case that revs is not a list.
+ revs = list(revs)
while revs:
for tree in self.source.revision_trees(revs[:100]):
if tree.inventory.revision_id is None:
=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py 2008-01-11 00:44:17 +0000
+++ b/bzrlib/graph.py 2008-01-14 00:54:56 +0000
@@ -506,39 +506,92 @@
"""
def __init__(self, revisions, parents_provider):
- self._start = set(revisions)
- self._search_revisions = None
- self.seen = set(revisions)
+ self._iterations = 0
+ self._next_query = set(revisions)
+ self.seen = set()
self._parents_provider = parents_provider
+ self._returning = 'checked'
def __repr__(self):
- if self._search_revisions is not None:
- search = 'searching=%r' % (list(self._search_revisions),)
+ if self._iterations:
+ prefix = "searching"
else:
- search = 'starting=%r' % (list(self._start),)
- return ('_BreadthFirstSearcher(%s,'
- ' seen=%r)' % (search, list(self.seen)))
+ prefix = "starting"
+ search = '%s=%r' % (prefix, list(self._next_query))
+ return ('_BreadthFirstSearcher(iterations=%d, %s,'
+ ' seen=%r)' % (self._iterations, search, list(self.seen)))
def next(self):
"""Return the next ancestors of this revision.
Ancestors are returned in the order they are seen in a breadth-first
- traversal. No ancestor will be returned more than once.
+ traversal. No ancestor will be returned more than once. Ancestors are
+ returned before their parentage is queried, so ghosts and missing
+ revisions (including the start revisions) are included in the result.
+ This can save a round trip in LCA style calculation by allowing
+ convergence to be detected without reading the data for the revision
+ the convergence occurs on.
+
+ :return: A set of revision_ids.
"""
- if self._search_revisions is None:
- self._search_revisions = self._start
+ if self._returning != 'query':
+ # switch to returning the query, not the results.
+ self._returning = 'query'
+ self._iterations += 1
+ self.seen.update(self._next_query)
else:
- new_search_revisions = set()
- parent_map = self._parents_provider.get_parent_map(
- self._search_revisions)
- for parents in parent_map.itervalues():
- new_search_revisions.update(p for p in parents if
- p not in self.seen)
- self._search_revisions = new_search_revisions
- if len(self._search_revisions) == 0:
- raise StopIteration()
- self.seen.update(self._search_revisions)
- return self._search_revisions
+ self._advance()
+ if len(self._next_query) == 0:
+ raise StopIteration()
+ return self._next_query
+
+ def next_with_ghosts(self):
+ """Return the next found ancestors, with ghosts split out.
+
+ Ancestors are returned in the order they are seen in a breadth-first
+ traversal. No ancestor will be returned more than once. Ancestors are
+ returned only after asking for their parents, which can
+
+ :return: A tuple with (present ancestors, ghost ancestors) sets.
+ """
+ if self._returning != 'checked':
+ # switch to returning the results, not the current query.
+ self._returning = 'checked'
+ self._advance()
+ if len(self._next_query) == 0:
+ raise StopIteration()
+ self._advance()
+ return self._current_present, self._current_ghosts
+
+ def _advance(self):
+ """Advance the search.
+
+ Updates self.seen, self._next_query, self._current_present,
+ self._current_ghosts.
+ """
+ self._iterations += 1
+ found, ghosts, next, parents = self._do_query(self._next_query)
+ self._current_present = found
+ self._current_ghosts = ghosts
+ self._next_query = next
+ self._current_parents = parents
+
+ def _do_query(self, revisions):
+ """Query for revisions.
+
+ :param revisions: Revisions to query.
+ :return: A tuple: (set(found_revisions), set(ghost_revisions),
+ set(parents_of_found_revisions), dict(found_revisions:parents)).
+ """
+ found_parents = set()
+ parents_of_found = set()
+ parent_map = self._parents_provider.get_parent_map(revisions)
+ for rev_id, parents in parent_map.iteritems():
+ found_parents.add(rev_id)
+ parents_of_found.update(p for p in parents if p not in self.seen)
+ ghost_parents = revisions - found_parents
+ self.seen.update(parents_of_found)
+ return found_parents, ghost_parents, parents_of_found, parent_map
def __iter__(self):
return self
@@ -562,13 +615,56 @@
None of the specified revisions are required to be present in the
search list. In this case, the call is a no-op.
"""
- stopped = self._search_revisions.intersection(revisions)
- self._search_revisions = self._search_revisions.difference(revisions)
+ revisions = frozenset(revisions)
+ if self._returning == 'query':
+ stopped = self._next_query.intersection(revisions)
+ self._next_query = self._next_query.difference(revisions)
+ else:
+ stopped = set()
+ stopped.update(self._current_present.intersection(revisions))
+ stopped.update(self._current_ghosts.intersection(revisions))
+ self._current_present.difference_update(stopped)
+ self._current_ghosts.difference_update(stopped)
+ # stopping 'x' should stop returning parents of 'x', but
+ # not if 'y' always references those same parents
+ stop_rev_references = {}
+ for rev in stopped:
+ for parent_id in self._current_parents[rev]:
+ if parent_id not in stop_rev_references:
+ stop_rev_references[parent_id] = 0
+ stop_rev_references[parent_id] += 1
+ # if only the stopped revisions reference it, the ref count will be
+ # 0 after this loop
+ for rev, parents in self._current_parents.iteritems():
+ for parent_id in parents:
+ try:
+ stop_rev_references[parent_id] -= 1
+ except KeyError:
+ pass
+ stop_parents = set()
+ for rev_id, refs in stop_rev_references.iteritems():
+ if refs == 0:
+ stop_parents.add(rev_id)
+ self._next_query.difference_update(stop_parents)
return stopped
def start_searching(self, revisions):
- if self._search_revisions is None:
- self._start = set(revisions)
+ """Add revisions to the search.
+
+ The parents of revisions will be returned from the next call to next()
+ or next_with_ghosts(). If next_with_ghosts was the most recently used
+ next* call then the return value is the result of looking up the
+ ghost/not ghost status of revisions. (A tuple (present, ghosted)).
+ """
+ revisions = frozenset(revisions)
+ if self._returning == 'query':
+ self._next_query.update(revisions.difference(self.seen))
+ self.seen.update(revisions)
else:
- self._search_revisions.update(revisions.difference(self.seen))
- self.seen.update(revisions)
+ # perform a query on revisions
+ revs, ghosts, query, parents = self._do_query(revisions)
+ self._current_present.update(revs)
+ self._current_ghosts.update(ghosts)
+ self._next_query.update(query)
+ self._current_parents.update(parents)
+ return revs, ghosts
=== modified file 'bzrlib/help_topics/__init__.py'
--- a/bzrlib/help_topics/__init__.py 2008-01-09 07:04:23 +0000
+++ b/bzrlib/help_topics/__init__.py 2008-01-11 04:55:53 +0000
@@ -287,6 +287,7 @@
-Dhpss Trace smart protocol requests and responses.
-Dhttp Trace http connections, requests and responses
-Dindex Trace major index operations.
+-Dknit Trace knit operations.
-Dlock Trace when lockdir locks are taken or released.
-Dmerge Emit information for debugging merges.
-Dtimes Record timestamps from program start in trace file.
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2008-01-02 03:08:59 +0000
+++ b/bzrlib/knit.py 2008-01-11 07:06:36 +0000
@@ -736,7 +736,9 @@
:seealso: get_data_stream
"""
if format != self.get_format_signature():
- trace.mutter('incompatible format signature inserting to %r', self)
+ if 'knit' in debug.debug_flags:
+ trace.mutter(
+ 'incompatible format signature inserting to %r', self)
source = self._knit_from_datastream(
(format, data_list, reader_callable))
self.join(source)
=== modified file 'bzrlib/reconfigure.py'
--- a/bzrlib/reconfigure.py 2007-12-13 16:38:54 +0000
+++ b/bzrlib/reconfigure.py 2008-01-11 17:59:20 +0000
@@ -216,6 +216,11 @@
if self._create_branch and self.referenced_branch is not None:
repo.fetch(self.referenced_branch.repository,
self.referenced_branch.last_revision())
+ if self._create_reference:
+ reference_branch = branch.Branch.open(self._select_bind_location())
+ if self._destroy_repository:
+ if self._create_reference:
+ reference_branch.repository.fetch(self.repository)
last_revision_info = None
if self._destroy_reference:
last_revision_info = self.referenced_branch.last_revision_info()
@@ -230,7 +235,6 @@
else:
local_branch = self.local_branch
if self._create_reference:
- reference_branch = branch.Branch.open(self._select_bind_location())
format = branch.BranchReferenceFormat().initialize(self.bzrdir,
reference_branch)
if self._destroy_tree:
@@ -243,6 +247,4 @@
bind_location = self._select_bind_location()
local_branch.bind(branch.Branch.open(bind_location))
if self._destroy_repository:
- if self._create_reference:
- reference_branch.repository.fetch(self.repository)
self.bzrdir.destroy_repository()
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2008-01-11 07:12:15 +0000
+++ b/bzrlib/repository.py 2008-01-14 05:16:07 +0000
@@ -842,8 +842,14 @@
for version, options, parents, some_bytes in decoded_list:
data_list.append((version, options, len(some_bytes), parents))
knit_bytes += some_bytes
+ buffer = StringIO(knit_bytes)
+ def reader_func(count):
+ if count is None:
+ return buffer.read()
+ else:
+ return buffer.read(count)
knit.insert_data_stream(
- (format, data_list, StringIO(knit_bytes).read))
+ (format, data_list, reader_func))
@needs_read_lock
def missing_revision_ids(self, other, revision_id=None, find_ghosts=True):
@@ -2303,6 +2309,39 @@
(copied, failures).
"""
raise NotImplementedError(self.fetch)
+
+ def _walk_to_common_revisions(self, revision_ids):
+ """Walk out from revision_ids in source to revisions target has.
+
+ :param revision_ids: The start point for the search.
+ :return: A set of revision ids.
+ """
+ graph = self.source.get_graph()
+ missing_revs = set()
+ # ensure we don't pay silly lookup costs.
+ revision_ids = frozenset(revision_ids)
+ searcher = graph._make_breadth_first_searcher(revision_ids)
+ null_set = frozenset([_mod_revision.NULL_REVISION])
+ while True:
+ try:
+ next_revs, ghosts = searcher.next_with_ghosts()
+ except StopIteration:
+ break
+ if revision_ids.intersection(ghosts):
+ absent_ids = set(revision_ids.intersection(ghosts))
+ # If all absent_ids are present in target, no error is needed.
+ absent_ids.difference_update(
+ self.target.has_revisions(absent_ids))
+ if absent_ids:
+ raise errors.NoSuchRevision(self.source, absent_ids.pop())
+ # we don't care about other ghosts as we can't fetch them and
+ # haven't been asked to.
+ next_revs = set(next_revs)
+ next_revs.difference_update(null_set)
+ have_revs = self.target.has_revisions(next_revs)
+ missing_revs.update(next_revs - have_revs)
+ searcher.stop_searching_any(have_revs)
+ return missing_revs
@needs_read_lock
def missing_revision_ids(self, revision_id=None, find_ghosts=True):
@@ -2317,26 +2356,7 @@
"""
# stop searching at found target revisions.
if not find_ghosts and revision_id is not None:
- graph = self.source.get_graph()
- missing_revs = set()
- searcher = graph._make_breadth_first_searcher([revision_id])
- null_set = frozenset([_mod_revision.NULL_REVISION])
- while True:
- try:
- next_revs = set(searcher.next())
- except StopIteration:
- break
- next_revs.difference_update(null_set)
- have_revs = self.target.has_revisions(next_revs)
- missing_revs.update(next_revs - have_revs)
- searcher.stop_searching_any(have_revs)
- if next_revs - have_revs == set([revision_id]):
- # we saw the start rev itself, but no parents from it (or
- # next_revs would have been updated to e.g. set(). We remove
- # have_revs because if we found revision_id locally we
- # stop_searching at the first time around.
- raise errors.NoSuchRevision(self.source, revision_id)
- return missing_revs
+ return self._walk_to_common_revisions([revision_id])
# generic, possibly worst case, slow code path.
target_ids = set(self.target.all_revision_ids())
if revision_id is not None:
@@ -2679,26 +2699,7 @@
revision_id.
"""
if not find_ghosts and revision_id is not None:
- graph = self.source.get_graph()
- missing_revs = set()
- searcher = graph._make_breadth_first_searcher([revision_id])
- null_set = frozenset([_mod_revision.NULL_REVISION])
- while True:
- try:
- next_revs = set(searcher.next())
- except StopIteration:
- break
- next_revs.difference_update(null_set)
- have_revs = self.target.has_revisions(next_revs)
- missing_revs.update(next_revs - have_revs)
- searcher.stop_searching_any(have_revs)
- if next_revs - have_revs == set([revision_id]):
- # we saw the start rev itself, but no parents from it (or
- # next_revs would have been updated to e.g. set(). We remove
- # have_revs because if we found revision_id locally we
- # stop_searching at the first time around.
- raise errors.NoSuchRevision(self.source, revision_id)
- return missing_revs
+ return self._walk_to_common_revisions([revision_id])
elif revision_id is not None:
source_ids = self.source.get_ancestry(revision_id)
assert source_ids[0] is None
@@ -2851,14 +2852,12 @@
def is_compatible(source, target):
if not isinstance(source, remote.RemoteRepository):
return False
+ # Is source's model compatible with target's model?
source._ensure_real()
real_source = source._real_repository
- # Is source's model compatible with target's model, and are they the
- # same format? Currently we can only optimise fetching from an
- # identical model & format repo.
assert not isinstance(real_source, remote.RemoteRepository), (
"We don't support remote repos backed by remote repos yet.")
- return real_source._format == target._format
+ return InterRepository._same_model(real_source, target)
@needs_write_lock
def fetch(self, revision_id=None, pb=None, find_ghosts=False):
=== modified file 'bzrlib/tests/test_graph.py'
--- a/bzrlib/tests/test_graph.py 2008-01-11 00:44:17 +0000
+++ b/bzrlib/tests/test_graph.py 2008-01-14 00:54:56 +0000
@@ -652,6 +652,101 @@
self.assertEqual(set(['h1', 'h2']),
self._run_heads_break_deeper(graph_dict, ['h1', 'h2']))
+ def test_breadth_first_search_start_ghosts(self):
+ parent_graph = {}
+ parents_provider = InstrumentedParentsProvider(
+ _mod_graph.DictParentsProvider(parent_graph))
+ graph = _mod_graph.Graph(parents_provider)
+ # with_ghosts reports the ghosts
+ search = graph._make_breadth_first_searcher(['a-ghost'])
+ self.assertEqual((set(), set(['a-ghost'])), search.next_with_ghosts())
+ self.assertRaises(StopIteration, search.next_with_ghosts)
+ # next includes them
+ search = graph._make_breadth_first_searcher(['a-ghost'])
+ self.assertEqual(set(['a-ghost']), search.next())
+ self.assertRaises(StopIteration, search.next)
+
+ def test_breadth_first_search_deep_ghosts(self):
+ parent_graph = {
+ 'head':['present'],
+ 'present':['child', 'ghost'],
+ 'child':[],
+ }
+ parents_provider = InstrumentedParentsProvider(
+ _mod_graph.DictParentsProvider(parent_graph))
+ graph = _mod_graph.Graph(parents_provider)
+ # with_ghosts reports the ghosts
+ search = graph._make_breadth_first_searcher(['head'])
+ self.assertEqual((set(['head']), set()), search.next_with_ghosts())
+ self.assertEqual((set(['present']), set()), search.next_with_ghosts())
+ self.assertEqual((set(['child']), set(['ghost'])),
+ search.next_with_ghosts())
+ self.assertRaises(StopIteration, search.next_with_ghosts)
+ # next includes them
+ search = graph._make_breadth_first_searcher(['head'])
+ self.assertEqual(set(['head']), search.next())
+ self.assertEqual(set(['present']), search.next())
+ self.assertEqual(set(['child', 'ghost']),
+ search.next())
+ self.assertRaises(StopIteration, search.next)
+
+ def test_breadth_first_search_change_next_to_next_with_ghosts(self):
+ # To make the API robust, we allow changing from next() to
+ # next_with_ghosts() and vice verca.
+ parent_graph = {
+ 'head':['present'],
+ 'present':['child', 'ghost'],
+ 'child':[],
+ }
+ parents_provider = InstrumentedParentsProvider(
+ _mod_graph.DictParentsProvider(parent_graph))
+ graph = _mod_graph.Graph(parents_provider)
+ # with_ghosts reports the ghosts
+ search = graph._make_breadth_first_searcher(['head'])
+ self.assertEqual((set(['head']), set()), search.next_with_ghosts())
+ self.assertEqual(set(['present']), search.next())
+ self.assertEqual((set(['child']), set(['ghost'])),
+ search.next_with_ghosts())
+ self.assertRaises(StopIteration, search.next)
+ # next includes them
+ search = graph._make_breadth_first_searcher(['head'])
+ self.assertEqual(set(['head']), search.next())
+ self.assertEqual((set(['present']), set()), search.next_with_ghosts())
+ self.assertEqual(set(['child', 'ghost']),
+ search.next())
+ self.assertRaises(StopIteration, search.next_with_ghosts)
+
+ def test_breadth_first_change_search(self):
+ # To make the API robust, we allow changing from next() to
+ # next_with_ghosts() and vice verca.
+ parent_graph = {
+ 'head':['present'],
+ 'present':['stopped'],
+ 'other':['other_2'],
+ 'other_2':[],
+ }
+ parents_provider = InstrumentedParentsProvider(
+ _mod_graph.DictParentsProvider(parent_graph))
+ graph = _mod_graph.Graph(parents_provider)
+ search = graph._make_breadth_first_searcher(['head'])
+ self.assertEqual((set(['head']), set()), search.next_with_ghosts())
+ self.assertEqual((set(['present']), set()), search.next_with_ghosts())
+ self.assertEqual(set(['present']),
+ search.stop_searching_any(['present']))
+ self.assertEqual((set(['other']), set(['other_ghost'])),
+ search.start_searching(['other', 'other_ghost']))
+ self.assertEqual((set(['other_2']), set()), search.next_with_ghosts())
+ self.assertRaises(StopIteration, search.next_with_ghosts)
+ # next includes them
+ search = graph._make_breadth_first_searcher(['head'])
+ self.assertEqual(set(['head']), search.next())
+ self.assertEqual(set(['present']), search.next())
+ self.assertEqual(set(['present']),
+ search.stop_searching_any(['present']))
+ search.start_searching(['other', 'other_ghost'])
+ self.assertEqual(set(['other_2']), search.next())
+ self.assertRaises(StopIteration, search.next)
+
class TestCachingParentsProvider(tests.TestCase):
=== modified file 'bzrlib/tests/test_osutils.py'
--- a/bzrlib/tests/test_osutils.py 2008-01-09 23:21:45 +0000
+++ b/bzrlib/tests/test_osutils.py 2008-01-11 04:55:53 +0000
@@ -1114,6 +1114,7 @@
* hpss - trace smart protocol requests and responses
* http - trace http connections, requests and responses
* index - trace major index operations
+ * knit - trace knit operations
* lock - trace when lockdir locks are taken or released
* merge - emit information for debugging merges
* times - record timestamps from program start in trace file
=== modified file 'bzrlib/tests/test_reconfigure.py'
--- a/bzrlib/tests/test_reconfigure.py 2007-12-13 16:38:54 +0000
+++ b/bzrlib/tests/test_reconfigure.py 2008-01-11 17:59:20 +0000
@@ -200,6 +200,21 @@
self.assertRaises(errors.NoRepositoryPresent,
child.bzrdir.open_repository)
+ def test_branch_to_lightweight_checkout_failure(self):
+ parent = self.make_branch('parent')
+ child = parent.bzrdir.sprout('child').open_workingtree()
+ child.commit('test', rev_id='new-commit')
+ reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
+ child.bzrdir)
+ old_Repository_fetch = repository.Repository.fetch
+ repository.Repository.fetch = None
+ try:
+ self.assertRaises(TypeError, reconfiguration.apply)
+ finally:
+ repository.Repository.fetch = old_Repository_fetch
+ child = _mod_branch.Branch.open('child')
+ self.assertContainsRe(child.base, 'child/$')
+
def test_lightweight_checkout_to_lightweight_checkout(self):
parent = self.make_branch('parent')
checkout = parent.create_checkout('checkout', lightweight=True)
More information about the bazaar-commits
mailing list