Rev 2606: Merge fix for rm renamed files in http://sourcefrog.net/bzr/rm-renamed

Martin Pool mbp at sourcefrog.net
Thu Jul 12 10:26:23 BST 2007


At http://sourcefrog.net/bzr/rm-renamed

------------------------------------------------------------
revno: 2606
revision-id: mbp at sourcefrog.net-20070712092621-y3rt81f3t6rvcfnx
parent: pqm at pqm.ubuntu.com-20070712085245-afvocysw990c1a3z
parent: marius.kruger at enerweb.co.za-20070628061106-dw6t7vpj0hlo3461
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: rm-renamed
timestamp: Thu 2007-07-12 19:26:21 +1000
message:
  Merge fix for rm renamed files
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
  bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
  bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
    ------------------------------------------------------------
    revno: 2475.5.6
    revision-id: marius.kruger at enerweb.co.za-20070628061106-dw6t7vpj0hlo3461
    parent: marius.kruger at enerweb.co.za-20070627184810-4jq1y5f20xafow9w
    committer: Marius Kruger <marius.kruger at enerweb.co.za>
    branch nick: bzr.fix_bug_111664
    timestamp: Thu 2007-06-28 08:11:06 +0200
    message:
      * test_remove
        - Remove redundant method _assertRemoveErrorContainsRe and update the test
          which used to use it.
    modified:
      bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
    ------------------------------------------------------------
    revno: 2475.5.5
    revision-id: marius.kruger at enerweb.co.za-20070627184810-4jq1y5f20xafow9w
    parent: amanic at gmail.com-20070623194517-9kgydu5fgjtzmu7m
    parent: pqm at pqm.ubuntu.com-20070627080723-ci6ghe3bsm0snyit
    committer: Marius Kruger <marius.kruger at enerweb.co.za>
    branch nick: bzr.fix_bug_111664
    timestamp: Wed 2007-06-27 20:48:10 +0200
    message:
      Merge with bzr.dev
    added:
      bzrlib/api.py                  api.py-20070626082640-35lspz7j0ys7a8ld-1
      bzrlib/smtp_connection.py      smtp_connection.py-20070618204456-nu6wag1ste4biuk2-1
      bzrlib/tests/test_smtp_connection.py test_smtp_connection-20070618204509-wuyxc0r0ztrecv7e-1
      doc/developers/api-versioning.txt apiversioning.txt-20070626065626-iiihgmhgkv91uphz-1
      doc/developers/dirstate.txt    dirstate.txt-20070618020404-cdhv0ecgrukomemg-2
      doc/developers/scratch.txt     scratch.txt-20070618020404-cdhv0ecgrukomemg-3
      doc/developers/uncommit.txt    uncommit.txt-20070621042721-4clw8ucb9u9yda2h-1
    renamed:
      doc/developers/performance-commit.txt => doc/developers/commit.txt performancecommit.tx-20070606061633-4y4rawskx5ejb99w-1
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      README                         README-20050309040720-8f368abf9f346b9d
      bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/commands.py             bzr.py-20050309040720-d10f4714595cf8c3
      bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
      bzrlib/tests/HTTPTestUtil.py   HTTPTestUtil.py-20050914180604-247d3aafb7a43343
      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_added.py test_added.py-20060119085008-6b8b90369d42a26c
      bzrlib/tests/blackbox/test_ancestry.py test_ancestry.py-20060131142602-6d9524c490537e90
      bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
      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_conflicts.py test_conflicts.py-20060228151432-9723ebb925b999cf
      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_help.py test_help.py-20060216004358-4ee8a2a338f75a62
      bzrlib/tests/blackbox/test_ignore.py test_ignore.py-20060703063225-4tm8dc2pa7wwg2t3-1
      bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
      bzrlib/tests/blackbox/test_init.py test_init.py-20060309032856-a292116204d86eb7
      bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
      bzrlib/tests/blackbox/test_merge.py test_merge.py-20060323225809-9bc0459c19917f41
      bzrlib/tests/blackbox/test_merge_directive.py test_merge_directive-20070302012039-zh7uhy39biairtn0-1
      bzrlib/tests/blackbox/test_nick.py test_nick.py-20061105141046-p7zovcsit44uj4w9-1
      bzrlib/tests/blackbox/test_outside_wt.py test_outside_wt.py-20060116200058-98edd33e7db8bdde
      bzrlib/tests/blackbox/test_pull.py test_pull.py-20051201144907-64959364f629947f
      bzrlib/tests/blackbox/test_push.py test_push.py-20060329002750-929af230d5d22663
      bzrlib/tests/blackbox/test_reconcile.py test_fix.py-20060223013051-9a188e15a5ee9451
      bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
      bzrlib/tests/blackbox/test_revert.py test_revert.py-20060124160917-485ce9de629c182c
      bzrlib/tests/blackbox/test_revision_history.py test_revision_history.py-20060530150249-i2szwjr5uioe9ujb-1
      bzrlib/tests/blackbox/test_revision_info.py test_revision_info.py-20050917162600-21dab3877aa348d7
      bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
      bzrlib/tests/blackbox/test_tags.py test_tags.py-20070116132048-5h4qak2cm22jlb9e-1
      bzrlib/tests/blackbox/test_too_much.py blackbox.py-20050620052131-a7370d756399f615
      bzrlib/tests/blackbox/test_update.py test_update.py-20060212125639-c4dad1a5c56d5919
      bzrlib/tests/blackbox/test_upgrade.py test_upgrade.py-20060120060132-b41e5ed2f886ad28
      bzrlib/tests/blackbox/test_versioning.py versioning.py-20050622071821-3ddf5e2e5e93c602
      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_api.py       testapi.py-20051027033546-6f9be2d308d18a52
      bzrlib/tests/test_errors.py    test_errors.py-20060210110251-41aba2deddf936a8
      bzrlib/tests/test_http.py      testhttp.py-20051018020158-b2eef6e867c514d9
      bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
      bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
      bzrlib/tests/test_merge_core.py test_merge_core.py-20050824132511-eb99b23a0eec641b
      bzrlib/tests/test_options.py   testoptions.py-20051014093702-96457cfc86319a8f
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
      bzrlib/tests/test_smart_add.py test_smart_add.py-20050824235919-c60dcdb0c8e999ce
      bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
      bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
      bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
      doc/configuration.txt          configuration.txt-20060314161707-868350809502af01
      doc/developers/index.txt       index.txt-20070508041241-qznziunkg0nffhiw-1
      doc/developers/performance-roadmap.txt performanceroadmap.t-20070507174912-mwv3xv517cs4sisd-2
      doc/developers/performance-use-case-analysis.txt performanceusecasean-20070508045640-zneiu1yzbci574c6-2
      doc/developers/profiling.txt   profiling.txt-20070531045713-j15mxufywgzwdeu8-1
      doc/developers/commit.txt      performancecommit.tx-20070606061633-4y4rawskx5ejb99w-1
    ------------------------------------------------------------
    revno: 2475.5.4
    revision-id: amanic at gmail.com-20070623194517-9kgydu5fgjtzmu7m
    parent: amanic at gmail.com-20070623175922-9dlpr6bxipcklr8g
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.fix_bug_111664
    timestamp: Sat 2007-06-23 21:45:17 +0200
    message:
      * Don't introduce more tests calling run_bzr with a non-list.
      * Use more elegant way of ignoring new lines in test helper.
    modified:
      bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
      bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
    ------------------------------------------------------------
    revno: 2475.5.3
    revision-id: amanic at gmail.com-20070623175922-9dlpr6bxipcklr8g
    parent: amanic at gmail.com-20070506014714-9vp1redn0760c8ra
    parent: pqm at pqm.ubuntu.com-20070622160825-17gv0lorkzbr3x76
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.fix_bug_111664
    timestamp: Sat 2007-06-23 19:59:22 +0200
    message:
      merge with bzr.dev
    added:
      bzrlib/branchbuilder.py        branchbuilder.py-20070427022007-zlxpqz2lannhk6y8-1
      bzrlib/counted_lock.py         counted_lock.py-20070502135927-7dk86io3ok7ctx6k-1
      bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
      bzrlib/tests/blackbox/test_lsprof.py test_lsprof.py-20070622025641-nbsm2svy8anvj9df-1
      bzrlib/tests/branch_implementations/test_sprout.py test_sprout.py-20070521151739-b8t8p7axw1h966ws-1
      bzrlib/tests/test_branchbuilder.py test_branchbuilder.p-20070427022007-zlxpqz2lannhk6y8-2
      bzrlib/tests/test_counted_lock.py test_counted_lock.py-20070502135927-7dk86io3ok7ctx6k-2
      bzrlib/tests/test_graph.py     test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
      bzrlib/tests/test_info.py      test_info.py-20070320150933-m0xxm1g7xi9v6noe-1
      bzrlib/tests/test_lsprof.py    test_lsprof.py-20070606095601-bctdndm8yhc0cqnc-1
      doc/developers/                docdevelopers-20070507164002-62r0es2b29myxges-1
      doc/developers/add.txt         add.txt-20070515094933-xhgz3xjc7o0edok0-2
      doc/developers/annotate.txt    annotate.txt-20070515142136-rq51c4kqhwrjsh8k-1
      doc/developers/bundle-creation.txt bundlecreation.rst-20070527173558-rqaqxn1al7vzgcto-1
      doc/developers/bundles.txt     bundles.txt-20070621030528-qkjnugd7iyud6ow3-1
      doc/developers/container-format.txt containerformat.txt-20070601074309-7n7w1jiyayud6xdn-1
      doc/developers/gc.txt          gc.txt-20070515102609-90x5kzjokrurfbke-1
      doc/developers/incremental-push-pull.txt incrementalpushpull.-20070508045640-zneiu1yzbci574c6-1
      doc/developers/index.txt       index.txt-20070508041241-qznziunkg0nffhiw-1
      doc/developers/initial-push-pull.txt initialpushpull.rst-20070527184539-wodba32mi5dehhct-1
      doc/developers/merge-scaling.txt mergescaling.rst-20070527173558-rqaqxn1al7vzgcto-2
      doc/developers/performance-commit.txt performancecommit.tx-20070606061633-4y4rawskx5ejb99w-1
      doc/developers/performance-roadmap-rationale.txt performanceroadmapra-20070507174912-mwv3xv517cs4sisd-1
      doc/developers/performance-roadmap.txt performanceroadmap.t-20070507174912-mwv3xv517cs4sisd-2
      doc/developers/performance-use-case-analysis.txt performanceusecasean-20070508045640-zneiu1yzbci574c6-2
      doc/developers/performance.dot performance.dot-20070527173558-rqaqxn1al7vzgcto-3
      doc/developers/planned-change-integration.txt plannedchangeintegra-20070619004702-i1b3ccamjtfaoq6w-1
      doc/developers/planned-performance-changes.txt plannedperformancech-20070604053752-bnjdhako613xfufb-1
      doc/developers/profiling.txt   profiling.txt-20070531045713-j15mxufywgzwdeu8-1
      doc/developers/revert.txt      revert.txt-20070515111013-grc9hgp21zxqbwbl-1
      doc/shared_repository_layouts.txt shared_repository_la-20070502152030-bagewuqs18ns24o7-1
    renamed:
      HACKING => doc/developers/HACKING HACKING-20050805200004-2a5dc975d870f78c
      bzrlib/graph.py => bzrlib/deprecated_graph.py graph.py-20050905070950-b47dce53236c5e48
      bzrlib/tests/test_graph.py => bzrlib/tests/test_deprecated_graph.py testgraph.py-20050905070950-42e6c958106610fd
    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/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/__init__.py __init__.py-20051118175413-86b97db0b618feef
      bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
      bzrlib/commands.py             bzr.py-20050309040720-d10f4714595cf8c3
      bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
      bzrlib/dirstate.py             dirstate.py-20060728012006-d6mvoihjb3je9peu-1
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/help_topics.py          help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
      bzrlib/info.py                 info.py-20050323235939-6bbfe7d9700b0b9b
      bzrlib/inventory.py            inventory.py-20050309040759-6648b84ca2005b37
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
      bzrlib/lsprof.py               lsprof.py-20051208071030-833790916798ceed
      bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
      bzrlib/merge_directive.py      merge_directive.py-20070228184838-ja62280spt1g7f4x-1
      bzrlib/missing.py              missing.py-20050812153334-097f7097e2a8bcd1
      bzrlib/msgeditor.py            msgeditor.py-20050901111708-ef6d8de98f5d8f2f
      bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
      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/status.py               status.py-20050505062338-431bfa63ec9b19e6
      bzrlib/symbol_versioning.py    symbol_versioning.py-20060105104851-9ecf8af605d15a80
      bzrlib/tests/HTTPTestUtil.py   HTTPTestUtil.py-20050914180604-247d3aafb7a43343
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
      bzrlib/tests/blackbox/test_breakin.py test_breakin.py-20070424043903-qyy6zm4pj3h4sbp3-1
      bzrlib/tests/blackbox/test_bundle.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
      bzrlib/tests/blackbox/test_find_merge_base.py test_find_merge_base.py-20060131142124-f9d5c94df4505b70
      bzrlib/tests/blackbox/test_help.py test_help.py-20060216004358-4ee8a2a338f75a62
      bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
      bzrlib/tests/blackbox/test_init.py test_init.py-20060309032856-a292116204d86eb7
      bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
      bzrlib/tests/blackbox/test_merge_directive.py test_merge_directive-20070302012039-zh7uhy39biairtn0-1
      bzrlib/tests/blackbox/test_revision_info.py test_revision_info.py-20050917162600-21dab3877aa348d7
      bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
      bzrlib/tests/branch_implementations/__init__.py __init__.py-20060123013057-b12a52c3f361daf4
      bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
      bzrlib/tests/branch_implementations/test_pull.py test_pull.py-20060410103942-83c35b26657414fc
      bzrlib/tests/branch_implementations/test_push.py test_push.py-20070130153159-fhfap8uoifevg30j-1
      bzrlib/tests/bzrdir_implementations/__init__.py __init__.py-20060131065642-34c39b54f42dd048
      bzrlib/tests/bzrdir_implementations/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
      bzrlib/tests/test_ancestry.py  test_ancestry.py-20050913023709-69768e94848312c6
      bzrlib/tests/test_commit.py    test_commit.py-20050914060732-279f057f8c295434
      bzrlib/tests/test_dirstate.py  test_dirstate.py-20060728012006-d6mvoihjb3je9peu-2
      bzrlib/tests/test_http.py      testhttp.py-20051018020158-b2eef6e867c514d9
      bzrlib/tests/test_lockdir.py   test_lockdir.py-20060220222025-33d4221569a3d600
      bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
      bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
      bzrlib/tests/test_merge_directive.py test_merge_directive-20070228184838-ja62280spt1g7f4x-2
      bzrlib/tests/test_missing.py   test_missing.py-20051212000028-694fa4f658a81f48
      bzrlib/tests/test_msgeditor.py test_msgeditor.py-20051202041359-920315ec6011ee51
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
      bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
      bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
      bzrlib/tests/test_revert.py    test_revert.py-20060828180832-fqb1v6ecpyvnlitj-1
      bzrlib/tests/test_revision.py  testrevision.py-20050804210559-46f5e1eb67b01289
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
      bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
      bzrlib/tests/test_transport.py testtransport.py-20050718175618-e5cdb99f4555ddce
      bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
      bzrlib/tests/test_treebuilder.py test_treebuilder.py-20060907214856-4omn6hf1u7fvrart-2
      bzrlib/tests/test_tsort.py     testtsort.py-20051025073946-27da871c394d5be4
      bzrlib/tests/test_urlutils.py  test_urlutils.py-20060502192900-46b1f9579987cf9c
      bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
      bzrlib/tests/workingtree_implementations/test_commit.py test_commit.py-20060421013633-1610ec2331c8190f
      bzrlib/tests/workingtree_implementations/test_merge_from_branch.py test_merge_from_bran-20060904034200-12jxyk2zlhpufxe1-1
      bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
      bzrlib/tests/workingtree_implementations/test_workingtree.py test_workingtree.py-20060203003124-817757d3e31444fb
      bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
      bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
      bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
      bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
      bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
      bzrlib/tsort.py                tsort.py-20051025073946-7808f6aaf7d07208
      bzrlib/ui/__init__.py          ui.py-20050824083933-8cf663c763ba53a9
      bzrlib/urlutils.py             urlutils.py-20060502195429-e8a161ecf8fac004
      bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
      bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
      bzrlib/weave.py                knit.py-20050627021749-759c29984154256b
      bzrlib/weave_commands.py       weave_commands.py-20060320231507-8e9f300bffc1aa19
      bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
      bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
      contrib/bash/bzr.simple        bzr-20050503074841-dfc41af1e02111f9
      doc/centralized_workflow.txt   centralized_workflow-20060830194948-kspf52565xvgrlil-1
      doc/default.css                default.css-20060622101119-tgwtdci8z769bjb9-1
      doc/index.txt                  index.txt-20060622101119-tgwtdci8z769bjb9-2
      doc/tutorial.txt               tutorial.txt-20050804190939-9dcbba2ef053bc84
      setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
      doc/developers/HACKING         HACKING-20050805200004-2a5dc975d870f78c
      bzrlib/deprecated_graph.py     graph.py-20050905070950-b47dce53236c5e48
      bzrlib/tests/test_deprecated_graph.py testgraph.py-20050905070950-42e6c958106610fd
    ------------------------------------------------------------
    revno: 2475.5.2
    revision-id: amanic at gmail.com-20070506014714-9vp1redn0760c8ra
    parent: amanic at gmail.com-20070503071126-jez3l2o6l7oemsux
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.fix_bug_111664
    timestamp: Sun 2007-05-06 03:47:14 +0200
    message:
      * blackbox/test_remove
        - bzr rm bogus_file does not throw an exception any more.
      * workingtree_implementations/test_remove
        - Surround = with spaces for Alexander.
        - Split out _assertRemoveErrorContainsRe which uses
          assertContainsRe, to check if the error is as expected.
        - Use assertRaises to check if the correct exceptions are thrown.
        - Use build_tree_contents to change file contents.
        - update test_remove_renamed_files doc string
        - add test_remove_renamed_changed_files
        - workingtree.remove( ['bogus_file'] does not throw an exception any more.
      * workingtree.remove
        - Fix minor typo in doctring, accidentally introduced by me recently.
        - Rather use _iter_changes to detect changes as suggested by Aaron. 
          This is more flexible and more correct. 
    modified:
      bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
      bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
      bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
    ------------------------------------------------------------
    revno: 2475.5.1
    revision-id: amanic at gmail.com-20070503071126-jez3l2o6l7oemsux
    parent: pqm at pqm.ubuntu.com-20070501182714-71xp33bziogu3qu0
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.rm_delete_working_file
    timestamp: Thu 2007-05-03 09:11:26 +0200
    message:
      Fix bug and test: bzr rm refuses to delete renamed files
      (Bug #111664)
    modified:
      bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
      bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
=== modified file 'NEWS'
--- a/NEWS	2007-07-12 08:52:45 +0000
+++ b/NEWS	2007-07-12 09:26:21 +0000
@@ -2,7 +2,9 @@
 
   BUGFIXES:
 
-    * None yet ...
+    * ``bzr rm`` now does not insist on ``--force`` to delete files that
+      have been renamed but not otherwise modified.  (Marius Kruger,
+      #111664)
 
   IMPROVEMENTS:
 

=== modified file 'bzrlib/tests/blackbox/test_remove.py'
--- a/bzrlib/tests/blackbox/test_remove.py	2007-06-27 19:13:50 +0000
+++ b/bzrlib/tests/blackbox/test_remove.py	2007-07-12 09:26:21 +0000
@@ -64,9 +64,9 @@
             ' or --force to delete them regardless.'
             ])
         self.run_bzr_error(error_regexes,
-            'remove ' + ' '.join(files_to_remove))
+            ['remove'] + files_to_remove)
         #see if we can force it now
-        self.run_bzr('remove --force ' + ' '.join(files_to_remove))
+        self.run_bzr(['remove', '--force'] + files_to_remove)
 
     def test_remove_no_files_specified(self):
         tree = self._make_add_and_assert_tree([])
@@ -106,8 +106,7 @@
     def test_remove_invalid_files(self):
         self.build_tree(files)
         tree = self.make_branch_and_tree('.')
-        self.run_bzr_remove_changed_files(['unknown:[.\s]*xyz[.\s]*abc/def'],
-            ['.', 'xyz', 'abc/def'])
+        self.run_bzr(['remove', '.', 'xyz', 'abc/def'])
 
     def test_remove_unversioned_files(self):
         self.build_tree(files)
@@ -143,7 +142,7 @@
     def test_remove_force_unversioned_files(self):
         self.build_tree(files)
         tree = self.make_branch_and_tree('.')
-        self.run_bzr('remove --force ' + ' '.join(files),
+        self.run_bzr(['remove', '--force'] + files,
                      error_regexes=["deleted a", "deleted b",
                                     "deleted b/c", "deleted d"])
         self.assertFilesDeleted(files)
@@ -163,7 +162,7 @@
 
     def test_remove_non_existing_files(self):
         tree = self._make_add_and_assert_tree([])
-        self.run_bzr_remove_changed_files(['unknown:[.\s]*b'], ['b'])
+        self.run_bzr(['remove', 'b'])
 
     def test_remove_keep_non_existing_files(self):
         tree = self._make_add_and_assert_tree([])

=== modified file 'bzrlib/tests/workingtree_implementations/test_remove.py'
--- a/bzrlib/tests/workingtree_implementations/test_remove.py	2007-06-15 07:01:24 +0000
+++ b/bzrlib/tests/workingtree_implementations/test_remove.py	2007-06-28 06:11:06 +0000
@@ -16,14 +16,14 @@
 
 """Tests for interface conformance of 'WorkingTree.remove'"""
 
-import re
 from bzrlib.tests.workingtree_implementations import TestCaseWithWorkingTree
 from bzrlib import errors, osutils
 
 class TestRemove(TestCaseWithWorkingTree):
     """Tests WorkingTree.remove"""
 
-    files=['a', 'b/', 'b/c', 'd/']
+    files = ['a', 'b/', 'b/c', 'd/']
+    rfiles = ['b/c', 'b', 'a', 'd']
     a = ['a']
     b = ['b']
     b_c = ['b', 'b/c']
@@ -60,13 +60,10 @@
         tree = self.getTree()
         tree.add(TestRemove.files)
         self.assertInWorkingTree(TestRemove.files)
-        try:
-            tree.remove(TestRemove.files, keep_files=False)
-            self.fail('Should throw BzrRemoveChangedFilesError')
-        except errors.BzrRemoveChangedFilesError, e:
-            self.assertTrue(re.match('Can\'t remove changed or unknown files:'
-                '.*added:.*a.*b.*b/c.*d.*',
-                str(e), re.DOTALL))
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,
+            TestRemove.files, keep_files=False)
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)added:.*a.*b/.*b/c.*d/')
         self.assertInWorkingTree(TestRemove.files)
         self.failUnlessExists(TestRemove.files)
 
@@ -75,17 +72,11 @@
         tree = self.getTree()
         tree.add(TestRemove.a)
         tree.commit("make sure a is versioned")
-        f = file('a', 'wb')
-        f.write("some other new content!")
-        f.close()
+        self.build_tree_contents([('a', "some other new content!")])
         self.assertInWorkingTree(TestRemove.a)
-        try:
-            tree.remove(TestRemove.a, keep_files=False)
-            self.fail('Should throw BzrRemoveChangedFilesError')
-        except errors.BzrRemoveChangedFilesError, e:
-            self.assertTrue(re.match('Can\'t remove changed or unknown files:'
-                '.*modified:.*a.*',
-                str(e), re.DOTALL))
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,
+            TestRemove.a, keep_files=False)
+        self.assertContainsRe(err.changes_as_text, '(?s)modified:.*a')
         self.assertInWorkingTree(TestRemove.a)
         self.failUnlessExists(TestRemove.a)
 
@@ -94,7 +85,7 @@
         tree = self.getTree()
         tree.add(TestRemove.files)
         tree.commit("make sure files are versioned")
-        for f in ['b/c', 'b', 'a', 'd']:
+        for f in TestRemove.rfiles:
             osutils.delete_any(f)
         self.assertInWorkingTree(TestRemove.files)
         self.failIfExists(TestRemove.files)
@@ -104,6 +95,44 @@
         self.assertNotInWorkingTree(TestRemove.files)
         self.failIfExists(TestRemove.files)
 
+    def test_remove_renamed_files(self):
+        """Check that files are removed even if they are renamed."""
+        tree = self.getTree()
+        tree.add(TestRemove.files)
+        tree.commit("make sure files are versioned")
+
+        for f in TestRemove.rfiles:
+            tree.rename_one(f,f+'x')
+        rfilesx = ['bx/cx', 'bx', 'ax', 'dx']
+        self.assertInWorkingTree(rfilesx)
+        self.failUnlessExists(rfilesx)
+
+        tree.remove(rfilesx, keep_files=False)
+
+        self.assertNotInWorkingTree(rfilesx)
+        self.failIfExists(rfilesx)
+
+    def test_remove_renamed_changed_files(self):
+        """Check that files are not removed if they are renamed and changed."""
+        tree = self.getTree()
+        tree.add(TestRemove.files)
+        tree.commit("make sure files are versioned")
+
+        for f in TestRemove.rfiles:
+            tree.rename_one(f,f+'x')
+        rfilesx = ['bx/cx', 'bx', 'ax', 'dx']
+        self.build_tree_contents([('ax','changed and renamed!'),
+                                  ('bx/cx','changed and renamed!')])
+        self.assertInWorkingTree(rfilesx)
+        self.failUnlessExists(rfilesx)
+
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,
+            rfilesx, keep_files=False)
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)modified:.*ax.*bx/cx')
+        self.assertInWorkingTree(rfilesx)
+        self.failUnlessExists(rfilesx)
+
     def test_force_remove_changed_files(self):
         """Check that changed files are removed and deleted when forced."""
         tree = self.getTree()
@@ -118,25 +147,16 @@
     def test_remove_unknown_files(self):
         """Try to delete unknown files."""
         tree = self.getTree()
-        try:
-            tree.remove(TestRemove.files, keep_files=False)
-            self.fail('Should throw BzrRemoveChangedFilesError')
-        except errors.BzrRemoveChangedFilesError, e:
-            self.assertTrue(re.match('Can\'t remove changed or unknown files:'
-                '.*unknown:.*b/c.*b.*a.*d.*',
-                str(e), re.DOTALL))
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,
+            TestRemove.files, keep_files=False)
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)unknown:.*d/.*b/c.*b/.*a.*')
 
     def test_remove_nonexisting_files(self):
         """Try to delete non-existing files."""
         tree = self.getTree()
         tree.remove([''], keep_files=False)
-        try:
-            tree.remove(['xyz', 'abc/def'], keep_files=False)
-            self.fail('Should throw BzrRemoveChangedFilesError')
-        except errors.BzrRemoveChangedFilesError, e:
-            self.assertTrue(re.match('Can\'t remove changed or unknown files:'
-                '.*unknown:.*xyz.*abc/def.*',
-                str(e), re.DOTALL))
+        tree.remove(['xyz', 'abc/def'], keep_files=False)
 
     def test_remove_nonempty_directory(self):
         """Unchanged non-empty directories should be deleted."""
@@ -156,16 +176,11 @@
         tree.commit("make sure b is versioned")
         self.assertInWorkingTree(TestRemove.files)
         self.failUnlessExists(TestRemove.files)
-        f = file('b/my_unknown_file', 'wb')
-        f.write("some content!")
-        f.close()
-        try:
-            tree.remove(TestRemove.b, keep_files=False)
-            self.fail('Should throw BzrRemoveChangedFilesError')
-        except errors.BzrRemoveChangedFilesError, e:
-            self.assertTrue(re.match('Can\'t remove changed or unknown files:'
-                '.*unknown:.*b/my_unknown_file.*',
-                str(e), re.DOTALL))
+        self.build_tree(['b/my_unknown_file'])
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,
+            TestRemove.b, keep_files=False)
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)unknown:.*b/my_unknown_file')
         self.assertInWorkingTree(TestRemove.b)
         self.failUnlessExists(TestRemove.b)
 
@@ -184,17 +199,11 @@
         tree = self.getTree()
         tree.add(TestRemove.b_c)
         tree.commit("make sure b and c are versioned")
-        f = file('b/c', 'wb')
-        f.write("some other new content!")
-        f.close()
+        self.build_tree_contents([('b/c', "some other new content!")])
         self.assertInWorkingTree(TestRemove.b_c)
-        try:
-            tree.remove(TestRemove.b, keep_files=False)
-            self.fail('Should throw BzrRemoveChangedFilesError')
-        except errors.BzrRemoveChangedFilesError, e:
-            self.assertTrue(re.match('Can\'t remove changed or unknown files:'
-                '.*modified:.*b/c.*',
-                str(e), re.DOTALL))
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,
+            TestRemove.b, keep_files=False)
+        self.assertContainsRe(err.changes_as_text, '(?s)modified:.*b/c')
         self.assertInWorkingTree(TestRemove.b_c)
         self.failUnlessExists(TestRemove.b_c)
 

=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py	2007-07-04 08:08:08 +0000
+++ b/bzrlib/workingtree.py	2007-07-12 09:26:21 +0000
@@ -1762,7 +1762,7 @@
     @needs_tree_write_lock
     def remove(self, files, verbose=False, to_file=None, keep_files=True,
         force=False):
-        """Remove nominated files from the working inventor.
+        """Remove nominated files from the working inventory.
 
         :files: File paths relative to the basedir.
         :keep_files: If true, the files will also be kept.
@@ -1803,18 +1803,30 @@
                     recurse_directory_to_add_files(filename)
         files = [f for f in new_files]
 
+        if len(files) == 0:
+            return # nothing to do
+
         # Sort needed to first handle directory content before the directory
         files.sort(reverse=True)
         if not keep_files and not force:
-            tree_delta = self.changes_from(self.basis_tree(),
-                specific_files=files)
-            for unknown_file in unknown_files_in_directory:
-                tree_delta.unversioned.extend((unknown_file,))
-            if bool(tree_delta.modified
-                    or tree_delta.added
-                    or tree_delta.renamed
-                    or tree_delta.kind_changed
-                    or tree_delta.unversioned):
+            has_changed_files = len(unknown_files_in_directory) > 0
+            if not has_changed_files:
+                for (file_id, path, content_change, versioned, parent_id, name,
+                     kind, executable) in self._iter_changes(self.basis_tree(),
+                         include_unchanged=True, require_versioned=False,
+                         want_unversioned=True, specific_files=files):
+                    # check if it's unknown OR changed but not deleted:
+                    if (versioned == (False, False)
+                        or (content_change and kind[1] != None)):
+                        has_changed_files = True
+                        break
+
+            if has_changed_files:
+                # make delta to show ALL applicable changes in error message.
+                tree_delta = self.changes_from(self.basis_tree(),
+                    specific_files=files)
+                for unknown_file in unknown_files_in_directory:
+                    tree_delta.unversioned.extend((unknown_file,))
                 raise errors.BzrRemoveChangedFilesError(tree_delta)
 
         # do this before any modifications




More information about the bazaar-commits mailing list