Skip to content

Commit

Permalink
Merge branch 'sendchange_vc_option' of git://github.com/dzhurley/buil…
Browse files Browse the repository at this point in the history
…dbot

* 'sendchange_vc_option' of git://github.com/dzhurley/buildbot:
  added --vc option to `buildbot sendchange`
  • Loading branch information
djmitche committed Aug 9, 2011
2 parents e39e7c1 + 0cface8 commit 512a46c
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 17 deletions.
5 changes: 3 additions & 2 deletions master/buildbot/clients/sendchange.py
Expand Up @@ -26,7 +26,8 @@ def __init__(self, master, auth=('change','changepw'), encoding='utf8'):
self.encoding = encoding

def send(self, branch, revision, comments, files, who=None, category=None,
when=None, properties={}, repository='', project='', revlink=''):
when=None, properties={}, repository='', vc=None, project='',
revlink=''):
change = {'project': project, 'repository': repository, 'who': who,
'files': files, 'comments': comments, 'branch': branch,
'revision': revision, 'category': category, 'when': when,
Expand All @@ -45,7 +46,7 @@ def send(self, branch, revision, comments, files, who=None, category=None,
reactor.connectTCP(self.host, self.port, f)

def call_addChange(remote):
d = remote.callRemote('addChange', change)
d = remote.callRemote('addChange', change, src=vc)
d.addCallback(lambda res: remote.broker.transport.loseConnection())
return d
d.addCallback(call_addChange)
Expand Down
10 changes: 9 additions & 1 deletion master/buildbot/scripts/runner.py
Expand Up @@ -820,6 +820,8 @@ def __init__(self):
("auth", "a", None, "Authentication token - username:password, or prompt for password"),
("who", "W", None, "Author of the commit"),
("repository", "R", '', "Repository specifier"),
("vc", "s", None, "The VC system in use, one of: cvs, svn, darcs, hg, "
"bzr, git, mtn, p4"),
("project", "P", '', "Project specifier"),
("branch", "b", None, "Branch specifier"),
("category", "C", None, "Category of repository"),
Expand All @@ -843,6 +845,7 @@ def __init__(self):
[ 'username', 'username' ],
[ 'branch', 'branch' ],
[ 'category', 'category' ],
[ 'vc', 'vc' ],
]

def getSynopsis(self):
Expand Down Expand Up @@ -871,6 +874,7 @@ def sendchange(config, runReactor=False):
revision = config.get('revision')
properties = config.get('properties', {})
repository = config.get('repository', '')
vc = config.get('vc', None)
project = config.get('project', '')
revlink = config.get('revlink', '')
if config.get('when'):
Expand All @@ -892,6 +896,10 @@ def sendchange(config, runReactor=False):

files = config.get('files', ())

vcs = ['cvs', 'svn', 'darcs', 'hg', 'bzr', 'git', 'mtn', 'p4', None]
assert vc in vcs, "vc must be 'cvs', 'svn', 'darcs', 'hg', 'bzr', " \
"'git', 'mtn', or 'p4'"

# fix up the auth with a password if none was given
if not auth:
auth = 'change:changepw'
Expand All @@ -906,7 +914,7 @@ def sendchange(config, runReactor=False):

s = sendchange.Sender(master, auth, encoding=encoding)
d = s.send(branch, revision, comments, files, who=who, category=category, when=when,
properties=properties, repository=repository, project=project,
properties=properties, repository=repository, vc=vc, project=project,
revlink=revlink)

if runReactor:
Expand Down
14 changes: 8 additions & 6 deletions master/buildbot/test/unit/test_clients_sendchange.py
Expand Up @@ -40,6 +40,7 @@ def setUp(self):
self.conn_host = self.conn_port = None
self.lostConnection = False
self.added_changes = []
self.vc_used = None

def _fake_PBClientFactory(self):
return self.factory
Expand All @@ -54,19 +55,20 @@ def _fake_connectTCP(self, host, port, factory):
self.assertIdentical(factory, self.factory)
self.factory.login_d.callback(self.remote)

def _fake_callRemote(self, method, change):
def _fake_callRemote(self, method, change, src):
self.assertEqual(method, 'addChange')
self.added_changes.append(change)
self.vc_used = src
return defer.succeed(None)

def _fake_loseConnection(self):
self.lostConnection = True

def assertProcess(self, host, port, username, password, changes):
self.assertEqual([host, port, username, password, changes],
def assertProcess(self, host, port, username, password, changes, vc=None):
self.assertEqual([host, port, username, password, changes, vc],
[ self.conn_host, self.conn_port,
self.creds.username, self.creds.password,
self.added_changes])
self.added_changes, self.vc_used])

def test_send_minimal(self):
s = sendchange.Sender('localhost:1234')
Expand All @@ -93,14 +95,14 @@ def check(_):
def test_send_full(self):
s = sendchange.Sender('localhost:1234')
d = s.send('branch', 'rev', 'comm', ['a'], who='me', category='cats',
when=1234, properties={'a':'b'}, repository='r',
when=1234, properties={'a':'b'}, repository='r', vc='git',
project='p', revlink='rl')
def check(_):
self.assertProcess('localhost', 1234, 'change', 'changepw', [
dict(project='p', repository='r', who='me', files=['a'],
comments='comm', branch='branch', revision='rev',
category='cats', when=1234, properties={'a':'b'},
revlink='rl')])
revlink='rl')], vc='git')
d.addCallback(check)
return d

Expand Down
29 changes: 21 additions & 8 deletions master/buildbot/test/unit/test_scripts_runner.py
Expand Up @@ -52,7 +52,7 @@ def test_synopsis(self):

def test_defaults(self):
opts = self.parse()
exp = dict(master=None, auth=None, who=None,
exp = dict(master=None, auth=None, who=None, vc=None,
repository='', project='', branch=None, category=None,
revision=None, revision_file=None, property=None,
comments=None, logfile=None, when=None, revlink='',
Expand All @@ -78,21 +78,21 @@ def test_config_file(self):
self.assertOptions(opts, exp)

def test_short_args(self):
opts = self.parse(*('-m m -a a -W w -R r -P p -b b ' +
opts = self.parse(*('-m m -a a -W w -R r -P p -b b -s s ' +
'-C c -r r -p pn:pv -c c -F f -w w -l l -e e').split())
exp = dict(master='m', auth='a', who='w', repository='r', project='p',
branch='b', category='c', revision='r',
branch='b', category='c', revision='r', vc='s',
properties=dict(pn='pv'), comments='c', logfile='f', when='w',
revlink='l', encoding='e')
self.assertOptions(opts, exp)

def test_long_args(self):
opts = self.parse(*('--master m --auth a --who w --repository r ' +
'--project p --branch b --category c --revision r ' +
'--project p --branch b --category c --revision r --vc s ' +
'--revision_file rr --property pn:pv --comments c --logfile f ' +
'--when w --revlink l --encoding e').split())
exp = dict(master='m', auth='a', who='w', repository='r', project='p',
branch='b', category='c', revision='r', revision_file='rr',
branch='b', category='c', revision='r', vc='s', revision_file='rr',
properties=dict(pn='pv'), comments='c', logfile='f', when='w',
revlink='l', encoding='e')
self.assertOptions(opts, exp)
Expand Down Expand Up @@ -145,7 +145,8 @@ def check(_):
'revision': None,
'revlink': '',
'when': None,
'who': 'me'}))
'who': 'me',
'vc': None}))
# nothing to stdout
self.assertEqual(self.stdout.getvalue(), '')
d.addCallback(check)
Expand All @@ -154,7 +155,7 @@ def check(_):
def test_sendchange_args(self):
d = runner.sendchange(dict(encoding='utf16', who='me', auth='a:b',
master='a:1', branch='br', category='cat', revision='rr',
properties={'a':'b'}, repository='rep', project='prj',
properties={'a':'b'}, repository='rep', project='prj', vc='git',
revlink='rl', when='1234', comments='comm', files=('a', 'b')))
def check(_):
self.assertEqual((self.sender.master, self.sender.auth,
Expand All @@ -170,7 +171,8 @@ def check(_):
'revision': 'rr',
'revlink': 'rl',
'when': 1234.0,
'who': 'me'}))
'who': 'me',
'vc': 'git'}))
self.assertEqual(self.stdout.getvalue(), '')
d.addCallback(check)
return d
Expand Down Expand Up @@ -232,6 +234,17 @@ def check(_):
d.addCallback(check)
return d

def test_sendchange_bad_vc(self):
d = defer.maybeDeferred(lambda :
runner.sendchange(dict(master='a:1', who="abc", vc="blargh")))
def cb(_):
self.fail("shouldn't succeed")
def eb(f):
f.trap(AssertionError)
pass # A-OK
d.addCallbacks(cb, eb)
return d

def test_sendchange_auth_prompt(self):
self.patch(getpass, 'getpass', lambda prompt : 'sekrit')
d = runner.sendchange(dict(who='me', master='a:1', auth='user'))
Expand Down
4 changes: 4 additions & 0 deletions master/docs/manual/cmdline.rst
Expand Up @@ -541,6 +541,10 @@ arguments which can influence the ``Change`` that gets submitted:
Specifies the character encoding for all other parameters,
defaulting to ``'utf8'``.

--vc
Specifies which VC system the Change is coming from, one of: ``cvs``,
``svn``, ``darcs``, ``hg``, ``bzr``, ``git``, ``mtn``, or ``p4``.
Defaults to ``None``.

.. _debugclient:

Expand Down

0 comments on commit 512a46c

Please sign in to comment.