func (s *PackageRefListSuite) TestNewPackageListFromRefList(c *C) { db, _ := database.OpenDB(c.MkDir()) coll := NewPackageCollection(db) coll.Update(s.p1) coll.Update(s.p3) s.list.Add(s.p1) s.list.Add(s.p3) s.list.Add(s.p5) s.list.Add(s.p6) reflist := NewPackageRefListFromPackageList(s.list) _, err := NewPackageListFromRefList(reflist, coll) c.Assert(err, ErrorMatches, "unable to load package with key.*") coll.Update(s.p5) coll.Update(s.p6) list, err := NewPackageListFromRefList(reflist, coll) c.Assert(err, IsNil) c.Check(list.Len(), Equals, 4) c.Check(list.Add(s.p4), ErrorMatches, "conflict in package.*") list, err = NewPackageListFromRefList(nil, coll) c.Assert(err, IsNil) c.Check(list.Len(), Equals, 0) }
func (s *PublishedRepoRemoveSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.snapshotCollection = NewSnapshotCollection(s.db) s.snap1 = NewSnapshotFromPackageList("snap1", []*Snapshot{}, NewPackageList(), "desc1") s.snapshotCollection.Add(s.snap1) s.repo1, _ = NewPublishedRepo("ppa", "anaconda", "main", []string{}, s.snap1) s.repo2, _ = NewPublishedRepo("", "anaconda", "main", []string{}, s.snap1) s.repo3, _ = NewPublishedRepo("ppa", "meduza", "main", []string{}, s.snap1) s.repo4, _ = NewPublishedRepo("ppa", "osminog", "contrib", []string{}, s.snap1) s.collection = NewPublishedRepoCollection(s.db) s.collection.Add(s.repo1) s.collection.Add(s.repo2) s.collection.Add(s.repo3) s.collection.Add(s.repo4) s.root = c.MkDir() s.publishedStorage = files.NewPublishedStorage(s.root) s.publishedStorage.MkDir("ppa/dists/anaconda") s.publishedStorage.MkDir("ppa/dists/meduza") s.publishedStorage.MkDir("ppa/dists/osminog") s.publishedStorage.MkDir("ppa/pool/main") s.publishedStorage.MkDir("ppa/pool/contrib") s.publishedStorage.MkDir("dists/anaconda") s.publishedStorage.MkDir("pool/main") }
func (s *PublishedRepoSuite) SetUpTest(c *C) { s.SetUpPackages() s.db, _ = database.OpenDB(c.MkDir()) s.root = c.MkDir() s.publishedStorage = files.NewPublishedStorage(s.root) s.packagePool = files.NewPackagePool(s.root) repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false) repo.packageRefs = s.reflist s.snapshot, _ = NewSnapshotFromRepository("snap", repo) s.repo, _ = NewPublishedRepo("ppa", "squeeze", "main", nil, s.snapshot) s.packageCollection = NewPackageCollection(s.db) s.packageCollection.Update(s.p1) s.packageCollection.Update(s.p2) s.packageCollection.Update(s.p3) poolPath, _ := s.packagePool.Path(s.p1.Files()[0].Filename, s.p1.Files()[0].Checksums.MD5) err := os.MkdirAll(filepath.Dir(poolPath), 0755) f, err := os.Create(poolPath) c.Assert(err, IsNil) f.Close() }
func main() { err := cmd.Flag.Parse(os.Args[1:]) if err != nil { log.Fatalf("%s", err) } context.downloader = utils.NewDownloader(2) defer context.downloader.Shutdown() // TODO: configure DB dir context.database, err = database.OpenDB("/tmp/aptly/db") if err != nil { log.Fatalf("can't open database: %s", err) } defer context.database.Close() // TODO:configure pool dir context.packageRepository = debian.NewRepository("/tmp/aptly") args := cmd.Flag.Args() err = cmd.Run(args) if err != nil { log.Fatalf("%s", err) } }
func (s *PackageRefListSuite) TestMerge(c *C) { db, _ := database.OpenDB(c.MkDir()) coll := NewPackageCollection(db) packages := []*Package{ &Package{Name: "lib", Version: "1.0", Architecture: "i386"}, //0 &Package{Name: "dpkg", Version: "1.7", Architecture: "i386"}, //1 &Package{Name: "data", Version: "1.1~bp1", Architecture: "all"}, //2 &Package{Name: "app", Version: "1.1~bp1", Architecture: "i386"}, //3 &Package{Name: "app", Version: "1.1~bp2", Architecture: "i386"}, //4 &Package{Name: "app", Version: "1.1~bp2", Architecture: "amd64"}, //5 &Package{Name: "dpkg", Version: "1.0", Architecture: "i386"}, //6 &Package{Name: "xyz", Version: "1.0", Architecture: "sparc"}, //7 } for _, p := range packages { coll.Update(p) } listA := NewPackageList() listA.Add(packages[0]) listA.Add(packages[1]) listA.Add(packages[2]) listA.Add(packages[3]) listA.Add(packages[7]) listB := NewPackageList() listB.Add(packages[0]) listB.Add(packages[2]) listB.Add(packages[4]) listB.Add(packages[5]) listB.Add(packages[6]) reflistA := NewPackageRefListFromPackageList(listA) reflistB := NewPackageRefListFromPackageList(listB) toStrSlice := func(reflist *PackageRefList) (result []string) { result = make([]string, reflist.Len()) for i, r := range reflist.Refs { result[i] = string(r) } return } mergeAB := reflistA.Merge(reflistB, true) mergeBA := reflistB.Merge(reflistA, true) c.Check(toStrSlice(mergeAB), DeepEquals, []string{"Pall data 1.1~bp1", "Pamd64 app 1.1~bp2", "Pi386 app 1.1~bp2", "Pi386 dpkg 1.0", "Pi386 lib 1.0", "Psparc xyz 1.0"}) c.Check(toStrSlice(mergeBA), DeepEquals, []string{"Pall data 1.1~bp1", "Pamd64 app 1.1~bp2", "Pi386 app 1.1~bp1", "Pi386 dpkg 1.7", "Pi386 lib 1.0", "Psparc xyz 1.0"}) mergeABall := reflistA.Merge(reflistB, false) mergeBAall := reflistB.Merge(reflistA, false) c.Check(mergeABall, DeepEquals, mergeBAall) c.Check(toStrSlice(mergeBAall), DeepEquals, []string{"Pall data 1.1~bp1", "Pamd64 app 1.1~bp2", "Pi386 app 1.1~bp1", "Pi386 app 1.1~bp2", "Pi386 dpkg 1.0", "Pi386 dpkg 1.7", "Pi386 lib 1.0", "Psparc xyz 1.0"}) }
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.downloader = utils.NewFakeDownloader().ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/Release", exampleReleaseFile) s.db, _ = database.OpenDB(c.MkDir()) s.packageCollection = NewPackageCollection(s.db) s.packageRepo = NewRepository(c.MkDir()) s.SetUpPackages() }
func (s *LocalRepoCollectionSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.collection = NewLocalRepoCollection(s.db) s.list = NewPackageList() s.list.Add(&Package{Name: "lib", Version: "1.7", Architecture: "i386"}) s.list.Add(&Package{Name: "app", Version: "1.9", Architecture: "amd64"}) s.reflist = NewPackageRefListFromPackageList(s.list) }
func (s *PublishedRepoSuite) SetUpTest(c *C) { s.SetUpPackages() s.db, _ = database.OpenDB(c.MkDir()) s.factory = NewCollectionFactory(s.db) s.root = c.MkDir() s.publishedStorage = files.NewPublishedStorage(s.root) s.root2 = c.MkDir() s.publishedStorage2 = files.NewPublishedStorage(s.root2) s.provider = &FakeStorageProvider{map[string]aptly.PublishedStorage{ "": s.publishedStorage, "files:other": s.publishedStorage2}} s.packagePool = files.NewPackagePool(s.root) repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false) repo.packageRefs = s.reflist s.factory.RemoteRepoCollection().Add(repo) s.localRepo = NewLocalRepo("local1", "comment1") s.localRepo.packageRefs = s.reflist s.factory.LocalRepoCollection().Add(s.localRepo) s.snapshot, _ = NewSnapshotFromRepository("snap", repo) s.factory.SnapshotCollection().Add(s.snapshot) s.snapshot2, _ = NewSnapshotFromRepository("snap", repo) s.factory.SnapshotCollection().Add(s.snapshot2) s.packageCollection = s.factory.PackageCollection() s.packageCollection.Update(s.p1) s.packageCollection.Update(s.p2) s.packageCollection.Update(s.p3) s.repo, _ = NewPublishedRepo("", "ppa", "squeeze", nil, []string{"main"}, []interface{}{s.snapshot}, s.factory) s.repo.SkipContents = true s.repo2, _ = NewPublishedRepo("", "ppa", "maverick", nil, []string{"main"}, []interface{}{s.localRepo}, s.factory) s.repo2.SkipContents = true s.repo3, _ = NewPublishedRepo("", "linux", "natty", nil, []string{"main", "contrib"}, []interface{}{s.snapshot, s.snapshot2}, s.factory) s.repo3.SkipContents = true s.repo4, _ = NewPublishedRepo("", "ppa", "maverick", []string{"source"}, []string{"main"}, []interface{}{s.localRepo}, s.factory) s.repo4.SkipContents = true s.repo5, _ = NewPublishedRepo("files:other", "ppa", "maverick", []string{"source"}, []string{"main"}, []interface{}{s.localRepo}, s.factory) s.repo5.SkipContents = true poolPath, _ := s.packagePool.Path(s.p1.Files()[0].Filename, s.p1.Files()[0].Checksums.MD5) err := os.MkdirAll(filepath.Dir(poolPath), 0755) f, err := os.Create(poolPath) c.Assert(err, IsNil) f.Close() }
func (s *LocalRepoSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.list = NewPackageList() s.list.Add(&Package{Name: "lib", Version: "1.7", Architecture: "i386"}) s.list.Add(&Package{Name: "app", Version: "1.9", Architecture: "amd64"}) s.reflist = NewPackageRefListFromPackageList(s.list) s.repo = NewLocalRepo("lrepo", "Super repo") s.repo.packageRefs = s.reflist }
func (s *RemoteRepoSuite) SetUpTest(c *C) { 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()) s.collectionFactory = NewCollectionFactory(s.db) s.packagePool = files.NewPackagePool(c.MkDir()) s.SetUpPackages() s.progress.Start() }
// Database opens and returns current instance of database func (context *AptlyContext) Database() (database.Storage, error) { if context.database == nil { var err error context.database, err = database.OpenDB(context.DBPath()) if err != nil { return nil, fmt.Errorf("can't open database: %s", err) } } return context.database, nil }
func (s *SnapshotCollectionSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.collection = NewSnapshotCollection(s.db) s.SetUpPackages() s.repo1, _ = NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, 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.packageRefs = s.reflist s.snapshot2, _ = NewSnapshotFromRepository("snap2", s.repo2) }
func (s *PublishedRepoCollectionSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.snapshotCollection = NewSnapshotCollection(s.db) s.snap1 = NewSnapshotFromPackageList("snap1", []*Snapshot{}, NewPackageList(), "desc1") s.snap2 = NewSnapshotFromPackageList("snap2", []*Snapshot{}, NewPackageList(), "desc2") s.snapshotCollection.Add(s.snap1) s.snapshotCollection.Add(s.snap2) s.repo1, _ = NewPublishedRepo("ppa", "anaconda", "main", []string{}, s.snap1) s.repo2, _ = NewPublishedRepo("", "anaconda", "main", []string{}, s.snap2) s.repo3, _ = NewPublishedRepo("ppa", "anaconda", "main", []string{}, s.snap2) s.collection = NewPublishedRepoCollection(s.db) }
func (s *PublishedRepoRemoveSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.factory = NewCollectionFactory(s.db) s.snapshotCollection = s.factory.SnapshotCollection() s.snap1 = NewSnapshotFromPackageList("snap1", []*Snapshot{}, NewPackageList(), "desc1") s.snapshotCollection.Add(s.snap1) s.repo1, _ = NewPublishedRepo("", "ppa", "anaconda", []string{}, []string{"main"}, []interface{}{s.snap1}, s.factory) s.repo2, _ = NewPublishedRepo("", "", "anaconda", []string{}, []string{"main"}, []interface{}{s.snap1}, s.factory) s.repo3, _ = NewPublishedRepo("", "ppa", "meduza", []string{}, []string{"main"}, []interface{}{s.snap1}, s.factory) s.repo4, _ = NewPublishedRepo("", "ppa", "osminog", []string{}, []string{"contrib"}, []interface{}{s.snap1}, s.factory) s.repo5, _ = NewPublishedRepo("files:other", "ppa", "osminog", []string{}, []string{"contrib"}, []interface{}{s.snap1}, s.factory) s.collection = s.factory.PublishedRepoCollection() s.collection.Add(s.repo1) s.collection.Add(s.repo2) s.collection.Add(s.repo3) s.collection.Add(s.repo4) s.collection.Add(s.repo5) s.root = c.MkDir() s.publishedStorage = files.NewPublishedStorage(s.root) s.publishedStorage.MkDir("ppa/dists/anaconda") s.publishedStorage.MkDir("ppa/dists/meduza") s.publishedStorage.MkDir("ppa/dists/osminog") s.publishedStorage.MkDir("ppa/pool/main") s.publishedStorage.MkDir("ppa/pool/contrib") s.publishedStorage.MkDir("dists/anaconda") s.publishedStorage.MkDir("pool/main") s.root2 = c.MkDir() s.publishedStorage2 = files.NewPublishedStorage(s.root2) s.publishedStorage2.MkDir("ppa/dists/osminog") s.publishedStorage2.MkDir("ppa/pool/contrib") s.provider = &FakeStorageProvider{map[string]aptly.PublishedStorage{ "": s.publishedStorage, "files:other": s.publishedStorage2}} }
func (s *PublishedRepoCollectionSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.factory = NewCollectionFactory(s.db) s.snapshotCollection = s.factory.SnapshotCollection() s.snap1 = NewSnapshotFromPackageList("snap1", []*Snapshot{}, NewPackageList(), "desc1") s.snap2 = NewSnapshotFromPackageList("snap2", []*Snapshot{}, NewPackageList(), "desc2") s.snapshotCollection.Add(s.snap1) s.snapshotCollection.Add(s.snap2) s.localRepo = NewLocalRepo("local1", "comment1") s.factory.LocalRepoCollection().Add(s.localRepo) s.repo1, _ = NewPublishedRepo("ppa", "anaconda", "main", []string{}, s.snap1, s.factory) s.repo2, _ = NewPublishedRepo("", "anaconda", "main", []string{}, s.snap2, s.factory) s.repo3, _ = NewPublishedRepo("ppa", "anaconda", "main", []string{}, s.snap2, s.factory) s.repo4, _ = NewPublishedRepo("ppa", "precise", "main", []string{}, s.localRepo, s.factory) s.collection = s.factory.PublishedRepoCollection() }
// InitContext initializes context with default settings func InitContext(cmd *commander.Command) error { var err error context.dependencyOptions = 0 if utils.Config.DepFollowSuggests || cmd.Flag.Lookup("dep-follow-suggests").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowSuggests } if utils.Config.DepFollowRecommends || cmd.Flag.Lookup("dep-follow-recommends").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowRecommends } if utils.Config.DepFollowAllVariants || cmd.Flag.Lookup("dep-follow-all-variants").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowAllVariants } if utils.Config.DepFollowSource || cmd.Flag.Lookup("dep-follow-source").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowSource } context.architecturesList = utils.Config.Architectures optionArchitectures := cmd.Flag.Lookup("architectures").Value.String() if optionArchitectures != "" { context.architecturesList = strings.Split(optionArchitectures, ",") } context.progress = console.NewProgress() context.progress.Start() context.downloader = http.NewDownloader(utils.Config.DownloadConcurrency, context.progress) context.database, err = database.OpenDB(filepath.Join(utils.Config.RootDir, "db")) if err != nil { return fmt.Errorf("can't open database: %s", err) } context.packagePool = files.NewPackagePool(utils.Config.RootDir) context.publishedStorage = files.NewPublishedStorage(utils.Config.RootDir) return nil }
func (s *PackageCollectionSuite) SetUpTest(c *C) { s.p = NewPackageFromControlFile(packageStanza.Copy()) s.db, _ = database.OpenDB(c.MkDir()) s.collection = NewPackageCollection(s.db) }
// InitContext initializes context with default settings func InitContext(cmd *commander.Command) error { var err error context.dependencyOptions = 0 if utils.Config.DepFollowSuggests || cmd.Flag.Lookup("dep-follow-suggests").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowSuggests } if utils.Config.DepFollowRecommends || cmd.Flag.Lookup("dep-follow-recommends").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowRecommends } if utils.Config.DepFollowAllVariants || cmd.Flag.Lookup("dep-follow-all-variants").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowAllVariants } if utils.Config.DepFollowSource || cmd.Flag.Lookup("dep-follow-source").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowSource } context.architecturesList = utils.Config.Architectures optionArchitectures := cmd.Flag.Lookup("architectures").Value.String() if optionArchitectures != "" { context.architecturesList = strings.Split(optionArchitectures, ",") } context.progress = console.NewProgress() context.progress.Start() context.downloader = http.NewDownloader(utils.Config.DownloadConcurrency, context.progress) context.database, err = database.OpenDB(filepath.Join(utils.Config.RootDir, "db")) if err != nil { return fmt.Errorf("can't open database: %s", err) } context.packagePool = files.NewPackagePool(utils.Config.RootDir) context.publishedStorage = files.NewPublishedStorage(utils.Config.RootDir) if aptly.EnableDebug { cpuprofile := cmd.Flag.Lookup("cpuprofile").Value.String() if cpuprofile != "" { context.fileCPUProfile, err = os.Create(cpuprofile) if err != nil { return err } pprof.StartCPUProfile(context.fileCPUProfile) } memprofile := cmd.Flag.Lookup("memprofile").Value.String() if memprofile != "" { context.fileMemProfile, err = os.Create(memprofile) if err != nil { return err } } memstats := cmd.Flag.Lookup("memstats").Value.String() if memstats != "" { interval := cmd.Flag.Lookup("meminterval").Value.Get().(time.Duration) context.fileMemStats, err = os.Create(memstats) if err != nil { return err } context.fileMemStats.WriteString("# Time\tHeapSys\tHeapAlloc\tHeapIdle\tHeapReleased\n") go func() { var stats runtime.MemStats start := time.Now().UnixNano() for { runtime.ReadMemStats(&stats) if context.fileMemStats != nil { context.fileMemStats.WriteString(fmt.Sprintf("%d\t%d\t%d\t%d\t%d\n", (time.Now().UnixNano()-start)/1000000, stats.HeapSys, stats.HeapAlloc, stats.HeapIdle, stats.HeapReleased)) time.Sleep(interval) } else { break } } }() } } return nil }
func (s *RemoteRepoCollectionSuite) SetUpTest(c *C) { s.db, _ = database.OpenDB(c.MkDir()) s.collection = NewRemoteRepoCollection(s.db) s.SetUpPackages() }
func (s *PackageRefListSuite) TestDiff(c *C) { db, _ := database.OpenDB(c.MkDir()) coll := NewPackageCollection(db) packages := []*Package{ &Package{Name: "lib", Version: "1.0", Architecture: "i386"}, //0 &Package{Name: "dpkg", Version: "1.7", Architecture: "i386"}, //1 &Package{Name: "data", Version: "1.1~bp1", Architecture: "all"}, //2 &Package{Name: "app", Version: "1.1~bp1", Architecture: "i386"}, //3 &Package{Name: "app", Version: "1.1~bp2", Architecture: "i386"}, //4 &Package{Name: "app", Version: "1.1~bp2", Architecture: "amd64"}, //5 &Package{Name: "xyz", Version: "3.0", Architecture: "sparc"}, //6 } for _, p := range packages { coll.Update(p) } listA := NewPackageList() listA.Add(packages[0]) listA.Add(packages[1]) listA.Add(packages[2]) listA.Add(packages[3]) listA.Add(packages[6]) listB := NewPackageList() listB.Add(packages[0]) listB.Add(packages[2]) listB.Add(packages[4]) listB.Add(packages[5]) reflistA := NewPackageRefListFromPackageList(listA) reflistB := NewPackageRefListFromPackageList(listB) diffAA, err := reflistA.Diff(reflistA, coll) c.Check(err, IsNil) c.Check(diffAA, HasLen, 0) diffAB, err := reflistA.Diff(reflistB, coll) c.Check(err, IsNil) c.Check(diffAB, HasLen, 4) c.Check(diffAB[0].Left, IsNil) c.Check(diffAB[0].Right.String(), Equals, "app_1.1~bp2_amd64") c.Check(diffAB[1].Left.String(), Equals, "app_1.1~bp1_i386") c.Check(diffAB[1].Right.String(), Equals, "app_1.1~bp2_i386") c.Check(diffAB[2].Left.String(), Equals, "dpkg_1.7_i386") c.Check(diffAB[2].Right, IsNil) c.Check(diffAB[3].Left.String(), Equals, "xyz_3.0_sparc") c.Check(diffAB[3].Right, IsNil) diffBA, err := reflistB.Diff(reflistA, coll) c.Check(err, IsNil) c.Check(diffBA, HasLen, 4) c.Check(diffBA[0].Right, IsNil) c.Check(diffBA[0].Left.String(), Equals, "app_1.1~bp2_amd64") c.Check(diffBA[1].Right.String(), Equals, "app_1.1~bp1_i386") c.Check(diffBA[1].Left.String(), Equals, "app_1.1~bp2_i386") c.Check(diffBA[2].Right.String(), Equals, "dpkg_1.7_i386") c.Check(diffBA[2].Left, IsNil) c.Check(diffBA[3].Right.String(), Equals, "xyz_3.0_sparc") c.Check(diffBA[3].Left, IsNil) }
func (s *PackageRefListSuite) TestMerge(c *C) { db, _ := database.OpenDB(c.MkDir()) coll := NewPackageCollection(db) packages := []*Package{ {Name: "lib", Version: "1.0", Architecture: "i386"}, //0 {Name: "dpkg", Version: "1.7", Architecture: "i386"}, //1 {Name: "data", Version: "1.1~bp1", Architecture: "all"}, //2 {Name: "app", Version: "1.1~bp1", Architecture: "i386"}, //3 {Name: "app", Version: "1.1~bp2", Architecture: "i386"}, //4 {Name: "app", Version: "1.1~bp2", Architecture: "amd64"}, //5 {Name: "dpkg", Version: "1.0", Architecture: "i386"}, //6 {Name: "xyz", Version: "1.0", Architecture: "sparc"}, //7 {Name: "dpkg", Version: "1.0", Architecture: "i386", FilesHash: 0x34445}, //8 {Name: "app", Version: "1.1~bp2", Architecture: "i386", FilesHash: 0x44}, //9 } for _, p := range packages { p.V06Plus = true coll.Update(p) } listA := NewPackageList() listA.Add(packages[0]) listA.Add(packages[1]) listA.Add(packages[2]) listA.Add(packages[3]) listA.Add(packages[7]) listB := NewPackageList() listB.Add(packages[0]) listB.Add(packages[2]) listB.Add(packages[4]) listB.Add(packages[5]) listB.Add(packages[6]) listC := NewPackageList() listC.Add(packages[0]) listC.Add(packages[8]) listC.Add(packages[9]) reflistA := NewPackageRefListFromPackageList(listA) reflistB := NewPackageRefListFromPackageList(listB) reflistC := NewPackageRefListFromPackageList(listC) mergeAB := reflistA.Merge(reflistB, true, false) mergeBA := reflistB.Merge(reflistA, true, false) mergeAC := reflistA.Merge(reflistC, true, false) mergeBC := reflistB.Merge(reflistC, true, false) mergeCB := reflistC.Merge(reflistB, true, false) c.Check(toStrSlice(mergeAB), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp2 00000000", "Pi386 dpkg 1.0 00000000", "Pi386 lib 1.0 00000000", "Psparc xyz 1.0 00000000"}) c.Check(toStrSlice(mergeBA), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp1 00000000", "Pi386 dpkg 1.7 00000000", "Pi386 lib 1.0 00000000", "Psparc xyz 1.0 00000000"}) c.Check(toStrSlice(mergeAC), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pi386 app 1.1~bp2 00000044", "Pi386 dpkg 1.0 00034445", "Pi386 lib 1.0 00000000", "Psparc xyz 1.0 00000000"}) c.Check(toStrSlice(mergeBC), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp2 00000044", "Pi386 dpkg 1.0 00034445", "Pi386 lib 1.0 00000000"}) c.Check(toStrSlice(mergeCB), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp2 00000000", "Pi386 dpkg 1.0 00000000", "Pi386 lib 1.0 00000000"}) mergeABall := reflistA.Merge(reflistB, false, false) mergeBAall := reflistB.Merge(reflistA, false, false) mergeACall := reflistA.Merge(reflistC, false, false) mergeBCall := reflistB.Merge(reflistC, false, false) mergeCBall := reflistC.Merge(reflistB, false, false) c.Check(mergeABall, DeepEquals, mergeBAall) c.Check(toStrSlice(mergeBAall), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp1 00000000", "Pi386 app 1.1~bp2 00000000", "Pi386 dpkg 1.0 00000000", "Pi386 dpkg 1.7 00000000", "Pi386 lib 1.0 00000000", "Psparc xyz 1.0 00000000"}) c.Check(mergeBCall, Not(DeepEquals), mergeCBall) c.Check(toStrSlice(mergeACall), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pi386 app 1.1~bp1 00000000", "Pi386 app 1.1~bp2 00000044", "Pi386 dpkg 1.0 00034445", "Pi386 dpkg 1.7 00000000", "Pi386 lib 1.0 00000000", "Psparc xyz 1.0 00000000"}) c.Check(toStrSlice(mergeBCall), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp2 00000044", "Pi386 dpkg 1.0 00034445", "Pi386 lib 1.0 00000000"}) mergeBCwithConflicts := reflistB.Merge(reflistC, false, true) c.Check(toStrSlice(mergeBCwithConflicts), DeepEquals, []string{"Pall data 1.1~bp1 00000000", "Pamd64 app 1.1~bp2 00000000", "Pi386 app 1.1~bp2 00000000", "Pi386 app 1.1~bp2 00000044", "Pi386 dpkg 1.0 00000000", "Pi386 dpkg 1.0 00034445", "Pi386 lib 1.0 00000000"}) }
func main() { err := cmd.Flag.Parse(os.Args[1:]) if err != nil { fatal(err) } configLocation := cmd.Flag.Lookup("config").Value.String() if configLocation != "" { err = utils.LoadConfig(configLocation, &utils.Config) if err != nil { fatal(err) } } else { configLocations := []string{ filepath.Join(os.Getenv("HOME"), ".aptly.conf"), "/etc/aptly.conf", } for _, configLocation := range configLocations { err = utils.LoadConfig(configLocation, &utils.Config) if err == nil { break } if !os.IsNotExist(err) { fatal(fmt.Errorf("error loading config file %s: %s", configLocation, err)) } } if err != nil { fmt.Printf("Config file not found, creating default config at %s\n\n", configLocations[0]) utils.SaveConfig(configLocations[0], &utils.Config) } } context.dependencyOptions = 0 if utils.Config.DepFollowSuggests || cmd.Flag.Lookup("dep-follow-suggests").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowSuggests } if utils.Config.DepFollowRecommends || cmd.Flag.Lookup("dep-follow-recommends").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowRecommends } if utils.Config.DepFollowAllVariants || cmd.Flag.Lookup("dep-follow-all-variants").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowAllVariants } if utils.Config.DepFollowSource || cmd.Flag.Lookup("dep-follow-source").Value.Get().(bool) { context.dependencyOptions |= debian.DepFollowSource } context.architecturesList = utils.Config.Architectures optionArchitectures := cmd.Flag.Lookup("architectures").Value.String() if optionArchitectures != "" { context.architecturesList = strings.Split(optionArchitectures, ",") } context.downloader = utils.NewDownloader(utils.Config.DownloadConcurrency) defer context.downloader.Shutdown() context.database, err = database.OpenDB(filepath.Join(utils.Config.RootDir, "db")) if err != nil { fatal(fmt.Errorf("can't open database: %s", err)) } defer context.database.Close() context.packageRepository = debian.NewRepository(utils.Config.RootDir) err = cmd.Dispatch(cmd.Flag.Args()) if err != nil { fatal(err) } }