Rev 2723: Merge more bzr.dev, addressing some bugs. [still broken] in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Wed Aug 22 07:23:57 BST 2007


At http://people.ubuntu.com/~robertc/baz2.0/repository

------------------------------------------------------------
revno: 2723
revision-id: robertc at robertcollins.net-20070822062352-0h4g14qd15odqfn0
parent: robertc at robertcollins.net-20070822010235-ox03mt2fthchnlor
parent: pqm at pqm.ubuntu.com-20070822044432-tfi063jpsr3vgnao
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Wed 2007-08-22 16:23:52 +1000
message:
  Merge more bzr.dev, addressing some bugs. [still broken]
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
  bzrlib/pack.py                 container.py-20070607160755-tr8zc26q18rn0jnb-1
  bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
  bzrlib/tests/revisionstore_implementations/test_all.py test_all.py-20060303020702-9b2d4c1d75407f31
  bzrlib/tests/test_pack.py      test_container.py-20070607160755-tr8zc26q18rn0jnb-2
  bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
  bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
  bzrlib/transport/chroot.py     chroot.py-20061011104729-0us9mgm97z378vnt-1
  bzrlib/transport/decorator.py  decorator.py-20060402223305-e913a0f25319ab42
  bzrlib/transport/fakevfat.py   fakevfat.py-20060407072414-d59939fa1d6c79d9
  bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
  bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
  bzrlib/transport/memory.py     memory.py-20051016101338-cd008dbdf69f04fc
  bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
  bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
  doc/developers/repository.txt  repository.txt-20070709152006-xkhlek456eclha4u-1
    ------------------------------------------------------------
    revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.1.3.71
    revision-id: pqm at pqm.ubuntu.com-20070822044432-tfi063jpsr3vgnao
    parent: pqm at pqm.ubuntu.com-20070822024917-nw7dh478y4d8cjeg
    parent: robertc at robertcollins.net-20070822041335-kdxlx0fuj6qes2cy
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Wed 2007-08-22 05:44:32 +0100
    message:
      (robertc) Index layer tweaks - -Dindex and a key_count method (only accurate on low level indices). (Robert Collins).
    modified:
      bzrlib/debug.py                debug.py-20061102062349-vdhrw9qdpck8cl35-1
      bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/tests/test_index.py     test_index.py-20070712131115-lolkarso50vjr64s-2
        ------------------------------------------------------------
        revno: 2592.1.25.2.26
        revision-id: robertc at robertcollins.net-20070822041335-kdxlx0fuj6qes2cy
        parent: robertc at robertcollins.net-20070822000026-kvufiqhlreokb1en
        committer: Robert Collins <robertc at robertcollins.net>
        branch nick: index
        timestamp: Wed 2007-08-22 14:13:35 +1000
        message:
          Why we should always test before committing.
        modified:
          bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
    ------------------------------------------------------------
    revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.1.3.70
    revision-id: pqm at pqm.ubuntu.com-20070822024917-nw7dh478y4d8cjeg
    parent: pqm at pqm.ubuntu.com-20070822013256-6w9yisc450hwqf2b
    parent: robertc at robertcollins.net-20070822014124-wiinlne4nin2f2tm
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Wed 2007-08-22 03:49:17 +0100
    message:
      (robertc) Add two new transport methods to help pack repositories, get_recommended_page_size and open_write_stream. (Robert Collins).
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
      bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
      bzrlib/transport/chroot.py     chroot.py-20061011104729-0us9mgm97z378vnt-1
      bzrlib/transport/decorator.py  decorator.py-20060402223305-e913a0f25319ab42
      bzrlib/transport/fakevfat.py   fakevfat.py-20060407072414-d59939fa1d6c79d9
      bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
      bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
      bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
      bzrlib/transport/memory.py     memory.py-20051016101338-cd008dbdf69f04fc
      bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
      bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
        ------------------------------------------------------------
        revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.11
        revision-id: robertc at robertcollins.net-20070822014124-wiinlne4nin2f2tm
        parent: robertc at robertcollins.net-20070815065307-8xwdhnm2qmpi5nk2
        parent: pqm at pqm.ubuntu.com-20070822013256-6w9yisc450hwqf2b
        committer: Robert Collins <robertc at robertcollins.net>
        branch nick: integration
        timestamp: Wed 2007-08-22 11:41:24 +1000
        message:
          Merge bzr.dev to resolve conflicts.
        removed:
          doc/README.1st                 README.1st-20060314161707-b943d5d4cce669b6
          doc/developers/scratch.txt     scratch.txt-20070618020404-cdhv0ecgrukomemg-3
        added:
          bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
          bzrlib/tests/blackbox/test_bundle_info.py test_bundle_info.py-20070816181255-eiuodwxuqu7w7gxf-1
          bzrlib/tests/repository_implementations/test_fetch.py test_fetch.py-20070814052151-5cxha9slx4c93uog-1
          bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
          bzrlib/util/simplemapi.py      simplemapi.py-20070810174811-ievl23nziuiq2k3m-1
          doc/developers/directory-fingerprints.txt directoryfingerprint-20070731033348-okmllh4b5srdtlk2-1
          doc/developers/last-modified.txt lastmodified.txt-20070806222243-df50y5fi7n85vnob-1
          doc/developers/revision-properties.txt revisionproperties.t-20070807133526-w57m8zv5o7t5kugm-1
          doc/en/                        en-20070810050627-g7r46azs5mlwj61j-1
          doc/en/developer-guide/        developerguide-20070810050627-g7r46azs5mlwj61j-2
          doc/en/mini-tutorial/          minitutorial-20070813141352-2u64ooqzo0or4hss-1
          doc/en/mini-tutorial/index.txt index.txt-20070813141352-2u64ooqzo0or4hss-2
          doc/en/quick-reference/        quickreference-20070813143223-5i7bgw7w8s7l3ae2-1
          doc/en/quick-reference/Makefile makefile-20070813143223-5i7bgw7w8s7l3ae2-2
          doc/en/quick-reference/quick-start-summary.svg quickstartsummary.sv-20070813143223-5i7bgw7w8s7l3ae2-3
          doc/en/release-notes/          releasenotes-20070810050627-g7r46azs5mlwj61j-3
          doc/en/user-guide/             userguide-20070810050627-g7r46azs5mlwj61j-4
          doc/en/user-reference/         userreference-20070810050627-g7r46azs5mlwj61j-5
          doc/index.txt                  index.txt-20070813101924-07gd9i9d2jt124bf-1
        renamed:
          doc/bug_trackers.txt => doc/en/user-guide/bug_trackers.txt bug_trackers.txt-20070713223459-khxdlcudraii95uv-1
          doc/centralized_workflow.txt => doc/en/user-guide/centralized_workflow.txt centralized_workflow-20060830194948-kspf52565xvgrlil-1
          doc/configuration.txt => doc/en/user-guide/configuration.txt configuration.txt-20060314161707-868350809502af01
          doc/conflicts.txt => doc/en/user-guide/conflicts.txt conflicts.txt-20070723221841-ns3jvwxdb4okn6fk-1
          doc/http_smart_server.txt => doc/en/user-guide/http_smart_server.txt fastcgi.txt-20061005091552-rz8pva0olkxv0sd8-3
          doc/index.txt => doc/en/user-guide/index.txt index.txt-20060622101119-tgwtdci8z769bjb9-2
          doc/plugins.txt => doc/en/user-guide/plugins.txt plugins.txt-20060314145616-525099a747f3ffdd
          doc/server.txt => doc/en/user-guide/server.txt server.txt-20060913044801-h939fvbwzz39gf7g-1
          doc/setting_up_email.txt => doc/en/user-guide/setting_up_email.txt setting_up_email.txt-20060314161707-fd242c8944346173
          doc/shared_repository_layouts.txt => doc/en/user-guide/shared_repository_layouts.txt shared_repository_la-20070502152030-bagewuqs18ns24o7-1
          doc/specifying_revisions.txt => doc/en/user-guide/specifying_revisions.txt specifying_revisions.txt-20060314161707-19deb139101bea33
          doc/tutorial.txt => doc/en/user-guide/tutorial.txt tutorial.txt-20050804190939-9dcbba2ef053bc84
          doc/using_aliases.txt => doc/en/user-guide/using_aliases.txt using_aliases.txt-20060314161707-c21d27fa2939e039
          doc/version_info.txt => doc/en/user-guide/version_info.txt version_info.txt-20060921215543-gju6o5xdic8w25np-1
        modified:
          .bzrignore                     bzrignore-20050311232317-81f7b71efa2db11a
          INSTALL                        INSTALL-20051019070340-4b27f2fb240c7943
          Makefile                       Makefile-20050805140406-d96e3498bb61c5bb
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
          bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
          bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
          bzrlib/bundle/bundle_data.py   read_changeset.py-20050619171944-c0d95aa685537640
          bzrlib/bundle/commands.py      __init__.py-20050617152058-1b6530d9ab85c11c
          bzrlib/bundle/serializer/v4.py v10.py-20070611062757-5ggj7k18s9dej0fr-1
          bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
          bzrlib/commands.py             bzr.py-20050309040720-d10f4714595cf8c3
          bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
          bzrlib/config.py               config.py-20051011043216-070c74f4e9e338e8
          bzrlib/debug.py                debug.py-20061102062349-vdhrw9qdpck8cl35-1
          bzrlib/delta.py                delta.py-20050729221636-54cf14ef94783d0a
          bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
          bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
          bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
          bzrlib/info.py                 info.py-20050323235939-6bbfe7d9700b0b9b
          bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
          bzrlib/lockable_files.py       control_files.py-20051111201905-bb88546e799d669f
          bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
          bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
          bzrlib/merge_directive.py      merge_directive.py-20070228184838-ja62280spt1g7f4x-1
          bzrlib/multiparent.py          __init__.py-20070410133617-n1jdhcc1n1mibarp-1
          bzrlib/mutabletree.py          mutabletree.py-20060906023413-4wlkalbdpsxi2r4y-2
          bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
          bzrlib/pack.py                 container.py-20070607160755-tr8zc26q18rn0jnb-1
          bzrlib/patches.py              patches.py-20050727183609-378c1cc5972ce908
          bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-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/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
          bzrlib/revisiontree.py         revisiontree.py-20060724012533-bg8xyryhxd0o0i0h-1
          bzrlib/status.py               status.py-20050505062338-431bfa63ec9b19e6
          bzrlib/store/__init__.py       store.py-20050309040759-164dc5173d6406c2
          bzrlib/store/revision/knit.py  knit.py-20060303020652-de5fa299e941a3c7
          bzrlib/store/versioned/__init__.py weavestore.py-20050907094258-88262e0434babab9
          bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
          bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
          bzrlib/tests/blackbox/test_added.py test_added.py-20060119085008-6b8b90369d42a26c
          bzrlib/tests/blackbox/test_aliases.py test_aliases.py-20060210230318-f0c08c9294dbfae1
          bzrlib/tests/blackbox/test_ancestry.py test_ancestry.py-20060131142602-6d9524c490537e90
          bzrlib/tests/blackbox/test_bound_branches.py test_bound_branches.py-20051109215527-2373188ad566c205
          bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
          bzrlib/tests/blackbox/test_cat.py test_cat.py-20051201162916-f0937e4e19ea24b3
          bzrlib/tests/blackbox/test_checkout.py test_checkout.py-20060211231752-a5cde67cf70af854
          bzrlib/tests/blackbox/test_commit.py test_commit.py-20060212094538-ae88fc861d969db0
          bzrlib/tests/blackbox/test_debug.py test_debug.py-20061026142942-q76cgg41785b3mdk-1
          bzrlib/tests/blackbox/test_diff.py test_diff.py-20060110203741-aa99ac93e633d971
          bzrlib/tests/blackbox/test_find_merge_base.py test_find_merge_base.py-20060131142124-f9d5c94df4505b70
          bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
          bzrlib/tests/blackbox/test_locale.py test_lang.py-20060824204205-80v50j25qkuop7yn-1
          bzrlib/tests/blackbox/test_pull.py test_pull.py-20051201144907-64959364f629947f
          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_status.py teststatus.py-20050712014354-508855eb9f29f7dc
          bzrlib/tests/blackbox/test_update.py test_update.py-20060212125639-c4dad1a5c56d5919
          bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
          bzrlib/tests/branch_implementations/test_hooks.py test_hooks.py-20070129154855-blhpwxmvjs07waei-1
          bzrlib/tests/branch_implementations/test_revision_history.py test_revision_histor-20070326062311-v7co92liyuchb80w-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_branch.py    test_branch.py-20060116013032-97819aa07b8ab3b5
          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_config.py    testconfig.py-20051011041908-742d0c15d8d8c8eb
          bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
          bzrlib/tests/test_escaped_store.py test_escaped_store.py-20060216023929-6bcb9a067344959f
          bzrlib/tests/test_fetch.py     testfetch.py-20050825090644-f73e07e7dfb1765a
          bzrlib/tests/test_lockdir.py   test_lockdir.py-20060220222025-33d4221569a3d600
          bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
          bzrlib/tests/test_multiparent.py test_multiparent.py-20070410133617-n1jdhcc1n1mibarp-4
          bzrlib/tests/test_pack.py      test_container.py-20070607160755-tr8zc26q18rn0jnb-2
          bzrlib/tests/test_patches.py   test_patches.py-20051231203844-f4974d20f6aea09c
          bzrlib/tests/test_revision.py  testrevision.py-20050804210559-46f5e1eb67b01289
          bzrlib/tests/test_revisionnamespaces.py testrevisionnamespaces.py-20050711050225-8b4af89e6b1efe84
          bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
          bzrlib/tests/test_sftp_transport.py testsftp.py-20051027032739-247570325fec7e7e
          bzrlib/tests/test_source.py    test_source.py-20051207061333-a58dea6abecc030d
          bzrlib/tests/test_store.py     teststore.py-20050826022702-f6caadb647395769
          bzrlib/tests/test_trace.py     testtrace.py-20051110225523-a21117fc7a07eeff
          bzrlib/tests/test_transport.py testtransport.py-20050718175618-e5cdb99f4555ddce
          bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
          bzrlib/tests/test_upgrade.py   test_upgrade.py-20051004040251-555fe1d2bae1bc71
          bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
          bzrlib/tests/test_weave.py     testknit.py-20050627023648-9833cc5562ffb785
          bzrlib/tests/test_win32utils.py test_win32utils.py-20070713181630-8xsrjymd3e8mgw23-108
          bzrlib/tests/tree_implementations/test_tree.py test_tree.py-20061215160206-usu7lwcj8aq2n3br-1
          bzrlib/tests/workingtree_implementations/test_commit.py test_commit.py-20060421013633-1610ec2331c8190f
          bzrlib/tests/workingtree_implementations/test_is_ignored.py test_is_ignored.py-20060518083307-a5b383dd4d070083
          bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
          bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
          bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
          bzrlib/transport/decorator.py  decorator.py-20060402223305-e913a0f25319ab42
          bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
          bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
          bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
          bzrlib/transport/http/wsgi.py  wsgi.py-20061005091552-rz8pva0olkxv0sd8-2
          bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
          bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
          bzrlib/transport/ssh.py        ssh.py-20060824042150-0s9787kng6zv1nwq-1
          bzrlib/tree.py                 tree.py-20050309040759-9d5f2496be663e77
          bzrlib/ui/__init__.py          ui.py-20050824083933-8cf663c763ba53a9
          bzrlib/ui/text.py              text.py-20051130153916-2e438cffc8afc478
          bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
          bzrlib/weave.py                knit.py-20050627021749-759c29984154256b
          bzrlib/win32utils.py           win32console.py-20051021033308-123c6c929d04973d
          bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
          bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
          doc/bazaar-vcs.org.kid         bazaarvcs.org.kid-20060929181918-huv7bgmdey0ktqci-1
          doc/developers/index.txt       index.txt-20070508041241-qznziunkg0nffhiw-1
          doc/developers/performance-contributing.txt performancecontribut-20070621063612-ac4zhhagjzkr21qp-1
          doc/developers/performance-roadmap.txt performanceroadmap.t-20070507174912-mwv3xv517cs4sisd-2
          setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
          tools/rst2prettyhtml.py        rst2prettyhtml.py-20060929181914-t7dh62f2wxi0i5aj-1
          tools/win32/ostools.py         ostools.py-20060731163025-npjffm46rgnkl50d-1
          doc/en/user-guide/configuration.txt configuration.txt-20060314161707-868350809502af01
          doc/en/user-guide/index.txt    index.txt-20060622101119-tgwtdci8z769bjb9-2
        ------------------------------------------------------------
        revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.10
        revision-id: robertc at robertcollins.net-20070815065307-8xwdhnm2qmpi5nk2
        parent: robertc at robertcollins.net-20070815012630-xqjtm5z2c4718n8s
        committer: Robert Collins <robertc at robertcollins.net>
        branch nick: transport-get-file
        timestamp: Wed 2007-08-15 16:53:07 +1000
        message:
          Review feedback and fix VFat emulated transports to not claim to have unix permissions.
        modified:
          bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
          bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
          bzrlib/transport/chroot.py     chroot.py-20061011104729-0us9mgm97z378vnt-1
          bzrlib/transport/decorator.py  decorator.py-20060402223305-e913a0f25319ab42
          bzrlib/transport/fakevfat.py   fakevfat.py-20060407072414-d59939fa1d6c79d9
          bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
          bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
          bzrlib/transport/memory.py     memory.py-20051016101338-cd008dbdf69f04fc
          bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
          bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
        ------------------------------------------------------------
        revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.9
        revision-id: robertc at robertcollins.net-20070815012630-xqjtm5z2c4718n8s
        parent: robertc at robertcollins.net-20070808071757-qfrx4dwms024ccy5
        parent: pqm at pqm.ubuntu.com-20070814221506-6rw0b0oolfdeqrdw
        committer: Robert Collins <robertc at robertcollins.net>
        branch nick: transport-get-file
        timestamp: Wed 2007-08-15 11:26:30 +1000
        message:
          Merge bzr.dev.
        removed:
          bzrlib/file_names.py           file_collection.py-20070714100753-j2zz4ahtk331k5zm-1
          bzrlib/tests/test_file_names.py test_file_collection-20070714093417-5gc9d821to85zo4t-1
        added:
          bzrlib/tests/repository_implementations/test_has_same_location.py test_has_same_locati-20070807074648-2i2ah82fbe83iys7-1
          bzrlib/tests/repository_implementations/test_write_group.py test_write_group.py-20070716105516-89n34xtogq5frn0m-1
          tools/win32/survey.txt         survey.txt-20070809075950-sf265mgu9oog8jjb-1
        renamed:
          doc/developers/HACKING => doc/developers/HACKING.txt HACKING-20050805200004-2a5dc975d870f78c
        modified:
          .bzrignore                     bzrignore-20050311232317-81f7b71efa2db11a
          Makefile                       Makefile-20050805140406-d96e3498bb61c5bb
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          README                         README-20050309040720-8f368abf9f346b9d
          bzr                            bzr.py-20050313053754-5485f144c7006fa6
          bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
          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/commands.py             bzr.py-20050309040720-d10f4714595cf8c3
          bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
          bzrlib/delta.py                delta.py-20050729221636-54cf14ef94783d0a
          bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
          bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
          bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
          bzrlib/help.py                 help.py-20050505025907-4dd7a6d63912f894
          bzrlib/help_topics.py          help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
          bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
          bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
          bzrlib/merge_directive.py      merge_directive.py-20070228184838-ja62280spt1g7f4x-1
          bzrlib/option.py               option.py-20051014052914-661fb36e76e7362f
          bzrlib/pack.py                 container.py-20070607160755-tr8zc26q18rn0jnb-1
          bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
          bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
          bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
          bzrlib/revision.py             revision.py-20050309040759-e77802c08f3999d5
          bzrlib/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
          bzrlib/revisiontree.py         revisiontree.py-20060724012533-bg8xyryhxd0o0i0h-1
          bzrlib/smart/protocol.py       protocol.py-20061108035435-ot0lstk2590yqhzr-1
          bzrlib/smtp_connection.py      smtp_connection.py-20070618204456-nu6wag1ste4biuk2-1
          bzrlib/symbol_versioning.py    symbol_versioning.py-20060105104851-9ecf8af605d15a80
          bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
          bzrlib/tests/blackbox/test_help.py test_help.py-20060216004358-4ee8a2a338f75a62
          bzrlib/tests/blackbox/test_merge.py test_merge.py-20060323225809-9bc0459c19917f41
          bzrlib/tests/blackbox/test_merge_directive.py test_merge_directive-20070302012039-zh7uhy39biairtn0-1
          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_too_much.py blackbox.py-20050620052131-a7370d756399f615
          bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
          bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
          bzrlib/tests/repository_implementations/__init__.py __init__.py-20060131092037-9564957a7d4a841b
          bzrlib/tests/repository_implementations/test_commit_builder.py test_commit_builder.py-20060606110838-76e3ra5slucqus81-1
          bzrlib/tests/repository_implementations/test_reconcile.py test_reconcile.py-20060223022332-572ef70a3288e369
          bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
          bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
          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_index.py     test_index.py-20070712131115-lolkarso50vjr64s-2
          bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
          bzrlib/tests/test_merge_directive.py test_merge_directive-20070228184838-ja62280spt1g7f4x-2
          bzrlib/tests/test_options.py   testoptions.py-20051014093702-96457cfc86319a8f
          bzrlib/tests/test_pack.py      test_container.py-20070607160755-tr8zc26q18rn0jnb-2
          bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
          bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
          bzrlib/tests/test_smtp_connection.py test_smtp_connection-20070618204509-wuyxc0r0ztrecv7e-1
          bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
          bzrlib/tests/test_tree.py      test_tree.py-20060724065232-khgrr0vvmt6ih0mi-1
          bzrlib/tests/workingtree_implementations/test_inv.py test_inv.py-20070311221604-ighlq8tbn5xq0kuo-1
          bzrlib/tests/workingtree_implementations/test_is_ignored.py test_is_ignored.py-20060518083307-a5b383dd4d070083
          bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
          bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
          bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
          bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
          bzrlib/tree.py                 tree.py-20050309040759-9d5f2496be663e77
          bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
          bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
          doc/default.css                default.css-20060622101119-tgwtdci8z769bjb9-1
          doc/developers/bundles.txt     bundles.txt-20070621030528-qkjnugd7iyud6ow3-1
          doc/developers/index.txt       index.txt-20070508041241-qznziunkg0nffhiw-1
          doc/developers/profiling.txt   profiling.txt-20070531045713-j15mxufywgzwdeu8-1
          doc/developers/repository.txt  repository.txt-20070709152006-xkhlek456eclha4u-1
          doc/http_smart_server.txt      fastcgi.txt-20061005091552-rz8pva0olkxv0sd8-3
          doc/index.txt                  index.txt-20060622101119-tgwtdci8z769bjb9-2
          doc/tutorial.txt               tutorial.txt-20050804190939-9dcbba2ef053bc84
          setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
          tools/doc_generate/autodoc_man.py bzrman.py-20050601153041-0ff7f74de456d15e
          tools/doc_generate/autodoc_rstx.py autodoc_rstx.py-20060420024836-3e0d4a526452193c
          tools/rst2html.py              rst2html.py-20060817120932-gn177u8v0008txhu-1
          tools/win32/bzr-win32-bdist-postinstall.py bzrwin32bdistpostinstall.py-20060629085133-098bsfj3va8jc0ql-1
          tools/win32/bzr.iss.cog        bzr.iss.cog-20060622100836-b3yup582rt3y0nvm-5
          doc/developers/HACKING.txt     HACKING-20050805200004-2a5dc975d870f78c
        ------------------------------------------------------------
        revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.8
        revision-id: robertc at robertcollins.net-20070808071757-qfrx4dwms024ccy5
        parent: robertc at robertcollins.net-20070808071618-4e1jopgxjj6g16ug
        committer: Robert Collins <robertc at robertcollins.net>
        branch nick: transport-get-file
        timestamp: Wed 2007-08-08 17:17:57 +1000
        message:
          Remove references to close_file_stream.
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
        ------------------------------------------------------------
        revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.7
        revision-id: robertc at robertcollins.net-20070808071618-4e1jopgxjj6g16ug
        parent: robertc at robertcollins.net-20070805081501-ipg5fapwuigozr50
        committer: Robert Collins <robertc at robertcollins.net>
        branch nick: transport-get-file
        timestamp: Wed 2007-08-08 17:16:18 +1000
        message:
          Review feedback.
        modified:
          bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
          bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
          bzrlib/transport/chroot.py     chroot.py-20061011104729-0us9mgm97z378vnt-1
          bzrlib/transport/decorator.py  decorator.py-20060402223305-e913a0f25319ab42
          bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
          bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
          bzrlib/transport/memory.py     memory.py-20051016101338-cd008dbdf69f04fc
          bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
          bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
    ------------------------------------------------------------
    revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.1.3.69
    revision-id: pqm at pqm.ubuntu.com-20070822013256-6w9yisc450hwqf2b
    parent: pqm at pqm.ubuntu.com-20070821175054-6pcl32ipl9eopnqw
    parent: robertc at robertcollins.net-20070821231835-usf67px0chh80iag
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Wed 2007-08-22 02:32:56 +0100
    message:
      (robertc) Add records_written attribute to ContainerWriter's. (Robert Collins).
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/pack.py                 container.py-20070607160755-tr8zc26q18rn0jnb-1
      bzrlib/tests/test_pack.py      test_container.py-20070607160755-tr8zc26q18rn0jnb-2
    ------------------------------------------------------------
    revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.1.3.27.1.2
    revision-id: robertc at robertcollins.net-20070821231835-usf67px0chh80iag
    parent: robertc at robertcollins.net-20070815011257-kxmspgdwk2l36h0x
    parent: pqm at pqm.ubuntu.com-20070821175054-6pcl32ipl9eopnqw
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: integration
    timestamp: Wed 2007-08-22 09:18:35 +1000
    message:
      Merge bzr.dev to resolve conflicts.
    removed:
      doc/README.1st                 README.1st-20060314161707-b943d5d4cce669b6
      doc/developers/scratch.txt     scratch.txt-20070618020404-cdhv0ecgrukomemg-3
    added:
      bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
      bzrlib/tests/blackbox/test_bundle_info.py test_bundle_info.py-20070816181255-eiuodwxuqu7w7gxf-1
      bzrlib/tests/repository_implementations/test_fetch.py test_fetch.py-20070814052151-5cxha9slx4c93uog-1
      bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
      bzrlib/util/simplemapi.py      simplemapi.py-20070810174811-ievl23nziuiq2k3m-1
      doc/developers/directory-fingerprints.txt directoryfingerprint-20070731033348-okmllh4b5srdtlk2-1
      doc/developers/last-modified.txt lastmodified.txt-20070806222243-df50y5fi7n85vnob-1
      doc/developers/revision-properties.txt revisionproperties.t-20070807133526-w57m8zv5o7t5kugm-1
      doc/en/                        en-20070810050627-g7r46azs5mlwj61j-1
      doc/en/developer-guide/        developerguide-20070810050627-g7r46azs5mlwj61j-2
      doc/en/mini-tutorial/          minitutorial-20070813141352-2u64ooqzo0or4hss-1
      doc/en/mini-tutorial/index.txt index.txt-20070813141352-2u64ooqzo0or4hss-2
      doc/en/quick-reference/        quickreference-20070813143223-5i7bgw7w8s7l3ae2-1
      doc/en/quick-reference/Makefile makefile-20070813143223-5i7bgw7w8s7l3ae2-2
      doc/en/quick-reference/quick-start-summary.svg quickstartsummary.sv-20070813143223-5i7bgw7w8s7l3ae2-3
      doc/en/release-notes/          releasenotes-20070810050627-g7r46azs5mlwj61j-3
      doc/en/user-guide/             userguide-20070810050627-g7r46azs5mlwj61j-4
      doc/en/user-reference/         userreference-20070810050627-g7r46azs5mlwj61j-5
      doc/index.txt                  index.txt-20070813101924-07gd9i9d2jt124bf-1
    renamed:
      doc/bug_trackers.txt => doc/en/user-guide/bug_trackers.txt bug_trackers.txt-20070713223459-khxdlcudraii95uv-1
      doc/centralized_workflow.txt => doc/en/user-guide/centralized_workflow.txt centralized_workflow-20060830194948-kspf52565xvgrlil-1
      doc/configuration.txt => doc/en/user-guide/configuration.txt configuration.txt-20060314161707-868350809502af01
      doc/conflicts.txt => doc/en/user-guide/conflicts.txt conflicts.txt-20070723221841-ns3jvwxdb4okn6fk-1
      doc/http_smart_server.txt => doc/en/user-guide/http_smart_server.txt fastcgi.txt-20061005091552-rz8pva0olkxv0sd8-3
      doc/index.txt => doc/en/user-guide/index.txt index.txt-20060622101119-tgwtdci8z769bjb9-2
      doc/plugins.txt => doc/en/user-guide/plugins.txt plugins.txt-20060314145616-525099a747f3ffdd
      doc/server.txt => doc/en/user-guide/server.txt server.txt-20060913044801-h939fvbwzz39gf7g-1
      doc/setting_up_email.txt => doc/en/user-guide/setting_up_email.txt setting_up_email.txt-20060314161707-fd242c8944346173
      doc/shared_repository_layouts.txt => doc/en/user-guide/shared_repository_layouts.txt shared_repository_la-20070502152030-bagewuqs18ns24o7-1
      doc/specifying_revisions.txt => doc/en/user-guide/specifying_revisions.txt specifying_revisions.txt-20060314161707-19deb139101bea33
      doc/tutorial.txt => doc/en/user-guide/tutorial.txt tutorial.txt-20050804190939-9dcbba2ef053bc84
      doc/using_aliases.txt => doc/en/user-guide/using_aliases.txt using_aliases.txt-20060314161707-c21d27fa2939e039
      doc/version_info.txt => doc/en/user-guide/version_info.txt version_info.txt-20060921215543-gju6o5xdic8w25np-1
    modified:
      .bzrignore                     bzrignore-20050311232317-81f7b71efa2db11a
      INSTALL                        INSTALL-20051019070340-4b27f2fb240c7943
      Makefile                       Makefile-20050805140406-d96e3498bb61c5bb
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
      bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/bundle/bundle_data.py   read_changeset.py-20050619171944-c0d95aa685537640
      bzrlib/bundle/commands.py      __init__.py-20050617152058-1b6530d9ab85c11c
      bzrlib/bundle/serializer/v4.py v10.py-20070611062757-5ggj7k18s9dej0fr-1
      bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
      bzrlib/commands.py             bzr.py-20050309040720-d10f4714595cf8c3
      bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
      bzrlib/config.py               config.py-20051011043216-070c74f4e9e338e8
      bzrlib/debug.py                debug.py-20061102062349-vdhrw9qdpck8cl35-1
      bzrlib/delta.py                delta.py-20050729221636-54cf14ef94783d0a
      bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
      bzrlib/info.py                 info.py-20050323235939-6bbfe7d9700b0b9b
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/lockable_files.py       control_files.py-20051111201905-bb88546e799d669f
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
      bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
      bzrlib/merge_directive.py      merge_directive.py-20070228184838-ja62280spt1g7f4x-1
      bzrlib/multiparent.py          __init__.py-20070410133617-n1jdhcc1n1mibarp-1
      bzrlib/mutabletree.py          mutabletree.py-20060906023413-4wlkalbdpsxi2r4y-2
      bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
      bzrlib/patches.py              patches.py-20050727183609-378c1cc5972ce908
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-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/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
      bzrlib/revisiontree.py         revisiontree.py-20060724012533-bg8xyryhxd0o0i0h-1
      bzrlib/status.py               status.py-20050505062338-431bfa63ec9b19e6
      bzrlib/store/__init__.py       store.py-20050309040759-164dc5173d6406c2
      bzrlib/store/revision/knit.py  knit.py-20060303020652-de5fa299e941a3c7
      bzrlib/store/versioned/__init__.py weavestore.py-20050907094258-88262e0434babab9
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
      bzrlib/tests/blackbox/test_added.py test_added.py-20060119085008-6b8b90369d42a26c
      bzrlib/tests/blackbox/test_aliases.py test_aliases.py-20060210230318-f0c08c9294dbfae1
      bzrlib/tests/blackbox/test_ancestry.py test_ancestry.py-20060131142602-6d9524c490537e90
      bzrlib/tests/blackbox/test_bound_branches.py test_bound_branches.py-20051109215527-2373188ad566c205
      bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
      bzrlib/tests/blackbox/test_cat.py test_cat.py-20051201162916-f0937e4e19ea24b3
      bzrlib/tests/blackbox/test_checkout.py test_checkout.py-20060211231752-a5cde67cf70af854
      bzrlib/tests/blackbox/test_commit.py test_commit.py-20060212094538-ae88fc861d969db0
      bzrlib/tests/blackbox/test_debug.py test_debug.py-20061026142942-q76cgg41785b3mdk-1
      bzrlib/tests/blackbox/test_diff.py test_diff.py-20060110203741-aa99ac93e633d971
      bzrlib/tests/blackbox/test_find_merge_base.py test_find_merge_base.py-20060131142124-f9d5c94df4505b70
      bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
      bzrlib/tests/blackbox/test_locale.py test_lang.py-20060824204205-80v50j25qkuop7yn-1
      bzrlib/tests/blackbox/test_pull.py test_pull.py-20051201144907-64959364f629947f
      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_status.py teststatus.py-20050712014354-508855eb9f29f7dc
      bzrlib/tests/blackbox/test_update.py test_update.py-20060212125639-c4dad1a5c56d5919
      bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
      bzrlib/tests/branch_implementations/test_hooks.py test_hooks.py-20070129154855-blhpwxmvjs07waei-1
      bzrlib/tests/branch_implementations/test_revision_history.py test_revision_histor-20070326062311-v7co92liyuchb80w-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_branch.py    test_branch.py-20060116013032-97819aa07b8ab3b5
      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_config.py    testconfig.py-20051011041908-742d0c15d8d8c8eb
      bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
      bzrlib/tests/test_escaped_store.py test_escaped_store.py-20060216023929-6bcb9a067344959f
      bzrlib/tests/test_fetch.py     testfetch.py-20050825090644-f73e07e7dfb1765a
      bzrlib/tests/test_lockdir.py   test_lockdir.py-20060220222025-33d4221569a3d600
      bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
      bzrlib/tests/test_multiparent.py test_multiparent.py-20070410133617-n1jdhcc1n1mibarp-4
      bzrlib/tests/test_patches.py   test_patches.py-20051231203844-f4974d20f6aea09c
      bzrlib/tests/test_revision.py  testrevision.py-20050804210559-46f5e1eb67b01289
      bzrlib/tests/test_revisionnamespaces.py testrevisionnamespaces.py-20050711050225-8b4af89e6b1efe84
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
      bzrlib/tests/test_sftp_transport.py testsftp.py-20051027032739-247570325fec7e7e
      bzrlib/tests/test_source.py    test_source.py-20051207061333-a58dea6abecc030d
      bzrlib/tests/test_store.py     teststore.py-20050826022702-f6caadb647395769
      bzrlib/tests/test_trace.py     testtrace.py-20051110225523-a21117fc7a07eeff
      bzrlib/tests/test_transport.py testtransport.py-20050718175618-e5cdb99f4555ddce
      bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
      bzrlib/tests/test_upgrade.py   test_upgrade.py-20051004040251-555fe1d2bae1bc71
      bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
      bzrlib/tests/test_weave.py     testknit.py-20050627023648-9833cc5562ffb785
      bzrlib/tests/test_win32utils.py test_win32utils.py-20070713181630-8xsrjymd3e8mgw23-108
      bzrlib/tests/tree_implementations/test_tree.py test_tree.py-20061215160206-usu7lwcj8aq2n3br-1
      bzrlib/tests/workingtree_implementations/test_commit.py test_commit.py-20060421013633-1610ec2331c8190f
      bzrlib/tests/workingtree_implementations/test_is_ignored.py test_is_ignored.py-20060518083307-a5b383dd4d070083
      bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
      bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
      bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
      bzrlib/transport/decorator.py  decorator.py-20060402223305-e913a0f25319ab42
      bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
      bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
      bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
      bzrlib/transport/http/wsgi.py  wsgi.py-20061005091552-rz8pva0olkxv0sd8-2
      bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
      bzrlib/transport/sftp.py       sftp.py-20051019050329-ab48ce71b7e32dfe
      bzrlib/transport/ssh.py        ssh.py-20060824042150-0s9787kng6zv1nwq-1
      bzrlib/tree.py                 tree.py-20050309040759-9d5f2496be663e77
      bzrlib/ui/__init__.py          ui.py-20050824083933-8cf663c763ba53a9
      bzrlib/ui/text.py              text.py-20051130153916-2e438cffc8afc478
      bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
      bzrlib/weave.py                knit.py-20050627021749-759c29984154256b
      bzrlib/win32utils.py           win32console.py-20051021033308-123c6c929d04973d
      bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
      bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
      doc/bazaar-vcs.org.kid         bazaarvcs.org.kid-20060929181918-huv7bgmdey0ktqci-1
      doc/developers/index.txt       index.txt-20070508041241-qznziunkg0nffhiw-1
      doc/developers/performance-contributing.txt performancecontribut-20070621063612-ac4zhhagjzkr21qp-1
      doc/developers/performance-roadmap.txt performanceroadmap.t-20070507174912-mwv3xv517cs4sisd-2
      setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
      tools/rst2prettyhtml.py        rst2prettyhtml.py-20060929181914-t7dh62f2wxi0i5aj-1
      tools/win32/ostools.py         ostools.py-20060731163025-npjffm46rgnkl50d-1
      doc/en/user-guide/configuration.txt configuration.txt-20060314161707-868350809502af01
      doc/en/user-guide/index.txt    index.txt-20060622101119-tgwtdci8z769bjb9-2
    ------------------------------------------------------------
    revno: 2592.1.25.2.7.1.28.1.6.1.3.1.9.2.1.3.27.1.1
    revision-id: robertc at robertcollins.net-20070815011257-kxmspgdwk2l36h0x
    parent: pqm at pqm.ubuntu.com-20070814221506-6rw0b0oolfdeqrdw
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: pack
    timestamp: Wed 2007-08-15 11:12:57 +1000
    message:
      Add records_written attribute to ContainerWriter's. (Robert Collins).
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/pack.py                 container.py-20070607160755-tr8zc26q18rn0jnb-1
      bzrlib/tests/test_pack.py      test_container.py-20070607160755-tr8zc26q18rn0jnb-2
=== modified file 'NEWS'
--- a/NEWS	2007-08-22 01:02:35 +0000
+++ b/NEWS	2007-08-22 06:23:52 +0000
@@ -61,6 +61,9 @@
      stack to the log, which can be useful for gathering debug details.
      (Robert Collins)
 
+    * ``bzrlib.pack.ContainerWriter`` now tracks how many records have been
+      added via a public attribute records_written. (Robert Collins)
+
     * New method ``bzrlib.transport.Transport.get_recommended_page_size``.
       This provides a hint to users of transports as to the reasonable
       minimum data to read. In principle this can take latency and
@@ -68,14 +71,9 @@
       just has hard coded values based on the url. (e.g. http:// has a large
       page size, file:// has a small one.) (Robert Collins)
 
-    * New methods on ``bzrlib.transport.Transport`` ``open_file_stream`` and
-      ``close_file_stream`` allow incremental addition of data to a file
-      without requiring that all the data be buffered in memory.
-      (Robert Collins)
-
-    * Add a new method ``bzrlib.repository.Repository.reconcile_actions``
-      allowing conditional test cases on the sorts of things reconcile
-      will actually perform. (Robert Collins)
+    * New method on ``bzrlib.transport.Transport`` ``open_write_stream`` allows
+      incremental addition of data to a file without requiring that all the
+      data be buffered in memory. (Robert Collins)
 
 
 bzr 0.90 2007-08-??

=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/index.py	2007-08-22 06:23:52 +0000
@@ -734,7 +734,7 @@
         add_nodes_callback=None):
         """Construct an adapter against adapted with prefix."""
         self.adapted = adapted
-        self.prefix = prefix + (None,)*missing_key_length
+        self.prefix_key = prefix + (None,)*missing_key_length
         self.prefix = prefix
         self.prefix_len = len(prefix)
         self.add_nodes_callback = add_nodes_callback
@@ -801,7 +801,7 @@
             defined order for the result iteration - it will be in the most
             efficient order for the index (in this case dictionary hash order).
         """
-        return self._strip_prefix(self.adapted.iter_entries_prefix([self.prefix]))
+        return self._strip_prefix(self.adapted.iter_entries_prefix([self.prefix_key]))
 
     def iter_entries(self, keys):
         """Iterate over keys within the index.

=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/knit.py	2007-08-22 06:23:52 +0000
@@ -1318,7 +1318,10 @@
 
     def get_method(self, version_id):
         """Return compression method of specified version."""
-        options = self._cache[version_id][1]
+        try:
+            options = self._cache[version_id][1]
+        except KeyError:
+            raise RevisionNotPresent(version_id, self._filename)
         if 'fulltext' in options:
             return 'fulltext'
         else:
@@ -1557,7 +1560,10 @@
             return 'fulltext'
 
     def _get_node(self, version_id):
-        return list(self._get_entries(self._version_ids_to_keys([version_id])))[0]
+        try:
+            return list(self._get_entries(self._version_ids_to_keys([version_id])))[0]
+        except IndexError:
+            raise RevisionNotPresent(version_id, self)
 
     def get_options(self, version_id):
         """Return a string represention options.

=== modified file 'bzrlib/pack.py'
--- a/bzrlib/pack.py	2007-08-08 02:57:22 +0000
+++ b/bzrlib/pack.py	2007-08-15 01:12:57 +0000
@@ -59,7 +59,12 @@
 
 
 class ContainerWriter(object):
-    """A class for writing containers."""
+    """A class for writing containers.
+
+    :attribute records_written: The number of user records added to the
+        container. This does not count the prelude or suffix of the container
+        introduced by the begin() and end() methods.
+    """
 
     def __init__(self, write_func):
         """Constructor.
@@ -69,6 +74,7 @@
         """
         self._write_func = write_func
         self.current_offset = 0
+        self.records_written = 0
 
     def begin(self):
         """Begin writing a container."""
@@ -112,6 +118,7 @@
         self.write_func("\n")
         # Finally, the contents.
         self.write_func(bytes)
+        self.records_written += 1
         # return a memo of where we wrote data to allow random access.
         return current_offset, self.current_offset - current_offset
 

=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/remote.py	2007-08-22 06:23:52 +0000
@@ -277,6 +277,28 @@
         self._ensure_real()
         return self._real_repository.commit_write_group()
 
+    def abort_write_group(self):
+        """Complete a write group on the decorated repository.
+        
+        Smart methods peform operations in a single step so this api
+        is not really applicable except as a compatibility thunk
+        for older plugins that don't use e.g. the CommitBuilder
+        facility.
+        """
+        self._ensure_real()
+        return self._real_repository.abort_write_group()
+
+    def commit_write_group(self):
+        """Complete a write group on the decorated repository.
+        
+        Smart methods peform operations in a single step so this api
+        is not really applicable except as a compatibility thunk
+        for older plugins that don't use e.g. the CommitBuilder
+        facility.
+        """
+        self._ensure_real()
+        return self._real_repository.commit_write_group()
+
     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	2007-08-22 01:02:35 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-08-22 06:23:52 +0000
@@ -214,18 +214,18 @@
                 time.ctime(), self.repo._upload_transport.base, random_name,
                 plain_pack_list)
             start_time = time.time()
-        write_stream = self.repo._upload_transport.open_file_stream(random_name)
+        write_stream = self.repo._upload_transport.open_write_stream(random_name)
         if 'fetch' in debug.debug_flags:
             mutter('%s: create_pack: pack stream open: %s%s t+%6.3fs',
                 time.ctime(), self.repo._upload_transport.base, random_name,
                 time.time() - start_time)
         pack_hash = md5.new()
         buffer = []
-        def write_data(bytes, update=pack_hash.update):
+        def write_data(bytes, update=pack_hash.update, write=write_stream.write):
             buffer.append(bytes)
             if len(buffer) == 640:
                 bytes = ''.join(buffer)
-                write_stream(bytes)
+                write(bytes)
                 update(bytes)
                 del buffer[:]
         writer = pack.ContainerWriter(write_data)
@@ -280,7 +280,7 @@
         writer.end()
         if len(buffer):
             bytes = ''.join(buffer)
-            write_stream(bytes)
+            write_stream.write(bytes)
             pack_hash.update(bytes)
         new_name = pack_hash.hexdigest()
         # if nothing has been written, discard the new pack.
@@ -294,7 +294,7 @@
         # add to names
         self.allocate(new_name)
         # rename into place
-        self.repo._upload_transport.close_file_stream(random_name)
+        write_stream.close()
         self.repo._upload_transport.rename(random_name, '../packs/' + new_name + '.pack')
         result = Pack()
         result.name = new_name
@@ -1152,11 +1152,12 @@
     def _start_write_group(self):
         random_name = self.control_files._lock.nonce
         self._open_pack_tuple = (self._upload_transport, random_name + '.pack')
-        write_stream = self._upload_transport.open_file_stream(random_name + '.pack')
+        write_stream = self._upload_transport.open_write_stream(random_name + '.pack')
+        self._write_stream = write_stream
         self._open_pack_hash = md5.new()
-        def write_data(bytes):
-            write_stream(bytes)
-            self._open_pack_hash.update(bytes)
+        def write_data(bytes, write=write_stream.write, update=self._open_pack_hash.update):
+            write(bytes)
+            update(bytes)
         self._open_pack_writer = pack.ContainerWriter(write_data)
         self._open_pack_writer.begin()
         self._packs.setup()
@@ -1181,7 +1182,7 @@
             self.weave_store.flush(new_name)
             self._inv_thunk.flush(new_name)
             self._revision_store.flush(new_name)
-            self._upload_transport.close_file_stream(self._open_pack_tuple[1])
+            self._write_stream.close()
             self._upload_transport.rename(self._open_pack_tuple[1],
                 '../packs/' + new_name + '.pack')
             self._open_pack_tuple = None
@@ -1197,6 +1198,7 @@
         # delta.
         self._packs.reset()
         self._open_pack_hash = None
+        self._write_stream = None
 
     def get_inventory_weave(self):
         return self._inv_thunk.get_weave()
@@ -1269,11 +1271,12 @@
     def _start_write_group(self):
         random_name = self.control_files._lock.nonce
         self._open_pack_tuple = (self._upload_transport, random_name + '.pack')
-        write_stream = self._upload_transport.open_file_stream(random_name + '.pack')
+        write_stream = self._upload_transport.open_write_stream(random_name + '.pack')
+        self._write_stream = write_stream
         self._open_pack_hash = md5.new()
-        def write_data(bytes):
-            write_stream(bytes)
-            self._open_pack_hash.update(bytes)
+        def write_data(bytes, write=write_stream.write, update=self._open_pack_hash.update):
+            write(bytes)
+            update(bytes)
         self._open_pack_writer = pack.ContainerWriter(write_data)
         self._open_pack_writer.begin()
         self._packs.setup()
@@ -1298,7 +1301,7 @@
             self.weave_store.flush(new_name)
             self._inv_thunk.flush(new_name)
             self._revision_store.flush(new_name)
-            self._upload_transport.close_file_stream(self._open_pack_tuple[1])
+            self._write_stream.close()
             self._upload_transport.rename(self._open_pack_tuple[1],
                 '../packs/' + new_name + '.pack')
             self._open_pack_tuple = None
@@ -1314,6 +1317,7 @@
         # delta.
         self._packs.reset()
         self._open_pack_hash = None
+        self._write_stream = None
 
     def get_inventory_weave(self):
         return self._inv_thunk.get_weave()

=== modified file 'bzrlib/tests/revisionstore_implementations/test_all.py'
--- a/bzrlib/tests/revisionstore_implementations/test_all.py	2007-07-11 16:42:37 +0000
+++ b/bzrlib/tests/revisionstore_implementations/test_all.py	2007-08-22 06:23:52 +0000
@@ -62,11 +62,18 @@
         # has of None -> True
         self.assertTrue(self.store.has_revision_id('null:', self.transaction))
 
+    def test_get_revision_missing(self):
+        # get_revision('B') -> raises NoSuchRevision
+        self.assertRaises(errors.NoSuchRevision,
+                          self.store.get_revision,
+                          'B',
+                          self.transaction)
+
     def test_get_revision_none(self):
         # get_revision(None) -> raises NoSuchRevision
         self.assertRaises(errors.NoSuchRevision,
                           self.store.get_revision,
-                          'B',
+                          None,
                           self.transaction)
 
     def test_add_signature_text_missing(self):

=== modified file 'bzrlib/tests/test_pack.py'
--- a/bzrlib/tests/test_pack.py	2007-08-08 02:57:22 +0000
+++ b/bzrlib/tests/test_pack.py	2007-08-15 01:12:57 +0000
@@ -40,6 +40,13 @@
         self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\n',
                          output.getvalue())
 
+    def test_zero_records_written_after_begin(self):
+        """After begin is written, 0 records have been written."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        self.assertEqual(0, writer.records_written)
+
     def test_end(self):
         """The end() method writes an End Marker record."""
         output = StringIO()
@@ -49,6 +56,23 @@
         self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\nE',
                          output.getvalue())
 
+    def test_empty_end_does_not_add_a_record_to_records_written(self):
+        """The end() method does not count towards the records written."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.end()
+        self.assertEqual(0, writer.records_written)
+
+    def test_non_empty_end_does_not_add_a_record_to_records_written(self):
+        """The end() method does not count towards the records written."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.add_bytes_record('foo', names=[])
+        writer.end()
+        self.assertEqual(1, writer.records_written)
+
     def test_add_bytes_record_no_name(self):
         """Add a bytes record with no name."""
         output = StringIO()
@@ -131,6 +155,16 @@
             errors.InvalidRecordError,
             writer.add_bytes_record, 'abc', names=[('bad name', )])
 
+    def test_add_bytes_records_add_to_records_written(self):
+        """Adding a Bytes record increments the records_written counter."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.add_bytes_record('foo', names=[])
+        self.assertEqual(1, writer.records_written)
+        writer.add_bytes_record('foo', names=[])
+        self.assertEqual(2, writer.records_written)
+
 
 class TestContainerReader(tests.TestCase):
 

=== modified file 'bzrlib/tests/test_transport_implementations.py'
--- a/bzrlib/tests/test_transport_implementations.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/tests/test_transport_implementations.py	2007-08-22 06:23:52 +0000
@@ -229,28 +229,28 @@
 
         self.assertRaises(NoSuchFile, t.get_bytes, 'c')
 
-    def test_get_with_open_file_stream_sees_all_content(self):
+    def test_get_with_open_write_stream_sees_all_content(self):
         t = self.get_transport()
         if t.is_readonly():
             return
-        handle = t.open_file_stream('foo')
+        handle = t.open_write_stream('foo')
         try:
-            handle('b')
+            handle.write('b')
             self.assertEqual('b', t.get('foo').read())
         finally:
-            t.close_file_stream('foo')
+            handle.close()
 
-    def test_get_bytes_with_open_file_stream_sees_all_content(self):
+    def test_get_bytes_with_open_write_stream_sees_all_content(self):
         t = self.get_transport()
         if t.is_readonly():
             return
-        handle = t.open_file_stream('foo')
+        handle = t.open_write_stream('foo')
         try:
-            handle('b')
+            handle.write('b')
             self.assertEqual('b', t.get_bytes('foo'))
             self.assertEqual('b', t.get('foo').read())
         finally:
-            t.close_file_stream('foo')
+            handle.close()
 
     def test_put_bytes(self):
         t = self.get_transport()
@@ -583,11 +583,11 @@
         t = self.get_transport()
         if t.is_readonly():
             return
-        handle = t.open_file_stream('foo')
+        handle = t.open_write_stream('foo')
         try:
             self.assertEqual('', t.get_bytes('foo'))
         finally:
-            t.close_file_stream('foo')
+            handle.close()
 
     def test_opening_a_file_stream_can_set_mode(self):
         t = self.get_transport()
@@ -597,8 +597,8 @@
             # Can't roundtrip, so no need to run this test
             return
         def check_mode(name, mode, expected):
-            handle = t.open_file_stream(name, mode=mode)
-            t.close_file_stream(name)
+            handle = t.open_write_stream(name, mode=mode)
+            handle.close()
             self.assertTransportMode(t, name, expected)
         check_mode('mode644', 0644, 0644)
         check_mode('mode666', 0666, 0666)
@@ -1485,16 +1485,16 @@
         self.assertEqual(d[2], (0, '0'))
         self.assertEqual(d[3], (3, '34'))
 
-    def test_get_with_open_file_stream_sees_all_content(self):
+    def test_get_with_open_write_stream_sees_all_content(self):
         t = self.get_transport()
         if t.is_readonly():
             return
-        handle = t.open_file_stream('foo')
+        handle = t.open_write_stream('foo')
         try:
-            handle('bcd')
+            handle.write('bcd')
             self.assertEqual([(0, 'b'), (2, 'd')], list(t.readv('foo', ((0,1), (2,1)))))
         finally:
-            t.close_file_stream('foo')
+            handle.close()
 
     def test_get_smart_medium(self):
         """All transports must either give a smart medium, or know they can't.

=== modified file 'bzrlib/transport/__init__.py'
--- a/bzrlib/transport/__init__.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/transport/__init__.py	2007-08-22 06:23:52 +0000
@@ -257,6 +257,49 @@
         self._fail()
 
 
+class FileStream(object):
+    """Base class for FileStreams."""
+
+    def __init__(self, transport, relpath):
+        """Create a FileStream for relpath on transport."""
+        self.transport = transport
+        self.relpath = relpath
+
+    def _close(self):
+        """A hook point for subclasses that need to take action on close."""
+
+    def close(self):
+        self._close()
+        del _file_streams[self.transport.abspath(self.relpath)]
+
+
+class FileFileStream(FileStream):
+    """A file stream object returned by open_write_stream.
+    
+    This version uses a file like object to perform writes.
+    """
+
+    def __init__(self, transport, relpath, file_handle):
+        FileStream.__init__(self, transport, relpath)
+        self.file_handle = file_handle
+
+    def _close(self):
+        self.file_handle.close()
+
+    def write(self, bytes):
+        self.file_handle.write(bytes)
+
+
+class AppendBasedFileStream(FileStream):
+    """A file stream object returned by open_write_stream.
+    
+    This version uses append on a transport to perform writes.
+    """
+
+    def write(self, bytes):
+        self.transport.append_bytes(self.relpath, bytes)
+
+
 class Transport(object):
     """This class encapsulates methods for retrieving or putting a file
     from/to a storage location.
@@ -811,21 +854,23 @@
             self.mkdir(path, mode=mode)
         return len(self._iterate_over(relpaths, mkdir, pb, 'mkdir', expand=False))
 
-    def open_file_stream(self, relpath, mode=None):
-        """Open a file stream at relpath.
-
-        A file stream is a callback which adds data to the file. Buffering
-        may occur internally until the stream is closed with close_file_stream.
-        Calls to readv or the get_* methods will be synchronised with any
-        internal buffering that may be present.
-
-        :seealso: close_file_stream.
+    def open_write_stream(self, relpath, mode=None):
+        """Open a writable file stream at relpath.
+
+        A file stream is a file like object with a write() method that accepts
+        bytes to write.. Buffering may occur internally until the stream is
+        closed with stream.close().  Calls to readv or the get_* methods will
+        be synchronised with any internal buffering that may be present.
+
         :param relpath: The relative path to the file.
         :param mode: The mode for the newly created file, 
                      None means just use the default
-        :return: A write callback to add data to the file.
+        :return: A FileStream. FileStream objects have two methods, write() and
+            close(). There is no guarantee that data is committed to the file
+            if close() has not been called (even if get() is called on the same
+            path).
         """
-        raise NotImplementedError(self.open_file_stream)
+        raise NotImplementedError(self.open_write_stream)
 
     def append_file(self, relpath, f, mode=None):
         """Append bytes from a file-like object to a file at relpath.

=== modified file 'bzrlib/transport/chroot.py'
--- a/bzrlib/transport/chroot.py	2007-08-05 05:38:15 +0000
+++ b/bzrlib/transport/chroot.py	2007-08-22 06:23:52 +0000
@@ -139,8 +139,8 @@
     def mkdir(self, relpath, mode=None):
         return self._call('mkdir', relpath, mode)
 
-    def open_file_stream(self, relpath, mode=None):
-        return self._call('open_file_stream', relpath, mode)
+    def open_write_stream(self, relpath, mode=None):
+        return self._call('open_write_stream', relpath, mode)
 
     def put_file(self, relpath, f, mode=None):
         return self._call('put_file', relpath, f, mode)

=== modified file 'bzrlib/transport/decorator.py'
--- a/bzrlib/transport/decorator.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/transport/decorator.py	2007-08-22 06:23:52 +0000
@@ -118,9 +118,9 @@
         """See Transport.mkdir()."""
         return self._decorated.mkdir(relpath, mode)
 
-    def open_file_stream(self, relpath, mode=None):
-        """See Transport.open_file_stream."""
-        return self._decorated.open_file_stream(relpath, mode=mode)
+    def open_write_stream(self, relpath, mode=None):
+        """See Transport.open_write_stream."""
+        return self._decorated.open_write_stream(relpath, mode=mode)
 
     def put_file(self, relpath, f, mode=None):
         """See Transport.put_file()."""

=== modified file 'bzrlib/transport/fakevfat.py'
--- a/bzrlib/transport/fakevfat.py	2007-02-11 16:06:13 +0000
+++ b/bzrlib/transport/fakevfat.py	2007-08-15 06:53:07 +0000
@@ -64,6 +64,10 @@
     which actually stored the files.
     """
 
+    def _can_roundtrip_unix_modebits(self):
+        """See Transport._can_roundtrip_unix_modebits()."""
+        return False
+
     @classmethod
     def _get_url_prefix(self):
         """Readonly transport decorators are invoked via 'vfat+'"""

=== modified file 'bzrlib/transport/ftp.py'
--- a/bzrlib/transport/ftp.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/transport/ftp.py	2007-08-22 06:23:52 +0000
@@ -46,6 +46,7 @@
     )
 from bzrlib.trace import mutter, warning
 from bzrlib.transport import (
+    AppendBasedFileStream,
     _file_streams,
     Server,
     ConnectedTransport,
@@ -323,13 +324,12 @@
             self._translate_perm_error(e, abspath,
                 unknown_exc=errors.FileExists)
 
-    def open_file_stream(self, relpath):
-        """See Transport.open_file_stream."""
-        def append_data(bytes):
-            self.append_bytes(relpath, bytes)
-        self.put_bytes(relpath, "")
-        _file_streams[self.abspath(relpath)] = append_data
-        return append_data
+    def open_write_stream(self, relpath, mode=None):
+        """See Transport.open_write_stream."""
+        self.put_bytes(relpath, "", mode)
+        result = AppendBasedFileStream(self, relpath)
+        _file_streams[self.abspath(relpath)] = result
+        return result
 
     def recommended_page_size(self):
         """See Transport.recommended_page_size().

=== modified file 'bzrlib/transport/local.py'
--- a/bzrlib/transport/local.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/transport/local.py	2007-08-22 06:23:52 +0000
@@ -307,13 +307,13 @@
         """Create a directory at the given path."""
         self._mkdir(self._abspath(relpath), mode=mode)
 
-    def open_file_stream(self, relpath, mode=None):
-        """See Transport.open_file_stream."""
+    def open_write_stream(self, relpath, mode=None):
+        """See Transport.open_write_stream."""
         # initialise the file
         self.put_bytes_non_atomic(relpath, "", mode=mode)
         handle = open(self._abspath(relpath), 'wb')
         transport._file_streams[self.abspath(relpath)] = handle
-        return handle.write
+        return transport.FileFileStream(self, relpath, handle)
 
     def _get_append_file(self, relpath, mode=None):
         """Call os.open() for the given relpath"""

=== modified file 'bzrlib/transport/memory.py'
--- a/bzrlib/transport/memory.py	2007-08-05 02:57:45 +0000
+++ b/bzrlib/transport/memory.py	2007-08-22 06:23:52 +0000
@@ -36,6 +36,7 @@
     )
 from bzrlib.trace import mutter
 from bzrlib.transport import (
+    AppendBasedFileStream,
     _file_streams,
     LateReadError,
     register_transport,
@@ -170,13 +171,12 @@
             raise FileExists(relpath)
         self._dirs[_abspath]=mode
 
-    def open_file_stream(self, relpath):
-        """See Transport.open_file_stream."""
-        def append_data(bytes):
-            self.append_bytes(relpath, bytes)
-        self.put_bytes(relpath, "")
-        _file_streams[self.abspath(relpath)] = append_data
-        return append_data
+    def open_write_stream(self, relpath, mode=None):
+        """See Transport.open_write_stream."""
+        self.put_bytes(relpath, "", mode)
+        result = AppendBasedFileStream(self, relpath)
+        _file_streams[self.abspath(relpath)] = result
+        return result
 
     def listable(self):
         """See Transport.listable."""

=== modified file 'bzrlib/transport/remote.py'
--- a/bzrlib/transport/remote.py	2007-08-05 02:57:45 +0000
+++ b/bzrlib/transport/remote.py	2007-08-22 06:23:52 +0000
@@ -217,13 +217,12 @@
             self._serialise_optional_mode(mode))
         self._translate_error(resp)
 
-    def open_file_stream(self, relpath):
-        """See Transport.open_file_stream."""
-        def append_data(bytes):
-            self.append_bytes(relpath, bytes)
-        self.put_bytes(relpath, "")
-        transport._file_streams[self.abspath(relpath)] = append_data
-        return append_data
+    def open_write_stream(self, relpath, mode=None):
+        """See Transport.open_write_stream."""
+        self.put_bytes(relpath, "", mode)
+        result = transport.AppendBasedFileStream(self, relpath)
+        transport._file_streams[self.abspath(relpath)] = result
+        return result
 
     def put_bytes(self, relpath, upload_contents, mode=None):
         # FIXME: upload_file is probably not safe for non-ascii characters -

=== modified file 'bzrlib/transport/sftp.py'
--- a/bzrlib/transport/sftp.py	2007-08-22 01:02:35 +0000
+++ b/bzrlib/transport/sftp.py	2007-08-22 06:23:52 +0000
@@ -54,6 +54,7 @@
         )
 from bzrlib.trace import mutter, warning
 from bzrlib.transport import (
+    FileFileStream,
     _file_streams,
     local,
     register_urlparse_netloc_protocol,
@@ -546,8 +547,8 @@
         """Create a directory at the given path."""
         self._mkdir(self._remote_path(relpath), mode=mode)
 
-    def open_file_stream(self, relpath, mode=None):
-        """See Transport.open_file_stream."""
+    def open_write_stream(self, relpath, mode=None):
+        """See Transport.open_write_stream."""
         # initialise the file to zero-length
         # this is three round trips, but we don't use this 
         # api more than once per write_group at the moment so 
@@ -566,7 +567,7 @@
             self._translate_io_exception(e, abspath,
                                          ': unable to open')
         _file_streams[self.abspath(relpath)] = handle
-        return handle.write
+        return FileFileStream(self, relpath, handle)
 
     def _translate_io_exception(self, e, path, more_info='',
                                 failure_exc=PathError):

=== modified file 'doc/developers/repository.txt'
--- a/doc/developers/repository.txt	2007-08-10 06:32:12 +0000
+++ b/doc/developers/repository.txt	2007-08-22 06:23:52 +0000
@@ -343,7 +343,6 @@
       this approach reads 10 entire packs every 10 commits,
       100 every 100, 1000 every 1000
 
-
 Caching and writeing of data
 ============================
 



More information about the bazaar-commits mailing list