Merge pull request #1388 from aptly-dev/fix/flat-mirror-filtering

do not set empty mirror architectures for flat mirrors
This commit is contained in:
André Roth
2024-11-16 21:40:27 +01:00
committed by GitHub
11 changed files with 81 additions and 7 deletions

View File

@@ -317,6 +317,9 @@ func (l *PackageList) VerifyDependencies(options int, architectures []string, so
progress.InitBar(int64(l.Len())*int64(len(architectures)), false, aptly.BarGeneralVerifyDependencies)
}
if len(architectures) == 0 {
return nil, fmt.Errorf("no architectures defined, cannot verify dependencies")
}
for _, arch := range architectures {
cache := make(map[string]bool, 2048)

View File

@@ -105,7 +105,6 @@ func NewRemoteRepo(name string, archiveRoot string, distribution string, compone
if !strings.HasPrefix(result.Distribution, ".") {
result.Distribution = "./" + result.Distribution
}
result.Architectures = nil
if len(result.Components) > 0 {
return nil, fmt.Errorf("components aren't supported for flat repos")
}
@@ -351,7 +350,7 @@ ok:
return err
}
if !repo.IsFlat() {
if len(stanza["Architectures"]) > 0 {
architectures := strings.Split(stanza["Architectures"], " ")
sort.Strings(architectures)
// "source" architecture is never present, despite Release file claims
@@ -365,7 +364,13 @@ ok:
return err
}
}
}
if len(repo.Architectures) == 0 {
return fmt.Errorf("no architectures found, please specify")
}
if !repo.IsFlat() {
components := strings.Split(stanza["Components"], " ")
if strings.Contains(repo.Distribution, "/") {
distributionLast := path.Base(repo.Distribution) + "/"

View File

@@ -115,7 +115,6 @@ func (s *RemoteRepoSuite) TestInvalidURL(c *C) {
func (s *RemoteRepoSuite) TestFlatCreation(c *C) {
c.Check(s.flat.IsFlat(), Equals, true)
c.Check(s.flat.Distribution, Equals, "./")
c.Check(s.flat.Architectures, IsNil)
c.Check(s.flat.Components, IsNil)
flat2, _ := NewRemoteRepo("flat2", "http://pkg.jenkins-ci.org/debian-stable", "binary/", []string{}, []string{}, false, false, false)

View File

@@ -2,7 +2,7 @@ Name: mirror14
Archive Root URL: http://repo.aptly.info/system-tests/cloud.r-project.org/bin/linux/debian/
Distribution: ./bullseye-cran40/
Components:
Architectures:
Architectures: all, amd64, i386
Download Sources: no
Download .udebs: no
Last update: never

View File

@@ -2,7 +2,7 @@ Name: mirror21
Archive Root URL: http://repo.aptly.info/system-tests/pkg.jenkins.io/debian-stable/
Distribution: ./binary/
Components:
Architectures:
Architectures: all
Download Sources: no
Download .udebs: no
Last update: never

View File

@@ -2,7 +2,7 @@ Name: mirror33
Archive Root URL: http://repo.aptly.info/system-tests/nvidia.github.io/libnvidia-container/stable/ubuntu16.04/amd64/
Distribution: ./
Components:
Architectures:
Architectures: amd64
Download Sources: no
Download .udebs: no
Last update: never

View File

@@ -0,0 +1,6 @@
Downloading: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release
Error (retrying): HTTP code 404 while fetching http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release
Retrying 0 http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release...
Download Error: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release
Downloading: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/InRelease
ERROR: unable to fetch mirror: no architectures found, please specify

View File

@@ -0,0 +1,6 @@
Downloading & parsing package files...
Applying filter...
Packages filtered: 4743 -> 81.
Building download queue...
Download queue: 81 items (3.00 GiB)

View File

@@ -0,0 +1,17 @@
Name: mirror35
Archive Root URL: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/
Distribution: ./
Components:
Architectures: amd64
Download Sources: no
Download .udebs: no
Filter: cuda-12-6 (= 12.6.2-1)
Filter With Deps: yes
Last update: never
Information from release file:
Acquire-By-Hash: no
Architecture: x86_64
Date: Mon, 04 Nov 2024 16:02:23 +0000
Label: NVIDIA CUDA
Origin: NVIDIA

View File

@@ -126,7 +126,10 @@
"ArchiveRoot": "http://repo.aptly.info/system-tests/download.opensuse.org/repositories/Apache:/MirrorBrain/Debian_9.0/",
"Distribution": "./",
"Components": null,
"Architectures": null,
"Architectures": [
"amd64",
"i386"
],
"Meta": {
"Architectures": "i386 amd64",
"Archive": "Debian_9.0",

View File

@@ -454,3 +454,38 @@ class CreateMirror33Test(BaseTest):
def check(self):
self.check_output()
self.check_cmd_output("aptly mirror show mirror33", "mirror_show")
class CreateMirror34Test(BaseTest):
"""
create mirror error: flat repo with filter but no architectures in InRelease file
"""
configOverride = {"max-tries": 1}
runCmd = "aptly mirror create -ignore-signatures -filter \"cuda-12-6 (= 12.6.2-1)\" -filter-with-deps mirror34 http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ ./"
class CreateMirror35Test(BaseTest):
"""
create mirror: flat repo with filter but no architectures in InRelease file
"""
configOverride = {"max-tries": 1}
fixtureCmds = [
"aptly mirror create -architectures amd64 -ignore-signatures -filter \"cuda-12-6 (= 12.6.2-1)\" -filter-with-deps mirror35 "
"http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ ./",
]
runCmd = "aptly mirror update -ignore-signatures mirror35"
# the downloading of the actual packages will return 404 since they don't exist. ignore the errors, the test verifies proper count of filtered packages
def outputMatchPrepare(self, s):
s = re.sub(r'Downloading: .*\n', '', s, flags=re.MULTILINE)
s = re.sub(r'Download Error: .*\n', '', s, flags=re.MULTILINE)
s = re.sub(r'Retrying .*\n', '', s, flags=re.MULTILINE)
s = re.sub(r'Error \(retrying\): .*\n', '', s, flags=re.MULTILINE)
s = re.sub(r'HTTP code 404 while fetching .*\n', '', s, flags=re.MULTILINE)
s = re.sub(r'ERROR: unable to update: .*\n', '', s, flags=re.MULTILINE)
return s
def check(self):
self.check_output()
self.check_cmd_output("aptly mirror show mirror35", "mirror_show")