mirror of
https://github.com/mudler/luet.git
synced 2025-09-05 01:00:44 +00:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
db8bf2b85e | ||
|
5eb586ddb0 |
@@ -41,7 +41,7 @@ var Verbose bool
|
|||||||
var LockedCommands = []string{"install", "uninstall", "upgrade"}
|
var LockedCommands = []string{"install", "uninstall", "upgrade"}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
LuetCLIVersion = "0.17.1"
|
LuetCLIVersion = "0.17.2"
|
||||||
LuetEnvPrefix = "LUET"
|
LuetEnvPrefix = "LUET"
|
||||||
license = `
|
license = `
|
||||||
Luet Copyright (C) 2019-2021 Ettore Di Giacinto
|
Luet Copyright (C) 2019-2021 Ettore Di Giacinto
|
||||||
|
@@ -758,6 +758,8 @@ func (l *LuetInstaller) getFinalizers(allRepos pkg.PackageDatabase, solution sol
|
|||||||
|
|
||||||
func (l *LuetInstaller) checkFileconflicts(toInstall map[string]ArtifactMatch, s *System) error {
|
func (l *LuetInstaller) checkFileconflicts(toInstall map[string]ArtifactMatch, s *System) error {
|
||||||
Info("Checking for file conflicts..")
|
Info("Checking for file conflicts..")
|
||||||
|
defer s.Clean() // Release memory
|
||||||
|
|
||||||
filesToInstall := []string{}
|
filesToInstall := []string{}
|
||||||
for _, m := range toInstall {
|
for _, m := range toInstall {
|
||||||
a, err := l.downloadPackage(m)
|
a, err := l.downloadPackage(m)
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
package installer
|
package installer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
"github.com/mudler/luet/pkg/helpers"
|
"github.com/mudler/luet/pkg/helpers"
|
||||||
fileHelper "github.com/mudler/luet/pkg/helpers/file"
|
fileHelper "github.com/mudler/luet/pkg/helpers/file"
|
||||||
@@ -10,8 +12,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type System struct {
|
type System struct {
|
||||||
Database pkg.PackageDatabase
|
Database pkg.PackageDatabase
|
||||||
Target string
|
Target string
|
||||||
|
fileIndex map[string]pkg.Package
|
||||||
|
sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *System) World() (pkg.Packages, error) {
|
func (s *System) World() (pkg.Packages, error) {
|
||||||
@@ -53,17 +57,37 @@ func (s *System) ExecuteFinalizers(packs []pkg.Package) error {
|
|||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *System) ExistsPackageFile(file string) (bool, pkg.Package, error) {
|
func (s *System) buildFileIndex() {
|
||||||
for _, p := range s.Database.World() {
|
s.Lock()
|
||||||
files, err := s.Database.GetPackageFiles(p)
|
defer s.Unlock()
|
||||||
if err != nil {
|
// Check if cache is empty or if it got modified
|
||||||
return false, nil, err
|
if s.fileIndex == nil { //|| len(s.Database.GetPackages()) != len(s.fileIndex) {
|
||||||
}
|
s.fileIndex = make(map[string]pkg.Package)
|
||||||
for _, f := range files {
|
for _, p := range s.Database.World() {
|
||||||
if f == file {
|
files, _ := s.Database.GetPackageFiles(p)
|
||||||
return true, p, nil
|
for _, f := range files {
|
||||||
|
s.fileIndex[f] = p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *System) Clean() {
|
||||||
|
s.Lock()
|
||||||
|
defer s.Unlock()
|
||||||
|
s.fileIndex = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *System) ExistsPackageFile(file string) (bool, pkg.Package, error) {
|
||||||
|
Debug("Checking if file ", file, "belongs to any package")
|
||||||
|
s.buildFileIndex()
|
||||||
|
s.Lock()
|
||||||
|
defer s.Unlock()
|
||||||
|
if p, exists := s.fileIndex[file]; exists {
|
||||||
|
Debug(file, "belongs already to", p.HumanReadableString())
|
||||||
|
|
||||||
|
return exists, p, nil
|
||||||
|
}
|
||||||
|
Debug(file, "doesn't belong to any package")
|
||||||
return false, nil, nil
|
return false, nil, nil
|
||||||
}
|
}
|
||||||
|
@@ -60,7 +60,7 @@ var _ = Describe("System", func() {
|
|||||||
r, p, err = s.ExistsPackageFile("f")
|
r, p, err = s.ExistsPackageFile("f")
|
||||||
Expect(r).To(BeTrue())
|
Expect(r).To(BeTrue())
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(p).To(Equal(a))
|
Expect(p).To(Equal(b))
|
||||||
r, p, err = s.ExistsPackageFile("barz")
|
r, p, err = s.ExistsPackageFile("barz")
|
||||||
Expect(r).To(BeTrue())
|
Expect(r).To(BeTrue())
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Reference in New Issue
Block a user