Rev 5284: (spiv) Add --directory option to 8 more commands. (Martin von Gagern) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Mon Jun 7 03:38:08 BST 2010
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 5284 [merge]
revision-id: pqm at pqm.ubuntu.com-20100607023804-g0tttwnphcv00q2o
parent: pqm at pqm.ubuntu.com-20100604112653-cq02travi8dfqxo2
parent: andrew.bennetts at canonical.com-20100607011610-jw3z4ekp30ygv1am
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2010-06-07 03:38:04 +0100
message:
(spiv) Add --directory option to 8 more commands. (Martin von Gagern)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/conflicts.py conflicts.py-20051001061850-78ef952ba63d2b42
bzrlib/tests/blackbox/test_conflicts.py test_conflicts.py-20060228151432-9723ebb925b999cf
bzrlib/tests/blackbox/test_merge_directive.py test_merge_directive-20070302012039-zh7uhy39biairtn0-1
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
bzrlib/tests/blackbox/test_shelve.py test_ls_shelf.py-20081202053526-thlo8yt0pi1cgor1-1
bzrlib/tests/blackbox/test_switch.py test_switch.py-20071122111948-0c5en6uz92bwl76h-1
bzrlib/tests/blackbox/test_whoami.py test_whoami.py-20060629025641-8h3m2ch7kutqx7ug-1
=== modified file 'NEWS'
--- a/NEWS 2010-06-04 11:26:53 +0000
+++ b/NEWS 2010-06-07 02:38:04 +0000
@@ -17,6 +17,10 @@
New Features
************
+* Support ``--directory`` option for a number of additional commands:
+ conflicts, merge-directive, missing, resolve, shelve, switch,
+ unshelve, whoami. (Martin von Gagern, #527878)
+
Bug Fixes
*********
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py 2010-06-04 10:10:50 +0000
+++ b/bzrlib/builtins.py 2010-06-07 02:38:04 +0000
@@ -3311,7 +3311,8 @@
bzr whoami "Frank Chu <fchu at example.com>"
"""
- takes_options = [ Option('email',
+ takes_options = [ 'directory',
+ Option('email',
help='Display email address only.'),
Option('branch',
help='Set identity for the current branch instead of '
@@ -3321,13 +3322,16 @@
encoding_type = 'replace'
@display_command
- def run(self, email=False, branch=False, name=None):
+ def run(self, email=False, branch=False, name=None, directory=None):
if name is None:
- # use branch if we're inside one; otherwise global config
- try:
- c = Branch.open_containing('.')[0].get_config()
- except errors.NotBranchError:
- c = config.GlobalConfig()
+ if directory is None:
+ # use branch if we're inside one; otherwise global config
+ try:
+ c = Branch.open_containing(u'.')[0].get_config()
+ except errors.NotBranchError:
+ c = config.GlobalConfig()
+ else:
+ c = Branch.open(directory).get_config()
if email:
self.outf.write(c.user_email() + '\n')
else:
@@ -3343,7 +3347,10 @@
# use global config unless --branch given
if branch:
- c = Branch.open_containing('.')[0].get_config()
+ if directory is None:
+ c = Branch.open_containing(u'.')[0].get_config()
+ else:
+ c = Branch.open(directory).get_config()
else:
c = config.GlobalConfig()
c.set_user_option('email', name)
@@ -4291,6 +4298,7 @@
_see_also = ['merge', 'pull']
takes_args = ['other_branch?']
takes_options = [
+ 'directory',
Option('reverse', 'Reverse the order of revisions.'),
Option('mine-only',
'Display changes in the local branch only.'),
@@ -4318,7 +4326,8 @@
theirs_only=False,
log_format=None, long=False, short=False, line=False,
show_ids=False, verbose=False, this=False, other=False,
- include_merges=False, revision=None, my_revision=None):
+ include_merges=False, revision=None, my_revision=None,
+ directory=u'.'):
from bzrlib.missing import find_unmerged, iter_log_revisions
def message(s):
if not is_quiet():
@@ -4337,7 +4346,7 @@
elif theirs_only:
restrict = 'remote'
- local_branch = Branch.open_containing(u".")[0]
+ local_branch = Branch.open_containing(directory)[0]
self.add_cleanup(local_branch.lock_read().unlock)
parent = local_branch.get_parent()
@@ -5014,6 +5023,7 @@
_see_also = ['send']
takes_options = [
+ 'directory',
RegistryOption.from_kwargs('patch-type',
'The type of patch to include in the directive.',
title='Patch type',
@@ -5032,14 +5042,15 @@
encoding_type = 'exact'
def run(self, submit_branch=None, public_branch=None, patch_type='bundle',
- sign=False, revision=None, mail_to=None, message=None):
+ sign=False, revision=None, mail_to=None, message=None,
+ directory=u'.'):
from bzrlib.revision import ensure_null, NULL_REVISION
include_patch, include_bundle = {
'plain': (False, False),
'diff': (True, False),
'bundle': (True, True),
}[patch_type]
- branch = Branch.open('.')
+ branch = Branch.open(directory)
stored_submit_branch = branch.get_submit_branch()
if submit_branch is None:
submit_branch = stored_submit_branch
@@ -5533,7 +5544,8 @@
"""
takes_args = ['to_location?']
- takes_options = [Option('force',
+ takes_options = ['directory',
+ Option('force',
help='Switch even if local commits will be lost.'),
'revision',
Option('create-branch', short_name='b',
@@ -5542,16 +5554,16 @@
]
def run(self, to_location=None, force=False, create_branch=False,
- revision=None):
+ revision=None, directory=u'.'):
from bzrlib import switch
- tree_location = '.'
+ tree_location = directory
revision = _get_one_revision('switch', revision)
control_dir = bzrdir.BzrDir.open_containing(tree_location)[0]
if to_location is None:
if revision is None:
raise errors.BzrCommandError('You must supply either a'
' revision or a location')
- to_location = '.'
+ to_location = tree_location
try:
branch = control_dir.open_branch()
had_explicit_nick = branch.get_config().has_explicit_nickname()
@@ -5832,6 +5844,7 @@
takes_args = ['file*']
takes_options = [
+ 'directory',
'revision',
Option('all', help='Shelve all changes.'),
'message',
@@ -5846,7 +5859,7 @@
_see_also = ['unshelve']
def run(self, revision=None, all=False, file_list=None, message=None,
- writer=None, list=False, destroy=False):
+ writer=None, list=False, destroy=False, directory=u'.'):
if list:
return self.run_for_list()
from bzrlib.shelf_ui import Shelver
@@ -5854,7 +5867,7 @@
writer = bzrlib.option.diff_writer_registry.get()
try:
shelver = Shelver.from_args(writer(sys.stdout), revision, all,
- file_list, message, destroy=destroy)
+ file_list, message, destroy=destroy, directory=directory)
try:
shelver.run()
finally:
@@ -5888,6 +5901,7 @@
takes_args = ['shelf_id?']
takes_options = [
+ 'directory',
RegistryOption.from_kwargs(
'action', help="The action to perform.",
enum_switch=False, value_switches=True,
@@ -5901,9 +5915,9 @@
]
_see_also = ['shelve']
- def run(self, shelf_id=None, action='apply'):
+ def run(self, shelf_id=None, action='apply', directory=u'.'):
from bzrlib.shelf_ui import Unshelver
- unshelver = Unshelver.from_args(shelf_id, action)
+ unshelver = Unshelver.from_args(shelf_id, action, directory=directory)
try:
unshelver.run()
finally:
=== modified file 'bzrlib/conflicts.py'
--- a/bzrlib/conflicts.py 2010-04-30 11:35:43 +0000
+++ b/bzrlib/conflicts.py 2010-05-28 14:15:28 +0000
@@ -59,13 +59,14 @@
Use bzr resolve when you have fixed a problem.
"""
takes_options = [
+ 'directory',
option.Option('text',
help='List paths of files with text conflicts.'),
]
_see_also = ['resolve', 'conflict-types']
- def run(self, text=False):
- wt = workingtree.WorkingTree.open_containing(u'.')[0]
+ def run(self, text=False, directory=u'.'):
+ wt = workingtree.WorkingTree.open_containing(directory)[0]
for conflict in wt.conflicts():
if text:
if conflict.typestring != 'text conflict':
@@ -112,16 +113,17 @@
aliases = ['resolved']
takes_args = ['file*']
takes_options = [
+ 'directory',
option.Option('all', help='Resolve all conflicts in this tree.'),
ResolveActionOption(),
]
_see_also = ['conflicts']
- def run(self, file_list=None, all=False, action=None):
+ def run(self, file_list=None, all=False, action=None, directory=u'.'):
if all:
if file_list:
raise errors.BzrCommandError("If --all is specified,"
" no FILE may be provided")
- tree = workingtree.WorkingTree.open_containing('.')[0]
+ tree = workingtree.WorkingTree.open_containing(directory)[0]
if action is None:
action = 'done'
else:
=== modified file 'bzrlib/tests/blackbox/test_conflicts.py'
--- a/bzrlib/tests/blackbox/test_conflicts.py 2010-02-10 17:52:08 +0000
+++ b/bzrlib/tests/blackbox/test_conflicts.py 2010-05-28 14:15:28 +0000
@@ -70,6 +70,12 @@
out, err = self.run_bzr('conflicts --text')
self.assertEqual(['my_other_file', 'myfile'], out.splitlines())
+ def test_conflicts_directory(self):
+ """Test --directory option"""
+ out, err = self.run_bzr('conflicts --directory a', working_dir='.')
+ self.assertEqual(3, len(out.splitlines()))
+ self.assertEqual('', err)
+
class TestResolve(TestConflictsBase):
@@ -113,3 +119,10 @@
self.build_tree_contents([('tree/file', 'a\n')])
note = self.run_bzr('resolve', working_dir='tree')[1]
self.assertContainsRe(note, 'All conflicts resolved.')
+
+ def test_resolve_all_directory(self):
+ """Test --directory option"""
+ out, err = self.run_bzr('resolve --all -d a', working_dir='.')
+ self.assertEqual('', err)
+ out, err = self.run_bzr('conflicts')
+ self.assertEqual(0, len(out.splitlines()))
=== modified file 'bzrlib/tests/blackbox/test_merge_directive.py'
--- a/bzrlib/tests/blackbox/test_merge_directive.py 2009-03-23 14:59:43 +0000
+++ b/bzrlib/tests/blackbox/test_merge_directive.py 2010-05-28 14:15:28 +0000
@@ -248,3 +248,15 @@
tree1, tree2 = self.prepare_merge_directive()
tree1.commit(u'messag\xe9')
self.run_bzr('merge-directive ../tree2') # no exception raised
+
+ def test_merge_directive_directory(self):
+ """Test --directory option"""
+ import re
+ re_timestamp = re.compile(r'^# timestamp: .*', re.M)
+ self.prepare_merge_directive()
+ md1 = self.run_bzr('merge-directive ../tree2')[0]
+ md1 = re_timestamp.sub('# timestamp: XXX', md1)
+ os.chdir('..')
+ md2 = self.run_bzr('merge-directive --directory tree1 tree2')[0]
+ md2 = re_timestamp.sub('# timestamp: XXX', md2)
+ self.assertEqualDiff(md1.replace('../tree2', 'tree2'), md2)
=== modified file 'bzrlib/tests/blackbox/test_missing.py'
--- a/bzrlib/tests/blackbox/test_missing.py 2009-03-23 14:59:43 +0000
+++ b/bzrlib/tests/blackbox/test_missing.py 2010-05-28 14:15:28 +0000
@@ -200,3 +200,23 @@
'Branches are up to date.\n' % location,
lines)
self.assertEquals('', err)
+
+ def test_missing_directory(self):
+ """Test --directory option"""
+
+ # 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='initial')
+
+ # clone and add a differing revision
+ b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
+ self.build_tree_contents([('b/a', 'initial\nmore\n')])
+ b_tree.commit(message='more')
+
+ out2, err2 = self.run_bzr('missing --directory a b', retcode=1)
+ os.chdir('a')
+ out1, err1 = self.run_bzr('missing ../b', retcode=1)
+ self.assertEqualDiff(out1, out2)
+ self.assertEqualDiff(err1, err2)
=== modified file 'bzrlib/tests/blackbox/test_shelve.py'
--- a/bzrlib/tests/blackbox/test_shelve.py 2010-05-20 18:23:17 +0000
+++ b/bzrlib/tests/blackbox/test_shelve.py 2010-05-28 14:15:28 +0000
@@ -97,3 +97,18 @@
tree.add('file')
os.chdir('tree/dir')
self.run_bzr('shelve --all ../file')
+
+
+class TestShelveUnshelve(TestCaseWithTransport):
+
+ def test_directory(self):
+ """Test --directory option"""
+ tree = self.make_branch_and_tree('tree')
+ self.build_tree_contents([('tree/a', 'initial\n')])
+ tree.add('a')
+ tree.commit(message='committed')
+ self.build_tree_contents([('tree/a', 'initial\nmore\n')])
+ self.run_bzr('shelve -d tree --all')
+ self.assertFileEqual('initial\n', 'tree/a')
+ self.run_bzr('unshelve --directory tree')
+ self.assertFileEqual('initial\nmore\n', 'tree/a')
=== modified file 'bzrlib/tests/blackbox/test_switch.py'
--- a/bzrlib/tests/blackbox/test_switch.py 2010-04-28 07:53:34 +0000
+++ b/bzrlib/tests/blackbox/test_switch.py 2010-05-28 14:15:28 +0000
@@ -252,3 +252,21 @@
self.assertLength(0, calls)
out, err = self.run_bzr('switch ../branch2')
self.assertLength(1, calls)
+
+ def test_switch_lightweight_directory(self):
+ """Test --directory option"""
+
+ # 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='initial')
+
+ # clone and add a differing revision
+ b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
+ self.build_tree_contents([('b/a', 'initial\nmore\n')])
+ b_tree.commit(message='more')
+
+ self.run_bzr('checkout --lightweight a checkout')
+ self.run_bzr('switch --directory checkout b')
+ self.assertFileEqual('initial\nmore\n', 'checkout/a')
=== modified file 'bzrlib/tests/blackbox/test_whoami.py'
--- a/bzrlib/tests/blackbox/test_whoami.py 2010-04-27 17:09:48 +0000
+++ b/bzrlib/tests/blackbox/test_whoami.py 2010-06-07 01:16:10 +0000
@@ -20,8 +20,10 @@
import os
import bzrlib
-from bzrlib import osutils
-from bzrlib.branch import Branch
+from bzrlib import (
+ osutils,
+ config,
+ )
from bzrlib.tests.blackbox import ExternalBase
@@ -43,45 +45,29 @@
b = bzrlib.branch.Branch.open('.')
b.get_config().set_user_option('email',
'Branch Identity <branch at identi.ty>')
- bzr_email = os.environ.get('BZR_EMAIL')
- if bzr_email is not None:
- del os.environ['BZR_EMAIL']
- try:
- whoami = self.run_bzr("whoami")[0]
- self.assertEquals('Branch Identity <branch at identi.ty>\n', whoami)
- whoami_email = self.run_bzr("whoami --email")[0]
- self.assertEquals('branch at identi.ty\n', whoami_email)
+ whoami = self.run_bzr("whoami")[0]
+ self.assertEquals('Branch Identity <branch at identi.ty>\n', whoami)
+ whoami_email = self.run_bzr("whoami --email")[0]
+ self.assertEquals('branch at identi.ty\n', whoami_email)
- # Verify that the environment variable overrides the value
- # in the file
- os.environ['BZR_EMAIL'] = 'Different ID <other at environ.ment>'
- whoami = self.run_bzr("whoami")[0]
- self.assertEquals('Different ID <other at environ.ment>\n', whoami)
- whoami_email = self.run_bzr("whoami --email")[0]
- self.assertEquals('other at environ.ment\n', whoami_email)
- del os.environ['BZR_EMAIL']
- finally:
- if bzr_email is not None:
- os.environ['BZR_EMAIL'] = bzr_email
+ # Verify that the environment variable overrides the value
+ # in the file
+ os.environ['BZR_EMAIL'] = 'Different ID <other at environ.ment>'
+ whoami = self.run_bzr("whoami")[0]
+ self.assertEquals('Different ID <other at environ.ment>\n', whoami)
+ whoami_email = self.run_bzr("whoami --email")[0]
+ self.assertEquals('other at environ.ment\n', whoami_email)
def test_whoami_utf8(self):
"""verify that an identity can be in utf-8."""
wt = self.make_branch_and_tree('.')
self.run_bzr(['whoami', u'Branch Identity \u20ac <branch at identi.ty>'],
encoding='utf-8')
- bzr_email = os.environ.get('BZR_EMAIL')
- if bzr_email is not None:
- del os.environ['BZR_EMAIL']
- try:
- whoami = self.run_bzr("whoami", encoding='utf-8')[0]
- self.assertEquals('Branch Identity \xe2\x82\xac ' +
- '<branch at identi.ty>\n', whoami)
- whoami_email = self.run_bzr("whoami --email",
- encoding='utf-8')[0]
- self.assertEquals('branch at identi.ty\n', whoami_email)
- finally:
- if bzr_email is not None:
- os.environ['BZR_EMAIL'] = bzr_email
+ whoami = self.run_bzr("whoami", encoding='utf-8')[0]
+ self.assertEquals('Branch Identity \xe2\x82\xac ' +
+ '<branch at identi.ty>\n', whoami)
+ whoami_email = self.run_bzr("whoami --email", encoding='utf-8')[0]
+ self.assertEquals('branch at identi.ty\n', whoami_email)
def test_whoami_ascii(self):
"""
@@ -92,18 +78,10 @@
b = bzrlib.branch.Branch.open('.')
b.get_config().set_user_option('email', u'Branch Identity \u20ac ' +
'<branch at identi.ty>')
- bzr_email = os.environ.get('BZR_EMAIL')
- if bzr_email is not None:
- del os.environ['BZR_EMAIL']
- try:
- whoami = self.run_bzr("whoami", encoding='ascii')[0]
- self.assertEquals('Branch Identity ? <branch at identi.ty>\n', whoami)
- whoami_email = self.run_bzr("whoami --email",
- encoding='ascii')[0]
- self.assertEquals('branch at identi.ty\n', whoami_email)
- finally:
- if bzr_email is not None:
- os.environ['BZR_EMAIL'] = bzr_email
+ whoami = self.run_bzr("whoami", encoding='ascii')[0]
+ self.assertEquals('Branch Identity ? <branch at identi.ty>\n', whoami)
+ whoami_email = self.run_bzr("whoami --email", encoding='ascii')[0]
+ self.assertEquals('branch at identi.ty\n', whoami_email)
def test_warning(self):
"""verify that a warning is displayed if no email is given."""
@@ -120,3 +98,39 @@
osutils.set_or_unset_env('BZR_EMAIL', None)
out, err = self.run_bzr(['whoami'], 3)
self.assertContainsRe(err, 'Unable to determine your name')
+
+ def test_whoami_directory(self):
+ """Test --directory option."""
+ wt = self.make_branch_and_tree('subdir')
+ c = wt.branch.get_config()
+ c.set_user_option('email', 'Branch Identity <branch at identi.ty>')
+ out, err = self.run_bzr("whoami --directory subdir")
+ self.assertEquals('Branch Identity <branch at identi.ty>\n', out)
+ self.run_bzr(['whoami', '--directory', 'subdir', '--branch',
+ 'Changed Identity <changed at identi.ty>'])
+ self.assertEquals('Changed Identity <changed at identi.ty>',
+ c.get_user_option('email'))
+
+ def test_whoami_remote_directory(self):
+ """Test --directory option with a remote directory."""
+ wt = self.make_branch_and_tree('subdir')
+ c = wt.branch.get_config()
+ c.set_user_option('email', 'Branch Identity <branch at identi.ty>')
+ url = self.get_readonly_url() + '/subdir'
+ out, err = self.run_bzr(['whoami', '--directory', url])
+ self.assertEquals('Branch Identity <branch at identi.ty>\n', out)
+ url = self.get_url('subdir')
+ self.run_bzr(['whoami', '--directory', url, '--branch',
+ 'Changed Identity <changed at identi.ty>'])
+ # The identity has been set in the branch config (but not the global
+ # config)
+ self.assertEquals('Changed Identity <changed at identi.ty>',
+ c.get_user_option('email'))
+ global_conf = config.GlobalConfig()
+ self.assertEquals(None, global_conf.get_user_option('email'))
+
+ def test_whoami_nonbranch_directory(self):
+ """Test --directory mentioning a non-branch directory."""
+ wt = self.build_tree(['subdir/'])
+ out, err = self.run_bzr("whoami --directory subdir", retcode=3)
+ self.assertContainsRe(err, 'ERROR: Not a branch')
More information about the bazaar-commits
mailing list