diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2014-08-08 23:05:10 +0100 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2014-08-12 11:00:08 +0100 |
commit | 1aaa11a10d03202063e15b6dd0a3b5217de51fc2 (patch) | |
tree | c22e953272e9cac2e15b03856028500792c0e3fe /morphlib/plugins/deploy_plugin.py | |
parent | 1a6fb660b94228745efc4543138b9dc1fa50e912 (diff) | |
download | morph-1aaa11a10d03202063e15b6dd0a3b5217de51fc2.tar.gz |
Turn BuildBranch methods into regular functions
Previously they were generator functions, which yielded interesting
context at interesting times so that the caller could respond by
printing status messages.
The only benefits this had over callbacks were:
1. 1 fewer function scope to worry about. I don't have data on the
amount of memory used for a function scope vs a generator, but it
could be less cognitive load for determining which variables are
defined in the callback's body.
2. It is possible to yield in the caller, so you could make that into a
coroutine too, however this wasn't required in this case, as the
yielded value was intended to be informational.
The downsides to this are:
1. It's a rather peculiar construct, so can be difficult to understand
what's going on, and the implications, which led to
2. If you call the function, but don't use the iterator it returned,
then it won't do anything, which is very confusing indeed, if you're
not used to how generator functions work.
Diffstat (limited to 'morphlib/plugins/deploy_plugin.py')
-rw-r--r-- | morphlib/plugins/deploy_plugin.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/morphlib/plugins/deploy_plugin.py b/morphlib/plugins/deploy_plugin.py index 38c17bc2..99ca6fc3 100644 --- a/morphlib/plugins/deploy_plugin.py +++ b/morphlib/plugins/deploy_plugin.py @@ -322,27 +322,31 @@ class DeployPlugin(cliapp.Plugin): bb = morphlib.buildbranch.BuildBranch(sb, build_ref_prefix, push_temporary=False) with contextlib.closing(bb) as bb: - - for gd, build_ref in bb.add_uncommitted_changes(): + def report_add(gd, build_ref, changed): self.app.status(msg='Adding uncommitted changes '\ 'in %(dirname)s to %(ref)s', dirname=gd.dirname, ref=build_ref, chatty=True) + bb.add_uncommitted_changes(add_cb=report_add) - for gd in bb.inject_build_refs(loader): + def report_inject(gd): self.app.status(msg='Injecting temporary build refs '\ 'into morphologies in %(dirname)s', dirname=gd.dirname, chatty=True) + bb.inject_build_refs(loader, inject_cb=report_inject) - for gd, build_ref in bb.update_build_refs(name, email, build_uuid): + def report_commit(gd, build_ref): self.app.status(msg='Committing changes in %(dirname)s '\ 'to %(ref)s', dirname=gd.dirname, ref=build_ref, chatty=True) + bb.update_build_refs(name, email, build_uuid, + commit_cb=report_commit) - for gd, build_ref, remote in bb.push_build_branches(): + def report_push(gd, build_ref, remote, refspec): self.app.status(msg='Pushing %(ref)s in %(dirname)s '\ 'to %(remote)s', ref=build_ref, dirname=gd.dirname, remote=remote.get_push_url(), chatty=True) + bb.push_build_branches(push_cb=report_push) # Create a tempdir for this deployment to work in deploy_tempdir = tempfile.mkdtemp( |