Rev 3970: Add local & remote revision filtering to missing (Marius Kruger) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Thu Jan 29 06:04:47 GMT 2009
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 3970
revision-id: pqm at pqm.ubuntu.com-20090129060443-6hvfgxb55cd6r527
parent: pqm at pqm.ubuntu.com-20090129050743-a1sxceuybyrjfv8k
parent: ian.clatworthy at canonical.com-20090129052136-1a0ue2k2rhxznu23
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2009-01-29 06:04:43 +0000
message:
Add local & remote revision filtering to missing (Marius Kruger)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3969.1.1
revision-id: ian.clatworthy at canonical.com-20090129052136-1a0ue2k2rhxznu23
parent: pqm at pqm.ubuntu.com-20090129050743-a1sxceuybyrjfv8k
parent: amanic at gmail.com-20090125010347-qk0gt8kq6wtq6pt4
committer: Ian Clatworthy <ian.clatworthy at canonical.com>
branch nick: ianc-integration
timestamp: Thu 2009-01-29 15:21:36 +1000
message:
Add local & remote revision filtering to missing (Marius Kruger)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3921.3.14
revision-id: amanic at gmail.com-20090125010347-qk0gt8kq6wtq6pt4
parent: amanic at gmail.com-20090125005526-800c7w470ggms63y
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Sun 2009-01-25 03:03:47 +0200
message:
put spaces after commas
modified:
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3921.3.13
revision-id: amanic at gmail.com-20090125005526-800c7w470ggms63y
parent: amanic at gmail.com-20090125002626-y0r2jmu7o13bo3ou
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Sun 2009-01-25 02:55:26 +0200
message:
update missing documentation and blackbox test to better reflect `-r 3` behaviour.
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
------------------------------------------------------------
revno: 3921.3.12
revision-id: amanic at gmail.com-20090125002626-y0r2jmu7o13bo3ou
parent: amanic at gmail.com-20090124234908-xf4sh7ph1x0erax5
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Sun 2009-01-25 02:26:26 +0200
message:
add missing examples and NEWS
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
------------------------------------------------------------
revno: 3921.3.11
revision-id: amanic at gmail.com-20090124234908-xf4sh7ph1x0erax5
parent: amanic at gmail.com-20090124225433-0hm7jvh9aui3iihd
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Sun 2009-01-25 01:49:08 +0200
message:
swap options as per review:
--revision, -r for remote revision filtering
--my-revision for this revision filtering.
Also updated the blackbox tests accordingly
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
------------------------------------------------------------
revno: 3921.3.10
revision-id: amanic at gmail.com-20090124225433-0hm7jvh9aui3iihd
parent: amanic at gmail.com-20090102094753-8h0o3sxfvwz5wv9c
parent: pqm at pqm.ubuntu.com-20090124185051-8oryvqq68n6repso
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Sun 2009-01-25 00:54:33 +0200
message:
merge with bzr.dev
added:
bzrlib/plugins/netrc_credential_store/ netrc_credential_sto-20081006090354-oaoid1olhgk8vevm-1
bzrlib/plugins/netrc_credential_store/__init__.py __init__.py-20081006090402-hd75m8kcrrm0vlz1-1
bzrlib/plugins/netrc_credential_store/tests/ tests-20081006090406-6mddz8j10pux993e-1
bzrlib/plugins/netrc_credential_store/tests/__init__.py __init__.py-20081006090411-vytweyz6sun61d4q-1
bzrlib/plugins/netrc_credential_store/tests/test_netrc.py test_netrc.py-20081006090414-vm3or4tz6c9wk2oi-1
bzrlib/tests/blackbox/test_filesystem_cicp.py test_filesystem_cicp-20081028010456-vclkg401m81keaxc-1
bzrlib/tests/branch_implementations/test_dotted_revno_to_revision_id.py test_dotted_revno_to-20090121014844-6x7d9jtri5sspg1o-1
bzrlib/tests/branch_implementations/test_iter_merge_sorted_revisions.py test_merge_sorted_re-20090121004847-to3gvjwigstu93eh-1
bzrlib/tests/branch_implementations/test_revision_id_to_dotted_revno.py test_revision_id_to_-20090122052032-g3czslif6sdqfkh3-1
bzrlib/tests/https_server.py https_server.py-20071121173708-aj8zczi0ziwbwz21-1
bzrlib/tests/ssl_certs/ ssl_certs-20071124141654-dc9za9nho2gmzbri-1
bzrlib/tests/ssl_certs/__init__.py __init__.py-20071124141703-j5hr254lm287lyut-8
bzrlib/tests/ssl_certs/ca.crt ca.crt-20071124141703-j5hr254lm287lyut-7
bzrlib/tests/ssl_certs/ca.key ca.key-20071124141703-j5hr254lm287lyut-6
bzrlib/tests/ssl_certs/create_ssls.py create_ssls.py-20071124141703-j5hr254lm287lyut-5
bzrlib/tests/ssl_certs/server.crt server.crt-20071124141703-j5hr254lm287lyut-4
bzrlib/tests/ssl_certs/server.csr server.csr-20071124141703-j5hr254lm287lyut-3
bzrlib/tests/ssl_certs/server_with_pass.key server_with_pass.key-20071124141703-j5hr254lm287lyut-2
bzrlib/tests/ssl_certs/server_without_pass.key server_without_pass.-20071124141703-j5hr254lm287lyut-1
doc/developers/case-insensitive-file-systems.txt caseinsensitivefiles-20081117224243-p84xpmqnsa1p8k91-1
doc/news-template.txt newstemplate.txt-20090113030949-kn6dn0xcj1rd6vmn-1
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzr bzr.py-20050313053754-5485f144c7006fa6
bzrlib/__init__.py __init__.py-20050309040759-33e65acf91bbcd5d
bzrlib/branch.py branch.py-20050309040759-e4baf4e0d046576e
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/commands.py bzr.py-20050309040720-d10f4714595cf8c3
bzrlib/config.py config.py-20051011043216-070c74f4e9e338e8
bzrlib/delta.py delta.py-20050729221636-54cf14ef94783d0a
bzrlib/diff.py diff.py-20050309040759-26944fbbf2ebbf36
bzrlib/dirstate.py dirstate.py-20060728012006-d6mvoihjb3je9peu-1
bzrlib/errors.py errors.py-20050309040759-20512168c4e14fbd
bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
bzrlib/help_topics/en/configuration.txt configuration.txt-20060314161707-868350809502af01
bzrlib/help_topics/en/rules.txt rules.txt-20080516063844-ghr5l6pvvrhiycun-1
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
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/mutabletree.py mutabletree.py-20060906023413-4wlkalbdpsxi2r4y-2
bzrlib/osutils.py osutils.py-20050309040759-eeaff12fbf77ac86
bzrlib/patiencediff.py patiencediff.py-20070721205536-jz8gaykeb7xtampk-1
bzrlib/progress.py progress.py-20050610070202-df9faaab791964c0
bzrlib/push.py push.py-20080606021927-5fe39050e8xne9un-1
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/revisionspec.py revisionspec.py-20050907152633-17567659fd5c0ddb
bzrlib/rules.py properties.py-20080506032617-9k06uqalkf09ck0z-1
bzrlib/smart/medium.py medium.py-20061103051856-rgu2huy59fkz902q-1
bzrlib/status.py status.py-20050505062338-431bfa63ec9b19e6
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
bzrlib/tests/blackbox/test_init.py test_init.py-20060309032856-a292116204d86eb7
bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
bzrlib/tests/blackbox/test_push.py test_push.py-20060329002750-929af230d5d22663
bzrlib/tests/blackbox/test_status.py teststatus.py-20050712014354-508855eb9f29f7dc
bzrlib/tests/blackbox/test_upgrade.py test_upgrade.py-20060120060132-b41e5ed2f886ad28
bzrlib/tests/branch_implementations/__init__.py __init__.py-20060123013057-b12a52c3f361daf4
bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
bzrlib/tests/branch_implementations/test_stacking.py test_stacking.py-20080214020755-msjlkb7urobwly0f-1
bzrlib/tests/bzrdir_implementations/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
bzrlib/tests/commands/test_push.py test_push.py-20070525122003-gc1ob0ea0nueoqgj-1
bzrlib/tests/http_server.py httpserver.py-20061012142527-m1yxdj1xazsf8d7s-1
bzrlib/tests/test_bzrdir.py test_bzrdir.py-20060131065654-deba40eef51cf220
bzrlib/tests/test_config.py testconfig.py-20051011041908-742d0c15d8d8c8eb
bzrlib/tests/test_delta.py test_delta.py-20070110134455-sqpd1y7mbjndelxf-1
bzrlib/tests/test_diff.py testdiff.py-20050727164403-d1a3496ebb12e339
bzrlib/tests/test_errors.py test_errors.py-20060210110251-41aba2deddf936a8
bzrlib/tests/test_http.py testhttp.py-20051018020158-b2eef6e867c514d9
bzrlib/tests/test_knit.py test_knit.py-20051212171302-95d4c00dd5f11f2b
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_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_rules.py test_properties.py-20080506033501-3p9kmuob25dho8xl-1
bzrlib/tests/test_sftp_transport.py testsftp.py-20051027032739-247570325fec7e7e
bzrlib/tests/test_status.py test_status.py-20060516190614-fbf6432e4a6e8aa5
bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
bzrlib/tests/test_ui.py test_ui.py-20051130162854-458e667a7414af09
bzrlib/tests/tree_implementations/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1
bzrlib/tests/workingtree_implementations/test_move.py test_move.py-20070225171927-mohn2vqj5fx7edc6-1
bzrlib/trace.py trace.py-20050309040759-c8ed824bdcd4748a
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
bzrlib/transport/ftp/__init__.py ftp.py-20051116161804-58dc9506548c2a53
bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
bzrlib/transport/http/ca_bundle.py ca_bundle.py-20070226091335-84kb1xg1r2jjf858-1
bzrlib/transport/http/response.py _response.py-20060613154423-a2ci7hd4iw5c7fnt-1
bzrlib/transport/sftp.py sftp.py-20051019050329-ab48ce71b7e32dfe
bzrlib/tree.py tree.py-20050309040759-9d5f2496be663e77
bzrlib/ui/__init__.py ui.py-20050824083933-8cf663c763ba53a9
bzrlib/ui/text.py text.py-20051130153916-2e438cffc8afc478
bzrlib/upgrade.py history2weaves.py-20050818063535-e7d319791c19a8b2
doc/developers/authentication-ring.txt authring.txt-20070718200437-q5tdik0ne6lor86d-1
doc/developers/index.txt index.txt-20070508041241-qznziunkg0nffhiw-1
setup.py setup.py-20050314065409-02f8a0a6e3f9bc70
tools/win32/build_release.py build_release.py-20081105204355-2ghh5cv01v1x4rzz-1
tools/win32/bzr.iss.cog bzr.iss.cog-20060622100836-b3yup582rt3y0nvm-5
------------------------------------------------------------
revno: 3921.3.9
revision-id: amanic at gmail.com-20090102094753-8h0o3sxfvwz5wv9c
parent: amanic at gmail.com-20090101232107-poye5hxejqgqq0sg
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Fri 2009-01-02 11:47:53 +0200
message:
* add some blackbox tests and another whitebox test
* don't import _parse_revision_str lazily
* remove some unneeded todos I added
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3921.3.8
revision-id: amanic at gmail.com-20090101232107-poye5hxejqgqq0sg
parent: amanic at gmail.com-20090101225617-2ztzo62eb2o02ym8
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Fri 2009-01-02 01:21:07 +0200
message:
* _filter_revs can now handle None and len=3 revs
* fix up the rest of the white box tests
modified:
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3921.3.7
revision-id: amanic at gmail.com-20090101225617-2ztzo62eb2o02ym8
parent: amanic at gmail.com-20090101220822-iopb8ag69ie4auno
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Fri 2009-01-02 00:56:17 +0200
message:
just filter the missing revisions once all have been calculated.
(in stead of trying to be clever and adjust the tip and chaging the
way the enumeration is done, which might even be slower)
modified:
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3921.3.6
revision-id: amanic at gmail.com-20090101220822-iopb8ag69ie4auno
parent: amanic at gmail.com-20090101214606-lak9wejufcjehpm6
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Fri 2009-01-02 00:08:22 +0200
message:
* fix some indentation anomalies in cmd_missing
* note that the `missing` revision filters are inclusive
* some minor white space cleanups
* add some param docstrings for missing.find_unmerged
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
------------------------------------------------------------
revno: 3921.3.5
revision-id: amanic at gmail.com-20090101214606-lak9wejufcjehpm6
parent: amanic at gmail.com-20090101110637-t6d0xytq2gyiquji
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Thu 2009-01-01 23:46:06 +0200
message:
extract graph.is_between from builtins.cmd_tags.run, and test it
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
------------------------------------------------------------
revno: 3921.3.4
revision-id: amanic at gmail.com-20090101110637-t6d0xytq2gyiquji
parent: amanic at gmail.com-20081231223701-u0u20omx4igpnqxd
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Thu 2009-01-01 13:06:37 +0200
message:
add support to filter on local and remote revisions
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
------------------------------------------------------------
revno: 3921.3.3
revision-id: amanic at gmail.com-20081231223701-u0u20omx4igpnqxd
parent: amanic at gmail.com-20081231205214-2uaelv7n6s62wibs
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Thu 2009-01-01 00:37:01 +0200
message:
tried to add `bzr missing -r1..-1` but failed :(
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
------------------------------------------------------------
revno: 3921.3.2
revision-id: amanic at gmail.com-20081231205214-2uaelv7n6s62wibs
parent: amanic at gmail.com-20081231142930-4i3efine315vu0vc
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Wed 2008-12-31 22:52:14 +0200
message:
* rename _get_revid_in_bounds() -> _get_revid_in_range()
* check if the new revid is actually in the branch before using it
* add some more tests for find_unmerged in a range
modified:
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
------------------------------------------------------------
revno: 3921.3.1
revision-id: amanic at gmail.com-20081231142930-4i3efine315vu0vc
parent: pqm at pqm.ubuntu.com-20081229142916-z08eu2alga2acrh6
committer: Marius Kruger <amanic at gmail.com>
branch nick: bzr.missing_revision
timestamp: Wed 2008-12-31 16:29:30 +0200
message:
* add support for specifying a revision range to missing.find_unmerged
* test it
* let `restrict` parameter of TestFindUnmerged.assertUnmerged() default to 'all'
modified:
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
=== modified file 'NEWS'
--- a/NEWS 2009-01-28 21:57:12 +0000
+++ b/NEWS 2009-01-29 05:21:36 +0000
@@ -7,27 +7,6 @@
IN DEVELOPMENT
--------------
- IMPROVEMENTS:
-
- * Progress bars now show the rate of activity for some sftp
- operations, and they are drawn different. (Martin Pool, #172741)
-
- BUG FIXES:
-
- * ``bzr annotate --show-ids`` doesn't give a backtrace on empty files
- anymore.
- (Anne Mohsen, Vincent Ladeuil, #314525)
-
- * There was a bug in how we handled resolving when a file is deleted
- in one branch, and modified in the other. If there was a criss-cross
- merge, we would cause the deletion to conflict a second time.
- (Vincent Ladeuil, John Arbash Meinel)
-
- * There was another bug in how we chose the correct intermediate LCA in
- criss-cross merges leading to several kind of changes be incorrectly
- handled.
- (John Arbash Meinel, Vincent Ladeuil)
-
COMPATIBILITY BREAKS:
* By default, ``bzr status`` after a merge now shows just the pending
@@ -42,6 +21,11 @@
NEW FEATURES:
+ * Add support for filtering `bzr missing` on revisions. Remote revisions
+ can be filtered using `bzr missing -r -20..-10` and local revisions can
+ be filtered using `bzr missing --my-revision -20..-10`.
+ (Marius Kruger)
+
* ``bzr log -p`` displays the patch diff for each revision.
When logging a file, the diff only includes changes to that file.
(Ian Clatworthy, #202331, #227335)
@@ -57,6 +41,9 @@
before the optional ``[merge]`` indicator. For line format,
the tags appear after the date. (Ian Clatworthy)
+ * Progress bars now show the rate of activity for some sftp
+ operations, and they are drawn different. (Martin Pool, #172741)
+
* Rule-based preferences can now accept multiple patterns for a set of
rules. (Marius Kruger)
@@ -66,6 +53,10 @@
BUG FIXES:
+ * ``bzr annotate --show-ids`` doesn't give a backtrace on empty files
+ anymore.
+ (Anne Mohsen, Vincent Ladeuil, #314525)
+
* ``bzr log FILE`` now correctly shows mainline revisions merging
a change to FILE when the ``--short`` and ``--line`` log formats
are used. (Ian Clatworthy, #317417)
@@ -82,6 +73,16 @@
a new ``until_no_eintr`` helper function in ``bzrlib.osutils``.
(Andrew Bennetts)
+ * There was a bug in how we handled resolving when a file is deleted
+ in one branch, and modified in the other. If there was a criss-cross
+ merge, we would cause the deletion to conflict a second time.
+ (Vincent Ladeuil, John Arbash Meinel)
+
+ * There was another bug in how we chose the correct intermediate LCA in
+ criss-cross merges leading to several kind of changes be incorrectly
+ handled.
+ (John Arbash Meinel, Vincent Ladeuil)
+
DOCUMENTATION:
* Improved plugin developer documentation. (Martin Pool)
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py 2009-01-27 23:06:35 +0000
+++ b/bzrlib/builtins.py 2009-01-29 05:21:36 +0000
@@ -55,7 +55,13 @@
""")
from bzrlib.commands import Command, display_command
-from bzrlib.option import ListOption, Option, RegistryOption, custom_help
+from bzrlib.option import (
+ ListOption,
+ Option,
+ RegistryOption,
+ custom_help,
+ _parse_revision_str,
+ )
from bzrlib.trace import mutter, note, warning, is_quiet, get_verbosity_level
@@ -1967,6 +1973,16 @@
'bzr %s --revision takes one or two values.' % command_name)
return rev1, rev2
+
+def _revision_range_to_revid_range(revision_range):
+ rev_id1 = None
+ rev_id2 = None
+ if revision_range[0] is not None:
+ rev_id1 = revision_range[0].rev_id
+ if revision_range[1] is not None:
+ rev_id2 = revision_range[1].rev_id
+ return rev_id1, rev_id2
+
def get_log_format(long=False, short=False, line=False, default='long'):
log_format = default
if long:
@@ -3512,25 +3528,57 @@
class cmd_missing(Command):
"""Show unmerged/unpulled revisions between two branches.
-
+
OTHER_BRANCH may be local or remote.
+
+ To filter on a range of revirions, you can use the command -r begin..end
+ -r revision requests a specific revision, -r ..end or -r begin.. are
+ also valid.
+
+ :Examples:
+
+ Determine the missing revisions between this and the branch at the
+ remembered pull location::
+
+ bzr missing
+
+ Determine the missing revisions between this and another branch::
+
+ bzr missing http://server/branch
+
+ Determine the missing revisions up to a specific revision on the other
+ branch::
+
+ bzr missing -r ..-10
+
+ Determine the missing revisions up to a specific revision on this
+ branch::
+
+ bzr missing --my-revision ..-10
"""
_see_also = ['merge', 'pull']
takes_args = ['other_branch?']
takes_options = [
- Option('reverse', 'Reverse the order of revisions.'),
- Option('mine-only',
- 'Display changes in the local branch only.'),
- Option('this' , 'Same as --mine-only.'),
- Option('theirs-only',
- 'Display changes in the remote branch only.'),
- Option('other', 'Same as --theirs-only.'),
- 'log-format',
- 'show-ids',
- 'verbose',
- Option('include-merges', 'Show merged revisions.'),
- ]
+ Option('reverse', 'Reverse the order of revisions.'),
+ Option('mine-only',
+ 'Display changes in the local branch only.'),
+ Option('this' , 'Same as --mine-only.'),
+ Option('theirs-only',
+ 'Display changes in the remote branch only.'),
+ Option('other', 'Same as --theirs-only.'),
+ 'log-format',
+ 'show-ids',
+ 'verbose',
+ custom_help('revision',
+ help='Filter on other branch revisions (inclusive). '
+ 'See "help revisionspec" for details.'),
+ Option('my-revision',
+ type=_parse_revision_str,
+ help='Filter on local branch revisions (inclusive). '
+ 'See "help revisionspec" for details.'),
+ Option('include-merges', 'Show merged revisions.'),
+ ]
encoding_type = 'replace'
@display_command
@@ -3538,7 +3586,7 @@
theirs_only=False,
log_format=None, long=False, short=False, line=False,
show_ids=False, verbose=False, this=False, other=False,
- include_merges=False):
+ include_merges=False, revision=None, my_revision=None):
from bzrlib.missing import find_unmerged, iter_log_revisions
def message(s):
if not is_quiet():
@@ -3572,6 +3620,15 @@
remote_branch = Branch.open(other_branch)
if remote_branch.base == local_branch.base:
remote_branch = local_branch
+
+ local_revid_range = _revision_range_to_revid_range(
+ _get_revision_range(my_revision, local_branch,
+ self.name()))
+
+ remote_revid_range = _revision_range_to_revid_range(
+ _get_revision_range(revision,
+ remote_branch, self.name()))
+
local_branch.lock_read()
try:
remote_branch.lock_read()
@@ -3579,7 +3636,9 @@
local_extra, remote_extra = find_unmerged(
local_branch, remote_branch, restrict,
backward=not reverse,
- include_merges=include_merges)
+ include_merges=include_merges,
+ local_revid_range=local_revid_range,
+ remote_revid_range=remote_revid_range)
if log_format is None:
registry = log.log_formatter_registry
@@ -4716,10 +4775,7 @@
revid1, revid2 = rev1.rev_id, rev2.rev_id
# only show revisions between revid1 and revid2 (inclusive)
tags = [(tag, revid) for tag, revid in tags if
- (revid2 is None or
- graph.is_ancestor(revid, revid2)) and
- (revid1 is None or
- graph.is_ancestor(revid1, revid))]
+ graph.is_between(revid, revid1, revid2)]
finally:
branch.unlock()
if sort == 'alpha':
=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py 2008-12-12 01:17:04 +0000
+++ b/bzrlib/graph.py 2009-01-01 21:46:06 +0000
@@ -920,6 +920,17 @@
return set([candidate_descendant]) == self.heads(
[candidate_ancestor, candidate_descendant])
+ def is_between(self, revid, lower_bound_revid, upper_bound_revid):
+ """Determine whether a revision is between two others.
+
+ returns true if and only if:
+ lower_bound_revid <= revid <= upper_bound_revid
+ """
+ return ((upper_bound_revid is None or
+ self.is_ancestor(revid, upper_bound_revid)) and
+ (lower_bound_revid is None or
+ self.is_ancestor(lower_bound_revid, revid)))
+
def _search_for_extra_common(self, common, searchers):
"""Make sure that unique nodes are genuinely unique.
=== modified file 'bzrlib/missing.py'
--- a/bzrlib/missing.py 2008-09-11 19:36:38 +0000
+++ b/bzrlib/missing.py 2009-01-01 23:21:07 +0000
@@ -53,7 +53,8 @@
def find_unmerged(local_branch, remote_branch, restrict='all',
- include_merges=False, backward=False):
+ include_merges=False, backward=False,
+ local_revid_range=None, remote_revid_range=None):
"""Find revisions from each side that have not been merged.
:param local_branch: Compare the history of local_branch
@@ -66,7 +67,11 @@
:param include_merges: Show mainline revisions only if False,
all revisions otherwise.
:param backward: Show oldest versions first when True, newest versions
- first when False.
+ first when False.
+ :param local_revid_range: Revision-id range for filtering local_branch
+ revisions (lower bound, upper bound)
+ :param remote_revid_range: Revision-id range for filtering remote_branch
+ revisions (lower bound, upper bound)
:return: A list of [(revno, revision_id)] for the mainline revisions on
each side.
@@ -77,7 +82,9 @@
try:
return _find_unmerged(
local_branch, remote_branch, restrict=restrict,
- include_merges=include_merges, backward=backward)
+ include_merges=include_merges, backward=backward,
+ local_revid_range=local_revid_range,
+ remote_revid_range=remote_revid_range)
finally:
remote_branch.unlock()
finally:
@@ -174,8 +181,16 @@
return revline
+def _filter_revs(graph, revs, revid_range):
+ if revid_range is None or revs is None:
+ return revs
+ return [rev for rev in revs
+ if graph.is_between(rev[1], revid_range[0], revid_range[1])]
+
+
def _find_unmerged(local_branch, remote_branch, restrict,
- include_merges, backward):
+ include_merges, backward,
+ local_revid_range=None, remote_revid_range=None):
"""See find_unmerged.
The branches should already be locked before entering.
@@ -214,7 +229,8 @@
local_revision_id, backward)
remotes = _enumerate_mainline(remote_extra, graph, remote_revno,
remote_revision_id, backward)
- return locals, remotes
+ return _filter_revs(graph, locals, local_revid_range), _filter_revs(graph,
+ remotes, remote_revid_range)
def sorted_revisions(revisions, history_map):
=== modified file 'bzrlib/tests/blackbox/test_missing.py'
--- a/bzrlib/tests/blackbox/test_missing.py 2008-10-17 08:32:52 +0000
+++ b/bzrlib/tests/blackbox/test_missing.py 2009-01-25 00:55:26 +0000
@@ -26,6 +26,13 @@
class TestMissing(TestCaseWithTransport):
+ def assertMessages(self, out, must_have=(), must_not_have=()):
+ """Check if commit messages are in or not in the output"""
+ for m in must_have:
+ self.assertContainsRe(out, r'\nmessage:\n %s\n' % m)
+ for m in must_not_have:
+ self.assertNotContainsRe(out, r'\nmessage:\n %s\n' % m)
+
def test_missing_quiet(self):
# <https://bugs.launchpad.net/bzr/+bug/284748>
# create a source branch
@@ -137,6 +144,40 @@
self.assertEqualDiff('Other branch is up to date.\n',
self.run_bzr('missing ../a --theirs-only')[0])
+ def test_missing_filtered(self):
+ # create a source branch
+ a_tree = self.make_branch_and_tree('a')
+ self.build_tree_contents([('a/a', 'initial\n')])
+ a_tree.add('a')
+ a_tree.commit(message='r1')
+ # clone and add differing revisions
+ b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
+
+ for i in range(2, 6):
+ a_tree.commit(message='a%d' % i)
+ b_tree.commit(message='b%d' % i)
+
+ os.chdir('a')
+ # local
+ out,err = self.run_bzr('missing ../b --my-revision 3', retcode=1)
+ self.assertMessages(out, ('a3', 'b2', 'b3', 'b4', 'b5'), ('a2', 'a4'))
+
+ out,err = self.run_bzr('missing ../b --my-revision 3..4', retcode=1)
+ self.assertMessages(out, ('a3', 'a4'), ('a2', 'a5'))
+
+ #remote
+ out,err = self.run_bzr('missing ../b -r 3', retcode=1)
+ self.assertMessages(out, ('a2', 'a3', 'a4', 'a5', 'b3'), ('b2', 'b4'))
+
+ out,err = self.run_bzr('missing ../b -r 3..4', retcode=1)
+ self.assertMessages(out, ('b3', 'b4'), ('b2', 'b5'))
+
+ #both
+ out,err = self.run_bzr('missing ../b --my-revision 3..4 -r 3..4',
+ retcode=1)
+ self.assertMessages(out, ('a3', 'a4', 'b3', 'b4'),
+ ('a2', 'a5', 'b2', 'b5'))
+
def test_missing_check_last_location(self):
# check that last location shown as filepath not file URL
=== modified file 'bzrlib/tests/test_graph.py'
--- a/bzrlib/tests/test_graph.py 2008-12-11 16:25:46 +0000
+++ b/bzrlib/tests/test_graph.py 2009-01-01 21:46:06 +0000
@@ -698,6 +698,17 @@
instrumented_graph.is_ancestor('rev2a', 'rev2b')
self.assertTrue('null:' not in instrumented_provider.calls)
+ def test_is_between(self):
+ graph = self.make_graph(ancestry_1)
+ self.assertEqual(True, graph.is_between('null:', 'null:', 'null:'))
+ self.assertEqual(True, graph.is_between('rev1', 'null:', 'rev1'))
+ self.assertEqual(True, graph.is_between('rev1', 'rev1', 'rev4'))
+ self.assertEqual(True, graph.is_between('rev4', 'rev1', 'rev4'))
+ self.assertEqual(True, graph.is_between('rev3', 'rev1', 'rev4'))
+ self.assertEqual(False, graph.is_between('rev4', 'rev1', 'rev3'))
+ self.assertEqual(False, graph.is_between('rev1', 'rev2a', 'rev4'))
+ self.assertEqual(False, graph.is_between('null:', 'rev1', 'rev4'))
+
def test_is_ancestor_boundary(self):
"""Ensure that we avoid searching the whole graph.
=== modified file 'bzrlib/tests/test_missing.py'
--- a/bzrlib/tests/test_missing.py 2008-09-12 08:44:07 +0000
+++ b/bzrlib/tests/test_missing.py 2009-01-25 01:03:47 +0000
@@ -138,13 +138,14 @@
class TestFindUnmerged(tests.TestCaseWithTransport):
def assertUnmerged(self, local, remote, local_branch, remote_branch,
- restrict, include_merges=False,
- backward=False):
+ restrict='all', include_merges=False, backward=False,
+ local_revid_range=None, remote_revid_range=None):
"""Check the output of find_unmerged_mainline_revisions"""
local_extra, remote_extra = missing.find_unmerged(
- local_branch, remote_branch, restrict,
- include_merges=include_merges,
- backward=backward)
+ local_branch, remote_branch, restrict,
+ include_merges=include_merges, backward=backward,
+ local_revid_range=local_revid_range,
+ remote_revid_range=remote_revid_range)
self.assertEqual(local, local_extra)
self.assertEqual(remote, remote_extra)
@@ -153,22 +154,24 @@
rev1 = tree.commit('one')
tree.lock_read()
self.addCleanup(tree.unlock)
- self.assertUnmerged([], [], tree.branch, tree.branch, 'all')
+ self.assertUnmerged([], [], tree.branch, tree.branch)
+ self.assertUnmerged([], [], tree.branch, tree.branch,
+ local_revid_range=(rev1, rev1))
def test_one_ahead(self):
tree = self.make_branch_and_tree('tree')
rev1 = tree.commit('one')
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
rev2 = tree2.commit('two')
- self.assertUnmerged([], [('2', rev2)], tree.branch, tree2.branch, 'all')
- self.assertUnmerged([('2', rev2)], [], tree2.branch, tree.branch, 'all')
+ self.assertUnmerged([], [('2', rev2)], tree.branch, tree2.branch)
+ self.assertUnmerged([('2', rev2)], [], tree2.branch, tree.branch)
def test_restrict(self):
tree = self.make_branch_and_tree('tree')
rev1 = tree.commit('one')
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
rev2 = tree2.commit('two')
- self.assertUnmerged([], [('2', rev2)], tree.branch, tree2.branch, 'all')
+ self.assertUnmerged([], [('2', rev2)], tree.branch, tree2.branch)
self.assertUnmerged([], None, tree.branch, tree2.branch, 'local')
self.assertUnmerged(None, [('2', rev2)], tree.branch, tree2.branch,
'remote')
@@ -182,7 +185,11 @@
tree.merge_from_branch(tree2.branch)
rev4 = tree.commit('four')
- self.assertUnmerged([('2', rev4)], [], tree.branch, tree2.branch, 'all')
+ self.assertUnmerged([('2', rev4)], [], tree.branch, tree2.branch)
+ self.assertUnmerged([('2', rev4)], [], tree.branch, tree2.branch,
+ local_revid_range=(rev4, rev4))
+ self.assertUnmerged([], [], tree.branch, tree2.branch,
+ local_revid_range=(rev1, rev1))
def test_include_merges(self):
tree = self.make_branch_and_tree('tree')
@@ -199,17 +206,80 @@
tree2.merge_from_branch(tree3.branch)
rev6 = tree2.commit('six', rev_id='rev6')
- self.assertUnmerged([], [('2', 'rev2', 0), ('3', 'rev3',0 ),
+ self.assertUnmerged([], [('2', 'rev2', 0), ('3', 'rev3', 0),
('4', 'rev6', 0),
('3.1.1', 'rev4', 1), ('3.1.2', 'rev5', 1),
],
- tree.branch, tree2.branch, 'all',
+ tree.branch, tree2.branch,
include_merges=True)
self.assertUnmerged([], [('4', 'rev6', 0),
('3.1.2', 'rev5', 1), ('3.1.1', 'rev4', 1),
- ('3', 'rev3',0 ), ('2', 'rev2', 0),
+ ('3', 'rev3', 0), ('2', 'rev2', 0),
],
- tree.branch, tree2.branch, 'all',
+ tree.branch, tree2.branch,
include_merges=True,
backward=True)
+
+ self.assertUnmerged([], [('4', 'rev6', 0)],
+ tree.branch, tree2.branch,
+ include_merges=True, remote_revid_range=(rev6, rev6))
+
+ self.assertUnmerged([], [('3', 'rev3', 0), ('3.1.1', 'rev4', 1)],
+ tree.branch, tree2.branch,
+ include_merges=True, remote_revid_range=(rev3, rev4))
+
+ self.assertUnmerged([], [('4', 'rev6', 0), ('3.1.2', 'rev5', 1)],
+ tree.branch, tree2.branch,
+ include_merges=True, remote_revid_range=(rev5, rev6))
+
+ def test_revision_range(self):
+ local = self.make_branch_and_tree('local')
+ lrevid1 = local.commit('one')
+ remote = local.bzrdir.sprout('remote').open_workingtree()
+ rrevid2 = remote.commit('two')
+ rrevid3 = remote.commit('three')
+ rrevid4 = remote.commit('four')
+ lrevid2 = local.commit('two')
+ lrevid3 = local.commit('three')
+ lrevid4 = local.commit('four')
+ local_extra = [('2', lrevid2), ('3', lrevid3), ('4', lrevid4)]
+ remote_extra = [('2', rrevid2), ('3', rrevid3), ('4', rrevid4)]
+
+ # control
+ self.assertUnmerged(local_extra, remote_extra,
+ local.branch, remote.branch)
+ self.assertUnmerged(local_extra, remote_extra,
+ local.branch, remote.branch, local_revid_range=(None, None),
+ remote_revid_range=(None, None))
+
+ # exclude local revisions
+ self.assertUnmerged([('2', lrevid2)], remote_extra,
+ local.branch, remote.branch, local_revid_range=(lrevid2, lrevid2))
+ self.assertUnmerged([('2', lrevid2), ('3', lrevid3)], remote_extra,
+ local.branch, remote.branch, local_revid_range=(lrevid2, lrevid3))
+ self.assertUnmerged([('2', lrevid2), ('3', lrevid3)], None,
+ local.branch, remote.branch, 'local',
+ local_revid_range=(lrevid2, lrevid3))
+
+ # exclude remote revisions
+ self.assertUnmerged(local_extra, [('2', rrevid2)],
+ local.branch, remote.branch, remote_revid_range=(None, rrevid2))
+ self.assertUnmerged(local_extra, [('2', rrevid2)],
+ local.branch, remote.branch, remote_revid_range=(lrevid1, rrevid2))
+ self.assertUnmerged(local_extra, [('2', rrevid2)],
+ local.branch, remote.branch, remote_revid_range=(rrevid2, rrevid2))
+ self.assertUnmerged(local_extra, [('2', rrevid2), ('3', rrevid3)],
+ local.branch, remote.branch, remote_revid_range=(None, rrevid3))
+ self.assertUnmerged(local_extra, [('2', rrevid2), ('3', rrevid3)],
+ local.branch, remote.branch, remote_revid_range=(rrevid2, rrevid3))
+ self.assertUnmerged(local_extra, [('3', rrevid3)],
+ local.branch, remote.branch, remote_revid_range=(rrevid3, rrevid3))
+ self.assertUnmerged(None, [('2', rrevid2), ('3', rrevid3)],
+ local.branch, remote.branch, 'remote',
+ remote_revid_range=(rrevid2, rrevid3))
+
+ # exclude local and remote revisions
+ self.assertUnmerged([('3', lrevid3)], [('3', rrevid3)],
+ local.branch, remote.branch, local_revid_range=(lrevid3, lrevid3),
+ remote_revid_range=(rrevid3, rrevid3))
More information about the bazaar-commits
mailing list