diff --git a/bpm_utils/package_utils.go b/bpm_utils/package_utils.go index 0529a74..ec1d711 100644 --- a/bpm_utils/package_utils.go +++ b/bpm_utils/package_utils.go @@ -590,9 +590,21 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe } if len(filesDiff) != 0 { fmt.Println("Removing obsolete files") + var symlinks []string for _, f := range filesDiff { f = path.Join(installDir, f) - stat, err := os.Lstat(f) + lstat, err := os.Lstat(f) + if os.IsNotExist(err) { + continue + } + if err != nil { + return err + } + if lstat.Mode() == os.ModeSymlink { + symlinks = append(symlinks, f) + continue + } + stat, err := os.Stat(f) if os.IsNotExist(err) { continue } @@ -619,6 +631,26 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe } } } + for _, f := range symlinks { + f = path.Join(installDir, f) + _, err := os.Lstat(f) + if os.IsNotExist(err) { + continue + } + if err != nil { + return err + } + _, err = filepath.EvalSymlinks(f) + if os.IsNotExist(err) { + err := os.Remove(f) + if err != nil { + return err + } + } + if err != nil { + return err + } + } } return nil } @@ -838,9 +870,21 @@ func RemovePackage(pkg, rootDir string) error { installedDir := path.Join(rootDir, "var/lib/bpm/installed/") pkgDir := path.Join(installedDir, pkg) files := GetPackageFiles(pkg, rootDir) + var symlinks []string for _, file := range files { file = path.Join(rootDir, file) - stat, err := os.Lstat(file) + lstat, err := os.Lstat(file) + if os.IsNotExist(err) { + continue + } + if err != nil { + return err + } + if lstat.Mode() == os.ModeSymlink { + symlinks = append(symlinks, file) + continue + } + stat, err := os.Stat(file) if os.IsNotExist(err) { continue } @@ -867,6 +911,26 @@ func RemovePackage(pkg, rootDir string) error { } } } + for _, file := range symlinks { + file = path.Join(rootDir, file) + _, err := os.Lstat(file) + if os.IsNotExist(err) { + continue + } + if err != nil { + return err + } + _, err = filepath.EvalSymlinks(file) + if os.IsNotExist(err) { + err := os.Remove(file) + if err != nil { + return err + } + } + if err != nil { + return err + } + } err := os.RemoveAll(pkgDir) if err != nil { return err diff --git a/main.go b/main.go index 2c923c8..fe3267f 100644 --- a/main.go +++ b/main.go @@ -17,7 +17,7 @@ import ( /* A simple-to-use package manager */ /* ---------------------------------- */ -var bpmVer = "0.1.5" +var bpmVer = "0.1.6" var subcommand = "help" var subcommandArgs []string diff --git a/test_packages/x86_64/bpm/bpm.bpm b/test_packages/x86_64/bpm/bpm.bpm index 7fddced..c8536d8 100644 Binary files a/test_packages/x86_64/bpm/bpm.bpm and b/test_packages/x86_64/bpm/bpm.bpm differ diff --git a/test_packages/x86_64/bpm/files/usr/bin/bpm b/test_packages/x86_64/bpm/files/usr/bin/bpm index 9ef2601..b3a05f6 100755 Binary files a/test_packages/x86_64/bpm/files/usr/bin/bpm and b/test_packages/x86_64/bpm/files/usr/bin/bpm differ diff --git a/test_packages/x86_64/bpm/pkg.info b/test_packages/x86_64/bpm/pkg.info index 40f44a3..fe25d78 100644 --- a/test_packages/x86_64/bpm/pkg.info +++ b/test_packages/x86_64/bpm/pkg.info @@ -1,6 +1,6 @@ name: bpm description: The Bubble Package Manager -version: 0.1.5 +version: 0.1.6 url: https://gitlab.com/bubble-package-manager/bpm/ license: GPL3 architecture: x86_64