From 413ec722f23094b6e7bd27217ca1929b9d8f8d0d Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Wed, 11 Mar 2026 00:24:51 -0600 Subject: [PATCH] fix(webicached): detect symlinked package dirs as aliases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Symlinked directories (e.g. rust.vim → vim-rust) are now treated as aliases instead of being independently fetched and classified. Creates cache symlinks just like alias_of config entries. --- cmd/webicached/main.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/cmd/webicached/main.go b/cmd/webicached/main.go index 35d7a21..79b7244 100644 --- a/cmd/webicached/main.go +++ b/cmd/webicached/main.go @@ -168,10 +168,32 @@ func discover(dir string) ([]pkgConf, error) { var packages []pkgConf for _, path := range matches { - name := filepath.Base(filepath.Dir(path)) + pkgDir := filepath.Dir(path) + name := filepath.Base(pkgDir) if strings.HasPrefix(name, "_") { continue } + + // If the package directory is a symlink, treat it as an alias + // of the symlink target (e.g. rust.vim → vim-rust). + fi, err := os.Lstat(filepath.Join(dir, name)) + if err != nil { + log.Printf("warning: %s: %v", name, err) + continue + } + if fi.Mode()&os.ModeSymlink != 0 { + target, err := os.Readlink(filepath.Join(dir, name)) + if err != nil { + log.Printf("warning: readlink %s: %v", name, err) + continue + } + packages = append(packages, pkgConf{ + name: name, + conf: &installerconf.Conf{AliasOf: target}, + }) + continue + } + conf, err := installerconf.Read(path) if err != nil { log.Printf("warning: %s: %v", path, err)