Export the built tree as git repo #9

Merged
Ghost merged 24 commits from add_export into main 2022-11-02 14:17:24 +01:00
6 changed files with 34 additions and 12 deletions
Showing only changes of commit 578fb2a30a - Show all commits

View File

@ -1,4 +1,3 @@
import functools
import logging
import os
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.user import User
class Importer:
def __init__(self, projects, package, repodir):
# The idea is to create each commit in order, and draw the

View File

@ -13,9 +13,12 @@ class AbstractWalker:
class PrintWalker(AbstractWalker):
def call(self, node, is_source):
if is_source:
print(" ", node.revision, node.revision.files_hash)
print(" ", node.revision.short_string(), node.revision.files_hash)
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:
@ -160,28 +163,37 @@ class TreeBuilder:
def prune_loose_end(self, factory_node):
"""Look for source revisions that end in a new root and prune them"""
merge_before_last = None
last_merge = None
while factory_node:
if factory_node.merged:
source_node = factory_node.merged
ended_without_merge = False
while source_node:
source_node = source_node.parent
if source_node and source_node.merged_into:
ended_without_merge = True
break
if not ended_without_merge:
factory_node.merged = None
if last_merge:
last_merge.parent = None
else:
last_merge = factory_node.merged
merge_before_last = last_merge
last_merge = factory_node
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):
"""Create a Factory tree (returning the top)"""
factory_revisions = self.revisions_chain("openSUSE:Factory", package)
self.add_merge_points(factory_revisions)
self.prune_loose_end(factory_revisions)
return factory_revisions

View File

@ -4,4 +4,9 @@
- commit: openSUSE:Factory/clapper/2.0
merged:
- multimedia:apps/clapper/7.0
- multimedia:apps/clapper/6.0
- multimedia:apps/clapper/5.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
merged:
- devel:tools:compiler/llvm13/4.0
- devel:tools:compiler/llvm13/3.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
merged:
- shells/zsh/34.0
- shells/zsh/33.0
- shells/zsh/32.0
- commit: openSUSE:Factory/zsh/12.0
- commit: openSUSE:Factory/zsh/11.0
- commit: openSUSE:Factory/zsh/10.0

View File

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