Improved symlink removal

This commit is contained in:
CapCreeperGR 2024-04-27 09:47:48 +03:00
parent 4d7bf7179b
commit 555ea75403
5 changed files with 48 additions and 40 deletions

View File

@ -836,19 +836,17 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe
lstat, err := os.Lstat(f) lstat, err := os.Lstat(f)
if os.IsNotExist(err) { if os.IsNotExist(err) {
continue continue
} } else if err != nil {
if err != nil {
return err return err
} }
if lstat.Mode() == os.ModeSymlink { if lstat.Mode()&os.ModeSymlink != 0 {
symlinks = append(symlinks, f) symlinks = append(symlinks, f)
continue continue
} }
stat, err := os.Stat(f) stat, err := os.Stat(f)
if os.IsNotExist(err) { if os.IsNotExist(err) {
continue continue
} } else if err != nil {
if err != nil {
return err return err
} }
if stat.IsDir() { if stat.IsDir() {
@ -871,13 +869,16 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe
} }
} }
} }
for _, f := range symlinks { 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) f = path.Join(installDir, f)
_, err := os.Lstat(f) _, err := os.Lstat(f)
if os.IsNotExist(err) { if os.IsNotExist(err) {
continue continue
} } else if err != nil {
if err != nil {
return err return err
} }
_, err = filepath.EvalSymlinks(f) _, err = filepath.EvalSymlinks(f)
@ -886,12 +887,14 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe
if err != nil { if err != nil {
return err return err
} }
} removals++
if err != nil { fmt.Println("Removing: " + f)
} else if err != nil {
return err return err
} }
} }
} }
}
if !packageInstalled { if !packageInstalled {
err = ExecutePackageScripts(filename, installDir, Install, true) err = ExecutePackageScripts(filename, installDir, Install, true)
if err != nil { if err != nil {
@ -1135,7 +1138,7 @@ func RemovePackage(pkg, rootDir string) error {
if err != nil { if err != nil {
return err return err
} }
if lstat.Mode() == os.ModeSymlink { if lstat.Mode()&os.ModeSymlink != 0 {
symlinks = append(symlinks, file) symlinks = append(symlinks, file)
continue continue
} }
@ -1166,13 +1169,16 @@ func RemovePackage(pkg, rootDir string) error {
} }
} }
} }
for _, file := range symlinks { 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) file = path.Join(rootDir, file)
_, err := os.Lstat(file) _, err := os.Lstat(file)
if os.IsNotExist(err) { if os.IsNotExist(err) {
continue continue
} } else if err != nil {
if err != nil {
return err return err
} }
_, err = filepath.EvalSymlinks(file) _, err = filepath.EvalSymlinks(file)
@ -1181,11 +1187,13 @@ func RemovePackage(pkg, rootDir string) error {
if err != nil { if err != nil {
return err return err
} }
} removals++
if err != nil { fmt.Println("Removing: " + file)
} else if err != nil {
return err return err
} }
} }
}
if _, err := os.Stat(path.Join(pkgDir, "post_remove.sh")); err == nil { if _, err := os.Stat(path.Join(pkgDir, "post_remove.sh")); err == nil {
cmd := exec.Command("/bin/bash", path.Join(pkgDir, "post_remove.sh")) cmd := exec.Command("/bin/bash", path.Join(pkgDir, "post_remove.sh"))
cmd.Stdin = os.Stdin cmd.Stdin = os.Stdin

View File

@ -17,7 +17,7 @@ import (
/* A simple-to-use package manager */ /* A simple-to-use package manager */
/* ---------------------------------- */ /* ---------------------------------- */
var bpmVer = "0.2.0" var bpmVer = "0.2.1"
var subcommand = "help" var subcommand = "help"
var subcommandArgs []string var subcommandArgs []string

Binary file not shown.

View File

@ -1,6 +1,6 @@
name: bpm name: bpm
description: The Bubble Package Manager description: The Bubble Package Manager
version: 0.2.0 version: 0.2.1
url: https://gitlab.com/bubble-package-manager/bpm/ url: https://gitlab.com/bubble-package-manager/bpm/
license: GPL3 license: GPL3
architecture: x86_64 architecture: x86_64