Auto-detect package by target
This commit is contained in:
67
main.go
67
main.go
@@ -235,12 +235,33 @@ func addCmd(args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
reader := bufio.NewReader(os.Stdin)
|
reader := bufio.NewReader(os.Stdin)
|
||||||
pkgName := promptWithDefault(reader, "Package name", defaultPkg)
|
var pkgName string
|
||||||
if pkgName == "" {
|
|
||||||
return errors.New("package name cannot be empty")
|
matchedPkg, err := findPackageByTarget(repo, defaultTarget)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if matchedPkg != "" {
|
||||||
|
ok, err := promptYesNo(fmt.Sprintf("Merge into existing package %q?", matchedPkg), true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if ok {
|
||||||
|
pkgName = matchedPkg
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
targetRootInput := promptWithDefault(reader, "Target path", defaultTarget)
|
if pkgName == "" {
|
||||||
|
pkgName = promptWithDefault(reader, "Package name", defaultPkg)
|
||||||
|
if pkgName == "" {
|
||||||
|
return errors.New("package name cannot be empty")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
targetRootInput := defaultTarget
|
||||||
|
if pkgName != matchedPkg || matchedPkg == "" {
|
||||||
|
targetRootInput = promptWithDefault(reader, "Target path", defaultTarget)
|
||||||
|
}
|
||||||
targetRoot, err := filepath.Abs(expandHome(targetRootInput))
|
targetRoot, err := filepath.Abs(expandHome(targetRootInput))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -749,6 +770,44 @@ func findStaleLinks(filesDir, targetRoot string) ([]string, error) {
|
|||||||
return stale, nil
|
return stale, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func findPackageByTarget(repo, targetRoot string) (string, error) {
|
||||||
|
repoEntries, err := os.ReadDir(repo)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
absTarget, err := filepath.Abs(expandHome(targetRoot))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, entry := range repoEntries {
|
||||||
|
if !entry.IsDir() || strings.HasPrefix(entry.Name(), ".") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
pkgDir := filepath.Join(repo, entry.Name())
|
||||||
|
configPath := filepath.Join(pkgDir, configFileName)
|
||||||
|
cfg, err := loadConfig(configPath)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
target, err := selectTarget(cfg.targets)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
absPkgTarget, err := filepath.Abs(expandHome(target))
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if absPkgTarget == absTarget {
|
||||||
|
return entry.Name(), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
func removeLinks(paths []string, dryRun bool) error {
|
func removeLinks(paths []string, dryRun bool) error {
|
||||||
for _, path := range paths {
|
for _, path := range paths {
|
||||||
if dryRun {
|
if dryRun {
|
||||||
|
|||||||
Reference in New Issue
Block a user