From 2fbf465fbf57df1e42e5474f9746d09587c321fe Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 25 Sep 2014 19:31:21 +0400 Subject: [PATCH 01/19] Support for .udeb in deb.Package. #108 --- deb/package.go | 13 +++++++++++++ deb/package_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/deb/package.go b/deb/package.go index 976b8a2e..be734ed5 100644 --- a/deb/package.go +++ b/deb/package.go @@ -24,6 +24,8 @@ type Package struct { Provides []string // Is this source package IsSource bool + // Is this udeb package + IsUdeb bool // Hash of files section FilesHash uint64 // Is this >= 0.6 package? @@ -169,6 +171,14 @@ func NewSourcePackageFromControlFile(input Stanza) (*Package, error) { return result, nil } +// NewUdebPackageFromControlFile creates .udeb Package from parsed Debian control file +func NewUdebPackageFromControlFile(input Stanza) *Package { + p := NewPackageFromControlFile(input) + p.IsUdeb = true + + return p +} + // Key returns unique key identifying package func (p *Package) Key(prefix string) []byte { if p.V06Plus { @@ -220,6 +230,9 @@ func (p *Package) GetField(name string) string { if p.IsSource { return "source" } + if p.IsUdeb { + return "udeb" + } return "deb" case "Name": return p.Name diff --git a/deb/package_test.go b/deb/package_test.go index efab20db..ddcf754e 100644 --- a/deb/package_test.go +++ b/deb/package_test.go @@ -28,6 +28,7 @@ func (s *PackageSuite) TestNewFromPara(c *C) { p := NewPackageFromControlFile(s.stanza) c.Check(p.IsSource, Equals, false) + c.Check(p.IsUdeb, Equals, false) c.Check(p.Name, Equals, "alien-arena-common") c.Check(p.Version, Equals, "7.40-2") c.Check(p.Architecture, Equals, "i386") @@ -40,11 +41,27 @@ func (s *PackageSuite) TestNewFromPara(c *C) { c.Check(p.deps.Depends, DeepEquals, []string{"libc6 (>= 2.7)", "alien-arena-data (>= 7.40)"}) } +func (s *PackageSuite) TestNewUdebFromPara(c *C) { + stanza, _ := NewControlFileReader(bytes.NewBufferString(udebPackageMeta)).ReadStanza() + p := NewUdebPackageFromControlFile(stanza) + + c.Check(p.IsSource, Equals, false) + c.Check(p.IsUdeb, Equals, true) + c.Check(p.Name, Equals, "dmidecode-udeb") + c.Check(p.Version, Equals, "2.11-9") + c.Check(p.Architecture, Equals, "amd64") + c.Check(p.Provides, DeepEquals, []string(nil)) + c.Check(p.Files(), HasLen, 1) + c.Check(p.Files()[0].Filename, Equals, "dmidecode-udeb_2.11-9_amd64.udeb") + c.Check(p.deps.Depends, DeepEquals, []string{"libc6-udeb (>= 2.13)"}) +} + func (s *PackageSuite) TestNewSourceFromPara(c *C) { p, err := NewSourcePackageFromControlFile(s.sourceStanza) c.Check(err, IsNil) c.Check(p.IsSource, Equals, true) + c.Check(p.IsUdeb, Equals, false) c.Check(p.Name, Equals, "access-modifier-checker") c.Check(p.Version, Equals, "1.0-4") c.Check(p.Architecture, Equals, "source") @@ -134,21 +151,28 @@ func (s *PackageSuite) TestGetField(c *C) { p4, _ := NewSourcePackageFromControlFile(s.sourceStanza.Copy()) + stanza5, _ := NewControlFileReader(bytes.NewBufferString(udebPackageMeta)).ReadStanza() + p5 := NewUdebPackageFromControlFile(stanza5) + c.Check(p.GetField("$Source"), Equals, "alien-arena") c.Check(p2.GetField("$Source"), Equals, "alien-arena-common") c.Check(p3.GetField("$Source"), Equals, "alien-arena") c.Check(p4.GetField("$Source"), Equals, "") + c.Check(p5.GetField("$Source"), Equals, "dmidecode") c.Check(p.GetField("$SourceVersion"), Equals, "7.40-2") c.Check(p2.GetField("$SourceVersion"), Equals, "7.40-2") c.Check(p3.GetField("$SourceVersion"), Equals, "3.5") c.Check(p4.GetField("$SourceVersion"), Equals, "") + c.Check(p5.GetField("$SourceVersion"), Equals, "2.11-9") c.Check(p.GetField("$Architecture"), Equals, "i386") c.Check(p4.GetField("$Architecture"), Equals, "source") + c.Check(p5.GetField("$Architecture"), Equals, "amd64") c.Check(p.GetField("$PackageType"), Equals, "deb") c.Check(p4.GetField("$PackageType"), Equals, "source") + c.Check(p5.GetField("$PackageType"), Equals, "udeb") c.Check(p.GetField("Name"), Equals, "alien-arena-common") c.Check(p4.GetField("Name"), Equals, "access-modifier-checker") @@ -455,3 +479,20 @@ Directory: pool/main/a/access-modifier-checker Priority: source Section: java ` + +const udebPackageMeta = `Package: dmidecode-udeb +Source: dmidecode +Version: 2.11-9 +Installed-Size: 115 +Maintainer: Daniel Baumann +Architecture: amd64 +Depends: libc6-udeb (>= 2.13) +Description: SMBIOS/DMI table decoder (udeb) +Description-md5: bdfb786c6a57097be8c8600b800e749f +Section: debian-installer +Priority: optional +Filename: pool/main/d/dmidecode/dmidecode-udeb_2.11-9_amd64.udeb +Size: 29188 +MD5sum: ae70341c4d96dcded89fa670bcfea31e +SHA1: 9532ae4226a85805189a671ee0283f719d48a5ba +SHA256: bbb3a2cb07f741c3995b6d4bb08d772d83582b93a0236d4ea7736bc0370fc320` From 7ad1bb387b78cd86d23ad726c71026239cb2e249 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 25 Sep 2014 19:34:16 +0400 Subject: [PATCH 02/19] Support for .udeb downloads from remote mirrors. #108 --- deb/publish_test.go | 2 +- deb/remote.go | 25 +++++++++++++++++++++++-- deb/remote_test.go | 33 +++++++++++++++++++-------------- deb/snapshot_test.go | 8 ++++---- 4 files changed, 47 insertions(+), 21 deletions(-) diff --git a/deb/publish_test.go b/deb/publish_test.go index c361f241..56e1db95 100644 --- a/deb/publish_test.go +++ b/deb/publish_test.go @@ -93,7 +93,7 @@ func (s *PublishedRepoSuite) SetUpTest(c *C) { "files:other": s.publishedStorage2}} s.packagePool = files.NewPackagePool(s.root) - repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) repo.packageRefs = s.reflist s.factory.RemoteRepoCollection().Add(repo) diff --git a/deb/remote.go b/deb/remote.go index 1d439d44..fb4dceda 100644 --- a/deb/remote.go +++ b/deb/remote.go @@ -37,6 +37,8 @@ type RemoteRepo struct { Architectures []string // Should we download sources? DownloadSources bool + // Should we download .udebs? + DownloadUdebs bool // Meta-information about repository Meta Stanza // Last update date @@ -55,7 +57,7 @@ type RemoteRepo struct { // NewRemoteRepo creates new instance of Debian remote repository with specified params func NewRemoteRepo(name string, archiveRoot string, distribution string, components []string, - architectures []string, downloadSources bool) (*RemoteRepo, error) { + architectures []string, downloadSources bool, downloadUdebs bool) (*RemoteRepo, error) { result := &RemoteRepo{ UUID: uuid.New(), Name: name, @@ -64,6 +66,7 @@ func NewRemoteRepo(name string, archiveRoot string, distribution string, compone Components: components, Architectures: architectures, DownloadSources: downloadSources, + DownloadUdebs: downloadUdebs, } err := result.prepare() @@ -80,6 +83,9 @@ func NewRemoteRepo(name string, archiveRoot string, distribution string, compone if len(result.Components) > 0 { return nil, fmt.Errorf("components aren't supported for flat repos") } + if result.DownloadUdebs { + return nil, fmt.Errorf("debian-installer udebs aren't supported for flat repos") + } result.Components = nil } @@ -102,7 +108,10 @@ func (repo *RemoteRepo) prepare() error { func (repo *RemoteRepo) String() string { srcFlag := "" if repo.DownloadSources { - srcFlag = " [src]" + srcFlag += " [src]" + } + if repo.DownloadUdebs { + srcFlag += " [udeb]" } distribution := repo.Distribution if distribution == "" { @@ -169,6 +178,13 @@ func (repo *RemoteRepo) SourcesURL(component string) *url.URL { return repo.archiveRootURL.ResolveReference(path) } +// UdebURL returns URL of Packages files for given component and +// architecture +func (repo *RemoteRepo) UdebURL(component string, architecture string) *url.URL { + path := &url.URL{Path: fmt.Sprintf("dists/%s/%s/debian-installer/binary-%s/Packages", repo.Distribution, component, architecture)} + return repo.archiveRootURL.ResolveReference(path) +} + // PackageURL returns URL of package file relative to repository root // architecture func (repo *RemoteRepo) PackageURL(filename string) *url.URL { @@ -342,6 +358,9 @@ func (repo *RemoteRepo) Download(progress aptly.Progress, d aptly.Downloader, co for _, component := range repo.Components { for _, architecture := range repo.Architectures { packagesURLs = append(packagesURLs, []string{repo.BinaryURL(component, architecture).String(), "binary"}) + if repo.DownloadUdebs { + packagesURLs = append(packagesURLs, []string{repo.UdebURL(component, architecture).String(), "udeb"}) + } } if repo.DownloadSources { packagesURLs = append(packagesURLs, []string{repo.SourcesURL(component).String(), "source"}) @@ -378,6 +397,8 @@ func (repo *RemoteRepo) Download(progress aptly.Progress, d aptly.Downloader, co if kind == "binary" { p = NewPackageFromControlFile(stanza) + } else if kind == "udeb" { + p = NewUdebPackageFromControlFile(stanza) } else if kind == "source" { p, err = NewSourcePackageFromControlFile(stanza) if err != nil { diff --git a/deb/remote_test.go b/deb/remote_test.go index 206101dc..af618d1c 100644 --- a/deb/remote_test.go +++ b/deb/remote_test.go @@ -79,8 +79,8 @@ type RemoteRepoSuite struct { var _ = Suite(&RemoteRepoSuite{}) func (s *RemoteRepoSuite) SetUpTest(c *C) { - s.repo, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian", "squeeze", []string{"main"}, []string{}, false) - s.flat, _ = NewRemoteRepo("exp42", "http://repos.express42.com/virool/precise/", "./", []string{}, []string{}, false) + s.repo, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian", "squeeze", []string{"main"}, []string{}, false, false) + s.flat, _ = NewRemoteRepo("exp42", "http://repos.express42.com/virool/precise/", "./", []string{}, []string{}, false, false) s.downloader = http.NewFakeDownloader().ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/Release", exampleReleaseFile) s.progress = console.NewProgress() s.db, _ = database.OpenDB(c.MkDir()) @@ -96,7 +96,7 @@ func (s *RemoteRepoSuite) TearDownTest(c *C) { } func (s *RemoteRepoSuite) TestInvalidURL(c *C) { - _, err := NewRemoteRepo("s", "http://lolo%2", "squeeze", []string{"main"}, []string{}, false) + _, err := NewRemoteRepo("s", "http://lolo%2", "squeeze", []string{"main"}, []string{}, false, false) c.Assert(err, ErrorMatches, ".*hexadecimal escape in host.*") } @@ -106,11 +106,11 @@ func (s *RemoteRepoSuite) TestFlatCreation(c *C) { 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) + flat2, _ := NewRemoteRepo("flat2", "http://pkg.jenkins-ci.org/debian-stable", "binary/", []string{}, []string{}, false, false) c.Check(flat2.IsFlat(), Equals, true) c.Check(flat2.Distribution, Equals, "./binary/") - _, err := NewRemoteRepo("fl", "http://some.repo/", "./", []string{"main"}, []string{}, false) + _, err := NewRemoteRepo("fl", "http://some.repo/", "./", []string{"main"}, []string{}, false, false) c.Check(err, ErrorMatches, "components aren't supported for flat repos") } @@ -119,8 +119,9 @@ func (s *RemoteRepoSuite) TestString(c *C) { c.Check(s.flat.String(), Equals, "[exp42]: http://repos.express42.com/virool/precise/ ./") s.repo.DownloadSources = true + s.repo.DownloadUdebs = true s.flat.DownloadSources = true - c.Check(s.repo.String(), Equals, "[yandex]: http://mirror.yandex.ru/debian/ squeeze [src]") + c.Check(s.repo.String(), Equals, "[yandex]: http://mirror.yandex.ru/debian/ squeeze [src] [udeb]") c.Check(s.flat.String(), Equals, "[exp42]: http://repos.express42.com/virool/precise/ ./ [src]") } @@ -151,6 +152,10 @@ func (s *RemoteRepoSuite) TestBinaryURL(c *C) { c.Assert(s.repo.BinaryURL("main", "amd64").String(), Equals, "http://mirror.yandex.ru/debian/dists/squeeze/main/binary-amd64/Packages") } +func (s *RemoteRepoSuite) TestUdebURL(c *C) { + c.Assert(s.repo.UdebURL("main", "amd64").String(), Equals, "http://mirror.yandex.ru/debian/dists/squeeze/main/debian-installer/binary-amd64/Packages") +} + func (s *RemoteRepoSuite) TestSourcesURL(c *C) { c.Assert(s.repo.SourcesURL("main").String(), Equals, "http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources") } @@ -209,13 +214,13 @@ func (s *RemoteRepoSuite) TestFetchNullVerifier2(c *C) { } func (s *RemoteRepoSuite) TestFetchWrongArchitecture(c *C) { - s.repo, _ = NewRemoteRepo("s", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{"xyz"}, false) + s.repo, _ = NewRemoteRepo("s", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{"xyz"}, false, false) err := s.repo.Fetch(s.downloader, nil) c.Assert(err, ErrorMatches, "architecture xyz not available in repo.*") } func (s *RemoteRepoSuite) TestFetchWrongComponent(c *C) { - s.repo, _ = NewRemoteRepo("s", "http://mirror.yandex.ru/debian/", "squeeze", []string{"xyz"}, []string{"i386"}, false) + s.repo, _ = NewRemoteRepo("s", "http://mirror.yandex.ru/debian/", "squeeze", []string{"xyz"}, []string{"i386"}, false, false) err := s.repo.Fetch(s.downloader, nil) c.Assert(err, ErrorMatches, "component xyz not available in repo.*") } @@ -399,7 +404,7 @@ func (s *RemoteRepoCollectionSuite) TestAddByName(c *C) { r, err := s.collection.ByName("yandex") c.Assert(err, ErrorMatches, "*.not found") - repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) c.Assert(s.collection.Add(repo), IsNil) c.Assert(s.collection.Add(repo), ErrorMatches, ".*already exists") @@ -417,7 +422,7 @@ func (s *RemoteRepoCollectionSuite) TestByUUID(c *C) { r, err := s.collection.ByUUID("some-uuid") c.Assert(err, ErrorMatches, "*.not found") - repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) c.Assert(s.collection.Add(repo), IsNil) r, err = s.collection.ByUUID(repo.UUID) @@ -426,7 +431,7 @@ func (s *RemoteRepoCollectionSuite) TestByUUID(c *C) { } func (s *RemoteRepoCollectionSuite) TestUpdateLoadComplete(c *C) { - repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) c.Assert(s.collection.Update(repo), IsNil) collection := NewRemoteRepoCollection(s.db) @@ -447,7 +452,7 @@ func (s *RemoteRepoCollectionSuite) TestUpdateLoadComplete(c *C) { } func (s *RemoteRepoCollectionSuite) TestForEachAndLen(c *C) { - repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) s.collection.Add(repo) count := 0 @@ -469,10 +474,10 @@ func (s *RemoteRepoCollectionSuite) TestForEachAndLen(c *C) { } func (s *RemoteRepoCollectionSuite) TestDrop(c *C) { - repo1, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + repo1, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) s.collection.Add(repo1) - repo2, _ := NewRemoteRepo("tyndex", "http://mirror.yandex.ru/debian/", "wheezy", []string{"main"}, []string{}, false) + repo2, _ := NewRemoteRepo("tyndex", "http://mirror.yandex.ru/debian/", "wheezy", []string{"main"}, []string{}, false, false) s.collection.Add(repo2) r1, _ := s.collection.ByUUID(repo1.UUID) diff --git a/deb/snapshot_test.go b/deb/snapshot_test.go index 9d52d713..83db0853 100644 --- a/deb/snapshot_test.go +++ b/deb/snapshot_test.go @@ -15,7 +15,7 @@ var _ = Suite(&SnapshotSuite{}) func (s *SnapshotSuite) SetUpTest(c *C) { s.SetUpPackages() - s.repo, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + s.repo, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) s.repo.packageRefs = s.reflist } @@ -108,11 +108,11 @@ func (s *SnapshotCollectionSuite) SetUpTest(c *C) { s.collection = NewSnapshotCollection(s.db) s.SetUpPackages() - s.repo1, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) + s.repo1, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) s.repo1.packageRefs = s.reflist s.snapshot1, _ = NewSnapshotFromRepository("snap1", s.repo1) - s.repo2, _ = NewRemoteRepo("android", "http://mirror.yandex.ru/debian/", "lenny", []string{"main"}, []string{}, false) + s.repo2, _ = NewRemoteRepo("android", "http://mirror.yandex.ru/debian/", "lenny", []string{"main"}, []string{}, false, false) s.repo2.packageRefs = s.reflist s.snapshot2, _ = NewSnapshotFromRepository("snap2", s.repo2) @@ -192,7 +192,7 @@ func (s *SnapshotCollectionSuite) TestFindByRemoteRepoSource(c *C) { c.Check(s.collection.ByRemoteRepoSource(s.repo1), DeepEquals, []*Snapshot{s.snapshot1}) c.Check(s.collection.ByRemoteRepoSource(s.repo2), DeepEquals, []*Snapshot{s.snapshot2}) - repo3, _ := NewRemoteRepo("other", "http://mirror.yandex.ru/debian/", "lenny", []string{"main"}, []string{}, false) + repo3, _ := NewRemoteRepo("other", "http://mirror.yandex.ru/debian/", "lenny", []string{"main"}, []string{}, false, false) c.Check(s.collection.ByRemoteRepoSource(repo3), DeepEquals, []*Snapshot{}) } From 7d8600b840c9efcfb89d0fe86fa8f287b1193b96 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 25 Sep 2014 22:12:59 +0400 Subject: [PATCH 03/19] Add support for mirroring, showing, and editing remote repos with .udebs. #108 --- cmd/mirror_create.go | 5 ++- cmd/mirror_edit.go | 7 ++++ cmd/mirror_show.go | 5 +++ system/t04_mirror/CreateMirror25Test_gold | 4 +++ .../t04_mirror/CreateMirror25Test_mirror_show | 20 +++++++++++ system/t04_mirror/CreateMirror26Test_gold | 1 + system/t04_mirror/EditMirror8Test_gold | 1 + system/t04_mirror/EditMirror8Test_mirror_show | 20 +++++++++++ system/t04_mirror/EditMirror9Test_gold | 1 + system/t04_mirror/UpdateMirror12Test_gold | 33 +++++++++++++++++++ system/t04_mirror/create.py | 22 ++++++++++++- system/t04_mirror/edit.py | 22 +++++++++++++ system/t04_mirror/update.py | 16 +++++++++ 13 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 system/t04_mirror/CreateMirror25Test_gold create mode 100644 system/t04_mirror/CreateMirror25Test_mirror_show create mode 100644 system/t04_mirror/CreateMirror26Test_gold create mode 100644 system/t04_mirror/EditMirror8Test_gold create mode 100644 system/t04_mirror/EditMirror8Test_mirror_show create mode 100644 system/t04_mirror/EditMirror9Test_gold create mode 100644 system/t04_mirror/UpdateMirror12Test_gold diff --git a/cmd/mirror_create.go b/cmd/mirror_create.go index 69c74226..27a7dcc0 100644 --- a/cmd/mirror_create.go +++ b/cmd/mirror_create.go @@ -17,6 +17,7 @@ func aptlyMirrorCreate(cmd *commander.Command, args []string) error { } downloadSources := LookupOption(context.Config().DownloadSourcePackages, context.flags, "with-sources") + downloadUdebs := context.flags.Lookup("with-udebs").Value.Get().(bool) var ( mirrorName, archiveURL, distribution string @@ -33,7 +34,8 @@ func aptlyMirrorCreate(cmd *commander.Command, args []string) error { archiveURL, distribution, components = args[1], args[2], args[3:] } - repo, err := deb.NewRemoteRepo(mirrorName, archiveURL, distribution, components, context.ArchitecturesList(), downloadSources) + repo, err := deb.NewRemoteRepo(mirrorName, archiveURL, distribution, components, context.ArchitecturesList(), + downloadSources, downloadUdebs) if err != nil { return fmt.Errorf("unable to create mirror: %s", err) } @@ -90,6 +92,7 @@ Example: cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures") cmd.Flag.Bool("with-sources", false, "download source packages in addition to binary packages") + cmd.Flag.Bool("with-udebs", false, "download .udeb packages (Debian installer support)") 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.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)") diff --git a/cmd/mirror_edit.go b/cmd/mirror_edit.go index e331e2a7..c16df85d 100644 --- a/cmd/mirror_edit.go +++ b/cmd/mirror_edit.go @@ -27,9 +27,15 @@ func aptlyMirrorEdit(cmd *commander.Command, args []string) error { repo.FilterWithDeps = flag.Value.Get().(bool) case "with-sources": repo.DownloadSources = flag.Value.Get().(bool) + case "with-udebs": + repo.DownloadUdebs = flag.Value.Get().(bool) } }) + if repo.IsFlat() && repo.DownloadUdebs { + return fmt.Errorf("unable to edit: flat mirrors don't support udebs") + } + if repo.Filter != "" { _, err = query.Parse(repo.Filter) if err != nil { @@ -74,6 +80,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("with-sources", false, "download source packages in addition to binary packages") + cmd.Flag.Bool("with-udebs", false, "download .udeb packages (Debian installer support)") return cmd } diff --git a/cmd/mirror_show.go b/cmd/mirror_show.go index 53296cdb..b208c321 100644 --- a/cmd/mirror_show.go +++ b/cmd/mirror_show.go @@ -37,6 +37,11 @@ func aptlyMirrorShow(cmd *commander.Command, args []string) error { downloadSources = "yes" } fmt.Printf("Download Sources: %s\n", downloadSources) + downloadUdebs := "no" + if repo.DownloadUdebs { + downloadUdebs = "yes" + } + fmt.Printf("Download .udebs: %s\n", downloadUdebs) if repo.Filter != "" { fmt.Printf("Filter: %s\n", repo.Filter) filterWithDeps := "no" diff --git a/system/t04_mirror/CreateMirror25Test_gold b/system/t04_mirror/CreateMirror25Test_gold new file mode 100644 index 00000000..6eab7a88 --- /dev/null +++ b/system/t04_mirror/CreateMirror25Test_gold @@ -0,0 +1,4 @@ +Downloading http://mirror.yandex.ru/debian/dists/wheezy/Release... + +Mirror [mirror25]: http://mirror.yandex.ru/debian/ wheezy [udeb] successfully added. +You can run 'aptly mirror update mirror25' to download repository contents. diff --git a/system/t04_mirror/CreateMirror25Test_mirror_show b/system/t04_mirror/CreateMirror25Test_mirror_show new file mode 100644 index 00000000..7f5a17eb --- /dev/null +++ b/system/t04_mirror/CreateMirror25Test_mirror_show @@ -0,0 +1,20 @@ +Name: mirror25 +Archive Root URL: http://mirror.yandex.ru/debian/ +Distribution: wheezy +Components: main, contrib, non-free +Architectures: i386 +Download Sources: no +Download .udebs: yes +Last update: never + +Information from release file: +Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc +Codename: wheezy +Components: main contrib non-free +Date: Sat, 12 Jul 2014 10:59:25 UTC +Description: Debian 7.6 Released 12 July 2014 + +Label: Debian +Origin: Debian +Suite: stable +Version: 7.6 diff --git a/system/t04_mirror/CreateMirror26Test_gold b/system/t04_mirror/CreateMirror26Test_gold new file mode 100644 index 00000000..97027669 --- /dev/null +++ b/system/t04_mirror/CreateMirror26Test_gold @@ -0,0 +1 @@ +ERROR: unable to create mirror: debian-installer udebs aren't supported for flat repos diff --git a/system/t04_mirror/EditMirror8Test_gold b/system/t04_mirror/EditMirror8Test_gold new file mode 100644 index 00000000..1291476b --- /dev/null +++ b/system/t04_mirror/EditMirror8Test_gold @@ -0,0 +1 @@ +Mirror [wheezy-main]: http://mirror.yandex.ru/debian/ wheezy [udeb] successfully updated. diff --git a/system/t04_mirror/EditMirror8Test_mirror_show b/system/t04_mirror/EditMirror8Test_mirror_show new file mode 100644 index 00000000..3aa03131 --- /dev/null +++ b/system/t04_mirror/EditMirror8Test_mirror_show @@ -0,0 +1,20 @@ +Name: wheezy-main +Archive Root URL: http://mirror.yandex.ru/debian/ +Distribution: wheezy +Components: main +Architectures: i386, amd64 +Download Sources: no +Download .udebs: yes +Number of packages: 56121 + +Information from release file: +Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc +Codename: wheezy +Components: main contrib non-free +Date: Sat, 26 Apr 2014 09:27:11 UTC +Description: Debian 7.5 Released 26 April 2014 + +Label: Debian +Origin: Debian +Suite: stable +Version: 7.5 diff --git a/system/t04_mirror/EditMirror9Test_gold b/system/t04_mirror/EditMirror9Test_gold new file mode 100644 index 00000000..a2e1e5a4 --- /dev/null +++ b/system/t04_mirror/EditMirror9Test_gold @@ -0,0 +1 @@ +ERROR: unable to edit: flat mirrors don't support udebs diff --git a/system/t04_mirror/UpdateMirror12Test_gold b/system/t04_mirror/UpdateMirror12Test_gold new file mode 100644 index 00000000..1a7390dd --- /dev/null +++ b/system/t04_mirror/UpdateMirror12Test_gold @@ -0,0 +1,33 @@ + + +Applying filter... +Building download queue... +Download queue: 10 items (0.76 MiB) +Downloading & parsing package files... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/InRelease... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/Release... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/Release.gpg... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/main/binary-amd64/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/main/debian-installer/binary-amd64/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/main/debian-installer/binary-i386/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/non-free/binary-amd64/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/non-free/binary-i386/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/non-free/debian-installer/binary-amd64/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/dists/squeeze/non-free/debian-installer/binary-i386/Packages.bz2... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/dmraid_1.0.0.rc16-4.1_amd64.deb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/dmraid_1.0.0.rc16-4.1_i386.deb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/libdmraid-dev_1.0.0.rc16-4.1_amd64.deb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/libdmraid-dev_1.0.0.rc16-4.1_i386.deb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/libdmraid1.0.0.rc16-udeb_1.0.0.rc16-4.1_amd64.udeb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/libdmraid1.0.0.rc16-udeb_1.0.0.rc16-4.1_i386.udeb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/libdmraid1.0.0.rc16_1.0.0.rc16-4.1_amd64.deb... +Downloading http://mirror.yandex.ru/debian/pool/main/d/dmraid/libdmraid1.0.0.rc16_1.0.0.rc16-4.1_i386.deb... +Mirror `squeeze` has been successfully updated. +Packages filtered: 45830 -> 10. +gpgv: Good signature from "Debian Archive Automatic Signing Key (6.0/squeeze) " +gpgv: Good signature from "Squeeze Stable Release Key " +gpgv: RSA key ID 473041FA +gpgv: RSA key ID B98321F9 \ No newline at end of file diff --git a/system/t04_mirror/create.py b/system/t04_mirror/create.py index 6e1e8ab0..0e469e33 100644 --- a/system/t04_mirror/create.py +++ b/system/t04_mirror/create.py @@ -277,7 +277,7 @@ class CreateMirror23Test(BaseTest): class CreateMirror24Test(BaseTest): """ - create mirror: mirror with wrong filter + create mirror: disable config value with option """ runCmd = "aptly mirror create -ignore-signatures=false -keyring=aptlytest.gpg mirror24 http://security.debian.org/ wheezy/updates main" fixtureGpg = True @@ -286,3 +286,23 @@ class CreateMirror24Test(BaseTest): configOverride = { "gpgDisableVerify": True } + + +class CreateMirror25Test(BaseTest): + """ + create mirror: mirror with udebs enabled + """ + runCmd = "aptly -architectures=i386 mirror create -ignore-signatures -with-udebs mirror25 http://mirror.yandex.ru/debian/ wheezy" + + def check(self): + self.check_output() + self.check_cmd_output("aptly mirror show mirror25", "mirror_show") + + +class CreateMirror26Test(BaseTest): + """ + create mirror: flat mirror with udebs + """ + runCmd = "aptly mirror create -keyring=aptlytest.gpg -with-udebs mirror26 http://pkg.jenkins-ci.org/debian-stable binary/" + fixtureGpg = True + expectedCode = 1 diff --git a/system/t04_mirror/edit.py b/system/t04_mirror/edit.py index 968535af..53b36cbf 100644 --- a/system/t04_mirror/edit.py +++ b/system/t04_mirror/edit.py @@ -79,3 +79,25 @@ class EditMirror7Test(BaseTest): fixtureDB = True runCmd = "aptly mirror edit -architectures=amd64,x56 wheezy-main" expectedCode = 1 + + +class EditMirror8Test(BaseTest): + """ + edit mirror: enable udebs + """ + fixtureDB = True + runCmd = "aptly mirror edit -with-udebs wheezy-main" + + def check(self): + self.check_output() + self.check_cmd_output("aptly mirror show wheezy-main", "mirror_show", match_prepare=lambda s: re.sub(r"Last update: [0-9:+A-Za-z -]+\n", "", s)) + + +class EditMirror9Test(BaseTest): + """ + edit mirror: flat mirror with udebs + """ + fixtureCmds = ["aptly mirror create -keyring=aptlytest.gpg mirror9 http://pkg.jenkins-ci.org/debian-stable binary/"] + fixtureGpg = True + runCmd = "aptly mirror edit -with-udebs mirror9" + expectedCode = 1 diff --git a/system/t04_mirror/update.py b/system/t04_mirror/update.py index 167418e0..13d293ee 100644 --- a/system/t04_mirror/update.py +++ b/system/t04_mirror/update.py @@ -156,3 +156,19 @@ class UpdateMirror11Test(BaseTest): def output_processor(self, output): return "\n".join(sorted(output.split("\n"))) + + +class UpdateMirror12Test(BaseTest): + """ + update mirrors: update with udebs + """ + longTest = False + fixtureGpg = True + fixtureCmds = [ + "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (dmraid)' -with-udebs squeeze http://mirror.yandex.ru/debian/ squeeze main non-free", + ] + runCmd = "aptly mirror update -keyring=aptlytest.gpg squeeze" + outputMatchPrepare = lambda _, s: re.sub(r'Signature made .* using', '', s) + + def output_processor(self, output): + return "\n".join(sorted(output.split("\n"))) From 976ddb5ff9ff01ccd399d88788fb438e5e3fb02f Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 25 Sep 2014 23:34:53 +0400 Subject: [PATCH 04/19] Fix tests on arguments help. #108 --- system/t03_help/MirrorCreateHelpTest_gold | 1 + system/t03_help/MirrorCreateTest_gold | 1 + system/t03_help/WrongFlagTest_gold | 1 + 3 files changed, 3 insertions(+) diff --git a/system/t03_help/MirrorCreateHelpTest_gold b/system/t03_help/MirrorCreateHelpTest_gold index 25c2e7f2..9a37486e 100644 --- a/system/t03_help/MirrorCreateHelpTest_gold +++ b/system/t03_help/MirrorCreateHelpTest_gold @@ -24,4 +24,5 @@ Options: -ignore-signatures=false: disable verification of Release file signatures -keyring=: gpg keyring to use when verifying Release file (could be specified multiple times) -with-sources=false: download source packages in addition to binary packages + -with-udebs=false: download .udeb packages (Debian installer support) diff --git a/system/t03_help/MirrorCreateTest_gold b/system/t03_help/MirrorCreateTest_gold index dcb524ce..d696eb5d 100644 --- a/system/t03_help/MirrorCreateTest_gold +++ b/system/t03_help/MirrorCreateTest_gold @@ -15,4 +15,5 @@ Options: -ignore-signatures=false: disable verification of Release file signatures -keyring=: gpg keyring to use when verifying Release file (could be specified multiple times) -with-sources=false: download source packages in addition to binary packages + -with-udebs=false: download .udeb packages (Debian installer support) ERROR: unable to parse command diff --git a/system/t03_help/WrongFlagTest_gold b/system/t03_help/WrongFlagTest_gold index 738bf59c..a6df4f0e 100644 --- a/system/t03_help/WrongFlagTest_gold +++ b/system/t03_help/WrongFlagTest_gold @@ -16,4 +16,5 @@ Options: -ignore-signatures=false: disable verification of Release file signatures -keyring=: gpg keyring to use when verifying Release file (could be specified multiple times) -with-sources=false: download source packages in addition to binary packages + -with-udebs=false: download .udeb packages (Debian installer support) ERROR: unable to parse flags From ea399a335a2a0609601270bab17d0fa534265d7f Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 25 Sep 2014 23:37:11 +0400 Subject: [PATCH 05/19] Update tests on show mirror format change. #108 --- system/t04_mirror/EditMirror1Test_mirror_show | 1 + system/t04_mirror/EditMirror3Test_mirror_show | 2 +- system/t04_mirror/EditMirror5Test_mirror_show | 3 +-- system/t04_mirror/EditMirror6Test_mirror_show | 1 + system/t04_mirror/ShowMirror1Test_gold | 1 + system/t04_mirror/ShowMirror3Test_gold | 2 +- system/t04_mirror/ShowMirror4Test_gold | 3 +-- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/system/t04_mirror/EditMirror1Test_mirror_show b/system/t04_mirror/EditMirror1Test_mirror_show index a0bffd09..f934ffc9 100644 --- a/system/t04_mirror/EditMirror1Test_mirror_show +++ b/system/t04_mirror/EditMirror1Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main Architectures: i386, amd64 Download Sources: yes +Download .udebs: no Filter: nginx Filter With Deps: yes Number of packages: 56121 diff --git a/system/t04_mirror/EditMirror3Test_mirror_show b/system/t04_mirror/EditMirror3Test_mirror_show index 59b134fc..d3348f0c 100644 --- a/system/t04_mirror/EditMirror3Test_mirror_show +++ b/system/t04_mirror/EditMirror3Test_mirror_show @@ -4,7 +4,7 @@ Distribution: wheezy Components: main Architectures: i386, amd64 Download Sources: no -Last update: 2014-06-28 01:23:25 MSK +Download .udebs: no Number of packages: 56121 Information from release file: diff --git a/system/t04_mirror/EditMirror5Test_mirror_show b/system/t04_mirror/EditMirror5Test_mirror_show index 535f67b8..8790d809 100644 --- a/system/t04_mirror/EditMirror5Test_mirror_show +++ b/system/t04_mirror/EditMirror5Test_mirror_show @@ -4,17 +4,16 @@ Distribution: wheezy/updates Components: main Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc Codename: wheezy Components: updates/main updates/contrib updates/non-free -Date: Fri, 25 Jul 2014 03:31:55 UTC Description: Debian 7.0 Security Updates Label: Debian-Security Origin: Debian Suite: stable -Valid-Until: Mon, 04 Aug 2014 03:31:55 UTC Version: 7.0 diff --git a/system/t04_mirror/EditMirror6Test_mirror_show b/system/t04_mirror/EditMirror6Test_mirror_show index e47d2258..3f448097 100644 --- a/system/t04_mirror/EditMirror6Test_mirror_show +++ b/system/t04_mirror/EditMirror6Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main Architectures: amd64, s390 Download Sources: no +Download .udebs: no Number of packages: 56121 Information from release file: diff --git a/system/t04_mirror/ShowMirror1Test_gold b/system/t04_mirror/ShowMirror1Test_gold index d5542dde..94f4085f 100644 --- a/system/t04_mirror/ShowMirror1Test_gold +++ b/system/t04_mirror/ShowMirror1Test_gold @@ -4,6 +4,7 @@ Distribution: wheezy Components: main, contrib, non-free Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/ShowMirror3Test_gold b/system/t04_mirror/ShowMirror3Test_gold index 94db9a7c..a8315473 100644 --- a/system/t04_mirror/ShowMirror3Test_gold +++ b/system/t04_mirror/ShowMirror3Test_gold @@ -4,7 +4,7 @@ Distribution: wheezy Components: contrib Architectures: i386, amd64 Download Sources: no -Last update: 2014-02-25 00:21:33 MSK +Download .udebs: no Number of packages: 325 Information from release file: diff --git a/system/t04_mirror/ShowMirror4Test_gold b/system/t04_mirror/ShowMirror4Test_gold index 7a8182b7..1412be26 100644 --- a/system/t04_mirror/ShowMirror4Test_gold +++ b/system/t04_mirror/ShowMirror4Test_gold @@ -4,6 +4,7 @@ Distribution: wheezy/updates Components: main Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Filter: nginx | Priority (required) Filter With Deps: yes Last update: never @@ -12,11 +13,9 @@ Information from release file: Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc Codename: wheezy Components: updates/main updates/contrib updates/non-free -Date: Sun, 13 Jul 2014 12:12:08 UTC Description: Debian 7.0 Security Updates Label: Debian-Security Origin: Debian Suite: stable -Valid-Until: Wed, 23 Jul 2014 12:12:08 UTC Version: 7.0 From 8f9944117cc833507dd75114098eba74b23ad8f4 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 25 Sep 2014 23:38:45 +0400 Subject: [PATCH 06/19] Update tests on show mirror format change. #108 --- system/t04_mirror/CreateMirror11Test_mirror_show | 1 + system/t04_mirror/CreateMirror13Test_mirror_show | 1 + system/t04_mirror/CreateMirror14Test_mirror_show | 1 + system/t04_mirror/CreateMirror17Test_mirror_show | 1 + system/t04_mirror/CreateMirror18Test_mirror_show | 1 + system/t04_mirror/CreateMirror19Test_mirror_show | 3 +-- system/t04_mirror/CreateMirror1Test_mirror_show | 1 + system/t04_mirror/CreateMirror21Test_mirror_show | 1 + system/t04_mirror/CreateMirror22Test_mirror_show | 3 +-- system/t04_mirror/CreateMirror2Test_mirror_show | 1 + system/t04_mirror/CreateMirror3Test_mirror_show | 1 + system/t04_mirror/CreateMirror7Test_mirror_show | 1 + system/t04_mirror/CreateMirror9Test_mirror_show | 3 +-- 13 files changed, 13 insertions(+), 6 deletions(-) diff --git a/system/t04_mirror/CreateMirror11Test_mirror_show b/system/t04_mirror/CreateMirror11Test_mirror_show index 22eabff4..522449e3 100644 --- a/system/t04_mirror/CreateMirror11Test_mirror_show +++ b/system/t04_mirror/CreateMirror11Test_mirror_show @@ -4,6 +4,7 @@ Distribution: squeeze Components: main, contrib, non-free Architectures: amd64, armel, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror13Test_mirror_show b/system/t04_mirror/CreateMirror13Test_mirror_show index d9eee928..1a012184 100644 --- a/system/t04_mirror/CreateMirror13Test_mirror_show +++ b/system/t04_mirror/CreateMirror13Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main, contrib, non-free Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror14Test_mirror_show b/system/t04_mirror/CreateMirror14Test_mirror_show index 2789c252..8f479d62 100644 --- a/system/t04_mirror/CreateMirror14Test_mirror_show +++ b/system/t04_mirror/CreateMirror14Test_mirror_show @@ -4,6 +4,7 @@ Distribution: ./ Components: Architectures: Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror17Test_mirror_show b/system/t04_mirror/CreateMirror17Test_mirror_show index 3e6e75d4..816e61d5 100644 --- a/system/t04_mirror/CreateMirror17Test_mirror_show +++ b/system/t04_mirror/CreateMirror17Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main, contrib, non-free Architectures: i386 Download Sources: yes +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror18Test_mirror_show b/system/t04_mirror/CreateMirror18Test_mirror_show index abd2a7d1..d2d32be5 100644 --- a/system/t04_mirror/CreateMirror18Test_mirror_show +++ b/system/t04_mirror/CreateMirror18Test_mirror_show @@ -4,6 +4,7 @@ Distribution: maverick Components: main Architectures: amd64, armel, i386, powerpc Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror19Test_mirror_show b/system/t04_mirror/CreateMirror19Test_mirror_show index 52bf55df..c4425802 100644 --- a/system/t04_mirror/CreateMirror19Test_mirror_show +++ b/system/t04_mirror/CreateMirror19Test_mirror_show @@ -4,17 +4,16 @@ Distribution: wheezy/updates Components: main Architectures: i386 Download Sources: yes +Download .udebs: no Last update: never Information from release file: Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc Codename: wheezy Components: updates/main updates/contrib updates/non-free -Date: Tue, 11 Mar 2014 21:11:28 UTC Description: Debian 7.0 Security Updates Label: Debian-Security Origin: Debian Suite: stable -Valid-Until: Fri, 21 Mar 2014 21:11:28 UTC Version: 7.0 diff --git a/system/t04_mirror/CreateMirror1Test_mirror_show b/system/t04_mirror/CreateMirror1Test_mirror_show index d5542dde..94f4085f 100644 --- a/system/t04_mirror/CreateMirror1Test_mirror_show +++ b/system/t04_mirror/CreateMirror1Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main, contrib, non-free Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror21Test_mirror_show b/system/t04_mirror/CreateMirror21Test_mirror_show index f6800017..a328a922 100644 --- a/system/t04_mirror/CreateMirror21Test_mirror_show +++ b/system/t04_mirror/CreateMirror21Test_mirror_show @@ -4,6 +4,7 @@ Distribution: ./binary/ Components: Architectures: Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror22Test_mirror_show b/system/t04_mirror/CreateMirror22Test_mirror_show index add4d654..8b9e103d 100644 --- a/system/t04_mirror/CreateMirror22Test_mirror_show +++ b/system/t04_mirror/CreateMirror22Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy/updates Components: main Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Filter: nginx | Priority (required) Filter With Deps: no Last update: never @@ -12,11 +13,9 @@ Information from release file: Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc Codename: wheezy Components: updates/main updates/contrib updates/non-free -Date: Sun, 13 Jul 2014 12:12:08 UTC Description: Debian 7.0 Security Updates Label: Debian-Security Origin: Debian Suite: stable -Valid-Until: Wed, 23 Jul 2014 12:12:08 UTC Version: 7.0 diff --git a/system/t04_mirror/CreateMirror2Test_mirror_show b/system/t04_mirror/CreateMirror2Test_mirror_show index 183348a4..60c7d9de 100644 --- a/system/t04_mirror/CreateMirror2Test_mirror_show +++ b/system/t04_mirror/CreateMirror2Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main Architectures: amd64, armel, armhf, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror3Test_mirror_show b/system/t04_mirror/CreateMirror3Test_mirror_show index 804abb9e..5586b8b2 100644 --- a/system/t04_mirror/CreateMirror3Test_mirror_show +++ b/system/t04_mirror/CreateMirror3Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main, contrib Architectures: i386, amd64 Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror7Test_mirror_show b/system/t04_mirror/CreateMirror7Test_mirror_show index c53b3f5c..9f0029af 100644 --- a/system/t04_mirror/CreateMirror7Test_mirror_show +++ b/system/t04_mirror/CreateMirror7Test_mirror_show @@ -4,6 +4,7 @@ Distribution: wheezy Components: main, contrib Architectures: i386, amd64 Download Sources: no +Download .udebs: no Last update: never Information from release file: diff --git a/system/t04_mirror/CreateMirror9Test_mirror_show b/system/t04_mirror/CreateMirror9Test_mirror_show index e6d63aa5..1243bde1 100644 --- a/system/t04_mirror/CreateMirror9Test_mirror_show +++ b/system/t04_mirror/CreateMirror9Test_mirror_show @@ -4,6 +4,7 @@ Distribution: squeeze-backports Components: main, contrib, non-free Architectures: amd64, armel, i386, ia64, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, sparc Download Sources: no +Download .udebs: no Last update: never Information from release file: @@ -11,11 +12,9 @@ Architectures: amd64 armel i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel po ButAutomaticUpgrades: yes Codename: squeeze-backports Components: main contrib non-free -Date: Fri, 07 Feb 2014 02:56:49 UTC Description: Backports for the Squeeze Distribution Label: Debian Backports NotAutomatic: yes Origin: Debian Backports Suite: squeeze-backports -Valid-Until: Fri, 14 Feb 2014 02:56:49 UTC From db499f872d3d47366f9f124f4f33ca47e90b8c18 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Sat, 27 Sep 2014 01:39:02 +0400 Subject: [PATCH 07/19] Major refactoring of the publishing method, now uses helper indexFile(s). #108 --- deb/index_files.go | 254 ++++++++++++++++++ deb/publish.go | 252 +++++------------ system/t06_publish/PublishRepo12Test_gold | 3 +- system/t06_publish/PublishRepo14Test_gold | 3 +- system/t06_publish/PublishRepo15Test_gold | 3 +- system/t06_publish/PublishRepo16Test_gold | 3 +- system/t06_publish/PublishRepo17Test_gold | 3 +- system/t06_publish/PublishRepo18Test_gold | 3 +- system/t06_publish/PublishRepo1Test_gold | 3 +- system/t06_publish/PublishRepo25Test_gold | 3 +- system/t06_publish/PublishRepo26Test_gold | 3 +- system/t06_publish/PublishRepo2Test_gold | 3 +- system/t06_publish/PublishRepo3Test_gold | 3 +- system/t06_publish/PublishRepo4Test_gold | 3 +- system/t06_publish/PublishSnapshot13Test_gold | 3 +- system/t06_publish/PublishSnapshot15Test_gold | 3 +- system/t06_publish/PublishSnapshot16Test_gold | 3 +- system/t06_publish/PublishSnapshot17Test_gold | 3 +- system/t06_publish/PublishSnapshot19Test_gold | 3 +- system/t06_publish/PublishSnapshot1Test_gold | 3 +- system/t06_publish/PublishSnapshot20Test_gold | 3 +- system/t06_publish/PublishSnapshot22Test_gold | 3 +- system/t06_publish/PublishSnapshot23Test_gold | 3 +- system/t06_publish/PublishSnapshot24Test_gold | 3 +- system/t06_publish/PublishSnapshot25Test_gold | 3 +- system/t06_publish/PublishSnapshot26Test_gold | 3 +- system/t06_publish/PublishSnapshot27Test_gold | 3 +- system/t06_publish/PublishSnapshot2Test_gold | 3 +- system/t06_publish/PublishSnapshot34Test_gold | 3 +- system/t06_publish/PublishSnapshot3Test_gold | 3 +- system/t06_publish/PublishSnapshot4Test_gold | 3 +- system/t06_publish/PublishSnapshot5Test_gold | 3 +- system/t06_publish/PublishSwitch11Test_gold | 1 + system/t06_publish/PublishSwitch1Test_gold | 1 + system/t06_publish/PublishSwitch2Test_gold | 1 + system/t06_publish/PublishSwitch3Test_gold | 1 + system/t06_publish/PublishSwitch4Test_gold | 1 + system/t06_publish/PublishSwitch8Test_gold | 1 + system/t06_publish/PublishUpdate10Test_gold | 1 + system/t06_publish/PublishUpdate1Test_gold | 1 + system/t06_publish/PublishUpdate2Test_gold | 1 + system/t06_publish/PublishUpdate3Test_gold | 1 + system/t06_publish/PublishUpdate4Test_gold | 1 + system/t06_publish/PublishUpdate7Test_gold | 1 + system/t06_publish/PublishUpdate8Test_gold | 1 + 45 files changed, 399 insertions(+), 210 deletions(-) create mode 100644 deb/index_files.go diff --git a/deb/index_files.go b/deb/index_files.go new file mode 100644 index 00000000..a1abeaec --- /dev/null +++ b/deb/index_files.go @@ -0,0 +1,254 @@ +package deb + +import ( + "bufio" + "fmt" + "github.com/smira/aptly/aptly" + "github.com/smira/aptly/utils" + "os" + "path/filepath" + "strings" +) + +type indexFiles struct { + publishedStorage aptly.PublishedStorage + basePath string + renameMap map[string]string + generatedFiles map[string]utils.ChecksumInfo + tempDir string + suffix string + indexes map[string]*indexFile +} + +type indexFile struct { + parent *indexFiles + discardable bool + compressable bool + signable bool + relativePath string + tempFilename string + tempFile *os.File + w *bufio.Writer +} + +func (file *indexFile) BufWriter() (*bufio.Writer, error) { + if file.w == nil { + var err error + file.tempFilename = filepath.Join(file.parent.tempDir, strings.Replace(file.relativePath, "/", "_", -1)) + file.tempFile, err = os.Create(file.tempFilename) + if err != nil { + return nil, fmt.Errorf("unable to create temporary index file: %s", err) + } + + file.w = bufio.NewWriter(file.tempFile) + } + + return file.w, nil +} + +func (file *indexFile) Finalize(signer utils.Signer) error { + if file.w == nil { + if file.discardable { + return nil + } + file.BufWriter() + } + + err := file.w.Flush() + if err != nil { + file.tempFile.Close() + return fmt.Errorf("unable to write to index file: %s", err) + } + + if file.compressable { + err = utils.CompressFile(file.tempFile) + if err != nil { + file.tempFile.Close() + return fmt.Errorf("unable to compress index file: %s", err) + } + } + + file.tempFile.Close() + + exts := []string{""} + if file.compressable { + exts = append(exts, ".gz", ".bz2") + } + + for _, ext := range exts { + var checksumInfo utils.ChecksumInfo + + checksumInfo, err = utils.ChecksumsForFile(file.tempFilename + ext) + if err != nil { + return fmt.Errorf("unable to collect checksums: %s", err) + } + file.parent.generatedFiles[file.relativePath+ext] = checksumInfo + } + + err = file.parent.publishedStorage.MkDir(filepath.Dir(filepath.Join(file.parent.basePath, file.relativePath))) + if err != nil { + return fmt.Errorf("unable to create dir: %s", err) + } + + for _, ext := range exts { + err = file.parent.publishedStorage.PutFile(filepath.Join(file.parent.basePath, file.relativePath+file.parent.suffix+ext), + file.tempFilename+ext) + if err != nil { + return fmt.Errorf("unable to publish file: %s", err) + } + + if file.parent.suffix != "" { + file.parent.renameMap[filepath.Join(file.parent.basePath, file.relativePath+file.parent.suffix+ext)] = + filepath.Join(file.parent.basePath, file.relativePath+ext) + } + } + + if file.signable && signer != nil { + err = signer.DetachedSign(file.tempFilename, file.tempFilename+".gpg") + if err != nil { + return fmt.Errorf("unable to detached sign file: %s", err) + } + + err = signer.ClearSign(file.tempFilename, filepath.Join(filepath.Dir(file.tempFilename), "In"+filepath.Base(file.tempFilename))) + if err != nil { + return fmt.Errorf("unable to clearsign file: %s", err) + } + + if file.parent.suffix != "" { + file.parent.renameMap[filepath.Join(file.parent.basePath, file.relativePath+file.parent.suffix+".gpg")] = + filepath.Join(file.parent.basePath, file.relativePath+".gpg") + file.parent.renameMap[filepath.Join(file.parent.basePath, "In"+file.relativePath+file.parent.suffix)] = + filepath.Join(file.parent.basePath, "In"+file.relativePath) + } + + err = file.parent.publishedStorage.PutFile(filepath.Join(file.parent.basePath, file.relativePath+file.parent.suffix+".gpg"), + file.tempFilename+".gpg") + if err != nil { + return fmt.Errorf("unable to publish file: %s", err) + } + + err = file.parent.publishedStorage.PutFile(filepath.Join(file.parent.basePath, "In"+file.relativePath+file.parent.suffix), + filepath.Join(filepath.Dir(file.tempFilename), "In"+filepath.Base(file.tempFilename))) + if err != nil { + return fmt.Errorf("unable to publish file: %s", err) + } + } + + return nil +} + +func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, suffix string) *indexFiles { + return &indexFiles{ + publishedStorage: publishedStorage, + basePath: basePath, + renameMap: make(map[string]string), + generatedFiles: make(map[string]utils.ChecksumInfo), + tempDir: tempDir, + suffix: suffix, + indexes: make(map[string]*indexFile), + } +} + +func (files *indexFiles) PackageIndex(component, arch string, udeb bool) *indexFile { + key := fmt.Sprintf("pi-%s-%s-%s", component, arch, udeb) + file, ok := files.indexes[key] + if !ok { + var relativePath string + + if arch == "source" { + relativePath = filepath.Join(component, "source", "Sources") + } else { + if udeb { + relativePath = filepath.Join(component, "debian-installer", fmt.Sprintf("binary-%s", arch), "Packages") + } else { + relativePath = filepath.Join(component, fmt.Sprintf("binary-%s", arch), "Packages") + } + } + + file = &indexFile{ + parent: files, + discardable: udeb, + compressable: true, + signable: false, + relativePath: relativePath, + } + + files.indexes[key] = file + } + + return file +} + +func (files *indexFiles) ReleaseIndex(component, arch string, udeb bool) *indexFile { + key := fmt.Sprintf("ri-%s-%s-%s", component, arch, udeb) + file, ok := files.indexes[key] + if !ok { + var relativePath string + + if arch == "source" { + relativePath = filepath.Join(component, "source", "Release") + } else { + if udeb { + relativePath = filepath.Join(component, "debian-installer", fmt.Sprintf("binary-%s", arch), "Release") + } else { + relativePath = filepath.Join(component, fmt.Sprintf("binary-%s", arch), "Release") + } + } + + file = &indexFile{ + parent: files, + discardable: udeb, + compressable: false, + signable: false, + relativePath: relativePath, + } + + files.indexes[key] = file + } + + return file +} + +func (files *indexFiles) ReleaseFile() *indexFile { + return &indexFile{ + parent: files, + discardable: false, + compressable: false, + signable: true, + relativePath: "Release", + } +} + +func (files *indexFiles) FinalizeAll(progress aptly.Progress) (err error) { + if progress != nil { + progress.InitBar(int64(len(files.indexes)), false) + defer progress.ShutdownBar() + } + + for _, file := range files.indexes { + err = file.Finalize(nil) + if err != nil { + return + } + if progress != nil { + progress.AddBar(1) + } + } + + files.indexes = make(map[string]*indexFile) + + return +} + +func (files *indexFiles) RenameFiles() error { + var err error + + for oldName, newName := range files.renameMap { + err = files.publishedStorage.RenameFile(oldName, newName) + if err != nil { + return fmt.Errorf("unable to rename: %s", err) + } + } + + return nil +} diff --git a/deb/publish.go b/deb/publish.go index efb9969a..b1688492 100644 --- a/deb/publish.go +++ b/deb/publish.go @@ -1,7 +1,6 @@ package deb import ( - "bufio" "bytes" "code.google.com/p/go-uuid/uuid" "fmt" @@ -440,9 +439,6 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP suffix = ".tmp" } - generatedFiles := map[string]utils.ChecksumInfo{} - renameMap := map[string]string{} - if progress != nil { progress.Printf("Generating metadata files and linking package files...\n") } @@ -454,41 +450,36 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP } defer os.RemoveAll(tempDir) + indexes := newIndexFiles(publishedStorage, basePath, tempDir, suffix) + for component, list := range lists { - var relativePath string + hadUdebs := false - // For all architectures, generate packages/sources files + // For all architectures, pregenerate packages/sources files for _, arch := range p.Architectures { + indexes.PackageIndex(component, arch, false) + } + + if progress != nil { + progress.InitBar(int64(list.Len()), false) + } + + err = list.ForEach(func(pkg *Package) error { if progress != nil { - progress.InitBar(int64(list.Len()), false) + progress.AddBar(1) } - if arch == "source" { - relativePath = filepath.Join(component, "source", "Sources") - } else { - relativePath = filepath.Join(component, fmt.Sprintf("binary-%s", arch), "Packages") - } - err = publishedStorage.MkDir(filepath.Dir(filepath.Join(basePath, relativePath))) - if err != nil { - return err - } - - var packagesFile *os.File - - packagesFileName := filepath.Join(tempDir, fmt.Sprintf("pkgs_%s_%s", component, arch)) - packagesFile, err = os.Create(packagesFileName) - if err != nil { - return fmt.Errorf("unable to create temporary Packages file: %s", err) - } - - bufWriter := bufio.NewWriter(packagesFile) - - err = list.ForEach(func(pkg *Package) error { - if progress != nil { - progress.AddBar(1) + if pkg.Architecture == "all" || utils.StrSliceHasItem(p.Architectures, pkg.Architecture) { + hadUdebs = hadUdebs || pkg.IsUdeb + err = pkg.LinkFromPool(publishedStorage, packagePool, p.Prefix, component, forceOverwrite) + if err != nil { + return err } + } + + for _, arch := range p.Architectures { if pkg.MatchesArchitecture(arch) { - err = pkg.LinkFromPool(publishedStorage, packagePool, p.Prefix, component, forceOverwrite) + bufWriter, err := indexes.PackageIndex(component, arch, pkg.IsUdeb).BufWriter() if err != nil { return err } @@ -501,113 +492,58 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP if err != nil { return err } - - pkg.files = nil - pkg.deps = nil - pkg.extra = nil - - } - - return nil - }) - - if err != nil { - return fmt.Errorf("unable to process packages: %s", err) - } - - err = bufWriter.Flush() - if err != nil { - return fmt.Errorf("unable to write Packages file: %s", err) - } - - err = utils.CompressFile(packagesFile) - if err != nil { - return fmt.Errorf("unable to compress Packages files: %s", err) - } - - packagesFile.Close() - - for _, ext := range []string{"", ".gz", ".bz2"} { - var checksumInfo utils.ChecksumInfo - - checksumInfo, err = utils.ChecksumsForFile(packagesFileName + ext) - if err != nil { - return fmt.Errorf("unable to collect checksums: %s", err) - } - generatedFiles[relativePath+ext] = checksumInfo - - err = publishedStorage.PutFile(filepath.Join(basePath, relativePath+suffix+ext), packagesFileName+ext) - if err != nil { - return fmt.Errorf("unable to publish file: %s", err) - } - - if suffix != "" { - renameMap[filepath.Join(basePath, relativePath+suffix+ext)] = filepath.Join(basePath, relativePath+ext) } } - if progress != nil { - progress.ShutdownBar() - } + pkg.files = nil + pkg.deps = nil + pkg.extra = nil + + return nil + }) + + if err != nil { + return fmt.Errorf("unable to process packages: %s", err) + } + + if progress != nil { + progress.ShutdownBar() + } + + udebs := []bool{false} + if hadUdebs { + udebs = append(udebs, true) } // For all architectures, generate Release files for _, arch := range p.Architectures { - release := make(Stanza) - release["Archive"] = p.Distribution - release["Architecture"] = arch - release["Component"] = component - release["Origin"] = p.GetOrigin() - release["Label"] = p.GetLabel() + for _, udeb := range udebs { + release := make(Stanza) + release["Archive"] = p.Distribution + release["Architecture"] = arch + release["Component"] = component + release["Origin"] = p.GetOrigin() + release["Label"] = p.GetLabel() - if arch == "source" { - relativePath = filepath.Join(component, "source", "Release") - } else { - relativePath = filepath.Join(component, fmt.Sprintf("binary-%s", arch), "Release") + bufWriter, err := indexes.ReleaseIndex(component, arch, udeb).BufWriter() + + err = release.WriteTo(bufWriter) + if err != nil { + return fmt.Errorf("unable to create Release file: %s", err) + } } - - var file *os.File - - fileName := filepath.Join(tempDir, fmt.Sprintf("release_%s_%s", component, arch)) - file, err = os.Create(fileName) - if err != nil { - return fmt.Errorf("unable to create temporary Release file: %s", err) - } - - bufWriter := bufio.NewWriter(file) - - err = release.WriteTo(bufWriter) - if err != nil { - return fmt.Errorf("unable to create Release file: %s", err) - } - - err = bufWriter.Flush() - if err != nil { - return fmt.Errorf("unable to create Release file: %s", err) - } - - file.Close() - - var checksumInfo utils.ChecksumInfo - checksumInfo, err = utils.ChecksumsForFile(fileName) - if err != nil { - return fmt.Errorf("unable to collect checksums: %s", err) - } - generatedFiles[relativePath] = checksumInfo - - err = publishedStorage.PutFile(filepath.Join(basePath, relativePath+suffix), fileName) - if err != nil { - file.Close() - return fmt.Errorf("unable to publish file: %s", err) - } - - if suffix != "" { - renameMap[filepath.Join(basePath, relativePath+suffix)] = filepath.Join(basePath, relativePath) - } - } } + if progress != nil { + progress.Printf("Finalizing metadata files...\n") + } + + err = indexes.FinalizeAll(progress) + if err != nil { + return err + } + release := make(Stanza) release["Origin"] = p.GetOrigin() release["Label"] = p.GetLabel() @@ -621,80 +557,36 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP release["Components"] = strings.Join(p.Components(), " ") - for path, info := range generatedFiles { + for path, info := range indexes.generatedFiles { release["MD5Sum"] += fmt.Sprintf(" %s %8d %s\n", info.MD5, info.Size, path) release["SHA1"] += fmt.Sprintf(" %s %8d %s\n", info.SHA1, info.Size, path) release["SHA256"] += fmt.Sprintf(" %s %8d %s\n", info.SHA256, info.Size, path) } - var releaseFile *os.File - releaseFilename := filepath.Join(tempDir, "Release") - releaseFile, err = os.Create(releaseFilename) + releaseFile := indexes.ReleaseFile() + bufWriter, err := releaseFile.BufWriter() if err != nil { - return fmt.Errorf("unable to create temporary Release file: %s", err) + return err } - bufWriter := bufio.NewWriter(releaseFile) - err = release.WriteTo(bufWriter) if err != nil { return fmt.Errorf("unable to create Release file: %s", err) } - err = bufWriter.Flush() - if err != nil { - return fmt.Errorf("unable to create Release file: %s", err) - } - - releaseFile.Close() - - if suffix != "" { - renameMap[filepath.Join(basePath, "Release"+suffix)] = filepath.Join(basePath, "Release") - } - - err = publishedStorage.PutFile(filepath.Join(basePath, "Release"+suffix), releaseFilename) - if err != nil { - return fmt.Errorf("unable to publish file: %s", err) - } - // Signing files might output to console, so flush progress writer first if progress != nil { progress.Flush() } - if signer != nil { - err = signer.DetachedSign(releaseFilename, releaseFilename+".gpg") - if err != nil { - return fmt.Errorf("unable to sign Release file: %s", err) - } - - err = signer.ClearSign(releaseFilename, filepath.Join(filepath.Dir(releaseFilename), "InRelease"+suffix)) - if err != nil { - return fmt.Errorf("unable to sign Release file: %s", err) - } - - if suffix != "" { - renameMap[filepath.Join(basePath, "Release"+suffix+".gpg")] = filepath.Join(basePath, "Release.gpg") - renameMap[filepath.Join(basePath, "InRelease"+suffix)] = filepath.Join(basePath, "InRelease") - } - - err = publishedStorage.PutFile(filepath.Join(basePath, "Release"+suffix+".gpg"), releaseFilename+".gpg") - if err != nil { - return fmt.Errorf("unable to publish file: %s", err) - } - - err = publishedStorage.PutFile(filepath.Join(basePath, "InRelease"+suffix), - filepath.Join(filepath.Dir(releaseFilename), "InRelease"+suffix)) - if err != nil { - return fmt.Errorf("unable to publish file: %s", err) - } + err = releaseFile.Finalize(signer) + if err != nil { + return err } - for oldName, newName := range renameMap { - err = publishedStorage.RenameFile(oldName, newName) - if err != nil { - return fmt.Errorf("unable to rename: %s", err) - } + err = indexes.RenameFiles() + if err != nil { + return err } return nil diff --git a/system/t06_publish/PublishRepo12Test_gold b/system/t06_publish/PublishRepo12Test_gold index bee36b01..1525e376 100644 --- a/system/t06_publish/PublishRepo12Test_gold +++ b/system/t06_publish/PublishRepo12Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo14Test_gold b/system/t06_publish/PublishRepo14Test_gold index 443899a1..1816ac7e 100644 --- a/system/t06_publish/PublishRepo14Test_gold +++ b/system/t06_publish/PublishRepo14Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib deb-src http://your-server/ maverick contrib diff --git a/system/t06_publish/PublishRepo15Test_gold b/system/t06_publish/PublishRepo15Test_gold index 443899a1..1816ac7e 100644 --- a/system/t06_publish/PublishRepo15Test_gold +++ b/system/t06_publish/PublishRepo15Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib deb-src http://your-server/ maverick contrib diff --git a/system/t06_publish/PublishRepo16Test_gold b/system/t06_publish/PublishRepo16Test_gold index 906bdcea..66a427d4 100644 --- a/system/t06_publish/PublishRepo16Test_gold +++ b/system/t06_publish/PublishRepo16Test_gold @@ -1,11 +1,12 @@ Warning: publishing from empty source, architectures list should be complete, it can't be changed after publishing (use -architectures flag) Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo17Test_gold b/system/t06_publish/PublishRepo17Test_gold index 707a2715..79cc567d 100644 --- a/system/t06_publish/PublishRepo17Test_gold +++ b/system/t06_publish/PublishRepo17Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repos repo1, repo2 have been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib main deb-src http://your-server/ maverick contrib main diff --git a/system/t06_publish/PublishRepo18Test_gold b/system/t06_publish/PublishRepo18Test_gold index a105d5fc..01ea1ce7 100644 --- a/system/t06_publish/PublishRepo18Test_gold +++ b/system/t06_publish/PublishRepo18Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repos repo1, repo2 have been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze contrib main deb-src http://your-server/ squeeze contrib main diff --git a/system/t06_publish/PublishRepo1Test_gold b/system/t06_publish/PublishRepo1Test_gold index 8b8f3486..67294302 100644 --- a/system/t06_publish/PublishRepo1Test_gold +++ b/system/t06_publish/PublishRepo1Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo25Test_gold b/system/t06_publish/PublishRepo25Test_gold index 63326118..21feaebc 100644 --- a/system/t06_publish/PublishRepo25Test_gold +++ b/system/t06_publish/PublishRepo25Test_gold @@ -2,11 +2,12 @@ WARNING: force overwrite mode enabled, aptly might corrupt other published repos Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo2 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main deb-src http://your-server/ squeeze main diff --git a/system/t06_publish/PublishRepo26Test_gold b/system/t06_publish/PublishRepo26Test_gold index 8b8f3486..67294302 100644 --- a/system/t06_publish/PublishRepo26Test_gold +++ b/system/t06_publish/PublishRepo26Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo2Test_gold b/system/t06_publish/PublishRepo2Test_gold index 443899a1..1816ac7e 100644 --- a/system/t06_publish/PublishRepo2Test_gold +++ b/system/t06_publish/PublishRepo2Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib deb-src http://your-server/ maverick contrib diff --git a/system/t06_publish/PublishRepo3Test_gold b/system/t06_publish/PublishRepo3Test_gold index 4aa7a0e2..dcaccb48 100644 --- a/system/t06_publish/PublishRepo3Test_gold +++ b/system/t06_publish/PublishRepo3Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishRepo4Test_gold b/system/t06_publish/PublishRepo4Test_gold index 0e0a9c7b..f6bc914a 100644 --- a/system/t06_publish/PublishRepo4Test_gold +++ b/system/t06_publish/PublishRepo4Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ppa/ maverick main deb-src http://your-server/ppa/ maverick main diff --git a/system/t06_publish/PublishSnapshot13Test_gold b/system/t06_publish/PublishSnapshot13Test_gold index 848cd407..b7cb4131 100644 --- a/system/t06_publish/PublishSnapshot13Test_gold +++ b/system/t06_publish/PublishSnapshot13Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Snapshot snap13 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot15Test_gold b/system/t06_publish/PublishSnapshot15Test_gold index e0fafd8c..721bc04c 100644 --- a/system/t06_publish/PublishSnapshot15Test_gold +++ b/system/t06_publish/PublishSnapshot15Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Snapshot snap15 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot16Test_gold b/system/t06_publish/PublishSnapshot16Test_gold index e7518879..c35c533b 100644 --- a/system/t06_publish/PublishSnapshot16Test_gold +++ b/system/t06_publish/PublishSnapshot16Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap16 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot17Test_gold b/system/t06_publish/PublishSnapshot17Test_gold index a1d7e456..dd40f1a4 100644 --- a/system/t06_publish/PublishSnapshot17Test_gold +++ b/system/t06_publish/PublishSnapshot17Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap17 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot19Test_gold b/system/t06_publish/PublishSnapshot19Test_gold index 17f563c4..0351f26c 100644 --- a/system/t06_publish/PublishSnapshot19Test_gold +++ b/system/t06_publish/PublishSnapshot19Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Snapshot snap5 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot1Test_gold b/system/t06_publish/PublishSnapshot1Test_gold index f21e3054..c3ebba3f 100644 --- a/system/t06_publish/PublishSnapshot1Test_gold +++ b/system/t06_publish/PublishSnapshot1Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap1 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot20Test_gold b/system/t06_publish/PublishSnapshot20Test_gold index 1ff04477..c86a36ba 100644 --- a/system/t06_publish/PublishSnapshot20Test_gold +++ b/system/t06_publish/PublishSnapshot20Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot22Test_gold b/system/t06_publish/PublishSnapshot22Test_gold index 1ff04477..c86a36ba 100644 --- a/system/t06_publish/PublishSnapshot22Test_gold +++ b/system/t06_publish/PublishSnapshot22Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot23Test_gold b/system/t06_publish/PublishSnapshot23Test_gold index 1ff04477..c86a36ba 100644 --- a/system/t06_publish/PublishSnapshot23Test_gold +++ b/system/t06_publish/PublishSnapshot23Test_gold @@ -1,8 +1,9 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot24Test_gold b/system/t06_publish/PublishSnapshot24Test_gold index 92859d40..2724a49c 100644 --- a/system/t06_publish/PublishSnapshot24Test_gold +++ b/system/t06_publish/PublishSnapshot24Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap24 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot25Test_gold b/system/t06_publish/PublishSnapshot25Test_gold index 1b95a2eb..883869f5 100644 --- a/system/t06_publish/PublishSnapshot25Test_gold +++ b/system/t06_publish/PublishSnapshot25Test_gold @@ -1,11 +1,12 @@ Warning: publishing from empty source, architectures list should be complete, it can't be changed after publishing (use -architectures flag) Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap25 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot26Test_gold b/system/t06_publish/PublishSnapshot26Test_gold index b7def77e..b3ef3d42 100644 --- a/system/t06_publish/PublishSnapshot26Test_gold +++ b/system/t06_publish/PublishSnapshot26Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshots snap26.1, snap26.2 have been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib main deb-src http://your-server/ maverick contrib main diff --git a/system/t06_publish/PublishSnapshot27Test_gold b/system/t06_publish/PublishSnapshot27Test_gold index 604b8d09..8e6e1e61 100644 --- a/system/t06_publish/PublishSnapshot27Test_gold +++ b/system/t06_publish/PublishSnapshot27Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshots snap27.1, snap27.2 have been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib main deb-src http://your-server/ maverick contrib main diff --git a/system/t06_publish/PublishSnapshot2Test_gold b/system/t06_publish/PublishSnapshot2Test_gold index 950aab8b..81be488d 100644 --- a/system/t06_publish/PublishSnapshot2Test_gold +++ b/system/t06_publish/PublishSnapshot2Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap2 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot34Test_gold b/system/t06_publish/PublishSnapshot34Test_gold index 2a851c89..26d73dd0 100644 --- a/system/t06_publish/PublishSnapshot34Test_gold +++ b/system/t06_publish/PublishSnapshot34Test_gold @@ -2,11 +2,12 @@ WARNING: force overwrite mode enabled, aptly might corrupt other published repos Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap2 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main deb-src http://your-server/ squeeze main diff --git a/system/t06_publish/PublishSnapshot3Test_gold b/system/t06_publish/PublishSnapshot3Test_gold index 0b1abe52..3a5ad6e6 100644 --- a/system/t06_publish/PublishSnapshot3Test_gold +++ b/system/t06_publish/PublishSnapshot3Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze contrib Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot4Test_gold b/system/t06_publish/PublishSnapshot4Test_gold index 817f40ae..241d5156 100644 --- a/system/t06_publish/PublishSnapshot4Test_gold +++ b/system/t06_publish/PublishSnapshot4Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap4 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot5Test_gold b/system/t06_publish/PublishSnapshot5Test_gold index 67cf0fc2..34badbc3 100644 --- a/system/t06_publish/PublishSnapshot5Test_gold +++ b/system/t06_publish/PublishSnapshot5Test_gold @@ -1,10 +1,11 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap5 has been successfully published. -Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ppa/smira/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSwitch11Test_gold b/system/t06_publish/PublishSwitch11Test_gold index 038992dd..2385a0ed 100644 --- a/system/t06_publish/PublishSwitch11Test_gold +++ b/system/t06_publish/PublishSwitch11Test_gold @@ -2,6 +2,7 @@ WARNING: force overwrite mode enabled, aptly might corrupt other published repos Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishSwitch1Test_gold b/system/t06_publish/PublishSwitch1Test_gold index 4718a447..3369aa06 100644 --- a/system/t06_publish/PublishSwitch1Test_gold +++ b/system/t06_publish/PublishSwitch1Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishSwitch2Test_gold b/system/t06_publish/PublishSwitch2Test_gold index 43468d71..c8464423 100644 --- a/system/t06_publish/PublishSwitch2Test_gold +++ b/system/t06_publish/PublishSwitch2Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "ppa" components main... diff --git a/system/t06_publish/PublishSwitch3Test_gold b/system/t06_publish/PublishSwitch3Test_gold index 4718a447..3369aa06 100644 --- a/system/t06_publish/PublishSwitch3Test_gold +++ b/system/t06_publish/PublishSwitch3Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishSwitch4Test_gold b/system/t06_publish/PublishSwitch4Test_gold index 2a0bd499..7256431a 100644 --- a/system/t06_publish/PublishSwitch4Test_gold +++ b/system/t06_publish/PublishSwitch4Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "ppa" components main... diff --git a/system/t06_publish/PublishSwitch8Test_gold b/system/t06_publish/PublishSwitch8Test_gold index e28bc2bb..d9870ff9 100644 --- a/system/t06_publish/PublishSwitch8Test_gold +++ b/system/t06_publish/PublishSwitch8Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components b, c... diff --git a/system/t06_publish/PublishUpdate10Test_gold b/system/t06_publish/PublishUpdate10Test_gold index f13cb098..bda2f4dd 100644 --- a/system/t06_publish/PublishUpdate10Test_gold +++ b/system/t06_publish/PublishUpdate10Test_gold @@ -2,6 +2,7 @@ WARNING: force overwrite mode enabled, aptly might corrupt other published repos Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishUpdate1Test_gold b/system/t06_publish/PublishUpdate1Test_gold index 9179c19d..72e92234 100644 --- a/system/t06_publish/PublishUpdate1Test_gold +++ b/system/t06_publish/PublishUpdate1Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishUpdate2Test_gold b/system/t06_publish/PublishUpdate2Test_gold index 9179c19d..72e92234 100644 --- a/system/t06_publish/PublishUpdate2Test_gold +++ b/system/t06_publish/PublishUpdate2Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishUpdate3Test_gold b/system/t06_publish/PublishUpdate3Test_gold index 9179c19d..72e92234 100644 --- a/system/t06_publish/PublishUpdate3Test_gold +++ b/system/t06_publish/PublishUpdate3Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishUpdate4Test_gold b/system/t06_publish/PublishUpdate4Test_gold index 4ebbbebe..dce245d5 100644 --- a/system/t06_publish/PublishUpdate4Test_gold +++ b/system/t06_publish/PublishUpdate4Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components main... diff --git a/system/t06_publish/PublishUpdate7Test_gold b/system/t06_publish/PublishUpdate7Test_gold index 9eb5d807..813d7055 100644 --- a/system/t06_publish/PublishUpdate7Test_gold +++ b/system/t06_publish/PublishUpdate7Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Cleaning up prefix "." components contrib, main... diff --git a/system/t06_publish/PublishUpdate8Test_gold b/system/t06_publish/PublishUpdate8Test_gold index 046785d1..09aa9845 100644 --- a/system/t06_publish/PublishUpdate8Test_gold +++ b/system/t06_publish/PublishUpdate8Test_gold @@ -1,5 +1,6 @@ Loading packages... Generating metadata files and linking package files... +Finalizing metadata files... Cleaning up prefix "." components contrib, main... Publish for local repo ./squeeze [i386] publishes {contrib: [repo2]}, {main: [repo1]} has been successfully updated. From e171f90fd5964036b84124e7a48c8d7e2e2c42cd Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Sat, 27 Sep 2014 01:56:35 +0400 Subject: [PATCH 08/19] Restore ${HOME} links. #108 --- system/t06_publish/PublishRepo12Test_gold | 2 +- system/t06_publish/PublishRepo14Test_gold | 2 +- system/t06_publish/PublishRepo15Test_gold | 2 +- system/t06_publish/PublishRepo16Test_gold | 2 +- system/t06_publish/PublishRepo17Test_gold | 2 +- system/t06_publish/PublishRepo18Test_gold | 2 +- system/t06_publish/PublishRepo1Test_gold | 2 +- system/t06_publish/PublishRepo25Test_gold | 2 +- system/t06_publish/PublishRepo26Test_gold | 2 +- system/t06_publish/PublishRepo2Test_gold | 2 +- system/t06_publish/PublishRepo3Test_gold | 2 +- system/t06_publish/PublishRepo4Test_gold | 2 +- system/t06_publish/PublishSnapshot13Test_gold | 2 +- system/t06_publish/PublishSnapshot15Test_gold | 2 +- system/t06_publish/PublishSnapshot16Test_gold | 2 +- system/t06_publish/PublishSnapshot17Test_gold | 2 +- system/t06_publish/PublishSnapshot19Test_gold | 2 +- system/t06_publish/PublishSnapshot1Test_gold | 2 +- system/t06_publish/PublishSnapshot20Test_gold | 2 +- system/t06_publish/PublishSnapshot22Test_gold | 2 +- system/t06_publish/PublishSnapshot23Test_gold | 2 +- system/t06_publish/PublishSnapshot24Test_gold | 2 +- system/t06_publish/PublishSnapshot25Test_gold | 2 +- system/t06_publish/PublishSnapshot26Test_gold | 2 +- system/t06_publish/PublishSnapshot27Test_gold | 2 +- system/t06_publish/PublishSnapshot2Test_gold | 2 +- system/t06_publish/PublishSnapshot34Test_gold | 2 +- system/t06_publish/PublishSnapshot3Test_gold | 2 +- system/t06_publish/PublishSnapshot4Test_gold | 2 +- system/t06_publish/PublishSnapshot5Test_gold | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/system/t06_publish/PublishRepo12Test_gold b/system/t06_publish/PublishRepo12Test_gold index 1525e376..ee9f9d5e 100644 --- a/system/t06_publish/PublishRepo12Test_gold +++ b/system/t06_publish/PublishRepo12Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo14Test_gold b/system/t06_publish/PublishRepo14Test_gold index 1816ac7e..c44a11e0 100644 --- a/system/t06_publish/PublishRepo14Test_gold +++ b/system/t06_publish/PublishRepo14Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib deb-src http://your-server/ maverick contrib diff --git a/system/t06_publish/PublishRepo15Test_gold b/system/t06_publish/PublishRepo15Test_gold index 1816ac7e..c44a11e0 100644 --- a/system/t06_publish/PublishRepo15Test_gold +++ b/system/t06_publish/PublishRepo15Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib deb-src http://your-server/ maverick contrib diff --git a/system/t06_publish/PublishRepo16Test_gold b/system/t06_publish/PublishRepo16Test_gold index 66a427d4..cbe2b131 100644 --- a/system/t06_publish/PublishRepo16Test_gold +++ b/system/t06_publish/PublishRepo16Test_gold @@ -6,7 +6,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo17Test_gold b/system/t06_publish/PublishRepo17Test_gold index 79cc567d..0ccea7ca 100644 --- a/system/t06_publish/PublishRepo17Test_gold +++ b/system/t06_publish/PublishRepo17Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repos repo1, repo2 have been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib main deb-src http://your-server/ maverick contrib main diff --git a/system/t06_publish/PublishRepo18Test_gold b/system/t06_publish/PublishRepo18Test_gold index 01ea1ce7..c24630e5 100644 --- a/system/t06_publish/PublishRepo18Test_gold +++ b/system/t06_publish/PublishRepo18Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repos repo1, repo2 have been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze contrib main deb-src http://your-server/ squeeze contrib main diff --git a/system/t06_publish/PublishRepo1Test_gold b/system/t06_publish/PublishRepo1Test_gold index 67294302..365295fa 100644 --- a/system/t06_publish/PublishRepo1Test_gold +++ b/system/t06_publish/PublishRepo1Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo25Test_gold b/system/t06_publish/PublishRepo25Test_gold index 21feaebc..b65dfd33 100644 --- a/system/t06_publish/PublishRepo25Test_gold +++ b/system/t06_publish/PublishRepo25Test_gold @@ -7,7 +7,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo2 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main deb-src http://your-server/ squeeze main diff --git a/system/t06_publish/PublishRepo26Test_gold b/system/t06_publish/PublishRepo26Test_gold index 67294302..365295fa 100644 --- a/system/t06_publish/PublishRepo26Test_gold +++ b/system/t06_publish/PublishRepo26Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishRepo2Test_gold b/system/t06_publish/PublishRepo2Test_gold index 1816ac7e..c44a11e0 100644 --- a/system/t06_publish/PublishRepo2Test_gold +++ b/system/t06_publish/PublishRepo2Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib deb-src http://your-server/ maverick contrib diff --git a/system/t06_publish/PublishRepo3Test_gold b/system/t06_publish/PublishRepo3Test_gold index dcaccb48..0b9fb7c9 100644 --- a/system/t06_publish/PublishRepo3Test_gold +++ b/system/t06_publish/PublishRepo3Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishRepo4Test_gold b/system/t06_publish/PublishRepo4Test_gold index f6bc914a..82b3864d 100644 --- a/system/t06_publish/PublishRepo4Test_gold +++ b/system/t06_publish/PublishRepo4Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Local repo local-repo has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ppa/ maverick main deb-src http://your-server/ppa/ maverick main diff --git a/system/t06_publish/PublishSnapshot13Test_gold b/system/t06_publish/PublishSnapshot13Test_gold index b7cb4131..e9a324b8 100644 --- a/system/t06_publish/PublishSnapshot13Test_gold +++ b/system/t06_publish/PublishSnapshot13Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Snapshot snap13 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot15Test_gold b/system/t06_publish/PublishSnapshot15Test_gold index 721bc04c..b5b73ebe 100644 --- a/system/t06_publish/PublishSnapshot15Test_gold +++ b/system/t06_publish/PublishSnapshot15Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Snapshot snap15 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot16Test_gold b/system/t06_publish/PublishSnapshot16Test_gold index c35c533b..0befa253 100644 --- a/system/t06_publish/PublishSnapshot16Test_gold +++ b/system/t06_publish/PublishSnapshot16Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap16 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot17Test_gold b/system/t06_publish/PublishSnapshot17Test_gold index dd40f1a4..66bc66b4 100644 --- a/system/t06_publish/PublishSnapshot17Test_gold +++ b/system/t06_publish/PublishSnapshot17Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap17 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot19Test_gold b/system/t06_publish/PublishSnapshot19Test_gold index 0351f26c..4546c238 100644 --- a/system/t06_publish/PublishSnapshot19Test_gold +++ b/system/t06_publish/PublishSnapshot19Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Snapshot snap5 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot1Test_gold b/system/t06_publish/PublishSnapshot1Test_gold index c3ebba3f..8cf10f19 100644 --- a/system/t06_publish/PublishSnapshot1Test_gold +++ b/system/t06_publish/PublishSnapshot1Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap1 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot20Test_gold b/system/t06_publish/PublishSnapshot20Test_gold index c86a36ba..648d37fb 100644 --- a/system/t06_publish/PublishSnapshot20Test_gold +++ b/system/t06_publish/PublishSnapshot20Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot22Test_gold b/system/t06_publish/PublishSnapshot22Test_gold index c86a36ba..648d37fb 100644 --- a/system/t06_publish/PublishSnapshot22Test_gold +++ b/system/t06_publish/PublishSnapshot22Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot23Test_gold b/system/t06_publish/PublishSnapshot23Test_gold index c86a36ba..648d37fb 100644 --- a/system/t06_publish/PublishSnapshot23Test_gold +++ b/system/t06_publish/PublishSnapshot23Test_gold @@ -3,7 +3,7 @@ Generating metadata files and linking package files... Finalizing metadata files... Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main deb-src http://your-server/ maverick main diff --git a/system/t06_publish/PublishSnapshot24Test_gold b/system/t06_publish/PublishSnapshot24Test_gold index 2724a49c..b951722b 100644 --- a/system/t06_publish/PublishSnapshot24Test_gold +++ b/system/t06_publish/PublishSnapshot24Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap24 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot25Test_gold b/system/t06_publish/PublishSnapshot25Test_gold index 883869f5..6e087c6e 100644 --- a/system/t06_publish/PublishSnapshot25Test_gold +++ b/system/t06_publish/PublishSnapshot25Test_gold @@ -6,7 +6,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap25 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot26Test_gold b/system/t06_publish/PublishSnapshot26Test_gold index b3ef3d42..b59e5089 100644 --- a/system/t06_publish/PublishSnapshot26Test_gold +++ b/system/t06_publish/PublishSnapshot26Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshots snap26.1, snap26.2 have been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib main deb-src http://your-server/ maverick contrib main diff --git a/system/t06_publish/PublishSnapshot27Test_gold b/system/t06_publish/PublishSnapshot27Test_gold index 8e6e1e61..3e4d4262 100644 --- a/system/t06_publish/PublishSnapshot27Test_gold +++ b/system/t06_publish/PublishSnapshot27Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshots snap27.1, snap27.2 have been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ maverick contrib main deb-src http://your-server/ maverick contrib main diff --git a/system/t06_publish/PublishSnapshot2Test_gold b/system/t06_publish/PublishSnapshot2Test_gold index 81be488d..045b14e7 100644 --- a/system/t06_publish/PublishSnapshot2Test_gold +++ b/system/t06_publish/PublishSnapshot2Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap2 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot34Test_gold b/system/t06_publish/PublishSnapshot34Test_gold index 26d73dd0..aa3529d9 100644 --- a/system/t06_publish/PublishSnapshot34Test_gold +++ b/system/t06_publish/PublishSnapshot34Test_gold @@ -7,7 +7,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap2 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main deb-src http://your-server/ squeeze main diff --git a/system/t06_publish/PublishSnapshot3Test_gold b/system/t06_publish/PublishSnapshot3Test_gold index 3a5ad6e6..ce8cd03c 100644 --- a/system/t06_publish/PublishSnapshot3Test_gold +++ b/system/t06_publish/PublishSnapshot3Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap3 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze contrib Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot4Test_gold b/system/t06_publish/PublishSnapshot4Test_gold index 241d5156..f4fe3441 100644 --- a/system/t06_publish/PublishSnapshot4Test_gold +++ b/system/t06_publish/PublishSnapshot4Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap4 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/PublishSnapshot5Test_gold b/system/t06_publish/PublishSnapshot5Test_gold index 34badbc3..11b57889 100644 --- a/system/t06_publish/PublishSnapshot5Test_gold +++ b/system/t06_publish/PublishSnapshot5Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot snap5 has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ppa/smira/ squeeze main Don't forget to add your GPG key to apt with apt-key. From b365e5e0b2c26eeb51e8f7d81e75374cd22702df Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Sat, 27 Sep 2014 02:15:08 +0400 Subject: [PATCH 09/19] System test: regular publish doesn't generate debian-installer files. #108 --- system/t06_publish/snapshot.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py index 10d26b36..2786b4a1 100644 --- a/system/t06_publish/snapshot.py +++ b/system/t06_publish/snapshot.py @@ -27,12 +27,16 @@ class PublishSnapshot1Test(BaseTest): self.check_exists('public/dists/maverick/Release') self.check_exists('public/dists/maverick/Release.gpg') + self.check_exists('public/dists/maverick/main/binary-i386/Release') self.check_exists('public/dists/maverick/main/binary-i386/Packages') self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz') self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2') + self.check_exists('public/dists/maverick/main/binary-amd64/Release') self.check_exists('public/dists/maverick/main/binary-amd64/Packages') self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz') self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2') + self.check_not_exists('public/dists/maverick/main/debian-installer/binary-i386/Packages') + self.check_not_exists('public/dists/maverick/main/debian-installer/binary-amd64/Packages') self.check_exists('public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb') From 2ae34cd8730a68f7d45b28c78cb0601ed984a2dd Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 19:39:31 +0400 Subject: [PATCH 10/19] Use Package.MatchesArchitecture instead of homegrown function. #108 --- deb/publish.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/deb/publish.go b/deb/publish.go index b1688492..22b81e21 100644 --- a/deb/publish.go +++ b/deb/publish.go @@ -469,7 +469,15 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP progress.AddBar(1) } - if pkg.Architecture == "all" || utils.StrSliceHasItem(p.Architectures, pkg.Architecture) { + matches := false + for _, arch := range p.Architectures { + if pkg.MatchesArchitecture(arch) { + matches = true + break + } + } + + if matches { hadUdebs = hadUdebs || pkg.IsUdeb err = pkg.LinkFromPool(publishedStorage, packagePool, p.Prefix, component, forceOverwrite) if err != nil { From fae6e977c316f9030d8f3c23180cd688d83cd592 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 19:40:16 +0400 Subject: [PATCH 11/19] System tests for publishing snapshot from mirror with .udebs. #108 --- .../PublishSnapshot1Test_packages_amd64 | 109 ++++++++++++++++++ .../PublishSnapshot1Test_packages_i386 | 109 ++++++++++++++++++ system/t06_publish/PublishSnapshot35Test_gold | 13 +++ .../PublishSnapshot35Test_packages_amd64 | 88 ++++++++++++++ .../PublishSnapshot35Test_packages_i386 | 88 ++++++++++++++ .../PublishSnapshot35Test_packages_udeb_amd64 | 40 +++++++ .../PublishSnapshot35Test_packages_udeb_i386 | 40 +++++++ .../t06_publish/PublishSnapshot35Test_release | 58 ++++++++++ .../PublishSnapshot35Test_release_udeb_i386 | 5 + system/t06_publish/snapshot.py | 99 ++++++++++++++++ 10 files changed, 649 insertions(+) create mode 100644 system/t06_publish/PublishSnapshot1Test_packages_amd64 create mode 100644 system/t06_publish/PublishSnapshot1Test_packages_i386 create mode 100644 system/t06_publish/PublishSnapshot35Test_gold create mode 100644 system/t06_publish/PublishSnapshot35Test_packages_amd64 create mode 100644 system/t06_publish/PublishSnapshot35Test_packages_i386 create mode 100644 system/t06_publish/PublishSnapshot35Test_packages_udeb_amd64 create mode 100644 system/t06_publish/PublishSnapshot35Test_packages_udeb_i386 create mode 100644 system/t06_publish/PublishSnapshot35Test_release create mode 100644 system/t06_publish/PublishSnapshot35Test_release_udeb_i386 diff --git a/system/t06_publish/PublishSnapshot1Test_packages_amd64 b/system/t06_publish/PublishSnapshot1Test_packages_amd64 new file mode 100644 index 00000000..fe39b007 --- /dev/null +++ b/system/t06_publish/PublishSnapshot1Test_packages_amd64 @@ -0,0 +1,109 @@ +Package: gnuplot +Version: 4.6.1-1~maverick2 +Installed-Size: 20 +Priority: optional +Section: math +Maintainer: Debian Science Team +Architecture: all +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package is for transition and to install a full-featured gnuplot + supporting the X11-output. +MD5sum: 4912a4464d5588f685c4aa6cfc6be46c +SHA1: 4a50deb413e05f77b31687405465b1229b3be328 +Source: +Size: 1046 +Filename: pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2_all.deb +Suggests: gnuplot-doc (>= 4.6.1-1~maverick2) +Depends: gnuplot-nox (>= 4.6.1-1~maverick2), gnuplot-x11 (>= 4.6.1-1~maverick2) + +Package: gnuplot-doc +Version: 4.6.1-1~maverick2 +Installed-Size: 5572 +Priority: optional +Section: doc +Maintainer: Debian Science Team +Architecture: all +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package contains the additional documentation. +MD5sum: 25a5028811171f2f1fa157a2f6953e82 +SHA1: 837dd002143054ca01d3b01cae410cc4b4fe10c4 +Source: gnuplot +Depends: dpkg (>= 1.15.4) | install-info +Filename: pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb +Size: 2675242 + +Package: gnuplot-nox +Version: 4.6.1-1~maverick2 +Installed-Size: 2624 +Priority: optional +Section: math +Maintainer: Debian Science Team +Architecture: amd64 +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package is for working without an X server. +MD5sum: db55daca818697b23024255e536399da +SHA1: d5a1b0bbfb562e5cecef3f3fb70ddb4cd6103507 +Suggests: gnuplot-x11 (>= 4.6.1-1~maverick2), gnuplot-doc (>= 4.6.1-1~maverick2) +Filename: pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_amd64.deb +Replaces: gnuplot (<< 4.0.0) +Source: gnuplot +Recommends: groff, ttf-liberation +Size: 1129114 +Depends: libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0) + +Package: gnuplot-x11 +Version: 4.6.1-1~maverick2 +Installed-Size: 1716 +Priority: optional +Section: math +Maintainer: Debian Science Team +Architecture: amd64 +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package contains the terminal driver that enables gnuplot to plot + images interactively under X11. Most users will want this, it is however + packaged separately so that low-end systems don't need X installed to use + gnuplot. +MD5sum: 17ab6787992b979e3a4851a90dfaf0a8 +SHA1: d60b0ee30a885ba0202adddccd7968ab70be7426 +Size: 819248 +Source: gnuplot +Depends: gnuplot-nox (>= 4.6.1-1~maverick2), libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgcc1 (>= 1:4.1.1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0), libstdc++6 (>= 4.1.1), libwxbase2.8-0 (>= 2.8.11.0), libwxgtk2.8-0 (>= 2.8.11.0), libx11-6 +Replaces: gnuplot (<< 4.0.0) +Filename: pool/main/g/gnuplot/gnuplot-x11_4.6.1-1~maverick2_amd64.deb + diff --git a/system/t06_publish/PublishSnapshot1Test_packages_i386 b/system/t06_publish/PublishSnapshot1Test_packages_i386 new file mode 100644 index 00000000..1c5127de --- /dev/null +++ b/system/t06_publish/PublishSnapshot1Test_packages_i386 @@ -0,0 +1,109 @@ +Package: gnuplot +Version: 4.6.1-1~maverick2 +Installed-Size: 20 +Priority: optional +Section: math +Maintainer: Debian Science Team +Architecture: all +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package is for transition and to install a full-featured gnuplot + supporting the X11-output. +MD5sum: 4912a4464d5588f685c4aa6cfc6be46c +SHA1: 4a50deb413e05f77b31687405465b1229b3be328 +Size: 1046 +Depends: gnuplot-nox (>= 4.6.1-1~maverick2), gnuplot-x11 (>= 4.6.1-1~maverick2) +Suggests: gnuplot-doc (>= 4.6.1-1~maverick2) +Filename: pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2_all.deb +Source: + +Package: gnuplot-doc +Version: 4.6.1-1~maverick2 +Installed-Size: 5572 +Priority: optional +Section: doc +Maintainer: Debian Science Team +Architecture: all +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package contains the additional documentation. +MD5sum: 25a5028811171f2f1fa157a2f6953e82 +SHA1: 837dd002143054ca01d3b01cae410cc4b4fe10c4 +Source: gnuplot +Filename: pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb +Depends: dpkg (>= 1.15.4) | install-info +Size: 2675242 + +Package: gnuplot-nox +Version: 4.6.1-1~maverick2 +Installed-Size: 2536 +Priority: optional +Section: math +Maintainer: Debian Science Team +Architecture: i386 +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package is for working without an X server. +MD5sum: a7ef16004b62fd78acb77edb058ea1c1 +SHA1: 629c3e62f787b0af47b184beb0460dd261c9ca4d +Size: 1046496 +Source: gnuplot +Depends: libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0) +Suggests: gnuplot-x11 (>= 4.6.1-1~maverick2), gnuplot-doc (>= 4.6.1-1~maverick2) +Recommends: groff, ttf-liberation +Replaces: gnuplot (<< 4.0.0) +Filename: pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_i386.deb + +Package: gnuplot-x11 +Version: 4.6.1-1~maverick2 +Installed-Size: 1604 +Priority: optional +Section: math +Maintainer: Debian Science Team +Architecture: i386 +Description: Command-line driven interactive plotting program + Gnuplot is a portable command-line driven interactive data and function + plotting utility that supports lots of output formats, including drivers + for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output + is packaged in gnuplot-x11. + . + Data files and self-defined functions can be manipulated by the internal + C-like language. Can perform smoothing, spline-fitting, or nonlinear fits, + and can work with complex numbers. + . + This package contains the terminal driver that enables gnuplot to plot + images interactively under X11. Most users will want this, it is however + packaged separately so that low-end systems don't need X installed to use + gnuplot. +MD5sum: fcad938905d0ace50a6ce0c73b2c6583 +SHA1: 02f9a93097a8f798a054e26154dbe5789088c069 +Source: gnuplot +Replaces: gnuplot (<< 4.0.0) +Filename: pool/main/g/gnuplot/gnuplot-x11_4.6.1-1~maverick2_i386.deb +Depends: gnuplot-nox (>= 4.6.1-1~maverick2), libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgcc1 (>= 1:4.1.1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0), libstdc++6 (>= 4.1.1), libwxbase2.8-0 (>= 2.8.11.0), libwxgtk2.8-0 (>= 2.8.11.0), libx11-6 +Size: 724388 + diff --git a/system/t06_publish/PublishSnapshot35Test_gold b/system/t06_publish/PublishSnapshot35Test_gold new file mode 100644 index 00000000..ad21a86e --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_gold @@ -0,0 +1,13 @@ +Loading packages... +Generating metadata files and linking package files... +Finalizing metadata files... +Signing file 'Release' with gpg, please enter your passphrase when prompted: +Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: + +Snapshot squeeze has been successfully published. +Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Now you can add following line to apt sources: + deb http://your-server/ squeeze main +Don't forget to add your GPG key to apt with apt-key. + +You can also use `aptly serve` to publish your repositories over HTTP quickly. diff --git a/system/t06_publish/PublishSnapshot35Test_packages_amd64 b/system/t06_publish/PublishSnapshot35Test_packages_amd64 new file mode 100644 index 00000000..32ad0b4b --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_packages_amd64 @@ -0,0 +1,88 @@ +Package: dmraid +Version: 1.0.0.rc16-4.1 +Installed-Size: 112 +Priority: optional +Section: admin +Maintainer: Giuseppe Iuculano +Architecture: amd64 +Description: Device-Mapper Software RAID support tool + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + dmraid uses the Linux device-mapper to create devices with respective + mappings for the ATARAID sets discovered. + . + The following formats are supported: + Highpoint HPT37X/HPT45X + Intel Software RAID + LSI Logic MegaRAID + NVidia NForce RAID (nvraid) + Promise FastTrack + Silicon Image(tm) Medley(tm) + VIA Software RAID + . + Please read the documentation in /usr/share/doc/dmraid BEFORE attempting + any use of this software. Improper use can cause data loss! +MD5sum: 35da9bcdd12c7fb08eb7192f0a17ddf2 +SHA1: 6a89d3f9e3b80a172811bb7d74eac43f119a8b7c +SHA256: 125405c4b0a7364bf209c161f393d4d0152ba9d02a55a95d90a7637f7b373b8f +Tag: admin::filesystem, admin::kernel, hardware::storage, implemented-in::c, interface::commandline, role::program, scope::utility, use::scanning +Size: 38620 +Depends: libc6 (>= 2.3), libdmraid1.0.0.rc16 (>= 1.0.0.rc16), libselinux1 (>= 1.32), libsepol1 (>= 1.14), udev, dmsetup +Homepage: http://people.redhat.com/~heinzm/sw/dmraid/ +Source: +Filename: pool/main/d/dmraid/dmraid_1.0.0.rc16-4.1_amd64.deb + +Package: libdmraid-dev +Version: 1.0.0.rc16-4.1 +Installed-Size: 496 +Priority: optional +Section: libdevel +Maintainer: Giuseppe Iuculano +Architecture: amd64 +Description: Device-Mapper Software RAID support tool - header files + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + dmraid uses the Linux device-mapper to create devices with respective + mappings for the ATARAID sets discovered. + . + This package contains the header files needed to link programs against + dmraid. +MD5sum: bb209b5796592d786c28844b949216dc +SHA1: cd8baba807fa92a88a265a044d821df8b677b5cb +SHA256: 081a48ad5372a941c35d41733da89a52cbe2d8f49032c2a4ef03148e4049615f +Homepage: http://people.redhat.com/~heinzm/sw/dmraid/ +Tag: admin::hardware, devel::lang:c, devel::library, hardware::storage, implemented-in::c, qa::low-popcon, role::devel-lib, use::driver +Size: 152618 +Depends: libdmraid1.0.0.rc16 (= 1.0.0.rc16-4.1) +Filename: pool/main/d/dmraid/libdmraid-dev_1.0.0.rc16-4.1_amd64.deb +Source: dmraid + +Package: libdmraid1.0.0.rc16 +Version: 1.0.0.rc16-4.1 +Installed-Size: 244 +Priority: optional +Section: libs +Maintainer: Giuseppe Iuculano +Architecture: amd64 +Description: Device-Mapper Software RAID support tool - shared library + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + dmraid uses the Linux device-mapper to create devices with respective + mappings for the ATARAID sets discovered. + . + This package contains the dmraid shared library, which implements + the back half of dmraid, including on-disk metadata formats. +MD5sum: a66d03bb1ddad78f879660ddedf86295 +SHA1: 6292936617c466e67a3148c66d0c27c068d055d3 +SHA256: 29f06bd3ae42e3380b356b69598be07724d178af35f2f1a64648c7f8ff85bef9 +Depends: libc6 (>= 2.7), libdevmapper1.02.1 (>= 2:1.02.20) +Homepage: http://people.redhat.com/~heinzm/sw/dmraid/ +Size: 108978 +Tag: admin::hardware, admin::kernel, devel::lang:c, devel::library, hardware::storage, implemented-in::c, role::{devel-lib,kernel,shared-lib}, use::driver +Filename: pool/main/d/dmraid/libdmraid1.0.0.rc16_1.0.0.rc16-4.1_amd64.deb +Replaces: libdmraid1.0.0.rc15 (<< 1.0.0.rc16-1) +Source: dmraid + diff --git a/system/t06_publish/PublishSnapshot35Test_packages_i386 b/system/t06_publish/PublishSnapshot35Test_packages_i386 new file mode 100644 index 00000000..be1c153c --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_packages_i386 @@ -0,0 +1,88 @@ +Package: libdmraid1.0.0.rc16 +Version: 1.0.0.rc16-4.1 +Installed-Size: 268 +Priority: optional +Section: libs +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool - shared library + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + dmraid uses the Linux device-mapper to create devices with respective + mappings for the ATARAID sets discovered. + . + This package contains the dmraid shared library, which implements + the back half of dmraid, including on-disk metadata formats. +MD5sum: 9330ba2ffd2f22d695fdf692f8120159 +SHA1: 6b262419836e8cad4500043f5e9e6a1581074023 +SHA256: 2b2238679ac8ff4776a3a2caf533c551700d9f92a7d2af23d6457acf7de5d6c8 +Tag: admin::hardware, admin::kernel, devel::lang:c, devel::library, hardware::storage, implemented-in::c, role::{devel-lib,kernel,shared-lib}, use::driver +Filename: pool/main/d/dmraid/libdmraid1.0.0.rc16_1.0.0.rc16-4.1_i386.deb +Replaces: libdmraid1.0.0.rc15 (<< 1.0.0.rc16-1) +Homepage: http://people.redhat.com/~heinzm/sw/dmraid/ +Source: dmraid +Depends: libc6 (>= 2.7), libdevmapper1.02.1 (>= 2:1.02.20) +Size: 106088 + +Package: dmraid +Version: 1.0.0.rc16-4.1 +Installed-Size: 176 +Priority: optional +Section: admin +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + dmraid uses the Linux device-mapper to create devices with respective + mappings for the ATARAID sets discovered. + . + The following formats are supported: + Highpoint HPT37X/HPT45X + Intel Software RAID + LSI Logic MegaRAID + NVidia NForce RAID (nvraid) + Promise FastTrack + Silicon Image(tm) Medley(tm) + VIA Software RAID + . + Please read the documentation in /usr/share/doc/dmraid BEFORE attempting + any use of this software. Improper use can cause data loss! +MD5sum: f8aea4e9eaea341b112f02e9efe1678e +SHA1: bb96a258038c79bc04eef49d5875deed4c67dd16 +SHA256: 6a8294bef99040055009da41597869bfdb17ac89c3166e49c57340abe7f702ba +Size: 37984 +Depends: libc6 (>= 2.3), libdmraid1.0.0.rc16 (>= 1.0.0.rc16), libselinux1 (>= 1.32), libsepol1 (>= 1.14), udev, dmsetup +Filename: pool/main/d/dmraid/dmraid_1.0.0.rc16-4.1_i386.deb +Tag: admin::filesystem, admin::kernel, hardware::storage, implemented-in::c, interface::commandline, role::program, scope::utility, use::scanning +Source: +Homepage: http://people.redhat.com/~heinzm/sw/dmraid/ + +Package: libdmraid-dev +Version: 1.0.0.rc16-4.1 +Installed-Size: 440 +Priority: optional +Section: libdevel +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool - header files + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + dmraid uses the Linux device-mapper to create devices with respective + mappings for the ATARAID sets discovered. + . + This package contains the header files needed to link programs against + dmraid. +MD5sum: 5395970df02ab5f1609cd7eccc15ead1 +SHA1: f27bd38eeb58a32ee7e58ac8a2950649bd4ef17b +SHA256: 2abe9142ce6aa341df57303b5bc847522779ea9109b0fe734e2ae4419872da71 +Tag: admin::hardware, devel::lang:c, devel::library, hardware::storage, implemented-in::c, qa::low-popcon, role::devel-lib, use::driver +Homepage: http://people.redhat.com/~heinzm/sw/dmraid/ +Size: 145808 +Filename: pool/main/d/dmraid/libdmraid-dev_1.0.0.rc16-4.1_i386.deb +Depends: libdmraid1.0.0.rc16 (= 1.0.0.rc16-4.1) +Source: dmraid + diff --git a/system/t06_publish/PublishSnapshot35Test_packages_udeb_amd64 b/system/t06_publish/PublishSnapshot35Test_packages_udeb_amd64 new file mode 100644 index 00000000..45ca5fd0 --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_packages_udeb_amd64 @@ -0,0 +1,40 @@ +Package: dmraid-udeb +Version: 1.0.0.rc16-4.1 +Installed-Size: 32 +Priority: optional +Section: debian-installer +Maintainer: Giuseppe Iuculano +Architecture: amd64 +Description: Device-Mapper Software RAID support tool (udeb) + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + This is the minimal package (udeb) used by debian-installer +MD5sum: 721685fde18001ad0c9ac172c3118983 +SHA1: 88e229b76cb5866c8868a491a6690b3fde2b33d5 +SHA256: efae69921b97494e40437712053b60a5105fa433f3cfbae3bb2991d341eb95a6 +Filename: pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb +Depends: libc6-udeb (>= 2.11), libdmraid1.0.0.rc16-udeb (>= 1.0.0.rc16), dmsetup-udeb +Source: dmraid +Size: 11806 + +Package: libdmraid1.0.0.rc16-udeb +Version: 1.0.0.rc16-4.1 +Installed-Size: 0 +Priority: optional +Section: debian-installer +Maintainer: Giuseppe Iuculano +Architecture: amd64 +Description: Device-Mapper Software RAID support tool - shared library (udeb) + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + This is the minimal package (udeb shared library) used by debian-installer +MD5sum: efae3ee2d1ccd78aaec7d452ecba4c6a +SHA1: 2ef8c01a0375c92f59fed32949b9469cc53d0b99 +SHA256: aabf098de9fcf2da0c0f66f2d9f1cb61f7e244dd2b009361e40cd29827749d44 +Size: 92372 +Filename: pool/main/d/dmraid/libdmraid1.0.0.rc16-udeb_1.0.0.rc16-4.1_amd64.udeb +Source: dmraid +Depends: libc6-udeb (>= 2.11), libdevmapper1.02.1-udeb (>= 2:1.02.48) + diff --git a/system/t06_publish/PublishSnapshot35Test_packages_udeb_i386 b/system/t06_publish/PublishSnapshot35Test_packages_udeb_i386 new file mode 100644 index 00000000..0f65046d --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_packages_udeb_i386 @@ -0,0 +1,40 @@ +Package: dmraid-udeb +Version: 1.0.0.rc16-4.1 +Installed-Size: 36 +Priority: optional +Section: debian-installer +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool (udeb) + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + This is the minimal package (udeb) used by debian-installer +MD5sum: 4d8bb4dafb0ef9059dac75846e162784 +SHA1: fd5c73e08d4c5381b1136c2ff170332d77526246 +SHA256: fe4ff3351186f03039f8cd6f78e8e4f473a75b613f950caac06fa21dda2d59e8 +Source: dmraid +Size: 11022 +Filename: pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb +Depends: libc6-udeb (>= 2.11), libdmraid1.0.0.rc16-udeb (>= 1.0.0.rc16), dmsetup-udeb + +Package: libdmraid1.0.0.rc16-udeb +Version: 1.0.0.rc16-4.1 +Installed-Size: 212 +Priority: optional +Section: debian-installer +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool - shared library (udeb) + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + This is the minimal package (udeb shared library) used by debian-installer +MD5sum: aba78093c15c8bcd8e237f6a578c6c65 +SHA1: c5e95d443889775a48d6c48bf332a21a37ce63c6 +SHA256: 1c51dbf4cd1a5a683fd60e2b4f44dc6f8f574de3aea52354541a9a105f10f918 +Depends: libc6-udeb (>= 2.11), libdevmapper1.02.1-udeb (>= 2:1.02.48) +Source: dmraid +Filename: pool/main/d/dmraid/libdmraid1.0.0.rc16-udeb_1.0.0.rc16-4.1_i386.udeb +Size: 89490 + diff --git a/system/t06_publish/PublishSnapshot35Test_release b/system/t06_publish/PublishSnapshot35Test_release new file mode 100644 index 00000000..2e1afbf0 --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_release @@ -0,0 +1,58 @@ +Origin: . squeeze +Label: . squeeze +Codename: squeeze +Date: Tue, 30 Sep 2014 15:35:22 UTC +Architectures: amd64 i386 +Components: main +Description: Generated by aptly +MD5Sum: + a75ee7a5106ba4369de928e26b7afefd 803 main/debian-installer/binary-i386/Packages.bz2 + d82f063b0a674ee60d070fc960c33c92 677 main/debian-installer/binary-amd64/Packages.gz + 8b51fb682910e0d52caa31b61ef1192a 807 main/debian-installer/binary-amd64/Packages.bz2 + a77ec46f63b69e32fdf3a5aa484c1190 1592 main/binary-i386/Packages.bz2 + 9efff4ebb46b70b71215a8df4f71069d 88 main/binary-amd64/Release + d9d38d0cff22f7364cbabb4e8b536316 87 main/debian-installer/binary-i386/Release + 0eaacc9b677879735bcc958c2e24c699 1395 main/binary-i386/Packages.gz + e1c910470349056521dbc4d473a48637 677 main/debian-installer/binary-i386/Packages.gz + d9d38d0cff22f7364cbabb4e8b536316 87 main/binary-i386/Release + 1093e4c5170235ac5cc872f985088815 3669 main/binary-amd64/Packages + c4b9d1069fcb04fdad832a657ff02ef3 3663 main/binary-i386/Packages + b58a784bc0764d523fd9134b53c8dda0 1585 main/binary-amd64/Packages.bz2 + 9ac58b6597a8e0344d69c2550aca9720 1601 main/debian-installer/binary-i386/Packages + f940214380907f004b1e175a6c20bf07 1603 main/debian-installer/binary-amd64/Packages + 9efff4ebb46b70b71215a8df4f71069d 88 main/debian-installer/binary-amd64/Release + 703b425641f4e847a1f0a8a0c28fb128 1394 main/binary-amd64/Packages.gz +SHA1: + a0c5944608dc219fad9d799b3fa6aae280d331c0 803 main/debian-installer/binary-i386/Packages.bz2 + 5faf018385934f65a6af0c4ab3af2fda62c63aff 677 main/debian-installer/binary-amd64/Packages.gz + 61c9b82f75a642839e6e32e5a734f890417b1160 807 main/debian-installer/binary-amd64/Packages.bz2 + e69414d40bb79bca8dc1b274ceb42fb04c3d02ee 1592 main/binary-i386/Packages.bz2 + 7c25a15429615225e3eb90540ba783561fc09448 88 main/binary-amd64/Release + f07fcb0797d81341b6284ed86e5903dc57341a90 87 main/debian-installer/binary-i386/Release + a8657c2409859da9f91280a5da48f3b5276e2829 1395 main/binary-i386/Packages.gz + b8e5b5b41a6ded99006a94c0550cd2291ac19d7f 677 main/debian-installer/binary-i386/Packages.gz + f07fcb0797d81341b6284ed86e5903dc57341a90 87 main/binary-i386/Release + 0c86f7bd6ed2b52b0ab12ea08a76d14235b85d7c 3669 main/binary-amd64/Packages + 4227cdcd3260e10eee066182f22ec8eec4fc7f0a 3663 main/binary-i386/Packages + 8cec67723e4cee24f67ffa46a1f4ae7165fb31f0 1585 main/binary-amd64/Packages.bz2 + ae94f4b0b3396951399de65e04784ef7b0f95119 1601 main/debian-installer/binary-i386/Packages + 6f8e5137388e594b31bed56ca9e08f8e9f305ca4 1603 main/debian-installer/binary-amd64/Packages + 7c25a15429615225e3eb90540ba783561fc09448 88 main/debian-installer/binary-amd64/Release + 163a7a656c5e338d53bbc6cbe80263ca551dfa15 1394 main/binary-amd64/Packages.gz +SHA256: + 4f8eeab36071b8791ce74099df89e01d46ab66f3c76dd9afe6c31fe48c30783d 803 main/debian-installer/binary-i386/Packages.bz2 + bf7b96d1c66abb7dc6037299ab4fe0119d42b66c8c01cfa0520e27d813c99e50 677 main/debian-installer/binary-amd64/Packages.gz + 3a30d9da1ed1108d3451c0c7fe60d99594a2cdf2459a8e505920ed69043bdc6c 807 main/debian-installer/binary-amd64/Packages.bz2 + 1d947dcc40ad2ace3b8226b68161948478a187eb9865d4b62c5068200e0ec058 1592 main/binary-i386/Packages.bz2 + e8378aced6fec291729f656e1d884225ec9c28ba67fc434ef2531223bc37033e 88 main/binary-amd64/Release + 62b9292134aefb30a75aff3e25c2c694d128d73a1d193f29a397789dd902a854 87 main/debian-installer/binary-i386/Release + e30a8b568654e69f1fe7744ace4ffb0d385a8e52502ffd9f84a8184130386a08 1395 main/binary-i386/Packages.gz + f6f2350eab308eb2f290b98f088e973e70ded5d1244688b71edfb201ac85e832 677 main/debian-installer/binary-i386/Packages.gz + 62b9292134aefb30a75aff3e25c2c694d128d73a1d193f29a397789dd902a854 87 main/binary-i386/Release + e2d936cb65a504e6bf13bb09c5a0c6e8943cdd7845d715d571b1fb58262a624f 3669 main/binary-amd64/Packages + 14ae70d15fa8263b55056ef36bac9208ee9e03847118788cc00b6d2a46b5fa10 3663 main/binary-i386/Packages + 0128db3912e0e2f92b2e3a277c28239d6e072323b35bc007dbf32bc696df413c 1585 main/binary-amd64/Packages.bz2 + c3f2708d36c503619f5b3f43b2c7da3f559b72f723c96d0ce9c664f92c6fcc14 1601 main/debian-installer/binary-i386/Packages + 1f90f76bc0df9a588940d14f3ee0ad7d26a86809537f2e5ff4d340e4a8a21f3d 1603 main/debian-installer/binary-amd64/Packages + e8378aced6fec291729f656e1d884225ec9c28ba67fc434ef2531223bc37033e 88 main/debian-installer/binary-amd64/Release + e179f48a91a8dc614a37e2fb21d8d82ff3937fd44e077ec0e2507b8382d896ab 1394 main/binary-amd64/Packages.gz diff --git a/system/t06_publish/PublishSnapshot35Test_release_udeb_i386 b/system/t06_publish/PublishSnapshot35Test_release_udeb_i386 new file mode 100644 index 00000000..77d3c28c --- /dev/null +++ b/system/t06_publish/PublishSnapshot35Test_release_udeb_i386 @@ -0,0 +1,5 @@ +Origin: . squeeze +Label: . squeeze +Architecture: i386 +Archive: squeeze +Component: main diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py index 2786b4a1..2617e3d5 100644 --- a/system/t06_publish/snapshot.py +++ b/system/t06_publish/snapshot.py @@ -8,6 +8,10 @@ def strip_processor(output): return "\n".join([l for l in output.split("\n") if not l.startswith(' ') and not l.startswith('Date:')]) +def sorted_processor(output): + return "\n".join(sorted(output.split("\n"))) + + class PublishSnapshot1Test(BaseTest): """ publish snapshot: defaults @@ -46,6 +50,9 @@ class PublishSnapshot1Test(BaseTest): self.check_file_contents('public/dists/maverick/main/binary-i386/Release', 'release_i386') self.check_file_contents('public/dists/maverick/main/binary-amd64/Release', 'release_amd64') + self.check_file_contents('public/dists/maverick/main/binary-i386/Packages', 'packages_i386', match_prepare=sorted_processor) + self.check_file_contents('public/dists/maverick/main/binary-amd64/Packages', 'packages_amd64', match_prepare=sorted_processor) + # verify signatures self.run_cmd(["gpg", "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"), "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')]) @@ -826,3 +833,95 @@ class PublishSnapshot34Test(BaseTest): super(PublishSnapshot34Test, self).check() self.check_file_contents("public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz", "file") + + +class PublishSnapshot35Test(BaseTest): + """ + publish snapshot: mirror with udebs + """ + fixtureGpg = True + fixtureCmds = [ + "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (dmraid)' -with-udebs squeeze http://mirror.yandex.ru/debian/ squeeze main non-free", + "aptly mirror update -keyring=aptlytest.gpg squeeze", + "aptly snapshot create squeeze from mirror squeeze", + ] + runCmd = "aptly publish snapshot squeeze" + + def check(self): + super(PublishSnapshot35Test, self).check() + + self.check_exists('public/dists/squeeze/InRelease') + self.check_exists('public/dists/squeeze/Release') + self.check_exists('public/dists/squeeze/Release.gpg') + + self.check_exists('public/dists/squeeze/main/binary-i386/Release') + self.check_exists('public/dists/squeeze/main/binary-i386/Packages') + self.check_exists('public/dists/squeeze/main/binary-i386/Packages.gz') + self.check_exists('public/dists/squeeze/main/binary-i386/Packages.bz2') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-i386/Release') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-i386/Packages') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-i386/Packages.gz') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-i386/Packages.bz2') + self.check_exists('public/dists/squeeze/main/binary-amd64/Release') + self.check_exists('public/dists/squeeze/main/binary-amd64/Packages') + self.check_exists('public/dists/squeeze/main/binary-amd64/Packages.gz') + self.check_exists('public/dists/squeeze/main/binary-amd64/Packages.bz2') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-amd64/Release') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-amd64/Packages') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-amd64/Packages.gz') + self.check_exists('public/dists/squeeze/main/debian-installer/binary-amd64/Packages.bz2') + self.check_not_exists('public/dists/squeeze/main/source/Sources') + self.check_not_exists('public/dists/squeeze/main/source/Sources.gz') + self.check_not_exists('public/dists/squeeze/main/source/Sources.bz2') + + self.check_exists('public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb') + self.check_exists('public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb') + self.check_exists('public/pool/main/d/dmraid/dmraid_1.0.0.rc16-4.1_amd64.deb') + self.check_exists('public/pool/main/d/dmraid/dmraid_1.0.0.rc16-4.1_i386.deb') + + self.check_file_contents('public/dists/squeeze/main/binary-i386/Packages', 'packages_i386', match_prepare=sorted_processor) + self.check_file_contents('public/dists/squeeze/main/debian-installer/binary-i386/Packages', 'packages_udeb_i386', match_prepare=sorted_processor) + self.check_file_contents('public/dists/squeeze/main/binary-amd64/Packages', 'packages_amd64', match_prepare=sorted_processor) + self.check_file_contents('public/dists/squeeze/main/debian-installer/binary-amd64/Packages', 'packages_udeb_amd64', match_prepare=sorted_processor) + + # verify contents except of sums + self.check_file_contents('public/dists/squeeze/Release', 'release', match_prepare=strip_processor) + + self.check_file_contents('public/dists/squeeze/main/debian-installer/binary-i386/Release', 'release_udeb_i386', match_prepare=strip_processor) + + # verify sums + release = self.read_file('public/dists/squeeze/Release').split("\n") + release = [l for l in release if l.startswith(" ")] + pathsSeen = set() + for l in release: + fileHash, fileSize, path = l.split() + pathsSeen.add(path) + + fileSize = int(fileSize) + + st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/squeeze/', path)) + if fileSize != st.st_size: + raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size)) + + if len(fileHash) == 32: + h = hashlib.md5() + elif len(fileHash) == 40: + h = hashlib.sha1() + else: + h = hashlib.sha256() + + h.update(self.read_file(os.path.join('public/dists/squeeze', path))) + + if h.hexdigest() != fileHash: + raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest())) + + pathsExepcted = set() + for arch in ("i386", "amd64"): + for udeb in ("", "debian-installer/"): + for ext in ("", ".gz", ".bz2"): + pathsExepcted.add("main/%sbinary-%s/Packages%s" % (udeb, arch, ext)) + + pathsExepcted.add("main/%sbinary-%s/Release" % (udeb, arch)) + + if pathsSeen != pathsExepcted: + raise Exception("path seen wrong: %r != %r" % (pathsSeen, pathsExepcted)) From bd34ba408808ca700524ebf626256a773a3a518d Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 21:11:01 +0400 Subject: [PATCH 12/19] Pregenerate all udebs indexes if at least one udeb has been discovered. #108 --- deb/index_files.go | 2 +- deb/publish.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/deb/index_files.go b/deb/index_files.go index a1abeaec..a1eb0015 100644 --- a/deb/index_files.go +++ b/deb/index_files.go @@ -167,7 +167,7 @@ func (files *indexFiles) PackageIndex(component, arch string, udeb bool) *indexF file = &indexFile{ parent: files, - discardable: udeb, + discardable: false, compressable: true, signable: false, relativePath: relativePath, diff --git a/deb/publish.go b/deb/publish.go index 22b81e21..0083516f 100644 --- a/deb/publish.go +++ b/deb/publish.go @@ -521,6 +521,11 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP udebs := []bool{false} if hadUdebs { udebs = append(udebs, true) + + // For all architectures, pregenerate .udeb indexes + for _, arch := range p.Architectures { + indexes.PackageIndex(component, arch, true) + } } // For all architectures, generate Release files From 6514b87e3e3da777c10855d9046d9cb4dfa468c9 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 21:25:52 +0400 Subject: [PATCH 13/19] Add keyring for publish. #108 --- system/t06_publish/snapshot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py index 2617e3d5..fef3e224 100644 --- a/system/t06_publish/snapshot.py +++ b/system/t06_publish/snapshot.py @@ -845,7 +845,7 @@ class PublishSnapshot35Test(BaseTest): "aptly mirror update -keyring=aptlytest.gpg squeeze", "aptly snapshot create squeeze from mirror squeeze", ] - runCmd = "aptly publish snapshot squeeze" + runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec squeeze" def check(self): super(PublishSnapshot35Test, self).check() From 2c84faaf8d5719e6dfe474ac2c512fac7dc017af Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 21:26:28 +0400 Subject: [PATCH 14/19] System test for repo adding .udebs. #108 --- cmd/repo_add.go | 17 ++++++--- system/lib.py | 1 + system/t09_repo/AddRepo12Test_gold | 2 + system/t09_repo/AddRepo12Test_repo_show | 7 ++++ system/t09_repo/AddRepo13Test_gold | 6 +++ system/t09_repo/AddRepo13Test_repo_show | 11 ++++++ system/t09_repo/add.py | 35 ++++++++++++++++++ .../dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb | Bin 0 -> 11806 bytes .../dmraid-udeb_1.0.0.rc16-4.1_i386.udeb | Bin 0 -> 11022 bytes 9 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 system/t09_repo/AddRepo12Test_gold create mode 100644 system/t09_repo/AddRepo12Test_repo_show create mode 100644 system/t09_repo/AddRepo13Test_gold create mode 100644 system/t09_repo/AddRepo13Test_repo_show create mode 100644 system/udebs/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb create mode 100644 system/udebs/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb diff --git a/cmd/repo_add.go b/cmd/repo_add.go index a1370b95..7626efc0 100644 --- a/cmd/repo_add.go +++ b/cmd/repo_add.go @@ -61,14 +61,16 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error { return nil } - if strings.HasSuffix(info.Name(), ".deb") || strings.HasSuffix(info.Name(), ".dsc") { + if strings.HasSuffix(info.Name(), ".deb") || strings.HasSuffix(info.Name(), ".udeb") || + strings.HasSuffix(info.Name(), ".dsc") { packageFiles = append(packageFiles, path) } return nil }) } else { - if strings.HasSuffix(info.Name(), ".deb") || strings.HasSuffix(info.Name(), ".dsc") { + if strings.HasSuffix(info.Name(), ".deb") || strings.HasSuffix(info.Name(), ".udeb") || + strings.HasSuffix(info.Name(), ".dsc") { packageFiles = append(packageFiles, location) } else { context.Progress().ColoredPrintf("@y[!]@| @!Unknwon file extenstion: %s@|", location) @@ -93,6 +95,7 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error { candidateProcessedFiles := []string{} isSourcePackage := strings.HasSuffix(file, ".dsc") + isUdebPackage := strings.HasSuffix(file, ".udeb") if isSourcePackage { stanza, err = deb.GetControlFileFromDsc(file, verifier) @@ -105,7 +108,11 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error { } } else { stanza, err = deb.GetControlFileFromDeb(file) - p = deb.NewPackageFromControlFile(stanza) + if isUdebPackage { + p = deb.NewUdebPackageFromControlFile(stanza) + } else { + p = deb.NewPackageFromControlFile(stanza) + } } if err != nil { context.Progress().ColoredPrintf("@y[!]@| @!Unable to read file %s: %s@|", file, err) @@ -216,8 +223,8 @@ func makeCmdRepoAdd() *commander.Command { UsageLine: "add | ...", Short: "add packages to local repository", Long: ` -Command adds packages to local repository from .deb (binary packages) and .dsc (source packages) files. -When importing from directory aptly would do recursive scan looking for all files matching *.deb or *.dsc +Command adds packages to local repository from .deb, .udeb (binary packages) and .dsc (source packages) files. +When importing from directory aptly would do recursive scan looking for all files matching *.[u]deb or *.dsc patterns. Every file discovered would be analyzed to extract metadata, package would then be created and added to the database. Files would be imported to internal package pool. For source packages, all required files are added automatically as well. Extra files for source package should be in the same directory as *.dsc file. diff --git a/system/lib.py b/system/lib.py index 34b5f684..e3e84f6a 100644 --- a/system/lib.py +++ b/system/lib.py @@ -155,6 +155,7 @@ class BaseTest(object): if not hasattr(command, "__iter__"): params = { 'files': os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files"), + 'udebs': os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "udebs"), 'testfiles': os.path.join(os.path.dirname(inspect.getsourcefile(self.__class__)), self.__class__.__name__), } if self.fixtureWebServer: diff --git a/system/t09_repo/AddRepo12Test_gold b/system/t09_repo/AddRepo12Test_gold new file mode 100644 index 00000000..362cf9ac --- /dev/null +++ b/system/t09_repo/AddRepo12Test_gold @@ -0,0 +1,2 @@ +Loading packages... +[+] dmraid-udeb_1.0.0.rc16-4.1_amd64 added diff --git a/system/t09_repo/AddRepo12Test_repo_show b/system/t09_repo/AddRepo12Test_repo_show new file mode 100644 index 00000000..b5cda2da --- /dev/null +++ b/system/t09_repo/AddRepo12Test_repo_show @@ -0,0 +1,7 @@ +Name: repo12 +Comment: Repo12 +Default Distribution: squeeze +Default Component: main +Number of packages: 1 +Packages: + dmraid-udeb_1.0.0.rc16-4.1_amd64 diff --git a/system/t09_repo/AddRepo13Test_gold b/system/t09_repo/AddRepo13Test_gold new file mode 100644 index 00000000..89051da0 --- /dev/null +++ b/system/t09_repo/AddRepo13Test_gold @@ -0,0 +1,6 @@ +Loading packages... +[+] libboost-program-options-dev_1.49.0.1_i386 added +[+] pyspi_0.6.1-1.4_source added +[+] pyspi_0.6.1-1.3_source added +[+] dmraid-udeb_1.0.0.rc16-4.1_amd64 added +[+] dmraid-udeb_1.0.0.rc16-4.1_i386 added diff --git a/system/t09_repo/AddRepo13Test_repo_show b/system/t09_repo/AddRepo13Test_repo_show new file mode 100644 index 00000000..b921958a --- /dev/null +++ b/system/t09_repo/AddRepo13Test_repo_show @@ -0,0 +1,11 @@ +Name: repo13 +Comment: Repo13 +Default Distribution: squeeze +Default Component: main +Number of packages: 5 +Packages: + dmraid-udeb_1.0.0.rc16-4.1_amd64 + dmraid-udeb_1.0.0.rc16-4.1_i386 + libboost-program-options-dev_1.49.0.1_i386 + pyspi_0.6.1-1.3_source + pyspi_0.6.1-1.4_source diff --git a/system/t09_repo/add.py b/system/t09_repo/add.py index 1e91c2ee..9b5d9319 100644 --- a/system/t09_repo/add.py +++ b/system/t09_repo/add.py @@ -232,3 +232,38 @@ class AddRepo11Test(BaseTest): def check(self): self.check_output() self.check_cmd_output("aptly repo show -with-packages repo11", "repo_show") + + +class AddRepo12Test(BaseTest): + """ + add package to local repo: .udeb file + """ + fixtureCmds = [ + "aptly repo create -comment=Repo12 -distribution=squeeze repo12", + ] + runCmd = "aptly repo add repo12 ${udebs}/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb" + + def check(self): + self.check_output() + self.check_cmd_output("aptly repo show -with-packages repo12", "repo_show") + + # check pool + self.check_exists('pool/72/16/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb') + + +class AddRepo13Test(BaseTest): + """ + add package to local repo: .udeb and .deb files + """ + fixtureCmds = [ + "aptly repo create -comment=Repo13 -distribution=squeeze repo13", + ] + runCmd = "aptly repo add repo13 ${udebs} ${files}" + + def check(self): + self.check_output() + self.check_cmd_output("aptly repo show -with-packages repo13", "repo_show") + + # check pool + self.check_exists('pool/72/16/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb') + self.check_exists('pool/b7/2c/pyspi_0.6.1-1.3.dsc') diff --git a/system/udebs/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb b/system/udebs/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb new file mode 100644 index 0000000000000000000000000000000000000000..0e7f0635801f6d0210e63ec5d5fb82b54d5e976c GIT binary patch literal 11806 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 Date: Tue, 30 Sep 2014 21:51:38 +0400 Subject: [PATCH 15/19] Test on publishing repo with .udebs. #108 --- .../t06_publish/PublishRepo26Test_udeb_binary | 20 ++++++++++ system/t06_publish/PublishRepo27Test_gold | 14 +++++++ .../t06_publish/PublishRepo27Test_udeb_binary | 20 ++++++++++ system/t06_publish/PublishSnapshot35Test_gold | 2 +- system/t06_publish/repo.py | 38 +++++++++++++++++++ 5 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 system/t06_publish/PublishRepo26Test_udeb_binary create mode 100644 system/t06_publish/PublishRepo27Test_gold create mode 100644 system/t06_publish/PublishRepo27Test_udeb_binary diff --git a/system/t06_publish/PublishRepo26Test_udeb_binary b/system/t06_publish/PublishRepo26Test_udeb_binary new file mode 100644 index 00000000..3f13340f --- /dev/null +++ b/system/t06_publish/PublishRepo26Test_udeb_binary @@ -0,0 +1,20 @@ +Package: dmraid-udeb +Version: 1.0.0.rc16-4.1 +Installed-Size: 36 +Priority: optional +Section: debian-installer +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool (udeb) + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + This is the minimal package (udeb) used by debian-installer +MD5sum: 4d8bb4dafb0ef9059dac75846e162784 +SHA1: fd5c73e08d4c5381b1136c2ff170332d77526246 +SHA256: fe4ff3351186f03039f8cd6f78e8e4f473a75b613f950caac06fa21dda2d59e8 +Source: dmraid +Size: 11022 +Depends: libc6-udeb (>= 2.11), libdmraid1.0.0.rc16-udeb (>= 1.0.0.rc16), dmsetup-udeb +Filename: pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb + diff --git a/system/t06_publish/PublishRepo27Test_gold b/system/t06_publish/PublishRepo27Test_gold new file mode 100644 index 00000000..365295fa --- /dev/null +++ b/system/t06_publish/PublishRepo27Test_gold @@ -0,0 +1,14 @@ +Loading packages... +Generating metadata files and linking package files... +Finalizing metadata files... +Signing file 'Release' with gpg, please enter your passphrase when prompted: +Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: + +Local repo local-repo has been successfully published. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. +Now you can add following line to apt sources: + deb http://your-server/ maverick main + deb-src http://your-server/ maverick main +Don't forget to add your GPG key to apt with apt-key. + +You can also use `aptly serve` to publish your repositories over HTTP quickly. diff --git a/system/t06_publish/PublishRepo27Test_udeb_binary b/system/t06_publish/PublishRepo27Test_udeb_binary new file mode 100644 index 00000000..dbfc3986 --- /dev/null +++ b/system/t06_publish/PublishRepo27Test_udeb_binary @@ -0,0 +1,20 @@ +Package: dmraid-udeb +Version: 1.0.0.rc16-4.1 +Installed-Size: 36 +Priority: optional +Section: debian-installer +Maintainer: Giuseppe Iuculano +Architecture: i386 +Description: Device-Mapper Software RAID support tool (udeb) + dmraid discovers, activates, deactivates and displays properties + of software RAID sets (eg, ATARAID) and contained DOS partitions. + . + This is the minimal package (udeb) used by debian-installer +MD5sum: 4d8bb4dafb0ef9059dac75846e162784 +SHA1: fd5c73e08d4c5381b1136c2ff170332d77526246 +SHA256: fe4ff3351186f03039f8cd6f78e8e4f473a75b613f950caac06fa21dda2d59e8 +Filename: pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb +Size: 11022 +Source: dmraid +Depends: libc6-udeb (>= 2.11), libdmraid1.0.0.rc16-udeb (>= 1.0.0.rc16), dmsetup-udeb + diff --git a/system/t06_publish/PublishSnapshot35Test_gold b/system/t06_publish/PublishSnapshot35Test_gold index ad21a86e..ad5dad8d 100644 --- a/system/t06_publish/PublishSnapshot35Test_gold +++ b/system/t06_publish/PublishSnapshot35Test_gold @@ -5,7 +5,7 @@ Signing file 'Release' with gpg, please enter your passphrase when prompted: Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: Snapshot squeeze has been successfully published. -Please setup your webserver to serve directory '/Users/smira/.aptly/public' with autoindexing. +Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing. Now you can add following line to apt sources: deb http://your-server/ squeeze main Don't forget to add your GPG key to apt with apt-key. diff --git a/system/t06_publish/repo.py b/system/t06_publish/repo.py index e0fdc6ac..b29d4623 100644 --- a/system/t06_publish/repo.py +++ b/system/t06_publish/repo.py @@ -608,3 +608,41 @@ class PublishRepo26Test(BaseTest): "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'), os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')]) + +class PublishRepo27Test(BaseTest): + """ + publish repo: with udebs + """ + fixtureCmds = [ + "aptly repo create local-repo", + "aptly repo add local-repo ${files} ${udebs}", + ] + runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo" + gold_processor = BaseTest.expand_environ + + def check(self): + super(PublishRepo27Test, self).check() + + self.check_exists('public/dists/maverick/InRelease') + self.check_exists('public/dists/maverick/Release') + self.check_exists('public/dists/maverick/Release.gpg') + + self.check_exists('public/dists/maverick/main/binary-i386/Release') + self.check_exists('public/dists/maverick/main/binary-i386/Packages') + self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz') + self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2') + self.check_exists('public/dists/maverick/main/source/Release') + self.check_exists('public/dists/maverick/main/source/Sources') + self.check_exists('public/dists/maverick/main/source/Sources.gz') + self.check_exists('public/dists/maverick/main/source/Sources.bz2') + + self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc') + self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz') + self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz') + self.check_exists('public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc') + self.check_exists('public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb') + self.check_exists('public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb') + self.check_exists('public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb') + + # verify contents except of sums + self.check_file_contents('public/dists/maverick/main/debian-installer/binary-i386/Packages', 'udeb_binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n")))) From 4fb09d9e85f02058fdce7908f151730cbf895292 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 21:52:25 +0400 Subject: [PATCH 16/19] Update man page. #108 --- man/aptly.1 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/man/aptly.1 b/man/aptly.1 index 4302fa15..638e4121 100644 --- a/man/aptly.1 +++ b/man/aptly.1 @@ -311,6 +311,10 @@ gpg keyring to use when verifying Release file (could be specified multiple time \-\fBwith\-sources\fR=false download source packages in addition to binary packages . +.TP +\-\fBwith\-udebs\fR=false +download \.udeb packages (Debian installer support) +. .SH "LIST MIRRORS" \fBaptly\fR \fBmirror\fR \fBlist\fR . @@ -438,6 +442,10 @@ when filtering, include dependencies of matching packages as well \-\fBwith\-sources\fR=false download source packages in addition to binary packages . +.TP +\-\fBwith\-udebs\fR=false +download \.udeb packages (Debian installer support) +. .SH "SEARCH MIRROR FOR PACKAGES MATCHING QUERY" \fBaptly\fR \fBmirror\fR \fBsearch\fR \fIname\fR \fIpackage\-query\fR . @@ -468,7 +476,7 @@ include dependencies into search results \fBaptly\fR \fBrepo\fR \fBadd\fR \fIname\fR . .P -Command adds packages to local repository from \.deb (binary packages) and \.dsc (source packages) files\. When importing from directory aptly would do recursive scan looking for all files matching \fI\.deb or\fR\.dsc patterns\. Every file discovered would be analyzed to extract metadata, package would then be created and added to the database\. Files would be imported to internal package pool\. For source packages, all required files are added automatically as well\. Extra files for source package should be in the same directory as *\.dsc file\. +Command adds packages to local repository from \.deb, \.udeb (binary packages) and \.dsc (source packages) files\. When importing from directory aptly would do recursive scan looking for all files matching \fI\.[u]deb or\fR\.dsc patterns\. Every file discovered would be analyzed to extract metadata, package would then be created and added to the database\. Files would be imported to internal package pool\. For source packages, all required files are added automatically as well\. Extra files for source package should be in the same directory as *\.dsc file\. . .P Example: From e123e4dfacfa3f3c139f7b35fca8439269c09f59 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 21:53:19 +0400 Subject: [PATCH 17/19] .udebs are supported now. #108 --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 85e7d2c0..be90bb6c 100644 --- a/README.rst +++ b/README.rst @@ -33,7 +33,7 @@ Aptly features: ("+" means planned features) Current limitations: -* debian-installer and translations not supported yet +* translations are not supported yet Download -------- From 4b50f817d73e8e6fd18ed673bfa70dadd75ea235 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 23:09:57 +0400 Subject: [PATCH 18/19] Fix system tests. #108 --- system/t06_publish/snapshot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py index fef3e224..5fac3d25 100644 --- a/system/t06_publish/snapshot.py +++ b/system/t06_publish/snapshot.py @@ -846,6 +846,7 @@ class PublishSnapshot35Test(BaseTest): "aptly snapshot create squeeze from mirror squeeze", ] runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec squeeze" + gold_processor = BaseTest.expand_environ def check(self): super(PublishSnapshot35Test, self).check() From 7e8f692b2c812eb50437dcdcc55e7fdeba645a77 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 30 Sep 2014 23:24:51 +0400 Subject: [PATCH 19/19] Use better words. #108 --- cmd/mirror_edit.go | 2 +- man/aptly.1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/mirror_edit.go b/cmd/mirror_edit.go index c16df85d..35e5747c 100644 --- a/cmd/mirror_edit.go +++ b/cmd/mirror_edit.go @@ -65,7 +65,7 @@ func makeCmdMirrorEdit() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorEdit, UsageLine: "edit ", - Short: "edit properties of mirorr", + Short: "edit mirror settings", Long: ` Command edit allows one to change settings of mirror: filters, list of architectures. diff --git a/man/aptly.1 b/man/aptly.1 index 638e4121..1159e801 100644 --- a/man/aptly.1 +++ b/man/aptly.1 @@ -415,7 +415,7 @@ Example: .P $ aptly mirror rename wheezy\-min wheezy\-main . -.SH "EDIT PROPERTIES OF MIRORR" +.SH "EDIT MIRROR SETTINGS" \fBaptly\fR \fBmirror\fR \fBedit\fR \fIname\fR . .P