Improved symlink removal
This commit is contained in:
parent
4d7bf7179b
commit
555ea75403
@ -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,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)
|
||||
_, err := os.Lstat(f)
|
||||
if os.IsNotExist(err) {
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = filepath.EvalSymlinks(f)
|
||||
@ -886,12 +887,14 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
removals++
|
||||
fmt.Println("Removing: " + f)
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if !packageInstalled {
|
||||
err = ExecutePackageScripts(filename, installDir, Install, true)
|
||||
if err != nil {
|
||||
@ -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,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)
|
||||
_, err := os.Lstat(file)
|
||||
if os.IsNotExist(err) {
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = filepath.EvalSymlinks(file)
|
||||
@ -1181,11 +1187,13 @@ func RemovePackage(pkg, rootDir string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
removals++
|
||||
fmt.Println("Removing: " + file)
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
if _, err := os.Stat(path.Join(pkgDir, "post_remove.sh")); err == nil {
|
||||
cmd := exec.Command("/bin/bash", path.Join(pkgDir, "post_remove.sh"))
|
||||
cmd.Stdin = os.Stdin
|
||||
|
2
main.go
2
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
|
||||
|
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user