Merge "Only return the latest config for project-branch"

This commit is contained in:
Zuul 2024-03-11 10:57:17 +00:00 committed by Gerrit Code Review
commit 239a4b9142
2 changed files with 21 additions and 27 deletions

View File

@ -921,30 +921,23 @@ class TestMerger(ZuulTestCase):
result = merger.mergeChanges([item_a, item_b], files=files, dirs=dirs)
self.assertIsNotNone(result)
hexsha, read_files, repo_state, ret_recent, orig_commit = result
self.assertEqual(len(read_files), 2)
self.assertEqual(len(read_files), 1)
self.assertEqual(read_files[0]['project'], 'org/project')
self.assertEqual(read_files[0]['branch'], 'master')
self.assertEqual(read_files[0]['files']['zuul.d/a.yaml'], 'a')
self.assertEqual(read_files[1]['project'], 'org/project')
self.assertEqual(read_files[1]['branch'], 'master')
self.assertEqual(read_files[1]['files']['zuul.d/b.yaml'], 'b')
self.assertEqual(read_files[0]['files']['zuul.d/b.yaml'], 'b')
# Merge A -> B -> C
result = merger.mergeChanges([item_a, item_b, item_c], files=files,
dirs=dirs)
self.assertIsNotNone(result)
hexsha, read_files, repo_state, ret_recent, orig_commit = result
self.assertEqual(len(read_files), 3)
self.assertEqual(len(read_files), 1)
self.assertEqual(read_files[0]['project'], 'org/project')
self.assertEqual(read_files[0]['branch'], 'master')
self.assertEqual(read_files[0]['files']['zuul.d/a.yaml'], 'a')
self.assertEqual(read_files[1]['project'], 'org/project')
self.assertEqual(read_files[1]['branch'], 'master')
self.assertEqual(read_files[1]['files']['zuul.d/b.yaml'], 'b')
self.assertEqual(read_files[2]['project'], 'org/project')
self.assertEqual(read_files[2]['branch'], 'master')
self.assertEqual(read_files[2]['files']['zuul.d/a.yaml'],
self.assertEqual(read_files[0]['files']['zuul.d/a.yaml'],
'a-with-c')
self.assertEqual(read_files[0]['files']['zuul.d/b.yaml'], 'b')
# Merge A -> B -> C -> D
result = merger.mergeChanges([item_a, item_b, item_c, item_d],
@ -952,20 +945,15 @@ class TestMerger(ZuulTestCase):
self.assertIsNotNone(result)
hexsha, read_files, repo_state, ret_recent, orig_commit = result
self.assertEqual(len(read_files), 4)
self.assertEqual(len(read_files), 2)
self.assertEqual(read_files[0]['project'], 'org/project')
self.assertEqual(read_files[0]['branch'], 'master')
self.assertEqual(read_files[0]['files']['zuul.d/a.yaml'], 'a')
self.assertEqual(read_files[1]['project'], 'org/project')
self.assertEqual(read_files[1]['branch'], 'master')
self.assertEqual(read_files[1]['files']['zuul.d/b.yaml'], 'b')
self.assertEqual(read_files[2]['project'], 'org/project')
self.assertEqual(read_files[2]['branch'], 'master')
self.assertEqual(read_files[2]['files']['zuul.d/a.yaml'],
self.assertEqual(read_files[0]['files']['zuul.d/a.yaml'],
'a-with-c')
self.assertEqual(read_files[3]['project'], 'org/project1')
self.assertEqual(read_files[3]['branch'], 'master')
self.assertEqual(read_files[3]['files']['zuul.d/a.yaml'],
self.assertEqual(read_files[0]['files']['zuul.d/b.yaml'], 'b')
self.assertEqual(read_files[1]['project'], 'org/project1')
self.assertEqual(read_files[1]['branch'], 'master')
self.assertEqual(read_files[1]['files']['zuul.d/a.yaml'],
'a-in-project1')
def test_merge_temp_refs(self):

View File

@ -24,6 +24,7 @@ import os
import re
import shutil
import time
from collections import OrderedDict
from concurrent.futures.process import BrokenProcessPool
import git
@ -1291,7 +1292,8 @@ class Merger(object):
# connection+project+branch -> commit
recent = {}
commit = None
read_files = []
# tuple(connection, project, branch) -> dict(config state)
read_files = OrderedDict()
# connection -> project -> ref -> commit
if repo_state is None:
repo_state = {}
@ -1328,12 +1330,16 @@ class Merger(object):
if files or dirs:
repo = self.getRepo(item['connection'], item['project'])
repo_files = repo.getFiles(files, dirs, commit=commit)
read_files.append(dict(
key = item['connection'], item['project'], item['branch']
read_files[key] = dict(
connection=item['connection'],
project=item['project'],
branch=item['branch'],
files=repo_files))
return commit.hexsha, read_files, repo_state, recent, orig_commit
files=repo_files)
return (
commit.hexsha, list(read_files.values()), repo_state, recent,
orig_commit
)
def setRepoState(self, connection_name, project_name, repo_state,
zuul_event_id=None, process_worker=None):