diff --git a/main.go b/main.go index ef40f4c..2c17e07 100644 --- a/main.go +++ b/main.go @@ -271,66 +271,16 @@ func addCmd(args []string) error { } func unlinkCmd(args []string) error { - flags, pkgSpec, err := parsePackageFlags(args) - if err != nil { - return err - } - - pkgName, relPath, err := resolvePackageSpec(pkgSpec) - if err != nil { - return err - } - - repo, err := repoPath() - if err != nil { - return err - } - - pkgDir := filepath.Join(repo, pkgName) - configPath := filepath.Join(pkgDir, configFileName) - cfg, err := loadConfig(configPath) - if err != nil { - return err - } - - targetRoot, err := selectTarget(cfg) - if err != nil { - return err - } - - filesDir := filepath.Join(pkgDir, filesDirName) - if _, err := os.Stat(filesDir); err != nil { - return err - } - - if relPath == "" { - if err := restorePackage(filesDir, targetRoot, flags.dryRun); err != nil { - return err - } - if flags.dryRun { - return nil - } - if err := os.RemoveAll(pkgDir); err != nil { - return err - } - fmt.Printf("removed package %s\n", pkgName) - return nil - } - - if err := restorePath(filesDir, targetRoot, relPath, flags.dryRun); err != nil { - return err - } - if flags.dryRun { - return nil - } - if err := os.RemoveAll(filepath.Join(filesDir, relPath)); err != nil { - return err - } - fmt.Printf("removed %s:%s\n", pkgName, relPath) - return nil + return removeOrUnlink(args, false) } func removeCmd(args []string) error { + return removeOrUnlink(args, true) +} + +func removeOrUnlink(args []string, isRemove bool) error { + _ = isRemove // commands are identical, flag kept for clarity + flags, pkgSpec, err := parsePackageFlags(args) if err != nil { return err @@ -380,11 +330,9 @@ func removeCmd(args []string) error { if err := restorePath(filesDir, targetRoot, relPath, flags.dryRun); err != nil { return err } - if flags.dryRun { return nil } - if err := os.RemoveAll(filepath.Join(filesDir, relPath)); err != nil { return err }