Make pushing zuul refs upstream optional.

And the default -- so that Zuul doesn't need any special gerrit
privileges to run out of the box.

Change-Id: I36411b299c8363d509498ece8ea21f88665ca39a
Reviewed-on: https://review.openstack.org/11589
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Approved: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
diff --git a/tests/fixtures/zuul.conf b/tests/fixtures/zuul.conf
index 916cddd..6df15c0 100644
--- a/tests/fixtures/zuul.conf
+++ b/tests/fixtures/zuul.conf
@@ -11,3 +11,4 @@
 [zuul]
 layout_config=layout.yaml
 git_dir=/tmp/zuul-test/git
+push_change_refs=true
diff --git a/zuul/merger.py b/zuul/merger.py
index 2719346..aa640e5 100644
--- a/zuul/merger.py
+++ b/zuul/merger.py
@@ -84,12 +84,13 @@
 class Merger(object):
     log = logging.getLogger("zuul.Merger")
 
-    def __init__(self, trigger, working_root):
+    def __init__(self, trigger, working_root, push_refs):
         self.trigger = trigger
         self.repos = {}
         self.working_root = working_root
         if not os.path.exists(working_root):
             os.makedirs(working_root)
+        self.push_refs = push_refs
 
     def addProject(self, project, url):
         try:
@@ -145,19 +146,20 @@
                 self.log.info("Unable to merge %s" % change)
                 return False
 
-        # Push the results upstream to the zuul ref
-        for project, branches in projects.items():
-            repo = self.getRepo(project)
-            for branch in branches:
-                ref = 'refs/zuul/' + branch + '/' + target_ref
-                try:
-                    repo.push(ref, ref)
-                    complete = self.trigger.waitForRefSha(project, ref)
-                except:
-                    self.log.exception("Unable to push %s" % ref)
-                    return False
-                if not complete:
-                    self.log.error("Ref %s did not show up in repo" % ref)
-                    return False
+        if self.push_refs:
+            # Push the results upstream to the zuul ref
+            for project, branches in projects.items():
+                repo = self.getRepo(project)
+                for branch in branches:
+                    ref = 'refs/zuul/' + branch + '/' + target_ref
+                    try:
+                        repo.push(ref, ref)
+                        complete = self.trigger.waitForRefSha(project, ref)
+                    except:
+                        self.log.exception("Unable to push %s" % ref)
+                        return False
+                    if not complete:
+                        self.log.error("Ref %s did not show up in repo" % ref)
+                        return False
 
         return True
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 4ef7fea..3f0289a 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -163,7 +163,11 @@
             merge_root = self.config.get('zuul', 'git_dir')
         else:
             merge_root = '/var/lib/zuul/git'
-        self.merger = merger.Merger(self.trigger, merge_root)
+        if self.config.has_option('zuul', 'push_change_refs'):
+            push_refs = self.config.getboolean('zuul', 'push_change_refs')
+        else:
+            push_refs = False
+        self.merger = merger.Merger(self.trigger, merge_root, push_refs)
         for project in self.projects.values():
             url = self.trigger.getGitUrl(project)
             self.merger.addProject(project, url)