Rev 3067: Support logging single merge revisions with short and line log formatters. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Mon Dec 3 17:53:10 GMT 2007


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 3067
revision-id:pqm at pqm.ubuntu.com-20071203175302-n6fyku9etg5du9km
parent: pqm at pqm.ubuntu.com-20071203012007-1tfytfzp7piacl7q
parent: bialix at ukr.net-20071203170310-yd93m6cv1al4t8nl
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2007-12-03 17:53:02 +0000
message:
  Support logging single merge revisions with short and line log formatters.
   (Kent Gibson)
removed:
  index.txt                      index.txt-20071121073725-0corxykv5irjal00-1
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
  bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
  bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
    ------------------------------------------------------------
    revno: 2997.1.4
    revision-id:bialix at ukr.net-20071203170310-yd93m6cv1al4t8nl
    parent: bialix at ukr.net-20071203165701-hswq1nykc5ab2cnb
    parent: pqm at pqm.ubuntu.com-20071203012007-1tfytfzp7piacl7q
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: kent.gibson
    timestamp: Mon 2007-12-03 19:03:10 +0200
    message:
      merge bzr.dev; NEWS entry.
    added:
      bzrlib/switch.py               switch.py-20071116011000-v5lnw7d2wkng9eux-1
      bzrlib/tests/blackbox/test_switch.py test_switch.py-20071122111948-0c5en6uz92bwl76h-1
      bzrlib/tests/repository_implementations/test__generate_text_key_index.py test__generate_text_-20071114232121-00h9fd8qg8kjfa5k-1
      bzrlib/tests/repository_implementations/test_find_text_key_references.py test_find_text_key_r-20071114033605-v73bakal8x77qlfi-1
      bzrlib/tests/test_switch.py    test_switch.py-20071116011000-v5lnw7d2wkng9eux-2
      doc/en/tutorials/              docentutorials-20071127235845-bm2lu60bvau1ptmh-1
      doc/en/user-guide/annotating_changes.txt annotating_changes.t-20071122141511-0knao2lklsdsvb1q-1
      doc/en/user-guide/bazaar_workflows.txt bazaar_workflows.txt-20071114035000-q36a9h57ps06uvnl-1
      doc/en/user-guide/best_practice_intro.txt best_practice_intro.-20071123154453-dk2mjhrg1vpjm5w2-1
      doc/en/user-guide/branching_a_project.txt branching_a_project.-20071122141511-0knao2lklsdsvb1q-2
      doc/en/user-guide/browsing_history.txt browsing_history.txt-20071121073725-0corxykv5irjal00-2
      doc/en/user-guide/central_intro.txt central_intro.txt-20071123055134-k5x4ekduci2lbn36-1
      doc/en/user-guide/configuring_bazaar.txt configuring_bazaar.t-20071128000722-ncxiua259xwbdbg7-1
      doc/en/user-guide/controlling_registration.txt controlling_registra-20071121073725-0corxykv5irjal00-3
      doc/en/user-guide/core_concepts.txt core_concepts.txt-20071114035000-q36a9h57ps06uvnl-2
      doc/en/user-guide/distributed_intro.txt distributed_intro.tx-20071123154453-dk2mjhrg1vpjm5w2-2
      doc/en/user-guide/entering_commands.txt using_bazaar.txt-20071114035000-q36a9h57ps06uvnl-6
      doc/en/user-guide/getting_help.txt getting_help.txt-20071128000722-ncxiua259xwbdbg7-2
      doc/en/user-guide/images/      images-20071114035000-q36a9h57ps06uvnl-3
      doc/en/user-guide/images/workflows_centralized.png workflows_centralize-20071114035000-q36a9h57ps06uvnl-8
      doc/en/user-guide/images/workflows_centralized.svg workflows_centralize-20071130043324-bhms0cgyphhq1b2x-1
      doc/en/user-guide/images/workflows_gatekeeper.png workflows_gatekeeper-20071114035000-q36a9h57ps06uvnl-9
      doc/en/user-guide/images/workflows_gatekeeper.svg workflows_gatekeeper-20071130043324-bhms0cgyphhq1b2x-2
      doc/en/user-guide/images/workflows_localcommit.png workflows_localcommi-20071114035000-q36a9h57ps06uvnl-10
      doc/en/user-guide/images/workflows_localcommit.svg workflows_localcommi-20071130043324-bhms0cgyphhq1b2x-3
      doc/en/user-guide/images/workflows_peer.png workflows_peer.png-20071114035000-q36a9h57ps06uvnl-11
      doc/en/user-guide/images/workflows_peer.svg workflows_peer.svg-20071130043324-bhms0cgyphhq1b2x-4
      doc/en/user-guide/images/workflows_pqm.png workflows_pqm.png-20071114035000-q36a9h57ps06uvnl-12
      doc/en/user-guide/images/workflows_pqm.svg workflows_pqm.svg-20071130043324-bhms0cgyphhq1b2x-5
      doc/en/user-guide/images/workflows_shared.png workflows_shared.png-20071114035000-q36a9h57ps06uvnl-13
      doc/en/user-guide/images/workflows_shared.svg workflows_shared.svg-20071130043324-bhms0cgyphhq1b2x-6
      doc/en/user-guide/images/workflows_single.png workflows_single.png-20071114035000-q36a9h57ps06uvnl-14
      doc/en/user-guide/images/workflows_single.svg workflows_single.svg-20071130043324-bhms0cgyphhq1b2x-7
      doc/en/user-guide/installing_bazaar.txt installing_bazaar.tx-20071114035000-q36a9h57ps06uvnl-4
      doc/en/user-guide/introducing_bazaar.txt introducing_bazaar.t-20071114035000-q36a9h57ps06uvnl-5
      doc/en/user-guide/merging_changes.txt merging_changes.txt-20071122141511-0knao2lklsdsvb1q-3
      doc/en/user-guide/organizing_branches.txt organizing_branches.-20071123154453-dk2mjhrg1vpjm5w2-3
      doc/en/user-guide/partner_intro.txt partner_workflow.txt-20071122141511-0knao2lklsdsvb1q-4
      doc/en/user-guide/publishing_a_branch.txt publishing_a_branch.-20071123055134-k5x4ekduci2lbn36-2
      doc/en/user-guide/recording_changes.txt recording_changes.tx-20071121073725-0corxykv5irjal00-4
      doc/en/user-guide/releasing_a_project.txt releasing_a_project.-20071121073725-0corxykv5irjal00-5
      doc/en/user-guide/resolving_conflicts.txt resolving_conflicts.-20071122141511-0knao2lklsdsvb1q-5
      doc/en/user-guide/reusing_a_checkout.txt reusing_a_checkout.t-20071123055134-k5x4ekduci2lbn36-3
      doc/en/user-guide/reviewing_changes.txt reviewing_changes.tx-20071121073725-0corxykv5irjal00-6
      doc/en/user-guide/sending_changes.txt sending_changes.txt-20071123154453-dk2mjhrg1vpjm5w2-4
      doc/en/user-guide/solo_intro.txt solo_workflow.txt-20071121073725-0corxykv5irjal00-7
      doc/en/user-guide/starting_a_project.txt starting_a_project.t-20071121073725-0corxykv5irjal00-8
      doc/en/user-guide/undoing_mistakes.txt undoing_mistakes.txt-20071121092300-8fyacngt1w98e5mp-1
      doc/en/user-guide/using_checkouts.txt using_checkouts.txt-20071123055134-k5x4ekduci2lbn36-4
      doc/en/user-guide/using_gatekeepers.txt using_gatekeepers.tx-20071123154453-dk2mjhrg1vpjm5w2-5
      doc/en/user-guide/working_offline_central.txt working_offline_cent-20071123055134-k5x4ekduci2lbn36-5
      doc/en/user-guide/writing_a_plugin.txt writing_a_plugin.txt-20071114035000-q36a9h57ps06uvnl-7
    renamed:
      doc/developers/knitpack.txt => doc/developers/packrepo.txt knitpack.txt-20071023074744-q0g5u8me8gk5zbtb-1
      doc/en/user-guide/centralized_workflow.txt => doc/en/tutorials/centralized_workflow.txt centralized_workflow-20060830194948-kspf52565xvgrlil-1
      doc/en/user-guide/tutorial.txt => doc/en/tutorials/tutorial.txt tutorial.txt-20050804190939-9dcbba2ef053bc84
    modified:
      Makefile                       Makefile-20050805140406-d96e3498bb61c5bb
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/annotate.py             annotate.py-20050922133147-7c60541d2614f022
      bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/bundle/serializer/v4.py v10.py-20070611062757-5ggj7k18s9dej0fr-1
      bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
      bzrlib/check.py                check.py-20050309040759-f3a679400c06bcc1
      bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
      bzrlib/config.py               config.py-20051011043216-070c74f4e9e338e8
      bzrlib/conflicts.py            conflicts.py-20051001061850-78ef952ba63d2b42
      bzrlib/debug.py                debug.py-20061102062349-vdhrw9qdpck8cl35-1
      bzrlib/diff.py                 diff.py-20050309040759-26944fbbf2ebbf36
      bzrlib/dirstate.py             dirstate.py-20060728012006-d6mvoihjb3je9peu-1
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
      bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
      bzrlib/help_topics.py          help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
      bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
      bzrlib/inventory.py            inventory.py-20050309040759-6648b84ca2005b37
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/lru_cache.py            lru_cache.py-20070119165515-tlw203kuwh0id5gv-1
      bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
      bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
      bzrlib/msgeditor.py            msgeditor.py-20050901111708-ef6d8de98f5d8f2f
      bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
      bzrlib/plugins/launchpad/__init__.py __init__.py-20060315182712-2d5feebd2a1032dc
      bzrlib/reconcile.py            reweave_inventory.py-20051108164726-1e5e0934febac06e
      bzrlib/reconfigure.py          reconfigure.py-20070908040425-6ykgo7escxhyrg9p-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/sign_my_commits.py      sign_my_commits.py-20060215152201-5a6363365180e671
      bzrlib/smart/branch.py         branch.py-20061124031907-mzh3pla28r83r97f-1
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
      bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
      bzrlib/tests/HTTPTestUtil.py   HTTPTestUtil.py-20050914180604-247d3aafb7a43343
      bzrlib/tests/HttpServer.py     httpserver.py-20061012142527-m1yxdj1xazsf8d7s-1
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
      bzrlib/tests/blackbox/test_commit.py test_commit.py-20060212094538-ae88fc861d969db0
      bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
      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_reconcile.py test_fix.py-20060223013051-9a188e15a5ee9451
      bzrlib/tests/blackbox/test_reconfigure.py test_reconfigure.py-20070908173426-khfo5fi2rgzgtwj3-1
      bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
      bzrlib/tests/blackbox/test_send.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
      bzrlib/tests/blackbox/test_uncommit.py test_uncommit.py-20051027212835-84944b63adae51be
      bzrlib/tests/blackbox/test_versioning.py versioning.py-20050622071821-3ddf5e2e5e93c602
      bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
      bzrlib/tests/branch_implementations/test_break_lock.py test_break_lock.py-20060504111902-9aae411dbe9aadd2
      bzrlib/tests/branch_implementations/test_create_checkout.py test_create_checkout-20070322193723-n2wkp1g03r0404di-1
      bzrlib/tests/branch_implementations/test_get_revision_id_to_revno_map.py test_get_revision_id-20070417211641-6kcoj1c704gqqopn-1
      bzrlib/tests/branch_implementations/test_locking.py test_locking.py-20060707151933-tav3o2hpibwi53u4-4
      bzrlib/tests/bzrdir_implementations/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
      bzrlib/tests/ftp_server.py     ftpserver.py-20071019102346-61jbvdkrr70igauv-1
      bzrlib/tests/interrepository_implementations/__init__.py __init__.py-20060220054744-baf49a1f88f17b1a
      bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
      bzrlib/tests/repository_implementations/__init__.py __init__.py-20060131092037-9564957a7d4a841b
      bzrlib/tests/repository_implementations/test_check.py test_check.py-20070824124512-38g4d135gcqxo4zb-1
      bzrlib/tests/repository_implementations/test_check_reconcile.py test_broken.py-20070928125406-62236394w0jpbpd6-2
      bzrlib/tests/repository_implementations/test_fetch.py test_fetch.py-20070814052151-5cxha9slx4c93uog-1
      bzrlib/tests/repository_implementations/test_reconcile.py test_reconcile.py-20060223022332-572ef70a3288e369
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
      bzrlib/tests/test_ancestry.py  test_ancestry.py-20050913023709-69768e94848312c6
      bzrlib/tests/test_annotate.py  test_annotate.py-20061213215015-sttc9agsxomls7q0-1
      bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
      bzrlib/tests/test_commit.py    test_commit.py-20050914060732-279f057f8c295434
      bzrlib/tests/test_config.py    testconfig.py-20051011041908-742d0c15d8d8c8eb
      bzrlib/tests/test_conflicts.py test_conflicts.py-20051006031059-e2dad9bbeaa5891f
      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_fetch.py     testfetch.py-20050825090644-f73e07e7dfb1765a
      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_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
      bzrlib/tests/test_lru_cache.py test_lru_cache.py-20070119165535-hph6rk4h9rzy4180-1
      bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
      bzrlib/tests/test_memorytree.py test_memorytree.py-20060906023413-4wlkalbdpsxi2r4y-3
      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_msgeditor.py test_msgeditor.py-20051202041359-920315ec6011ee51
      bzrlib/tests/test_osutils.py   test_osutils.py-20051201224856-e48ee24c12182989
      bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-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_smart.py     test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
      bzrlib/tests/test_ssh_transport.py test_ssh_transport.p-20070105153201-f7iq2bosvgjbdgc3-1
      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_upgrade.py   test_upgrade.py-20051004040251-555fe1d2bae1bc71
      bzrlib/tests/test_workingtree.py testworkingtree.py-20051004024258-b88d0fe8f101d468
      bzrlib/tests/tree_implementations/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1
      bzrlib/tests/workingtree_implementations/test_break_lock.py test_break_lock.py-20060504115740-233e245df546fd42
      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/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
      bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
      bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
      bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
      bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
      bzrlib/transport/http/response.py _response.py-20060613154423-a2ci7hd4iw5c7fnt-1
      bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
      bzrlib/transport/memory.py     memory.py-20051016101338-cd008dbdf69f04fc
      bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
      bzrlib/transport/ssh.py        ssh.py-20060824042150-0s9787kng6zv1nwq-1
      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/win32utils.py           win32console.py-20051021033308-123c6c929d04973d
      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/performance-contributing.txt performancecontribut-20070621063612-ac4zhhagjzkr21qp-1
      doc/en/mini-tutorial/index.txt index.txt-20070813141352-2u64ooqzo0or4hss-2
      doc/en/user-guide/authentication_conf.txt authentication_conf.-20071104135035-glfv0ri355tyg1nf-1
      doc/en/user-guide/bug_trackers.txt bug_trackers.txt-20070713223459-khxdlcudraii95uv-1
      doc/en/user-guide/configuration.txt configuration.txt-20060314161707-868350809502af01
      doc/en/user-guide/conflicts.txt conflicts.txt-20070723221841-ns3jvwxdb4okn6fk-1
      doc/en/user-guide/hooks.txt    hooks.txt-20070829200551-7nr6e5a1io6x78uf-1
      doc/en/user-guide/http_smart_server.txt fastcgi.txt-20061005091552-rz8pva0olkxv0sd8-3
      doc/en/user-guide/index.txt    index.txt-20060622101119-tgwtdci8z769bjb9-2
      doc/en/user-guide/plugins.txt  plugins.txt-20060314145616-525099a747f3ffdd
      doc/en/user-guide/server.txt   server.txt-20060913044801-h939fvbwzz39gf7g-1
      doc/en/user-guide/setting_up_email.txt setting_up_email.txt-20060314161707-fd242c8944346173
      doc/en/user-guide/shared_repository_layouts.txt shared_repository_la-20070502152030-bagewuqs18ns24o7-1
      doc/en/user-guide/specifying_revisions.txt specifying_revisions.txt-20060314161707-19deb139101bea33
      doc/en/user-guide/using_aliases.txt using_aliases.txt-20060314161707-c21d27fa2939e039
      doc/en/user-guide/version_info.txt version_info.txt-20060921215543-gju6o5xdic8w25np-1
      doc/en/user-reference/hooks.txt hooks.txt-20070830033044-xxu2rced13f72dka-1
      doc/index.txt                  index.txt-20070813101924-07gd9i9d2jt124bf-1
      tools/win32/bzr.iss.cog        bzr.iss.cog-20060622100836-b3yup582rt3y0nvm-5
      doc/developers/packrepo.txt    knitpack.txt-20071023074744-q0g5u8me8gk5zbtb-1
      doc/en/tutorials/tutorial.txt  tutorial.txt-20050804190939-9dcbba2ef053bc84
    ------------------------------------------------------------
    revno: 2997.1.3
    revision-id:bialix at ukr.net-20071203165701-hswq1nykc5ab2cnb
    parent: warthog618 at gmail.com-20071119134905-4h3vgj1044y2jrqx
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: kent.gibson
    timestamp: Mon 2007-12-03 18:57:01 +0200
    message:
      file wrapper around stdout should use terminal encoding, not user_encoding.
    modified:
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
    ------------------------------------------------------------
    revno: 2997.1.2
    revision-id:warthog618 at gmail.com-20071119134905-4h3vgj1044y2jrqx
    parent: warthog618 at gmail.com-20071117093733-r31dz89u600c6zxm
    committer: Kent Gibson <warthog618 at gmail.com>
    branch nick: bzr.kg
    timestamp: Mon 2007-11-19 22:49:05 +0900
    message:
      Move all imports to top of log.py
    modified:
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
    ------------------------------------------------------------
    revno: 2997.1.1
    revision-id:warthog618 at gmail.com-20071117093733-r31dz89u600c6zxm
    parent: pqm at pqm.ubuntu.com-20071115084907-6bzfegb0kf5e2zte
    committer: Kent Gibson <warthog618 at gmail.com>
    branch nick: bzr.kg
    timestamp: Sat 2007-11-17 18:37:33 +0900
    message:
      Support logging single merge revisions with short and line log formatters.
    modified:
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
      bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
      bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
=== removed file 'index.txt'
=== modified file 'NEWS'
--- a/NEWS	2007-12-02 14:35:01 +0000
+++ b/NEWS	2007-12-03 17:03:10 +0000
@@ -12,6 +12,9 @@
    * ``bzr commit`` now doesn't print the revision number twice. (Matt
      Nordhoff, #172612)
 
+   * Support logging single merge revisions with short and line log formatters.
+     (Kent Gibson)
+
   INTERNALS:
 
     * New -Dhttp debug option reports http connections, requests and responses.

=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py	2007-11-14 06:06:41 +0000
+++ b/bzrlib/log.py	2007-12-03 16:57:01 +0000
@@ -49,14 +49,28 @@
 all the changes since the previous revision that touched hello.c.
 """
 
-from itertools import izip
+import codecs
+from itertools import (
+    izip,
+    )
 import re
+import sys
+from warnings import (
+    warn,
+    )
 
 from bzrlib import (
     registry,
     symbol_versioning,
     )
-import bzrlib.errors as errors
+from bzrlib.errors import (
+    BzrCommandError,
+    )
+from bzrlib.osutils import (
+    format_date,
+    get_terminal_encoding,
+    terminal_width,
+    )
 from bzrlib.revision import (
     NULL_REVISION,
     )
@@ -187,11 +201,6 @@
              search=None,
              limit=None):
     """Worker function for show_log - see show_log."""
-    from bzrlib.osutils import format_date
-    from bzrlib.errors import BzrCheckError
-    
-    from warnings import warn
-
     if not isinstance(lf, LogFormatter):
         warn("not a LogFormatter instance: %r" % lf)
 
@@ -199,7 +208,6 @@
         mutter('get log for file_id %r', specific_fileid)
 
     if search is not None:
-        import re
         searchRE = re.compile(search, re.IGNORECASE)
     else:
         searchRE = None
@@ -232,17 +240,23 @@
     else:
         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))
             or (end_rev_id and (end_rev_id not in rev_nos)))):
-        from bzrlib.errors import BzrCommandError
-        raise BzrCommandError('Selected log formatter only supports '
-            'mainline revisions.')
+        generate_single_revision = ((start_rev_id == end_rev_id)
+            and getattr(lf, 'supports_single_merge_revision', False))
+        if not generate_single_revision:
+            raise BzrCommandError('Selected log formatter only supports '
+                'mainline revisions.')
+        generate_merge_revisions = generate_single_revision
     view_revs_iter = get_view_revisions(mainline_revs, rev_nos, branch,
                           direction, include_merges=generate_merge_revisions)
     view_revisions = _filter_revision_range(list(view_revs_iter),
                                             start_rev_id,
                                             end_rev_id)
+    if view_revisions and generate_single_revision:
+        view_revisions = view_revisions[0:1]
     if specific_fileid:
         view_revisions = _filter_revisions_touching_file_id(branch,
                                                          specific_fileid,
@@ -367,10 +381,8 @@
 
     if ((start_rev_id == NULL_REVISION)
         or (end_rev_id == NULL_REVISION)):
-        from bzrlib.errors import BzrCommandError
         raise BzrCommandError('Logging revision 0 is invalid.')
     if start_revno > end_revno:
-        from bzrlib.errors import BzrCommandError
         raise BzrCommandError("Start revision must be older than "
                               "the end revision.")
 
@@ -577,8 +589,12 @@
     - supports_delta must be True if this log formatter supports delta.
         Otherwise the delta attribute may not be populated.
     - supports_merge_revisions must be True if this log formatter supports 
-        merge revisions.  If not, only mainline revisions (those 
-        with merge_depth == 0) will be passed to the formatter.
+        merge revisions.  If not, and if supports_single_merge_revisions is
+        also not True, then only mainline revisions will be passed to the 
+        formatter.
+    - supports_single_merge_revision must be True if this log formatter
+        supports logging only a single merge revision.  This flag is
+        only relevant if supports_merge_revisions is not True.
     - supports_tags must be True if this log formatter supports tags.
         Otherwise the tags attribute may not be populated.
     """
@@ -628,7 +644,6 @@
 
     def log_revision(self, revision):
         """Log a revision, either merged or not."""
-        from bzrlib.osutils import format_date
         indent = '    ' * revision.merge_depth
         to_file = self.to_file
         to_file.write(indent + '-' * 60 + '\n')
@@ -670,6 +685,7 @@
 class ShortLogFormatter(LogFormatter):
 
     supports_delta = True
+    supports_single_merge_revision = True
 
     @deprecated_method(zero_seventeen)
     def show(self, revno, rev, delta):
@@ -677,8 +693,6 @@
         return self.log_revision(lr)
 
     def log_revision(self, revision):
-        from bzrlib.osutils import format_date
-
         to_file = self.to_file
         date_str = format_date(revision.rev.timestamp,
                                revision.rev.timezone or 0,
@@ -711,8 +725,9 @@
 
 class LineLogFormatter(LogFormatter):
 
+    supports_single_merge_revision = True
+
     def __init__(self, *args, **kwargs):
-        from bzrlib.osutils import terminal_width
         super(LineLogFormatter, self).__init__(*args, **kwargs)
         self._max_chars = terminal_width() - 1
 
@@ -722,7 +737,6 @@
         return str[:max_len-3]+'...'
 
     def date_string(self, rev):
-        from bzrlib.osutils import format_date
         return format_date(rev.timestamp, rev.timezone or 0, 
                            self.show_timezone, date_fmt="%Y-%m-%d",
                            show_offset=False)
@@ -735,7 +749,6 @@
 
     @deprecated_method(zero_seventeen)
     def show(self, revno, rev, delta):
-        from bzrlib.osutils import terminal_width
         self.to_file.write(self.log_string(revno, rev, terminal_width()-1))
         self.to_file.write('\n')
 
@@ -803,7 +816,6 @@
     name -- Name of the formatter to construct; currently 'long', 'short' and
         'line' are supported.
     """
-    from bzrlib.errors import BzrCommandError
     try:
         return log_formatter_registry.make_formatter(name, *args, **kwargs)
     except KeyError:
@@ -826,11 +838,8 @@
     :param to_file: A file to write the results to. If None, stdout will be used
     """
     if to_file is None:
-        import sys
-        import codecs
-        import bzrlib
-        to_file = codecs.getwriter(bzrlib.user_encoding)(sys.stdout,
-                                                         errors='replace')
+        to_file = codecs.getwriter(get_terminal_encoding())(sys.stdout,
+            errors='replace')
     lf = log_formatter(log_format,
                        show_ids=False,
                        to_file=to_file,

=== modified file 'bzrlib/tests/blackbox/test_log.py'
--- a/bzrlib/tests/blackbox/test_log.py	2007-11-15 07:44:38 +0000
+++ b/bzrlib/tests/blackbox/test_log.py	2007-11-17 09:37:33 +0000
@@ -285,8 +285,8 @@
     def test_merges_nonsupporting_formatter(self):
         self._prepare()
         err_msg = 'Selected log formatter only supports mainline revisions.'
-        out,err = self.run_bzr('log --short -r1.1.2', retcode=3)
-        self.assertContainsRe(err, err_msg)
+        # The single revision case is tested in the core tests
+        # since all standard formatters support single merge revisions.
         out,err = self.run_bzr('log --short -r1..1.1.2', retcode=3)
         self.assertContainsRe(err, err_msg)
         out,err = self.run_bzr('log --short -r1.1.1..1.1.2', retcode=3)

=== modified file 'bzrlib/tests/test_log.py'
--- a/bzrlib/tests/test_log.py	2007-11-12 14:03:35 +0000
+++ b/bzrlib/tests/test_log.py	2007-11-17 09:37:33 +0000
@@ -27,8 +27,15 @@
                         ShortLogFormatter,
                         LineLogFormatter)
 from bzrlib.branch import Branch
-from bzrlib.errors import InvalidRevisionNumber
+from bzrlib.errors import (
+    BzrCommandError,
+    InvalidRevisionNumber,
+    )
 from bzrlib.revision import Revision
+from bzrlib.revisionspec import (
+    RevisionInfo,
+    RevisionSpec,
+    )
 
 
 class LogCatcher(LogFormatter):
@@ -194,6 +201,35 @@
         d = logentry.delta
         self.checkDelta(d, added=['file1', 'file2'])
 
+    def test_merges_nonsupporting_formatter(self):
+        """Tests that show_log will raise if the formatter doesn't
+        support merge revisions."""
+        wt = self.make_branch_and_memory_tree('.')
+        wt.lock_write()
+        try:
+            wt.add('')
+            wt.commit('rev-1', rev_id='rev-1',
+                      timestamp=1132586655, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.commit('rev-merged', rev_id='rev-2a',
+                      timestamp=1132586700, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.set_parent_ids(['rev-1', 'rev-2a'])
+            wt.branch.set_last_revision_info(1, 'rev-1')
+            wt.commit('rev-2', rev_id='rev-2b',
+                      timestamp=1132586800, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            logfile = self.make_utf8_encoded_stringio()
+            formatter = ShortLogFormatter(to_file=logfile)
+            wtb = wt.branch
+            lf = LogCatcher()
+            revspec = RevisionSpec.from_string('1.1.1')
+            rev = revspec.in_history(wtb)
+            self.assertRaises(BzrCommandError, show_log, wtb, lf,
+                              start_revision=rev, end_revision=rev)
+        finally:
+            wt.unlock()
+
 
 def make_commits_with_trailing_newlines(wt):
     """Helper method for LogFormatter tests"""    
@@ -258,6 +294,66 @@
 
 """)
 
+    def test_short_log_with_merges(self):
+        wt = self.make_branch_and_memory_tree('.')
+        wt.lock_write()
+        try:
+            wt.add('')
+            wt.commit('rev-1', rev_id='rev-1',
+                      timestamp=1132586655, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.commit('rev-merged', rev_id='rev-2a',
+                      timestamp=1132586700, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.set_parent_ids(['rev-1', 'rev-2a'])
+            wt.branch.set_last_revision_info(1, 'rev-1')
+            wt.commit('rev-2', rev_id='rev-2b',
+                      timestamp=1132586800, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            logfile = self.make_utf8_encoded_stringio()
+            formatter = ShortLogFormatter(to_file=logfile)
+            show_log(wt.branch, formatter)
+            self.assertEqualDiff(logfile.getvalue(), """\
+    2 Joe Foo\t2005-11-22 [merge]
+      rev-2
+
+    1 Joe Foo\t2005-11-22
+      rev-1
+
+""")
+        finally:
+            wt.unlock()
+
+    def test_short_log_single_merge_revision(self):
+        wt = self.make_branch_and_memory_tree('.')
+        wt.lock_write()
+        try:
+            wt.add('')
+            wt.commit('rev-1', rev_id='rev-1',
+                      timestamp=1132586655, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.commit('rev-merged', rev_id='rev-2a',
+                      timestamp=1132586700, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.set_parent_ids(['rev-1', 'rev-2a'])
+            wt.branch.set_last_revision_info(1, 'rev-1')
+            wt.commit('rev-2', rev_id='rev-2b',
+                      timestamp=1132586800, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            logfile = self.make_utf8_encoded_stringio()
+            formatter = ShortLogFormatter(to_file=logfile)
+            revspec = RevisionSpec.from_string('1.1.1')
+            wtb = wt.branch
+            rev = revspec.in_history(wtb)
+            show_log(wtb, formatter, start_revision=rev, end_revision=rev)
+            self.assertEqualDiff(logfile.getvalue(), """\
+1.1.1 Joe Foo\t2005-11-22
+      rev-merged
+
+""")
+        finally:
+            wt.unlock()
+
 
 class TestLongLogFormatter(TestCaseWithTransport):
 
@@ -492,37 +588,6 @@
         self.assertEqualDiff(log_contents,
             '1: Line-Log-Formatte... 2005-11-23 add a\n')
 
-    def test_short_log_with_merges(self):
-        wt = self.make_branch_and_memory_tree('.')
-        wt.lock_write()
-        try:
-            wt.add('')
-            wt.commit('rev-1', rev_id='rev-1',
-                      timestamp=1132586655, timezone=36000,
-                      committer='Joe Foo <joe at foo.com>')
-            wt.commit('rev-merged', rev_id='rev-2a',
-                      timestamp=1132586700, timezone=36000,
-                      committer='Joe Foo <joe at foo.com>')
-            wt.set_parent_ids(['rev-1', 'rev-2a'])
-            wt.branch.set_last_revision_info(1, 'rev-1')
-            wt.commit('rev-2', rev_id='rev-2b',
-                      timestamp=1132586800, timezone=36000,
-                      committer='Joe Foo <joe at foo.com>')
-            logfile = self.make_utf8_encoded_stringio()
-            formatter = ShortLogFormatter(to_file=logfile)
-            show_log(wt.branch, formatter)
-            logfile.flush()
-            self.assertEqualDiff(logfile.getvalue(), """\
-    2 Joe Foo\t2005-11-22 [merge]
-      rev-2
-
-    1 Joe Foo\t2005-11-22
-      rev-1
-
-""")
-        finally:
-            wt.unlock()
-
     def test_trailing_newlines(self):
         wt = self.make_branch_and_tree('.')
         b = make_commits_with_trailing_newlines(wt)
@@ -535,6 +600,35 @@
 1: Joe Foo 2005-11-21 simple log message
 """)
 
+    def test_line_log_single_merge_revision(self):
+        wt = self.make_branch_and_memory_tree('.')
+        wt.lock_write()
+        try:
+            wt.add('')
+            wt.commit('rev-1', rev_id='rev-1',
+                      timestamp=1132586655, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.commit('rev-merged', rev_id='rev-2a',
+                      timestamp=1132586700, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            wt.set_parent_ids(['rev-1', 'rev-2a'])
+            wt.branch.set_last_revision_info(1, 'rev-1')
+            wt.commit('rev-2', rev_id='rev-2b',
+                      timestamp=1132586800, timezone=36000,
+                      committer='Joe Foo <joe at foo.com>')
+            logfile = self.make_utf8_encoded_stringio()
+            formatter = LineLogFormatter(to_file=logfile)
+            revspec = RevisionSpec.from_string('1.1.1')
+            wtb = wt.branch
+            rev = revspec.in_history(wtb)
+            show_log(wtb, formatter, start_revision=rev, end_revision=rev)
+            self.assertEqualDiff(logfile.getvalue(), """\
+1.1.1: Joe Foo 2005-11-22 rev-merged
+""")
+        finally:
+            wt.unlock()
+
+
 
 class TestGetViewRevisions(TestCaseWithTransport):
 




More information about the bazaar-commits mailing list