Add precedence to merge jobs

When creating a merge job, give it the precedence of the associated
pipeline.

Change-Id: I96c6a942a08f603ae7cce442427ae171d7e76d78
diff --git a/zuul/merger/client.py b/zuul/merger/client.py
index 72fd4c5..8c41563 100644
--- a/zuul/merger/client.py
+++ b/zuul/merger/client.py
@@ -18,6 +18,8 @@
 
 import gear
 
+import zuul.model
+
 
 def getJobData(job):
     if not len(job.data):
@@ -79,23 +81,26 @@
             return True
         return False
 
-    def submitJob(self, name, data, build_set):
+    def submitJob(self, name, data, build_set,
+                  precedence=zuul.model.PRECEDENCE_NORMAL):
         uuid = str(uuid4().hex)
         self.log.debug("Submitting job %s with data %s" % (name, data))
         job = gear.Job(name,
                        json.dumps(data),
                        unique=uuid)
         self.build_sets[uuid] = build_set
-        self.gearman.submitJob(job)
+        self.gearman.submitJob(job, precedence=precedence)
 
-    def mergeChanges(self, items, build_set):
+    def mergeChanges(self, items, build_set,
+                     precedence=zuul.model.PRECEDENCE_NORMAL):
         data = dict(items=items)
-        self.submitJob('merger:merge', data, build_set)
+        self.submitJob('merger:merge', data, build_set, precedence)
 
-    def updateRepo(self, project, url, build_set):
+    def updateRepo(self, project, url, build_set,
+                   precedence=zuul.model.PRECEDENCE_NORMAL):
         data = dict(project=project,
                     url=url)
-        self.submitJob('merger:update', data, build_set)
+        self.submitJob('merger:update', data, build_set, precedence)
 
     def onBuildCompleted(self, job):
         build_set = self.build_sets.get(job.unique)
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index d6c51e2..9effcb8 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -1222,12 +1222,14 @@
             all_items = dependent_items + [item]
             merger_items = map(self._makeMergerItem, all_items)
             self.sched.merger.mergeChanges(merger_items,
-                                           item.current_build_set)
+                                           item.current_build_set,
+                                           self.pipeline.precedence)
         else:
             self.log.debug("Preparing update repo for: %s" % item.change)
             url = self.pipeline.source.getGitUrl(item.change.project)
             self.sched.merger.updateRepo(item.change.project.name,
-                                         url, build_set)
+                                         url, build_set,
+                                         self.pipeline.precedence)
         return False
 
     def _launchJobs(self, item, jobs):