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