Rev 3295: Merge up bzr.dev. in http://people.ubuntu.com/~robertc/baz2.0/versioned_files

Robert Collins robertc at robertcollins.net
Tue Mar 25 04:01:01 GMT 2008


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

------------------------------------------------------------
revno: 3295
revision-id: robertc at robertcollins.net-20080325040051-fz86q4klex5dngfi
parent: robertc at robertcollins.net-20080325005216-ddeb2l154nd40dkq
parent: pqm at pqm.ubuntu.com-20080323231145-nh7pyfd19alqp471
committer: Robert Collins <robertc at robertcollins.net>
branch nick: versionedfile.apicleanup
timestamp: Tue 2008-03-25 15:00:51 +1100
message:
  Merge up bzr.dev.
added:
  bzrlib/tests/test_uncommit.py  test_uncommit.py-20080316104338-y3gxu67g5m2qih10-1
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
  bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
  bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
  bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
  bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/blackbox/test_uncommit.py test_uncommit.py-20051027212835-84944b63adae51be
  bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
  bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
  bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
  bzrlib/uncommit.py             uncommit.py-20050626215513-5ec509fa425b305c
  bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
    ------------------------------------------------------------
    revno: 3287.2.15
    revision-id: pqm at pqm.ubuntu.com-20080323231145-nh7pyfd19alqp471
    parent: pqm at pqm.ubuntu.com-20080323213924-jw60nko0lafszdaa
    parent: aaron at aaronbentley.com-20080323202505-wno4cb15yplis76c
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Sun 2008-03-23 23:11:45 +0000
    message:
      Fix DefaultMail.compose_merge_request basename (james_w)
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
      bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
        ------------------------------------------------------------
        revno: 3287.11.2
        revision-id: aaron at aaronbentley.com-20080323202505-wno4cb15yplis76c
        parent: aaron at aaronbentley.com-20080323202124-6r9rff77fd1skq6q
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: bzr.ab.integration
        timestamp: Sun 2008-03-23 16:25:05 -0400
        message:
          Add NEWS entry
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
        ------------------------------------------------------------
        revno: 3287.11.1
        revision-id: aaron at aaronbentley.com-20080323202124-6r9rff77fd1skq6q
        parent: pqm at pqm.ubuntu.com-20080323200233-gaiwmyujgxauj4ve
        parent: jw+debian at jameswestby.net-20080319201306-wfrwtqs2n536gspa
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: bzr.ab.integration
        timestamp: Sun 2008-03-23 16:21:24 -0400
        message:
          Merge fix from James Westby
        modified:
          bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
          bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
        ------------------------------------------------------------
        revno: 3270.3.2
        revision-id: jw+debian at jameswestby.net-20080319201306-wfrwtqs2n536gspa
        parent: jw+debian at jameswestby.net-20080316144110-p76en6snhpcfv028
        committer: James Westby <jw+debian at jameswestby.net>
        branch nick: merge_request
        timestamp: Wed 2008-03-19 20:13:06 +0000
        message:
          Add a smoke test to check that the DefaultMail client passes through
          the args correctly.
        modified:
          bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
        ------------------------------------------------------------
        revno: 3270.3.1
        revision-id: jw+debian at jameswestby.net-20080316144110-p76en6snhpcfv028
        parent: pqm at pqm.ubuntu.com-20080313004030-mff9aq1jfg13n0qi
        committer: James Westby <jw+debian at jameswestby.net>
        branch nick: merge_request
        timestamp: Sun 2008-03-16 14:41:10 +0000
        message:
          Fix the other implementation of compose_merge_request to accept basename.
        modified:
          bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
    ------------------------------------------------------------
    revno: 3287.2.14
    revision-id: pqm at pqm.ubuntu.com-20080323213924-jw60nko0lafszdaa
    parent: pqm at pqm.ubuntu.com-20080323200233-gaiwmyujgxauj4ve
    parent: aaron at aaronbentley.com-20080323200617-0jr1hwcg3p2u32ul
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Sun 2008-03-23 21:39:24 +0000
    message:
      Remove deprecated codepaths from log.py (james_w)
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
        ------------------------------------------------------------
        revno: 3287.10.2
        revision-id: aaron at aaronbentley.com-20080323200617-0jr1hwcg3p2u32ul
        parent: aaron at aaronbentley.com-20080323200343-56d44clo1544kzjy
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: bzr.ab.integration2
        timestamp: Sun 2008-03-23 16:06:17 -0400
        message:
          Cleanups
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
        ------------------------------------------------------------
        revno: 3287.10.1
        revision-id: aaron at aaronbentley.com-20080323200343-56d44clo1544kzjy
        parent: pqm at pqm.ubuntu.com-20080320180614-grrzhydka050ap3a
        parent: jw+debian at jameswestby.net-20080316122554-tllkss9hg512n8o0
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: bzr.ab.integration2
        timestamp: Sun 2008-03-23 16:03:43 -0400
        message:
          Merge deprecated codepath removal
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
        ------------------------------------------------------------
        revno: 3270.2.1
        revision-id: jw+debian at jameswestby.net-20080316122554-tllkss9hg512n8o0
        parent: pqm at pqm.ubuntu.com-20080313004030-mff9aq1jfg13n0qi
        committer: James Westby <jw+debian at jameswestby.net>
        branch nick: bzr.dev
        timestamp: Sun 2008-03-16 12:25:54 +0000
        message:
          Remove deprecated codepaths from log.py.
          
          They have been deprecated since 0.17, so everyone should have moved
          by now.
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
    ------------------------------------------------------------
    revno: 3287.2.13
    revision-id: pqm at pqm.ubuntu.com-20080323200233-gaiwmyujgxauj4ve
    parent: pqm at pqm.ubuntu.com-20080320180614-grrzhydka050ap3a
    parent: aaron at aaronbentley.com-20080323182637-udhhz4srjvwjc95p
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Sun 2008-03-23 20:02:33 +0000
    message:
      Diff describes execute-bit changes better (cmiller)
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
      bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
        ------------------------------------------------------------
        revno: 3287.9.2
        revision-id: aaron at aaronbentley.com-20080323182637-udhhz4srjvwjc95p
        parent: aaron at aaronbentley.com-20080323182425-qnr06aeuwcxr86t9
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: bzr.ab.integration
        timestamp: Sun 2008-03-23 14:26:37 -0400
        message:
          Add NEWS entry
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
        ------------------------------------------------------------
        revno: 3287.9.1
        revision-id: aaron at aaronbentley.com-20080323182425-qnr06aeuwcxr86t9
        parent: pqm at pqm.ubuntu.com-20080320180614-grrzhydka050ap3a
        parent: bzrdev at chad.org-20080313232212-gl2nml7k11m6623u
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: bzr.ab.integration
        timestamp: Sun 2008-03-23 14:24:25 -0400
        message:
          Merge explicit property change from Chad Miller
        modified:
          bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
          bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
        ------------------------------------------------------------
        revno: 3268.1.1
        revision-id: bzrdev at chad.org-20080313232212-gl2nml7k11m6623u
        parent: pqm at pqm.ubuntu.com-20080312213603-mtgxmfy3td5n04yh
        committer: C Miller <bzrdev at chad.org>
        branch nick: bzr.dev--explicit-prop-diff
        timestamp: Thu 2008-03-13 19:22:12 -0400
        message:
          Describe the property changes in diffs.  Currently, this is the executable-bit
          only.  
          
          Now, includes tests.
        modified:
          bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
          bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
    ------------------------------------------------------------
    revno: 3287.2.12
    revision-id: pqm at pqm.ubuntu.com-20080320180614-grrzhydka050ap3a
    parent: pqm at pqm.ubuntu.com-20080320074642-46bf1vcpyubnaptz
    parent: john at arbash-meinel.com-20080320162432-whjl8nhp3b5q0dj0
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Thu 2008-03-20 18:06:14 +0000
    message:
      (jam) Add --local to bzr uncommit, bug #93412
    added:
      bzrlib/tests/test_uncommit.py  test_uncommit.py-20080316104338-y3gxu67g5m2qih10-1
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/test_uncommit.py test_uncommit.py-20051027212835-84944b63adae51be
      bzrlib/uncommit.py             uncommit.py-20050626215513-5ec509fa425b305c
        ------------------------------------------------------------
        revno: 3280.4.5
        revision-id: john at arbash-meinel.com-20080320162432-whjl8nhp3b5q0dj0
        parent: john at arbash-meinel.com-20080320151005-z9lajjy69m20of17
        parent: pqm at pqm.ubuntu.com-20080320074642-46bf1vcpyubnaptz
        committer: John Arbash Meinel <john at arbash-meinel.com>
        branch nick: uncommit_local
        timestamp: Thu 2008-03-20 11:24:32 -0500
        message:
          [merge] bzr.dev 3298, clean up NEWS conflicts.
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzr                            bzr.py-20050313053754-5485f144c7006fa6
          bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
          bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
          bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
          bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
          bzrlib/symbol_versioning.py    symbol_versioning.py-20060105104851-9ecf8af605d15a80
          bzrlib/tests/blackbox/test_mv.py test_mv.py-20060705114902-33tkxz0o9cdshemo-1
          bzrlib/tests/bzrdir_implementations/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
          bzrlib/tests/test_commit.py    test_commit.py-20050914060732-279f057f8c295434
          bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
          bzrlib/tests/test_smart.py     test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
          bzrlib/tests/workingtree_implementations/test_locking.py test_locking.py-20060707151933-tav3o2hpibwi53u4-3
          bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
          bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
          bzrlib/ui/__init__.py          ui.py-20050824083933-8cf663c763ba53a9
          bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
          bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
        ------------------------------------------------------------
        revno: 3280.4.4
        revision-id: john at arbash-meinel.com-20080320151005-z9lajjy69m20of17
        parent: john at arbash-meinel.com-20080316104737-e7ffkpet97tkd9js
        committer: John Arbash Meinel <john at arbash-meinel.com>
        branch nick: uncommit_local
        timestamp: Thu 2008-03-20 10:10:05 -0500
        message:
          uncommit --local in an unbound branch raises the same exception as commit --local
        modified:
          bzrlib/tests/test_uncommit.py  test_uncommit.py-20080316104338-y3gxu67g5m2qih10-1
          bzrlib/uncommit.py             uncommit.py-20050626215513-5ec509fa425b305c
        ------------------------------------------------------------
        revno: 3280.4.3
        revision-id: john at arbash-meinel.com-20080316104737-e7ffkpet97tkd9js
        parent: john at arbash-meinel.com-20080316104553-hdwcnrpgav03o7i5
        committer: John Arbash Meinel <john at arbash-meinel.com>
        branch nick: uncommit_local
        timestamp: Sun 2008-03-16 10:47:37 +0000
        message:
          Update NEWS for fixing bug #93412
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
        ------------------------------------------------------------
        revno: 3280.4.2
        revision-id: john at arbash-meinel.com-20080316104553-hdwcnrpgav03o7i5
        parent: john at arbash-meinel.com-20080316104411-t3lmcw0blmnoe0qo
        parent: pqm at pqm.ubuntu.com-20080316140120-i3yq8yr1l66m11h7
        committer: John Arbash Meinel <john at arbash-meinel.com>
        branch nick: uncommit_local
        timestamp: Sun 2008-03-16 10:45:53 +0000
        message:
          [merge] bzr.dev 3286
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          README                         README-20050309040720-8f368abf9f346b9d
          bzr                            bzr.py-20050313053754-5485f144c7006fa6
          bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
          bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
          bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
          bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
          bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
          bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
          bzrlib/revision.py             revision.py-20050309040759-e77802c08f3999d5
          bzrlib/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
          bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
          bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
          bzrlib/tests/blackbox/test_upgrade.py test_upgrade.py-20060120060132-b41e5ed2f886ad28
          bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
          bzrlib/tests/test_graph.py     test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
          bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
          bzrlib/tests/test_revision.py  testrevision.py-20050804210559-46f5e1eb67b01289
          bzrlib/tests/test_upgrade.py   test_upgrade.py-20051004040251-555fe1d2bae1bc71
          bzrlib/upgrade.py              history2weaves.py-20050818063535-e7d319791c19a8b2
          setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
        ------------------------------------------------------------
        revno: 3280.4.1
        revision-id: john at arbash-meinel.com-20080316104411-t3lmcw0blmnoe0qo
        parent: pqm at pqm.ubuntu.com-20080315174441-l8xpw6femn0syal1
        committer: John Arbash Meinel <john at arbash-meinel.com>
        branch nick: uncommit_local
        timestamp: Sun 2008-03-16 10:44:11 +0000
        message:
          Add uncommit --local.
          Add some genuine whitebox testing of bzrlib.uncommit.uncommit
          Add a local=??? flag to uncommit() and allow it being set by
          uncommit --local.
        added:
          bzrlib/tests/test_uncommit.py  test_uncommit.py-20080316104338-y3gxu67g5m2qih10-1
        modified:
          bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
          bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
          bzrlib/tests/blackbox/test_uncommit.py test_uncommit.py-20051027212835-84944b63adae51be
          bzrlib/uncommit.py             uncommit.py-20050626215513-5ec509fa425b305c
    ------------------------------------------------------------
    revno: 3287.2.11
    revision-id: pqm at pqm.ubuntu.com-20080320074642-46bf1vcpyubnaptz
    parent: pqm at pqm.ubuntu.com-20080319032243-u1uwskj36dp0i0hs
    parent: aaron at aaronbentley.com-20080319193935-ni2v13574apz1yl5
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Thu 2008-03-20 07:46:42 +0000
    message:
      Speed up merge by avoiding unnecessary file-existence checks
      	(abentley)
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
        ------------------------------------------------------------
        revno: 1551.19.30
        revision-id: aaron at aaronbentley.com-20080319193935-ni2v13574apz1yl5
        parent: aaron at aaronbentley.com-20080319193653-djj4vkouc8fc0k7m
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: Aaron's mergeable stuff
        timestamp: Wed 2008-03-19 15:39:35 -0400
        message:
          Accelerate merge by skipping file existence check when merging execute bit
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
        ------------------------------------------------------------
        revno: 1551.19.29
        revision-id: aaron at aaronbentley.com-20080319193653-djj4vkouc8fc0k7m
        parent: aaron at aaronbentley.com-20080319182625-au9v7jmj6i8yfi96
        parent: pqm at pqm.ubuntu.com-20080319032243-u1uwskj36dp0i0hs
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: Aaron's mergeable stuff
        timestamp: Wed 2008-03-19 15:36:53 -0400
        message:
          Merge with bzr.dev
        added:
          bzrlib/tests/blackbox/test_hooks.py test_hooks.py-20080308163236-xljgf9j41hik1x21-1
          bzrlib/tests/tree_implementations/test_annotate_iter.py test_annotate_iter.p-20080315092519-h4dc43rntmfmq16d-1
        modified:
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          README                         README-20050309040720-8f368abf9f346b9d
          bzr                            bzr.py-20050313053754-5485f144c7006fa6
          bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
          bzrlib/annotate.py             annotate.py-20050922133147-7c60541d2614f022
          bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
          bzrlib/dirstate.py             dirstate.py-20060728012006-d6mvoihjb3je9peu-1
          bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
          bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
          bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
          bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
          bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
          bzrlib/merge3.py               merge3.py-20050704130834-bf0597094828a2e1
          bzrlib/missing.py              missing.py-20050812153334-097f7097e2a8bcd1
          bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
          bzrlib/plugins/launchpad/lp_registration.py lp_registration.py-20060315190948-daa617eafe3a8d48
          bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
          bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
          bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
          bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
          bzrlib/revision.py             revision.py-20050309040759-e77802c08f3999d5
          bzrlib/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
          bzrlib/smart/client.py         client.py-20061116014825-2k6ada6xgulslami-1
          bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
          bzrlib/symbol_versioning.py    symbol_versioning.py-20060105104851-9ecf8af605d15a80
          bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
          bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
          bzrlib/tests/blackbox/test_mv.py test_mv.py-20060705114902-33tkxz0o9cdshemo-1
          bzrlib/tests/blackbox/test_push.py test_push.py-20060329002750-929af230d5d22663
          bzrlib/tests/blackbox/test_send.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
          bzrlib/tests/blackbox/test_upgrade.py test_upgrade.py-20060120060132-b41e5ed2f886ad28
          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_annotate.py  test_annotate.py-20061213215015-sttc9agsxomls7q0-1
          bzrlib/tests/test_commit.py    test_commit.py-20050914060732-279f057f8c295434
          bzrlib/tests/test_graph.py     test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
          bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
          bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
          bzrlib/tests/test_merge3.py    merge3.py-20050704130834-556689114c89e6f2
          bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
          bzrlib/tests/test_revision.py  testrevision.py-20050804210559-46f5e1eb67b01289
          bzrlib/tests/test_smart.py     test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
          bzrlib/tests/test_upgrade.py   test_upgrade.py-20051004040251-555fe1d2bae1bc71
          bzrlib/tests/tree_implementations/__init__.py __init__.py-20060717075546-420s7b0bj9hzeowi-2
          bzrlib/tests/workingtree_implementations/test_locking.py test_locking.py-20060707151933-tav3o2hpibwi53u4-3
          bzrlib/tests/workingtree_implementations/test_parents.py test_set_parents.py-20060807231740-yicmnlci1mj8smu1-1
          bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
          bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
          bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
          bzrlib/tree.py                 tree.py-20050309040759-9d5f2496be663e77
          bzrlib/ui/__init__.py          ui.py-20050824083933-8cf663c763ba53a9
          bzrlib/upgrade.py              history2weaves.py-20050818063535-e7d319791c19a8b2
          bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
          bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
          doc/en/mini-tutorial/index.txt index.txt-20070813141352-2u64ooqzo0or4hss-2
          doc/en/user-guide/hooks.txt    hooks.txt-20070829200551-7nr6e5a1io6x78uf-1
          doc/en/user-guide/version_info.txt version_info.txt-20060921215543-gju6o5xdic8w25np-1
          setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
        ------------------------------------------------------------
        revno: 1551.19.28
        revision-id: aaron at aaronbentley.com-20080319182625-au9v7jmj6i8yfi96
        parent: aaron at aaronbentley.com-20080116041003-8dxixv8mdqy0v8vd
        parent: pqm at pqm.ubuntu.com-20080312073810-r3a7ot93mw7hmk1m
        committer: Aaron Bentley <aaron at aaronbentley.com>
        branch nick: Aaron's mergeable stuff
        timestamp: Wed 2008-03-19 14:26:25 -0400
        message:
          Merge with bzr.dev
        removed:
          bzrlib/plugins/multiparent.py  mpregen-20070411063203-5x9z7i73add0d6f6-1
          index.txt                      index.txt-20071121073725-0corxykv5irjal00-1
        added:
          bzrlib/directory_service.py    directory_service.py-20080305221044-vr2mkvlsk8jypa2y-1
          bzrlib/plugins/launchpad/test_lp_service.py test_lp_service.py-20080213034527-drf0ucr2x1js3onb-1
          bzrlib/tests/test_directory_service.py test_directory_servi-20080305221044-vr2mkvlsk8jypa2y-2
          doc/developers/development-repo.txt developmentrepo.txt-20080102200205-raj42k61dch8pjmj-1
          doc/en/admin-guide/            docenadminguide-20080305135054-y7y2c986yf94zljn-1
          doc/en/admin-guide/index.txt   index.txt-20080305140741-ecw0lap8dxkxc05g-1
          doc/en/user-guide/revnos.txt   revnos.txt-20080111231928-pbntxea0ynh9ww1t-1
          tools/package_mf.py            package_mf.py-20080206141953-323gd0qb2z3tn5pc-1
        renamed:
          bzrlib/plugins/launchpad/lp_indirect.py => bzrlib/plugins/launchpad/lp_directory.py lp_indirect.py-20070126012204-de5rugwlt22c7u7e-1
          bzrlib/plugins/launchpad/test_lp_indirect.py => bzrlib/plugins/launchpad/test_lp_directory.py test_lp_indirect.py-20070126002743-oyle362tzv9cd8mi-1
        modified:
          .bzrignore                     bzrignore-20050311232317-81f7b71efa2db11a
          NEWS                           NEWS-20050323055033-4e00b5db738777ff
          bzr                            bzr.py-20050313053754-5485f144c7006fa6
          bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
          bzrlib/annotate.py             annotate.py-20050922133147-7c60541d2614f022
          bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
          bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
          bzrlib/bundle/commands.py      __init__.py-20050617152058-1b6530d9ab85c11c
          bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
          bzrlib/cmd_version_info.py     __init__.py-20051228204928-697d01fdca29c99b
          bzrlib/commands.py             bzr.py-20050309040720-d10f4714595cf8c3
          bzrlib/debug.py                debug.py-20061102062349-vdhrw9qdpck8cl35-1
          bzrlib/delta.py                delta.py-20050729221636-54cf14ef94783d0a
          bzrlib/deprecated_graph.py     graph.py-20050905070950-b47dce53236c5e48
          bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
          bzrlib/dirstate.py             dirstate.py-20060728012006-d6mvoihjb3je9peu-1
          bzrlib/doc/api/__init__.py     __init__.py-20051224020744-7b87d590843855bc
          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_topics/__init__.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/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
          bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
          bzrlib/merge_directive.py      merge_directive.py-20070228184838-ja62280spt1g7f4x-1
          bzrlib/option.py               option.py-20051014052914-661fb36e76e7362f
          bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
          bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
          bzrlib/plugins/launchpad/__init__.py __init__.py-20060315182712-2d5feebd2a1032dc
          bzrlib/plugins/launchpad/lp_registration.py lp_registration.py-20060315190948-daa617eafe3a8d48
          bzrlib/plugins/launchpad/test_register.py test_register.py-20060315182712-40f5dda945c829a8
          bzrlib/progress.py             progress.py-20050610070202-df9faaab791964c0
          bzrlib/reconfigure.py          reconfigure.py-20070908040425-6ykgo7escxhyrg9p-1
          bzrlib/registry.py             lazy_factory.py-20060809213415-2gfvqadtvdn0phtg-1
          bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
          bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
          bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
          bzrlib/repofmt/weaverepo.py    presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
          bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
          bzrlib/revisiontree.py         revisiontree.py-20060724012533-bg8xyryhxd0o0i0h-1
          bzrlib/smart/bzrdir.py         bzrdir.py-20061122024551-ol0l0o0oofsu9b3t-1
          bzrlib/smart/client.py         client.py-20061116014825-2k6ada6xgulslami-1
          bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
          bzrlib/smart/protocol.py       protocol.py-20061108035435-ot0lstk2590yqhzr-1
          bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
          bzrlib/smart/request.py        request.py-20061108095550-gunadhxmzkdjfeek-1
          bzrlib/status.py               status.py-20050505062338-431bfa63ec9b19e6
          bzrlib/symbol_versioning.py    symbol_versioning.py-20060105104851-9ecf8af605d15a80
          bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
          bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
          bzrlib/tests/blackbox/test_bundle_info.py test_bundle_info.py-20070816181255-eiuodwxuqu7w7gxf-1
          bzrlib/tests/blackbox/test_checkout.py test_checkout.py-20060211231752-a5cde67cf70af854
          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_mv.py test_mv.py-20060705114902-33tkxz0o9cdshemo-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_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
          bzrlib/tests/blackbox/test_version.py test_version.py-20070312060045-ol7th9z035r3im3d-1
          bzrlib/tests/blackbox/test_version_info.py test_bb_version_info.py-20051228204928-91711c6559d952f7
          bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
          bzrlib/tests/branch_implementations/test_commit.py test_commit.py-20070206022134-117z1i5b644p63r0-1
          bzrlib/tests/branch_implementations/test_revision_history.py test_revision_histor-20070326062311-v7co92liyuchb80w-1
          bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
          bzrlib/tests/intertree_implementations/test_compare.py test_compare.py-20060724101752-09ysswo1a92uqyoz-2
          bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
          bzrlib/tests/test_annotate.py  test_annotate.py-20061213215015-sttc9agsxomls7q0-1
          bzrlib/tests/test_branch.py    test_branch.py-20060116013032-97819aa07b8ab3b5
          bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
          bzrlib/tests/test_config.py    testconfig.py-20051011041908-742d0c15d8d8c8eb
          bzrlib/tests/test_diff.py      testdiff.py-20050727164403-d1a3496ebb12e339
          bzrlib/tests/test_dirstate.py  test_dirstate.py-20060728012006-d6mvoihjb3je9peu-2
          bzrlib/tests/test_errors.py    test_errors.py-20060210110251-41aba2deddf936a8
          bzrlib/tests/test_graph.py     test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
          bzrlib/tests/test_http.py      testhttp.py-20051018020158-b2eef6e867c514d9
          bzrlib/tests/test_info.py      test_info.py-20070320150933-m0xxm1g7xi9v6noe-1
          bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
          bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
          bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
          bzrlib/tests/test_merge_core.py test_merge_core.py-20050824132511-eb99b23a0eec641b
          bzrlib/tests/test_merge_directive.py test_merge_directive-20070228184838-ja62280spt1g7f4x-2
          bzrlib/tests/test_nonascii.py  testnonascii.py-20051018022645-ea1d8b6477b058a6
          bzrlib/tests/test_osutils.py   test_osutils.py-20051201224856-e48ee24c12182989
          bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
          bzrlib/tests/test_progress.py  test_progress.py-20060308160359-978c397bc79b7fda
          bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-2
          bzrlib/tests/test_registry.py  test_lazy_factory.py-20060809213415-2gfvqadtvdn0phtg-2
          bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
          bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
          bzrlib/tests/test_revisionnamespaces.py testrevisionnamespaces.py-20050711050225-8b4af89e6b1efe84
          bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
          bzrlib/tests/test_smart.py     test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
          bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
          bzrlib/tests/test_ssh_transport.py test_ssh_transport.p-20070105153201-f7iq2bosvgjbdgc3-1
          bzrlib/tests/test_trace.py     testtrace.py-20051110225523-a21117fc7a07eeff
          bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
          bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
          bzrlib/tests/test_tsort.py     testtsort.py-20051025073946-27da871c394d5be4
          bzrlib/tests/test_upgrade.py   test_upgrade.py-20051004040251-555fe1d2bae1bc71
          bzrlib/tests/test_urlutils.py  test_urlutils.py-20060502192900-46b1f9579987cf9c
          bzrlib/tests/test_version_info.py test_version_info.py-20051228204928-2c364e30b702b41b
          bzrlib/tests/test_workingtree.py testworkingtree.py-20051004024258-b88d0fe8f101d468
          bzrlib/tests/test_workingtree_4.py test_workingtree_4.p-20070223025758-531n3tznl3zacv2o-1
          bzrlib/tests/tree_implementations/test_tree.py test_tree.py-20061215160206-usu7lwcj8aq2n3br-1
          bzrlib/tests/workingtree_implementations/test_inv.py test_inv.py-20070311221604-ighlq8tbn5xq0kuo-1
          bzrlib/tests/workingtree_implementations/test_merge_from_branch.py test_merge_from_bran-20060904034200-12jxyk2zlhpufxe1-1
          bzrlib/tests/workingtree_implementations/test_rename_one.py test_rename_one.py-20070226161242-2d8ibdedl700jgio-1
          bzrlib/tests/workingtree_implementations/test_workingtree.py test_workingtree.py-20060203003124-817757d3e31444fb
          bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
          bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
          bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
          bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
          bzrlib/transport/memory.py     memory.py-20051016101338-cd008dbdf69f04fc
          bzrlib/transport/ssh.py        ssh.py-20060824042150-0s9787kng6zv1nwq-1
          bzrlib/tree.py                 tree.py-20050309040759-9d5f2496be663e77
          bzrlib/tsort.py                tsort.py-20051025073946-7808f6aaf7d07208
          bzrlib/urlutils.py             urlutils.py-20060502195429-e8a161ecf8fac004
          bzrlib/util/configobj/configobj.py configobj.py-20051018184548-06992a2246425e3e
          bzrlib/util/configobj/docs/BSD-LICENSE.txt BSDLICENSE.txt-20051018184548-29b89ff3102657f5
          bzrlib/util/configobj/docs/configobj.txt configobj.txt-20051018184548-4949b5f17e6a19c7
          bzrlib/util/configobj/docs/validate.txt validate.txt-20051018184548-9e0e5ad913e258f5
          bzrlib/version_info_formats/__init__.py generate_version_info.py-20051228204928-8358edabcddcd97e
          bzrlib/version_info_formats/format_custom.py format_custom.py-20071029100350-ajovqhbpb5khf6gu-1
          bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
          bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
          doc/developers/HACKING.txt     HACKING-20050805200004-2a5dc975d870f78c
          doc/developers/lca-merge.txt   lcamerge.txt-20080103061803-9isydn4ivgwrvorw-1
          doc/en/user-guide/bazaar_workflows.txt bazaar_workflows.txt-20071114035000-q36a9h57ps06uvnl-1
          doc/en/user-guide/branching_a_project.txt branching_a_project.-20071122141511-0knao2lklsdsvb1q-2
          doc/en/user-guide/core_concepts.txt core_concepts.txt-20071114035000-q36a9h57ps06uvnl-2
          doc/en/user-guide/index.txt    index.txt-20060622101119-tgwtdci8z769bjb9-2
          doc/en/user-guide/resolving_conflicts.txt resolving_conflicts.-20071122141511-0knao2lklsdsvb1q-5
          setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
          tools/win32/bzr.iss.cog        bzr.iss.cog-20060622100836-b3yup582rt3y0nvm-5
          bzrlib/plugins/launchpad/lp_directory.py lp_indirect.py-20070126012204-de5rugwlt22c7u7e-1
          bzrlib/plugins/launchpad/test_lp_directory.py test_lp_indirect.py-20070126002743-oyle362tzv9cd8mi-1
    ------------------------------------------------------------
    revno: 3287.2.10
    revision-id: pqm at pqm.ubuntu.com-20080319032243-u1uwskj36dp0i0hs
    parent: pqm at pqm.ubuntu.com-20080318200038-jo7mqokvib9aojt9
    parent: mbp at sourcefrog.net-20080319014343-uftcx516win6wqds
    committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
    branch nick: +trunk
    timestamp: Wed 2008-03-19 03:22:43 +0000
    message:
      (mbp)(trivial) Better formatting of python version number
    modified:
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
      bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
    ------------------------------------------------------------
    revno: 3287.8.2
    revision-id: mbp at sourcefrog.net-20080319014343-uftcx516win6wqds
    parent: mbp at sourcefrog.net-20080319014018-ihd39j2o886xmp15
    committer: Martin Pool <mbp at sourcefrog.net>
    branch nick: trivial
    timestamp: Wed 2008-03-19 12:43:43 +1100
    message:
      Fix formatting of other occurrences of Python version
    modified:
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/trace.py                trace.py-20050309040759-c8ed824bdcd4748a
    ------------------------------------------------------------
    revno: 3287.8.1
    revision-id: mbp at sourcefrog.net-20080319014018-ihd39j2o886xmp15
    parent: pqm at pqm.ubuntu.com-20080318024945-zhs03078h06fbk6l
    committer: Martin Pool <mbp at sourcefrog.net>
    branch nick: trivial
    timestamp: Wed 2008-03-19 12:40:18 +1100
    message:
      Better formatting of python version in --version
    modified:
      bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
=== modified file 'NEWS'
--- a/NEWS	2008-03-19 04:46:05 +0000
+++ b/NEWS	2008-03-25 04:00:51 +0000
@@ -28,14 +28,26 @@
       by forcing it to recv 64k at a time when reading lines in HTTP headers,
       rather than just 1 byte at a time.  (Andrew Bennetts)
 
+    * Merge is faster.  We no longer check a file's existence unnecessarily
+      when merging the execute bit.  (Aaron Bentley)
+
+    * Diff is now more specific about execute-bit changes it describes
+      (Chad Miller)
+
   BUGFIXES:
 
     * ``bzr mv a b`` can be now used also to rename previously renamed
       directories, not only files. (Lukáš Lalinský, #107967)
 
+    * ``bzr uncommit --local`` can now remove revisions from the local
+      branch to be symmetric with ``bzr commit --local``.
+      (John Arbash Meinel, #93412)
+
     * Don't ask for a password if there is no real terminal.
       (Alexander Belchenko, #69851)
 
+    * Implement handling of basename parameter for DefaultMail.  (James Westby)
+
   DOCUMENTATION:
 
   API BREAKS:
@@ -44,6 +56,10 @@
       non-ghost aware repository such as weaves will now fail if there are
       ghosts.  (Robert Collins)
 
+    * Log formatters must now provide log_revision instead of show and
+      show_merge_revno methods. The latter had been deprecated since the 0.17
+      release. (James Westby)
+
     * ``VersionedFile.get_parents`` is deprecated, please use
       ``VersionedFile.get_parent_map``. (Robert Collins)
 

=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py	2008-03-17 21:58:47 +0000
+++ b/bzrlib/builtins.py	2008-03-20 16:24:32 +0000
@@ -2666,7 +2666,7 @@
             print '   %s (%s python%s)' % (
                     bzrlib.__path__[0],
                     bzrlib.version_string,
-                    '.'.join(map(str, sys.version_info)),
+                    bzrlib._format_version_tuple(sys.version_info),
                     )
         print
         if testspecs_list is not None:
@@ -3657,14 +3657,19 @@
     _see_also = ['commit']
     takes_options = ['verbose', 'revision',
                     Option('dry-run', help='Don\'t actually make changes.'),
-                    Option('force', help='Say yes to all questions.')]
+                    Option('force', help='Say yes to all questions.'),
+                    Option('local',
+                           help="Only remove the commits from the local branch"
+                                " when in a checkout."
+                           ),
+                    ]
     takes_args = ['location?']
     aliases = []
     encoding_type = 'replace'
 
     def run(self, location=None,
             dry_run=False, verbose=False,
-            revision=None, force=False):
+            revision=None, force=False, local=False):
         if location is None:
             location = u'.'
         control, relpath = bzrdir.BzrDir.open_containing(location)
@@ -3680,14 +3685,15 @@
         else:
             b.lock_write()
         try:
-            return self._run(b, tree, dry_run, verbose, revision, force)
+            return self._run(b, tree, dry_run, verbose, revision, force,
+                             local=local)
         finally:
             if tree is not None:
                 tree.unlock()
             else:
                 b.unlock()
 
-    def _run(self, b, tree, dry_run, verbose, revision, force):
+    def _run(self, b, tree, dry_run, verbose, revision, force, local=False):
         from bzrlib.log import log_formatter, show_log
         from bzrlib.uncommit import uncommit
 
@@ -3735,7 +3741,7 @@
                     return 0
 
         uncommit(b, tree=tree, dry_run=dry_run, verbose=verbose,
-                 revno=revno)
+                 revno=revno, local=local)
 
 
 class cmd_break_lock(Command):

=== modified file 'bzrlib/diff.py'
--- a/bzrlib/diff.py	2008-03-07 14:15:10 +0000
+++ b/bzrlib/diff.py	2008-03-13 23:22:12 +0000
@@ -41,6 +41,7 @@
 from bzrlib.symbol_versioning import (
         deprecated_function,
         one_zero,
+        one_three
         )
 from bzrlib.trace import mutter, warning
 
@@ -540,12 +541,20 @@
         raise errors.PathsDoNotExist(sorted(s))
 
 
+ at deprecated_function(one_three)
 def get_prop_change(meta_modified):
     if meta_modified:
         return " (properties changed)"
     else:
         return  ""
 
+def get_executable_change(old_is_x, new_is_x):
+    descr = { True:"+x", False:"-x", None:"??" }
+    if old_is_x != new_is_x:
+        return ["%s to %s" % (descr[old_is_x], descr[new_is_x],)]
+    else:
+        return []
+
 
 class DiffPath(object):
     """Base type for command object that compare files"""
@@ -954,7 +963,15 @@
             old_present = (kind[0] is not None and versioned[0])
             new_present = (kind[1] is not None and versioned[1])
             renamed = (parent[0], name[0]) != (parent[1], name[1])
-            prop_str = get_prop_change(executable[0] != executable[1])
+
+            properties_changed = []
+            properties_changed.extend(get_executable_change(executable[0], executable[1]))
+
+            if properties_changed:
+                prop_str = " (properties changed: %s)" % (", ".join(properties_changed),)
+            else:
+                prop_str = ""
+
             if (old_present, new_present) == (True, False):
                 self.to_file.write("=== removed %s '%s'\n" %
                                    (kind[0], oldpath_encoded))

=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py	2008-03-09 22:06:47 +0000
+++ b/bzrlib/log.py	2008-03-23 20:06:17 +0000
@@ -63,7 +63,6 @@
     config,
     lazy_regex,
     registry,
-    symbol_versioning,
     )
 from bzrlib.errors import (
     BzrCommandError,
@@ -79,10 +78,6 @@
 from bzrlib.revisionspec import (
     RevisionInfo,
     )
-from bzrlib.symbol_versioning import (
-    deprecated_method,
-    zero_seventeen,
-    )
 from bzrlib.trace import mutter
 from bzrlib.tsort import (
     merge_sort,
@@ -222,26 +217,7 @@
     if direction == 'reverse':
         start_rev_id, end_rev_id = end_rev_id, start_rev_id
         
-    legacy_lf = getattr(lf, 'log_revision', None) is None
-    if legacy_lf:
-        # pre-0.17 formatters use show for mainline revisions.
-        # how should we show merged revisions ?
-        #   pre-0.11 api: show_merge
-        #   0.11-0.16 api: show_merge_revno
-        show_merge_revno = getattr(lf, 'show_merge_revno', None)
-        show_merge = getattr(lf, 'show_merge', None)
-        if show_merge is None and show_merge_revno is None:
-            # no merged-revno support
-            generate_merge_revisions = False
-        else:
-            generate_merge_revisions = True
-        # tell developers to update their code
-        symbol_versioning.warn('LogFormatters should provide log_revision '
-            'instead of show and show_merge_revno since bzr 0.17.',
-            DeprecationWarning, stacklevel=3)
-    else:
-        generate_merge_revisions = getattr(lf, 'supports_merge_revisions', 
-                                           False)
+    generate_merge_revisions = getattr(lf, 'supports_merge_revisions', False)
     generate_single_revision = False
     if ((not generate_merge_revisions)
         and ((start_rev_id and (start_rev_id not in rev_nos))
@@ -306,26 +282,9 @@
             if not searchRE.search(rev.message):
                 continue
 
-        if not legacy_lf:
-            lr = LogRevision(rev, revno, merge_depth, delta,
-                             rev_tag_dict.get(rev_id))
-            lf.log_revision(lr)
-        else:
-            # support for legacy (pre-0.17) LogFormatters
-            if merge_depth == 0:
-                if generate_tags:
-                    lf.show(revno, rev, delta, rev_tag_dict.get(rev_id))
-                else:
-                    lf.show(revno, rev, delta)
-            else:
-                if show_merge_revno is None:
-                    lf.show_merge(rev, merge_depth)
-                else:
-                    if generate_tags:
-                        lf.show_merge_revno(rev, merge_depth, revno,
-                                            rev_tag_dict.get(rev_id))
-                    else:
-                        lf.show_merge_revno(rev, merge_depth, revno)
+        lr = LogRevision(rev, revno, merge_depth, delta,
+                         rev_tag_dict.get(rev_id))
+        lf.log_revision(lr)
         if limit:
             log_count += 1
             if log_count >= limit:
@@ -616,10 +575,6 @@
 #        """
 #        raise NotImplementedError('not implemented in abstract base')
 
-    @deprecated_method(zero_seventeen)
-    def show(self, revno, rev, delta):
-        raise NotImplementedError('not implemented in abstract base')
-
     def short_committer(self, rev):
         name, address = config.parse_username(rev.committer)
         if name:
@@ -639,17 +594,6 @@
     supports_delta = True
     supports_tags = True
 
-    @deprecated_method(zero_seventeen)
-    def show(self, revno, rev, delta, tags=None):
-        lr = LogRevision(rev, revno, 0, delta, tags)
-        return self.log_revision(lr)
-
-    @deprecated_method(zero_seventeen)
-    def show_merge_revno(self, rev, merge_depth, revno, tags=None):
-        """Show a merged revision rev, with merge_depth and a revno."""
-        lr = LogRevision(rev, revno, merge_depth, tags=tags)
-        return self.log_revision(lr)
-
     def log_revision(self, revision):
         """Log a revision, either merged or not."""
         indent = '    ' * revision.merge_depth
@@ -695,11 +639,6 @@
     supports_delta = True
     supports_single_merge_revision = True
 
-    @deprecated_method(zero_seventeen)
-    def show(self, revno, rev, delta):
-        lr = LogRevision(rev, revno, 0, delta)
-        return self.log_revision(lr)
-
     def log_revision(self, revision):
         to_file = self.to_file
         date_str = format_date(revision.rev.timestamp,
@@ -755,11 +694,6 @@
         else:
             return rev.message
 
-    @deprecated_method(zero_seventeen)
-    def show(self, revno, rev, delta):
-        self.to_file.write(self.log_string(revno, rev, terminal_width()-1))
-        self.to_file.write('\n')
-
     def log_revision(self, revision):
         self.to_file.write(self.log_string(revision.revno, revision.rev,
                                               self._max_chars))

=== modified file 'bzrlib/mail_client.py'
--- a/bzrlib/mail_client.py	2008-03-12 05:59:01 +0000
+++ b/bzrlib/mail_client.py	2008-03-16 14:41:10 +0000
@@ -346,11 +346,11 @@
             return Editor(self.config).compose(prompt, to, subject,
                           attachment, mimie_subtype, extension)
 
-    def compose_merge_request(self, to, subject, directive):
+    def compose_merge_request(self, to, subject, directive, basename=None):
         """See MailClient.compose_merge_request"""
         try:
             return self._mail_client().compose_merge_request(to, subject,
-                                                             directive)
+                    directive, basename=basename)
         except errors.MailClientNotFound:
             return Editor(self.config).compose_merge_request(to, subject,
-                          directive)
+                          directive, basename=basename)

=== modified file 'bzrlib/merge.py'
--- a/bzrlib/merge.py	2008-03-19 04:39:04 +0000
+++ b/bzrlib/merge.py	2008-03-25 04:00:51 +0000
@@ -950,12 +950,6 @@
         base_executable, other_executable, this_executable = executable
         if file_status == "deleted":
             return
-        trans_id = self.tt.trans_id_file_id(file_id)
-        try:
-            if self.tt.final_kind(trans_id) != "file":
-                return
-        except NoSuchFile:
-            return
         winner = self._three_way(*executable)
         if winner == "conflict":
         # There must be a None in here, if we have a conflict, but we
@@ -964,12 +958,16 @@
                 winner = "this"
             else:
                 winner = "other"
+        if winner == 'this' and file_status != "modified":
+            return
+        trans_id = self.tt.trans_id_file_id(file_id)
+        try:
+            if self.tt.final_kind(trans_id) != "file":
+                return
+        except NoSuchFile:
+            return
         if winner == "this":
-            if file_status == "modified":
-                executability = this_executable
-                if executability is not None:
-                    trans_id = self.tt.trans_id_file_id(file_id)
-                    self.tt.set_executability(executability, trans_id)
+            executability = this_executable
         else:
             assert winner == "other"
             if file_id in self.other_tree:
@@ -978,9 +976,9 @@
                 executability = this_executable
             elif file_id in self.base_tree:
                 executability = base_executable
-            if executability is not None:
-                trans_id = self.tt.trans_id_file_id(file_id)
-                self.tt.set_executability(executability, trans_id)
+        if executability is not None:
+            trans_id = self.tt.trans_id_file_id(file_id)
+            self.tt.set_executability(executability, trans_id)
 
     def cook_conflicts(self, fs_conflicts):
         """Convert all conflicts into a form that doesn't depend on trans_id"""

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2008-03-16 00:28:48 +0000
+++ b/bzrlib/tests/__init__.py	2008-03-16 10:45:53 +0000
@@ -2743,6 +2743,7 @@
                    'bzrlib.tests.test_tsort',
                    'bzrlib.tests.test_tuned_gzip',
                    'bzrlib.tests.test_ui',
+                   'bzrlib.tests.test_uncommit',
                    'bzrlib.tests.test_upgrade',
                    'bzrlib.tests.test_urlutils',
                    'bzrlib.tests.test_versionedfile',

=== modified file 'bzrlib/tests/blackbox/test_uncommit.py'
--- a/bzrlib/tests/blackbox/test_uncommit.py	2007-12-11 14:36:31 +0000
+++ b/bzrlib/tests/blackbox/test_uncommit.py	2008-03-16 10:44:11 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2005, 2006 Canonical Ltd
+# Copyright (C) 2005, 2006, 2008 Canonical Ltd
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -110,6 +110,18 @@
         b.pull(t_a.branch)
         uncommit.uncommit(b)
 
+    def test_uncommit_bound_local(self):
+        t_a = self.make_branch_and_tree('a')
+        rev_id1 = t_a.commit('commit 1')
+        rev_id2 = t_a.commit('commit 2')
+        rev_id3 = t_a.commit('commit 3')
+        b = t_a.branch.create_checkout('b').branch
+
+        out, err = self.run_bzr(['uncommit', '--local', 'b', '--force'])
+        self.assertEqual(rev_id3, t_a.last_revision())
+        self.assertEqual((3, rev_id3), t_a.branch.last_revision_info())
+        self.assertEqual((2, rev_id2), b.last_revision_info())
+
     def test_uncommit_revision(self):
         wt = self.create_simple_tree()
 

=== modified file 'bzrlib/tests/test_diff.py'
--- a/bzrlib/tests/test_diff.py	2008-01-29 15:58:23 +0000
+++ b/bzrlib/tests/test_diff.py	2008-03-13 23:22:12 +0000
@@ -34,6 +34,7 @@
     )
 from bzrlib.errors import BinaryFile, NoDiff, ExecutableMissing
 import bzrlib.osutils as osutils
+import bzrlib.transform as transform
 import bzrlib.patiencediff
 import bzrlib._patiencediff_py
 from bzrlib.tests import (Feature, TestCase, TestCaseWithTransport,
@@ -509,6 +510,39 @@
         self.assertContainsRe(diff, '-contents\n'
                                     '\\+new contents\n')
 
+
+    def test_internal_diff_exec_property(self):
+        tree = self.make_branch_and_tree('tree')
+
+        tt = transform.TreeTransform(tree)
+        tt.new_file('a', tt.root, 'contents\n', 'a-id', True)
+        tt.new_file('b', tt.root, 'contents\n', 'b-id', False)
+        tt.new_file('c', tt.root, 'contents\n', 'c-id', True)
+        tt.new_file('d', tt.root, 'contents\n', 'd-id', False)
+        tt.new_file('e', tt.root, 'contents\n', 'control-e-id', True)
+        tt.new_file('f', tt.root, 'contents\n', 'control-f-id', False)
+        tt.apply()
+        tree.commit('one', rev_id='rev-1')
+
+        tt = transform.TreeTransform(tree)
+        tt.set_executability(False, tt.trans_id_file_id('a-id'))
+        tt.set_executability(True, tt.trans_id_file_id('b-id'))
+        tt.set_executability(False, tt.trans_id_file_id('c-id'))
+        tt.set_executability(True, tt.trans_id_file_id('d-id'))
+        tt.apply()
+        tree.rename_one('c', 'new-c')
+        tree.rename_one('d', 'new-d')
+
+        diff = self.get_diff(tree.basis_tree(), tree)
+
+        self.assertContainsRe(diff, r"file 'a'.*\(properties changed:.*\+x to -x.*\)")
+        self.assertContainsRe(diff, r"file 'b'.*\(properties changed:.*-x to \+x.*\)")
+        self.assertContainsRe(diff, r"file 'c'.*\(properties changed:.*\+x to -x.*\)")
+        self.assertContainsRe(diff, r"file 'd'.*\(properties changed:.*-x to \+x.*\)")
+        self.assertNotContainsRe(diff, r"file 'e'")
+        self.assertNotContainsRe(diff, r"file 'f'")
+
+
     def test_binary_unicode_filenames(self):
         """Test that contents of files are *not* encoded in UTF-8 when there
         is a binary file in the diff.

=== modified file 'bzrlib/tests/test_mail_client.py'
--- a/bzrlib/tests/test_mail_client.py	2008-03-02 16:54:19 +0000
+++ b/bzrlib/tests/test_mail_client.py	2008-03-19 20:13:06 +0000
@@ -159,3 +159,34 @@
         self.assertContainsRe(prompt, u'foo\u1234(.|\n)*bar\u1234'
                               u'(.|\n)*baz\u1234(.|\n)*qux\u1234')
         editor._get_merge_prompt(u'foo', u'bar', u'baz', 'qux\xff')
+
+
+class DummyMailClient(object):
+
+    def compose_merge_request(self, *args, **kwargs):
+        self.args = args
+        self.kwargs = kwargs
+
+
+class DefaultMailDummyClient(mail_client.DefaultMail):
+
+    def __init__(self):
+        self.client = DummyMailClient()
+
+    def _mail_client(self):
+        return self.client
+
+
+class TestDefaultMail(tests.TestCase):
+
+    def test_compose_merge_request(self):
+        client = DefaultMailDummyClient()
+        to = "a at b.com"
+        subject = "[MERGE]"
+        directive = "directive",
+        basename = "merge"
+        client.compose_merge_request(to, subject, directive,
+                                     basename=basename)
+        dummy_client = client.client
+        self.assertEqual(dummy_client.args, (to, subject, directive))
+        self.assertEqual(dummy_client.kwargs, {"basename":basename})

=== added file 'bzrlib/tests/test_uncommit.py'
--- a/bzrlib/tests/test_uncommit.py	1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/test_uncommit.py	2008-03-20 15:10:05 +0000
@@ -0,0 +1,98 @@
+# Copyright (C) 2008 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""Test uncommit."""
+
+
+from bzrlib import (
+    errors,
+    tests,
+    uncommit,
+    )
+
+
+class TestUncommit(tests.TestCaseWithTransport):
+
+    def make_linear_tree(self):
+        tree = self.make_branch_and_tree('tree')
+        tree.lock_write()
+        try:
+            self.build_tree(['tree/one'])
+            tree.add('one')
+            rev_id1 = tree.commit('one')
+            self.build_tree(['tree/two'])
+            tree.add('two')
+            rev_id2 = tree.commit('two')
+        finally:
+            tree.unlock()
+        return tree, [rev_id1, rev_id2]
+
+    def test_uncommit(self):
+        tree, history = self.make_linear_tree()
+        self.assertEqual(history[1], tree.last_revision())
+        self.assertEqual((2, history[1]), tree.branch.last_revision_info())
+        uncommit.uncommit(tree.branch, tree=tree)
+        self.assertEqual(history[0], tree.last_revision())
+        self.assertEqual((1, history[0]), tree.branch.last_revision_info())
+
+        # The file should not be removed
+        self.failUnlessExists('tree/two')
+        # And it should still be listed as added
+        self.assertIsNot(None, tree.path2id('two'))
+
+    def test_uncommit_bound(self):
+        tree, history = self.make_linear_tree()
+        child = tree.bzrdir.sprout('child').open_workingtree()
+        child.branch.bind(tree.branch)
+
+        self.assertEqual(history[1], tree.last_revision())
+        self.assertEqual((2, history[1]), tree.branch.last_revision_info())
+        self.assertEqual(history[1], child.last_revision())
+        self.assertEqual((2, history[1]), child.branch.last_revision_info())
+
+        # Uncommit in a bound branch should uncommit the master branch, but not
+        # touch the other working tree.
+        uncommit.uncommit(child.branch, tree=child)
+
+        self.assertEqual(history[1], tree.last_revision())
+        self.assertEqual((1, history[0]), tree.branch.last_revision_info())
+        self.assertEqual(history[0], child.last_revision())
+        self.assertEqual((1, history[0]), child.branch.last_revision_info())
+
+    def test_uncommit_bound_local(self):
+        tree, history = self.make_linear_tree()
+        child = tree.bzrdir.sprout('child').open_workingtree()
+        child.branch.bind(tree.branch)
+
+        self.assertEqual(history[1], tree.last_revision())
+        self.assertEqual((2, history[1]), tree.branch.last_revision_info())
+        self.assertEqual(history[1], child.last_revision())
+        self.assertEqual((2, history[1]), child.branch.last_revision_info())
+
+        # Uncommit local=True should only affect the local branch
+        uncommit.uncommit(child.branch, tree=child, local=True)
+
+        self.assertEqual(history[1], tree.last_revision())
+        self.assertEqual((2, history[1]), tree.branch.last_revision_info())
+        self.assertEqual(history[0], child.last_revision())
+        self.assertEqual((1, history[0]), child.branch.last_revision_info())
+
+    def test_uncommit_unbound_local(self):
+        tree, history = self.make_linear_tree()
+
+        # If this tree isn't bound, local=True raises an exception
+        self.assertRaises(errors.LocalRequiresBoundBranch,
+            uncommit.uncommit, tree.branch, tree=tree, local=True)

=== modified file 'bzrlib/trace.py'
--- a/bzrlib/trace.py	2008-02-16 10:03:17 +0000
+++ b/bzrlib/trace.py	2008-03-19 01:43:43 +0000
@@ -437,7 +437,7 @@
     err_file.write('\n')
     err_file.write('bzr %s on python %s (%s)\n' % \
                        (bzrlib.__version__,
-                        '.'.join(map(str, sys.version_info)),
+                        bzrlib._format_version_tuple(sys.version_info),
                         sys.platform))
     err_file.write('arguments: %r\n' % sys.argv)
     err_file.write(

=== modified file 'bzrlib/uncommit.py'
--- a/bzrlib/uncommit.py	2007-07-11 19:44:51 +0000
+++ b/bzrlib/uncommit.py	2008-03-20 15:10:05 +0000
@@ -20,12 +20,16 @@
 
 import os
 
-from bzrlib import revision as _mod_revision
+from bzrlib import (
+    errors,
+    revision as _mod_revision,
+    )
 from bzrlib.branch import Branch
 from bzrlib.errors import BoundBranchOutOfDate
 
 
-def uncommit(branch, dry_run=False, verbose=False, revno=None, tree=None):
+def uncommit(branch, dry_run=False, verbose=False, revno=None, tree=None,
+             local=False):
     """Remove the last revision from the supplied branch.
 
     :param dry_run: Don't actually change anything
@@ -45,10 +49,15 @@
         if tree is not None:
             pending_merges = tree.get_parent_ids()[1:]
 
-        master = branch.get_master_branch()
-        if master is not None:
-            master.lock_write()
-            unlockable.append(master)
+        if local:
+            master = None
+            if branch.get_bound_location() is None:
+                raise errors.LocalRequiresBoundBranch()
+        else:
+            master = branch.get_master_branch()
+            if master is not None:
+                master.lock_write()
+                unlockable.append(master)
         rh = branch.revision_history()
         if master is not None and rh[-1] != master.last_revision():
             raise BoundBranchOutOfDate(branch, master)

=== modified file 'bzrlib/version.py'
--- a/bzrlib/version.py	2007-10-16 17:37:43 +0000
+++ b/bzrlib/version.py	2008-03-19 01:40:18 +0000
@@ -57,7 +57,7 @@
         python_dll = "python%d%d.dll" % sys.version_info[:2]
         to_file.write(os.path.join(basedir, python_dll) + ' ')
     # and now version of python interpreter
-    to_file.write('.'.join(map(str, sys.version_info)))
+    to_file.write(bzrlib._format_version_tuple(sys.version_info))
     to_file.write('\n')
 
     to_file.write("  Python standard library:" + ' ')



More information about the bazaar-commits mailing list