diff --git a/bpm_utils/package_utils.go b/bpm_utils/package_utils.go index 40db426..bbdfccb 100644 --- a/bpm_utils/package_utils.go +++ b/bpm_utils/package_utils.go @@ -836,19 +836,17 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe lstat, err := os.Lstat(f) if os.IsNotExist(err) { continue - } - if err != nil { + } else if err != nil { return err } - if lstat.Mode() == os.ModeSymlink { + if lstat.Mode()&os.ModeSymlink != 0 { symlinks = append(symlinks, f) continue } stat, err := os.Stat(f) if os.IsNotExist(err) { continue - } - if err != nil { + } else if err != nil { return err } if stat.IsDir() { @@ -871,24 +869,29 @@ 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 { + removals := -1 + for len(symlinks) > 0 && removals != 0 { + removals = 0 + for i := len(symlinks) - 1; i >= 0; i-- { + f := symlinks[i] + f = path.Join(installDir, f) + _, err := os.Lstat(f) + if os.IsNotExist(err) { + continue + } else if err != nil { + return err + } + _, err = filepath.EvalSymlinks(f) + if os.IsNotExist(err) { + err := os.Remove(f) + if err != nil { + return err + } + removals++ + fmt.Println("Removing: " + f) + } else if err != nil { return err } - } - if err != nil { - return err } } } @@ -1135,7 +1138,7 @@ func RemovePackage(pkg, rootDir string) error { if err != nil { return err } - if lstat.Mode() == os.ModeSymlink { + if lstat.Mode()&os.ModeSymlink != 0 { symlinks = append(symlinks, file) continue } @@ -1166,24 +1169,29 @@ 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 { + removals := -1 + for len(symlinks) > 0 && removals != 0 { + removals = 0 + for i := len(symlinks) - 1; i >= 0; i-- { + file := symlinks[i] + file = path.Join(rootDir, file) + _, err := os.Lstat(file) + if os.IsNotExist(err) { + continue + } else if err != nil { + return err + } + _, err = filepath.EvalSymlinks(file) + if os.IsNotExist(err) { + err := os.Remove(file) + if err != nil { + return err + } + removals++ + fmt.Println("Removing: " + file) + } else if err != nil { return err } - } - if err != nil { - return err } } if _, err := os.Stat(path.Join(pkgDir, "post_remove.sh")); err == nil { diff --git a/main.go b/main.go index 0f1aaa9..d0f8a39 100644 --- a/main.go +++ b/main.go @@ -17,7 +17,7 @@ import ( /* A simple-to-use package manager */ /* ---------------------------------- */ -var bpmVer = "0.2.0" +var bpmVer = "0.2.1" 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 49eb8ec..3d1eded 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 670308f..30e3b13 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 bf3de5d..3a637f1 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.2.0 +version: 0.2.1 url: https://gitlab.com/bubble-package-manager/bpm/ license: GPL3 architecture: x86_64