Change tree pruning algorithm

The first merge we see in Factory determines if we keep the devel
commits in the factory chain or cut that branch.
This commit is contained in:
Stephan Kulow 2022-11-01 13:09:27 +01:00
parent 9aaba03bcc
commit 578fb2a30a
6 changed files with 34 additions and 12 deletions

View File

@ -1,4 +1,3 @@
import functools
import logging import logging
import os import os
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
@ -15,6 +14,7 @@ from lib.proxy_sha256 import ProxySHA256, md5, sha256
from lib.tree_builder import AbstractWalker, TreeBuilder, TreeNode from lib.tree_builder import AbstractWalker, TreeBuilder, TreeNode
from lib.user import User from lib.user import User
class Importer: class Importer:
def __init__(self, projects, package, repodir): def __init__(self, projects, package, repodir):
# The idea is to create each commit in order, and draw the # The idea is to create each commit in order, and draw the

View File

@ -13,9 +13,12 @@ class AbstractWalker:
class PrintWalker(AbstractWalker): class PrintWalker(AbstractWalker):
def call(self, node, is_source): def call(self, node, is_source):
if is_source: if is_source:
print(" ", node.revision, node.revision.files_hash) print(" ", node.revision.short_string(), node.revision.files_hash)
else: else:
print(node.revision, node.revision.files_hash) merge_str = ""
if node.merged:
merge_str = f"merged:{node.merged.revision.short_string()}"
print(node.revision.short_string(), node.revision.files_hash, merge_str)
class TreeNode: class TreeNode:
@ -160,28 +163,37 @@ class TreeBuilder:
def prune_loose_end(self, factory_node): def prune_loose_end(self, factory_node):
"""Look for source revisions that end in a new root and prune them""" """Look for source revisions that end in a new root and prune them"""
merge_before_last = None
last_merge = None last_merge = None
while factory_node: while factory_node:
if factory_node.merged: if factory_node.merged:
source_node = factory_node.merged source_node = factory_node.merged
ended_without_merge = False
while source_node: while source_node:
source_node = source_node.parent source_node = source_node.parent
if source_node and source_node.merged_into: if source_node and source_node.merged_into:
ended_without_merge = True
break break
if not ended_without_merge: merge_before_last = last_merge
factory_node.merged = None last_merge = factory_node
if last_merge:
last_merge.parent = None
else:
last_merge = factory_node.merged
factory_node = factory_node.parent factory_node = factory_node.parent
# we need to find the last merged_into that didn't end nowhere
# and cut the rope there
node = merge_before_last.merged
last_node = None
while node:
node = node.parent
if node and node.merged_into:
break
last_node = node
last_node.parent = None
if not last_merge.parent:
last_merge.parent = last_merge.merged
last_merge.merged.merged_into = None
last_merge.merged = None
def build(self, package): def build(self, package):
"""Create a Factory tree (returning the top)""" """Create a Factory tree (returning the top)"""
factory_revisions = self.revisions_chain("openSUSE:Factory", package) factory_revisions = self.revisions_chain("openSUSE:Factory", package)
self.add_merge_points(factory_revisions) self.add_merge_points(factory_revisions)
self.prune_loose_end(factory_revisions) self.prune_loose_end(factory_revisions)
return factory_revisions return factory_revisions

View File

@ -4,4 +4,9 @@
- commit: openSUSE:Factory/clapper/2.0 - commit: openSUSE:Factory/clapper/2.0
merged: merged:
- multimedia:apps/clapper/7.0 - multimedia:apps/clapper/7.0
- multimedia:apps/clapper/6.0
- multimedia:apps/clapper/5.0
- commit: openSUSE:Factory/clapper/1.0 - commit: openSUSE:Factory/clapper/1.0
- commit: multimedia:apps/clapper/3.0
- commit: multimedia:apps/clapper/2.0
- commit: multimedia:apps/clapper/1.0

View File

@ -44,4 +44,6 @@
- commit: openSUSE:Factory/llvm13/2.0 - commit: openSUSE:Factory/llvm13/2.0
merged: merged:
- devel:tools:compiler/llvm13/4.0 - devel:tools:compiler/llvm13/4.0
- devel:tools:compiler/llvm13/3.0
- commit: openSUSE:Factory/llvm13/1.0 - commit: openSUSE:Factory/llvm13/1.0
- commit: devel:tools:compiler/llvm13/1.0

View File

@ -286,6 +286,8 @@
- commit: openSUSE:Factory/zsh/13.0 - commit: openSUSE:Factory/zsh/13.0
merged: merged:
- shells/zsh/34.0 - shells/zsh/34.0
- shells/zsh/33.0
- shells/zsh/32.0
- commit: openSUSE:Factory/zsh/12.0 - commit: openSUSE:Factory/zsh/12.0
- commit: openSUSE:Factory/zsh/11.0 - commit: openSUSE:Factory/zsh/11.0
- commit: openSUSE:Factory/zsh/10.0 - commit: openSUSE:Factory/zsh/10.0

View File

@ -42,5 +42,6 @@ class TestTreeMethods(unittest.TestCase):
def test_llvm13_tree(self): def test_llvm13_tree(self):
self.verify_package("llvm13") self.verify_package("llvm13")
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()