func (s *PackageSuite) TestDownloadList(c *C) { packagePool := files.NewPackagePool(c.MkDir()) p := NewPackageFromControlFile(s.stanza) p.Files()[0].Checksums.Size = 5 poolPath, _ := packagePool.Path(p.Files()[0].Filename, p.Files()[0].Checksums.MD5) list, err := p.DownloadList(packagePool) c.Check(err, IsNil) c.Check(list, DeepEquals, []PackageDownloadTask{ PackageDownloadTask{ RepoURI: "pool/contrib/a/alien-arena/alien-arena-common_7.40-2_i386.deb", DestinationPath: poolPath, Checksums: utils.ChecksumInfo{Size: 5, MD5: "1e8cba92c41420aa7baa8a5718d67122", SHA1: "46955e48cad27410a83740a21d766ce362364024", SHA256: "eb4afb9885cba6dc70cccd05b910b2dbccc02c5900578be5e99f0d3dbf9d76a5"}}}) err = os.MkdirAll(filepath.Dir(poolPath), 0755) c.Assert(err, IsNil) file, err := os.Create(poolPath) c.Assert(err, IsNil) file.WriteString("abcde") file.Close() list, err = p.DownloadList(packagePool) c.Check(err, IsNil) c.Check(list, DeepEquals, []PackageDownloadTask{}) }
// PackagePool returns instance of PackagePool func (context *AptlyContext) PackagePool() aptly.PackagePool { if context.packagePool == nil { context.packagePool = files.NewPackagePool(context.Config().RootDir) } return context.packagePool }
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 (s *PackageFilesSuite) TestVerify(c *C) { packagePool := files.NewPackagePool(c.MkDir()) poolPath, _ := packagePool.Path(s.files[0].Filename, s.files[0].Checksums.MD5) result, err := s.files[0].Verify(packagePool) c.Check(err, IsNil) c.Check(result, Equals, false) err = os.MkdirAll(filepath.Dir(poolPath), 0755) c.Assert(err, IsNil) file, err := os.Create(poolPath) c.Assert(err, IsNil) file.WriteString("abcde") file.Close() result, err = s.files[0].Verify(packagePool) c.Check(err, IsNil) c.Check(result, Equals, false) s.files[0].Checksums.Size = 5 result, err = s.files[0].Verify(packagePool) c.Check(err, IsNil) c.Check(result, Equals, true) }
func (s *PackageSuite) TestFilepathList(c *C) { packagePool := files.NewPackagePool(c.MkDir()) p := NewPackageFromControlFile(s.stanza) list, err := p.FilepathList(packagePool) c.Check(err, IsNil) c.Check(list, DeepEquals, []string{"1e/8c/alien-arena-common_7.40-2_i386.deb"}) }
// PackagePool returns instance of PackagePool func (context *AptlyContext) PackagePool() aptly.PackagePool { context.Lock() defer context.Unlock() if context.packagePool == nil { context.packagePool = files.NewPackagePool(context.config().RootDir) } return context.packagePool }
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 *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 = 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() }
func (s *PublishedStorageSuite) TestLinkFromPool(c *C) { root := c.MkDir() pool := files.NewPackagePool(root) sourcePath := filepath.Join(root, "pool/c1/df/mars-invaders_1.03.deb") err := os.MkdirAll(filepath.Dir(sourcePath), 0755) c.Assert(err, IsNil) err = ioutil.WriteFile(sourcePath, []byte("Contents"), 0644) c.Assert(err, IsNil) sourcePath2 := filepath.Join(root, "pool/e9/df/mars-invaders_1.03.deb") err = os.MkdirAll(filepath.Dir(sourcePath2), 0755) c.Assert(err, IsNil) err = ioutil.WriteFile(sourcePath2, []byte("Spam"), 0644) c.Assert(err, IsNil) // first link from pool err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), pool, sourcePath, "c1df1da7a1ce305a3b60af9d5733ac1d", false) c.Check(err, IsNil) data, err := s.storage.conn.ObjectGetBytes("test", "pool/main/m/mars-invaders/mars-invaders_1.03.deb") c.Check(err, IsNil) c.Check(data, DeepEquals, []byte("Contents")) // duplicate link from pool err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), pool, sourcePath, "c1df1da7a1ce305a3b60af9d5733ac1d", false) c.Check(err, IsNil) data, err = s.storage.conn.ObjectGetBytes("test", "pool/main/m/mars-invaders/mars-invaders_1.03.deb") c.Check(err, IsNil) c.Check(data, DeepEquals, []byte("Contents")) // link from pool with conflict err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), pool, sourcePath2, "e9dfd31cc505d51fc26975250750deab", false) c.Check(err, ErrorMatches, ".*file already exists and is different.*") data, err = s.storage.conn.ObjectGetBytes("test", "pool/main/m/mars-invaders/mars-invaders_1.03.deb") c.Check(err, IsNil) c.Check(data, DeepEquals, []byte("Contents")) // link from pool with conflict and force err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), pool, sourcePath2, "e9dfd31cc505d51fc26975250750deab", true) c.Check(err, IsNil) data, err = s.storage.conn.ObjectGetBytes("test", "pool/main/m/mars-invaders/mars-invaders_1.03.deb") c.Check(err, IsNil) c.Check(data, DeepEquals, []byte("Spam")) }
// 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 *PackageSuite) TestLinkFromPool(c *C) { packagePool := files.NewPackagePool(c.MkDir()) publishedStorage := files.NewPublishedStorage(c.MkDir()) p := NewPackageFromControlFile(s.stanza) poolPath, _ := packagePool.Path(p.Files()[0].Filename, p.Files()[0].Checksums.MD5) err := os.MkdirAll(filepath.Dir(poolPath), 0755) c.Assert(err, IsNil) file, err := os.Create(poolPath) c.Assert(err, IsNil) file.Close() err = p.LinkFromPool(publishedStorage, packagePool, "", "non-free") c.Check(err, IsNil) c.Check(p.Files()[0].Filename, Equals, "alien-arena-common_7.40-2_i386.deb") c.Check(p.Files()[0].downloadPath, Equals, "pool/non-free/a/alien-arena") p.IsSource = true err = p.LinkFromPool(publishedStorage, packagePool, "", "non-free") c.Check(err, IsNil) c.Check(p.Extra()["Directory"], Equals, "pool/non-free/a/alien-arena") }
func (s *PackageSuite) TestVerifyFiles(c *C) { p := NewPackageFromControlFile(s.stanza) packagePool := files.NewPackagePool(c.MkDir()) poolPath, _ := packagePool.Path(p.Files()[0].Filename, p.Files()[0].Checksums.MD5) err := os.MkdirAll(filepath.Dir(poolPath), 0755) c.Assert(err, IsNil) file, err := os.Create(poolPath) c.Assert(err, IsNil) file.WriteString("abcde") file.Close() result, err := p.VerifyFiles(packagePool) c.Check(err, IsNil) c.Check(result, Equals, false) p.Files()[0].Checksums.Size = 5 result, err = p.VerifyFiles(packagePool) c.Check(err, IsNil) c.Check(result, Equals, true) }
// 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 }