Skip to content

Commit

Permalink
Create an initial repo version when repos get created
Browse files Browse the repository at this point in the history
fixes #5757
https://pulp.plan.io/issues/5757

Required PR: pulp/pulp_file#323

(cherry picked from commit 4068a8f)
  • Loading branch information
David Davis authored and bmbouter committed Nov 21, 2019
1 parent cfbbb63 commit 0dcf014
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 16 deletions.
1 change: 1 addition & 0 deletions CHANGES/5757.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Create an initial repo version when repos get created.
26 changes: 26 additions & 0 deletions pulpcore/app/models/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,32 @@ class Repository(MasterModel):
class Meta:
verbose_name_plural = 'repositories'

def save(self, *args, **kwargs):
"""
Saves Repository model and creates an initial repository version.
Args:
args (list): list of positional arguments for Model.save()
kwargs (dict): dictionary of keyword arguments to pass to Model.save()
"""
with transaction.atomic():
adding = self._state.adding
super().save(*args, **kwargs)
if adding:
self.create_initial_version()

def create_initial_version(self):
"""
Create an initial repository version (version 0).
This method can be overriden by plugins if they require custom logic.
"""
version = RepositoryVersion(
repository=self,
number=self.last_version,
complete=True)
version.save()

def new_version(self, base_version=None):
"""
Create a new RepositoryVersion for this Repository
Expand Down
2 changes: 1 addition & 1 deletion pulpcore/tests/functional/api/using_plugin/test_orphans.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def test_clean_orphan_content_unit(self):

# Delete first repo version. The previous removed content unit will be
# an orphan.
delete_version(repo, get_versions(repo)[0]['pulp_href'])
delete_version(repo, get_versions(repo)[1]['pulp_href'])
content_units = self.api_client.get(FILE_CONTENT_PATH)['results']
self.assertIn(content, content_units)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def test_file_content(self):
# Verify pagination works for getting repo versions.
repo = self.client.get(repo['pulp_href'])
repo_versions = get_versions(repo, {'page_size': 10})
self.assertEqual(len(repo_versions), sample_size, repo_versions)
self.assertEqual(len(repo_versions), sample_size + 1, repo_versions)


class PaginationTestCase(unittest.TestCase):
Expand Down
28 changes: 14 additions & 14 deletions pulpcore/tests/functional/api/using_plugin/test_repo_versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ def test_01_create_repository(self):
self.repo.update(self.client.post(FILE_REPO_PATH, gen_repo()))

repo_versions = get_versions(self.repo)
self.assertEqual(len(repo_versions), 0, repo_versions)
self.assertEqual(len(repo_versions), 1, repo_versions)

self.assertIsNone(self.repo['latest_version_href'])
self.assertEqual(self.repo['latest_version_href'], f"{self.repo['pulp_href']}versions/0/")

@skip_if(bool, 'repo', False)
def test_02_sync_content(self):
Expand All @@ -121,7 +121,7 @@ def test_02_sync_content(self):
repo = self.client.get(self.repo['pulp_href'])

repo_versions = get_versions(repo)
self.assertEqual(len(repo_versions), 1, repo_versions)
self.assertEqual(len(repo_versions), 2, repo_versions)

self.assertIsNotNone(repo['latest_version_href'])

Expand Down Expand Up @@ -161,7 +161,7 @@ def test_03_remove_content(self):
repo = self.client.get(self.repo['pulp_href'])

repo_versions = get_versions(repo)
self.assertEqual(len(repo_versions), 2, repo_versions)
self.assertEqual(len(repo_versions), 3, repo_versions)

self.assertIsNotNone(repo['latest_version_href'])

Expand Down Expand Up @@ -201,7 +201,7 @@ def test_04_add_content(self):
repo = self.client.get(self.repo['pulp_href'])

repo_versions = get_versions(repo)
self.assertEqual(len(repo_versions), 3, repo_versions)
self.assertEqual(len(repo_versions), 4, repo_versions)

self.assertIsNotNone(repo['latest_version_href'])

Expand Down Expand Up @@ -621,7 +621,7 @@ def test_same_repository(self):
key=lambda item: item['pulp_href'],
)
)
self.assertIsNone(get_versions(repo)[0]['base_version'])
self.assertIsNone(get_versions(repo)[1]['base_version'])

content = self.content.pop()

Expand All @@ -630,12 +630,12 @@ def test_same_repository(self):
repo = self.client.get(repo['pulp_href'])

# create repo version 3 from version 1
base_version = get_versions(repo)[0]['pulp_href']
base_version = get_versions(repo)[1]['pulp_href']
modify_repo(self.cfg, repo, base_version=base_version)
repo = self.client.get(repo['pulp_href'])

# assert that base_version of the version 3 points to version 1
self.assertEqual(get_versions(repo)[2]['base_version'], base_version)
self.assertEqual(get_versions(repo)[3]['base_version'], base_version)

# assert that content on version 1 is equal to content on version 3
version_content.append(
Expand Down Expand Up @@ -676,10 +676,10 @@ def test_different_repository(self):
key=lambda item: item['pulp_href'],
)
)
self.assertIsNone(get_versions(repo)[0]['base_version'])
self.assertIsNone(get_versions(repo)[1]['base_version'])

# get repo A version 1 to be used as base_version
base_version = get_versions(repo)[0]['pulp_href']
base_version = get_versions(repo)[1]['pulp_href']

# create repo B
repo = self.client.post(FILE_REPO_PATH, gen_repo())
Expand All @@ -690,7 +690,7 @@ def test_different_repository(self):
repo = self.client.get(repo['pulp_href'])

# assert that base_version of repo B points to version 1 of repo A
self.assertEqual(get_versions(repo)[0]['base_version'], base_version)
self.assertEqual(get_versions(repo)[1]['base_version'], base_version)

# assert that content on version 1 of repo A is equal to content on
# version 1 repo B
Expand Down Expand Up @@ -721,10 +721,10 @@ def test_base_version_other_parameters(self):
remove_created_key(item)
for item in get_content(repo)[FILE_CONTENT_NAME]
]
self.assertIsNone(get_versions(repo)[0]['base_version'])
self.assertIsNone(get_versions(repo)[1]['base_version'])

# create repo version 2 from version 1
base_version = get_versions(repo)[0]['pulp_href']
base_version = get_versions(repo)[1]['pulp_href']
added_content = remove_created_key(self.content.pop())
removed_content = choice(version_1_content)
modify_repo(
Expand All @@ -740,7 +740,7 @@ def test_base_version_other_parameters(self):
]

# assert that base_version of the version 2 points to version 1
self.assertEqual(get_versions(repo)[1]['base_version'], base_version)
self.assertEqual(get_versions(repo)[2]['base_version'], base_version)

# assert that the removed content is not present on repo version 2
self.assertNotIn(removed_content, version_2_content)
Expand Down

0 comments on commit 0dcf014

Please sign in to comment.