Auto-detect package by target
This commit is contained in:
63
main.go
63
main.go
@@ -235,12 +235,33 @@ func addCmd(args []string) error {
|
||||
}
|
||||
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
pkgName := promptWithDefault(reader, "Package name", defaultPkg)
|
||||
var pkgName string
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
if pkgName == "" {
|
||||
pkgName = promptWithDefault(reader, "Package name", defaultPkg)
|
||||
if pkgName == "" {
|
||||
return errors.New("package name cannot be empty")
|
||||
}
|
||||
}
|
||||
|
||||
targetRootInput := promptWithDefault(reader, "Target path", defaultTarget)
|
||||
targetRootInput := defaultTarget
|
||||
if pkgName != matchedPkg || matchedPkg == "" {
|
||||
targetRootInput = promptWithDefault(reader, "Target path", defaultTarget)
|
||||
}
|
||||
targetRoot, err := filepath.Abs(expandHome(targetRootInput))
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -749,6 +770,44 @@ func findStaleLinks(filesDir, targetRoot string) ([]string, error) {
|
||||
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 {
|
||||
for _, path := range paths {
|
||||
if dryRun {
|
||||
|
||||
Reference in New Issue
Block a user