diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index d20539590a..6a16b379be 100755 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -3903,19 +3903,23 @@ For CI problems and help debugging, contact ci@example.org""" "Test cross-repo dependencies in multiple branches" A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A') B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B') - C = self.fake_gerrit.addFakeChange('org/project2', 'mp', 'C') - C.data['id'] = B.data['id'] + C1 = self.fake_gerrit.addFakeChange('org/project2', 'mp', 'C1') + C2 = self.fake_gerrit.addFakeChange('org/project2', 'mp', 'C2', + status="ABANDONED") + C1.data['id'] = B.data['id'] + C2.data['id'] = B.data['id'] + A.addApproval('CRVW', 2) B.addApproval('CRVW', 2) - C.addApproval('CRVW', 2) + C1.addApproval('CRVW', 2) - # A Depends-On: B+C + # A Depends-On: B+C1 A.data['commitMessage'] = '%s\n\nDepends-On: %s\n' % ( A.subject, B.data['id']) self.worker.hold_jobs_in_build = True B.addApproval('APRV', 1) - C.addApproval('APRV', 1) + C1.addApproval('APRV', 1) self.fake_gerrit.addEvent(A.addApproval('APRV', 1)) self.waitUntilSettled() @@ -3931,10 +3935,10 @@ For CI problems and help debugging, contact ci@example.org""" self.assertEqual(A.data['status'], 'MERGED') self.assertEqual(B.data['status'], 'MERGED') - self.assertEqual(C.data['status'], 'MERGED') + self.assertEqual(C1.data['status'], 'MERGED') self.assertEqual(A.reported, 2) self.assertEqual(B.reported, 2) - self.assertEqual(C.reported, 2) + self.assertEqual(C1.reported, 2) self.assertEqual(self.getJobFromHistory('project1-merge').changes, '2,1 3,1 1,1') diff --git a/zuul/source/gerrit.py b/zuul/source/gerrit.py index 828e201ca1..fa495056cb 100644 --- a/zuul/source/gerrit.py +++ b/zuul/source/gerrit.py @@ -295,6 +295,9 @@ class GerritSource(BaseSource): # cycle, we won't detect it. By explicitly performing a # walk of the dependency tree, we will. detect_cycle(dep, history) + # This is a git commit dependency. So we only ignore it if it is + # already merged. So even if it is "ABANDONED", we should not + # ignore it. if (not dep.is_merged) and dep not in needs_changes: needs_changes.append(dep) @@ -315,7 +318,7 @@ class GerritSource(BaseSource): # cycle, we won't detect it. By explicitly performing a # walk of the dependency tree, we will. detect_cycle(dep, history) - if (not dep.is_merged) and dep not in needs_changes: + if dep.open and dep not in needs_changes: needs_changes.append(dep) change.needs_changes = needs_changes @@ -327,7 +330,7 @@ class GerritSource(BaseSource): self.log.debug("Updating %s: Getting git-needed change %s,%s" % (change, dep_num, dep_ps)) dep = self._getChange(dep_num, dep_ps) - if (not dep.is_merged) and dep.is_current_patchset: + if dep.open and dep.is_current_patchset: needed_by_changes.append(dep) for record in self._getNeededByFromCommit(data['id'], change): @@ -340,7 +343,7 @@ class GerritSource(BaseSource): # reference the latest patchset of its Depends-On (this # change). dep = self._getChange(dep_num, dep_ps, refresh=True) - if (not dep.is_merged) and dep.is_current_patchset: + if dep.open and dep.is_current_patchset: needed_by_changes.append(dep) change.needed_by_changes = needed_by_changes