Skip to content

Commit

Permalink
Implement lightweight collection copying
Browse files Browse the repository at this point in the history
  • Loading branch information
mizdebsk committed Oct 3, 2019
1 parent 84c8993 commit 78f2307
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 3 deletions.
6 changes: 3 additions & 3 deletions koschei/data.py
Expand Up @@ -208,7 +208,7 @@ def set_collection_group_content(session, group, collection_names):
session.db.execute(insert(CollectionGroupRelation, rels))


def copy_collection(session, source, copy):
def copy_collection(session, source, copy, minimal=False):

def get_cols(entity, exclude=(), qualify=False):
return ', '.join(
Expand Down Expand Up @@ -276,13 +276,13 @@ def deepcopy_table(entity, whereclause='', foreign_keys=None):
deepcopy_table(
Build,
whereclause="""
WHERE started > now() - '1 month'::interval
WHERE (NOT {minimal} AND started > now() - '1 month'::interval)
OR build.id IN (
SELECT last_complete_build_id
FROM package
WHERE collection_id = {copy.id}
)
""".format(copy=copy),
""".format(copy=copy, minimal=minimal),
)

deepcopy_table(KojiTask)
Expand Down
62 changes: 62 additions & 0 deletions test/data_test.py
Expand Up @@ -187,3 +187,65 @@ def test_copy_collection(self):

self.assertEqual("It's broken", self.db.query(ResolutionChange).
filter_by(package_id=fork_maven.id).one().problems[0].problem)

def test_copy_collection_minimal(self):
self.prepare_build('rnv')
self.prepare_build('eclipse')
# the next build is old and shouldn't be copied
base_maven_ancient = self.prepare_build(
package='maven',
state=True,
arches=('ppc', 'sparc'),
started='2000-01-01',
)
base_maven_quondam = self.prepare_build(
package='maven',
state=True,
arches=('ppc', 'sparc'),
started=datetime.fromtimestamp(time.time() - 29*24*60*60),
real=True,
)
base_maven_current = self.prepare_build(
package='maven',
state=True,
arches=('ppc', 'sparc'),
started=datetime.fromtimestamp(time.time() - 10),
)
base_maven_running = self.prepare_build(
package='maven',
state=None,
arches=('ppc', 'sparc'),
started=datetime.now(),
)
self.prepare_depchange(dep_name='foo',
prev_epoch=1, prev_version='v1', prev_release='r1',
curr_epoch=2, curr_version='v2', curr_release='r2',
build_id=base_maven_current.id, distance=3)
base_maven = base_maven_current.package
self.prepare_resolution_change(base_maven, ["It's broken"])

base = self.collection
fork = self.prepare_collection('fork')
data.copy_collection(self.session, base, fork, minimal=True)
self.db.commit()

fork_maven = self.db.query(Package).filter_by(collection=fork, name='maven').one()
self.assertIsNotNone(fork_maven)
self.assertNotEqual(base_maven.id, fork_maven.id)
self.assertEqual(base.id, base_maven.collection_id)
self.assertEqual(fork.id, fork_maven.collection_id)
self.assertEqual('maven', fork_maven.name)

self.assertEqual(1, len(fork_maven.all_builds))
fork_maven_current = fork_maven.all_builds[0]
self.assertNotEqual(base_maven_current.id, fork_maven_current.id)
self.assertEqual(base_maven_running.id, base_maven.last_build_id)
self.assertEqual(base_maven_current.id, base_maven.last_complete_build_id)
self.assertEqual(fork_maven_current.id, fork_maven.last_build_id)
self.assertEqual(fork_maven_current.id, fork_maven.last_complete_build_id)

self.assertEqual(1, len(fork_maven_current.dependency_changes))
self.assertEqual('r2', fork_maven_current.dependency_changes[0].curr_dep.release)

self.assertEqual("It's broken", self.db.query(ResolutionChange).
filter_by(package_id=fork_maven.id).one().problems[0].problem)

0 comments on commit 78f2307

Please sign in to comment.