Allow overriding architecture info from Release file

Adds a flag -force-architectures to ignore missing architectures from
mirrors. This flag can be used in cases where the mirrored repository
does not provide an "Architecture: " line.

Example Release file:
http://mitaka-jessie.pkgs.mirantis.com/debian/dists/jessie-mitaka-backports/Release
This commit is contained in:
Daniel Stelter-Gliese
2016-05-16 03:25:00 +02:00
parent 85c5aeddae
commit 1c45c79cc1
7 changed files with 11 additions and 4 deletions

View File

@@ -43,6 +43,7 @@ func aptlyMirrorCreate(cmd *commander.Command, args []string) error {
repo.Filter = context.Flags().Lookup("filter").Value.String()
repo.FilterWithDeps = context.Flags().Lookup("filter-with-deps").Value.Get().(bool)
repo.SkipComponentCheck = context.Flags().Lookup("force-components").Value.Get().(bool)
repo.SkipArchitectureCheck = context.Flags().Lookup("force-architectures").Value.Get().(bool)
if repo.Filter != "" {
_, err = query.Parse(repo.Filter)
@@ -97,6 +98,7 @@ Example:
cmd.Flag.String("filter", "", "filter packages in mirror")
cmd.Flag.Bool("filter-with-deps", false, "when filtering, include dependencies of matching packages as well")
cmd.Flag.Bool("force-components", false, "(only with component list) skip check that requested components are listed in Release file")
cmd.Flag.Bool("force-architectures", false, "(only with architecture list) skip check that requested architectures are listed in Release file")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)")
return cmd

View File

@@ -60,6 +60,8 @@ type RemoteRepo struct {
FilterWithDeps bool
// SkipComponentCheck skips component list verification
SkipComponentCheck bool
// SkipArchitectureCheck skips architecture list verification
SkipArchitectureCheck bool
// Status marks state of repository (being updated, no action)
Status int
// WorkerPID is PID of the process modifying the mirror (if any)
@@ -316,9 +318,9 @@ ok:
architectures = utils.StrSlicesSubstract(architectures, []string{"source"})
if len(repo.Architectures) == 0 {
repo.Architectures = architectures
} else {
} else if !repo.SkipArchitectureCheck {
err = utils.StringsIsSubset(repo.Architectures, architectures,
fmt.Sprintf("architecture %%s not available in repo %s", repo))
fmt.Sprintf("architecture %%s not available in repo %s, use -force-architectures to override", repo))
if err != nil {
return err
}

View File

@@ -21,6 +21,7 @@ Options:
-dep-follow-suggests=false: when processing dependencies, follow Suggests
-filter="": filter packages in mirror
-filter-with-deps=false: when filtering, include dependencies of matching packages as well
-force-architectures=false: (only with architecture list) skip check that requested architectures are listed in Release file
-force-components=false: (only with component list) skip check that requested components are listed in Release file
-ignore-signatures=false: disable verification of Release file signatures
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)

View File

@@ -12,6 +12,7 @@ Options:
-dep-follow-suggests=false: when processing dependencies, follow Suggests
-filter="": filter packages in mirror
-filter-with-deps=false: when filtering, include dependencies of matching packages as well
-force-architectures=false: (only with architecture list) skip check that requested architectures are listed in Release file
-force-components=false: (only with component list) skip check that requested components are listed in Release file
-ignore-signatures=false: disable verification of Release file signatures
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)

View File

@@ -13,6 +13,7 @@ Options:
-dep-follow-suggests=false: when processing dependencies, follow Suggests
-filter="": filter packages in mirror
-filter-with-deps=false: when filtering, include dependencies of matching packages as well
-force-architectures=false: (only with architecture list) skip check that requested architectures are listed in Release file
-force-components=false: (only with component list) skip check that requested components are listed in Release file
-ignore-signatures=false: disable verification of Release file signatures
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)

View File

@@ -1,2 +1,2 @@
Downloading http://mirror.yandex.ru/debian/dists/wheezy/Release...
ERROR: unable to fetch mirror: architecture source not available in repo [mirror16]: http://mirror.yandex.ru/debian/ wheezy
ERROR: unable to fetch mirror: architecture source not available in repo [mirror16]: http://mirror.yandex.ru/debian/ wheezy, use -force-architectures to override

View File

@@ -1,2 +1,2 @@
Downloading http://mirror.yandex.ru/debian/dists/wheezy/Release...
ERROR: unable to fetch mirror: architecture nano68 not available in repo [mirror5]: http://mirror.yandex.ru/debian/ wheezy
ERROR: unable to fetch mirror: architecture nano68 not available in repo [mirror5]: http://mirror.yandex.ru/debian/ wheezy, use -force-architectures to override