Revert "fix(skills): make app-bundle detection gate HOME-independent"

This reverts commit 37cd629335.
This commit is contained in:
玉澜 committed 2026-08-17 20:19:48 +08:00
1 parent c0da89e674
commit 9abcdb4deb
3 files changed
+2 -69

No files matched your search

+1 -1
View File
@@ -127,7 +127,7 @@ var (
skillSetupExecutable = os.Executable
skillSetupGetwd = os.Getwd
skillSetupUserHomeDir = os.UserHomeDir
skillSetupSystemHomeDir = upgrade.ResolveSystemHomeDir
skillSetupSystemHomeDir = os.UserHomeDir
skillSetupRemoveAll = os.RemoveAll
skillSetupBackupAndRemove = upgrade.BackupAndRemoveSkillDir
skillSetupRestoreBackup = upgrade.RestoreSkillPath
+1 -19
View File
@@ -7,7 +7,6 @@ import (
"errors"
"fmt"
"os"
"os/user"
"path/filepath"
"runtime"
"sort"
@@ -140,26 +139,9 @@ var universalSkillDirs = map[string]bool{
".amp/skills": true,
}
// upgradeCurrentUser is the test seam backing ResolveSystemHomeDir.
var upgradeCurrentUser = user.Current
// ResolveSystemHomeDir returns the operating-system user's real home directory
// independent of the $HOME environment variable. $HOME may be overridden in
// isolated or verifier contexts, so the app-bundle detection gate
// (allowSystemApps = homeDir == systemHome) must compare against a HOME-
// independent source to actually mean "operating on the real user profile".
// It prefers the OS user database (getpwuid on Unix) and falls back to $HOME
// only when the user record cannot be resolved.
func ResolveSystemHomeDir() (string, error) {
if u, err := upgradeCurrentUser(); err == nil && u.HomeDir != "" {
return u.HomeDir, nil
}
return os.UserHomeDir()
}
var (
upgradeUserHomeDir = os.UserHomeDir
upgradeSystemHomeDir = ResolveSystemHomeDir
upgradeSystemHomeDir = os.UserHomeDir
upgradeExecutable = os.Executable
upgradeEvalSymlinks = filepath.EvalSymlinks
upgradeCopyDir = copyDir
-49
View File
@@ -1,49 +0,0 @@
package upgrade
import (
"errors"
"os/user"
"testing"
"github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/testseam"
)
// TestCrossPlatformCoverageSystemHomeIndependentOfHOME pins that the app-bundle
// detection gate compares against a HOME-independent system home: ResolveSystemHomeDir
// prefers the OS user record (getpwuid on Unix) and only falls back to $HOME when that
// record cannot be resolved. Without this, allowSystemApps = homeDir == systemHome is a
// no-op whenever $HOME is overridden, because both sides would honor the same override.
func TestCrossPlatformCoverageSystemHomeIndependentOfHOME(t *testing.T) {
// Success path: the OS user database home is returned as-is.
testseam.Swap(t, &upgradeCurrentUser, func() (*user.User, error) {
return &user.User{HomeDir: "/tmp/dws-real-system-home"}, nil
})
got, err := ResolveSystemHomeDir()
if err != nil || got != "/tmp/dws-real-system-home" {
t.Fatalf("ResolveSystemHomeDir success = (%q, %v), want /tmp/dws-real-system-home", got, err)
}
// Fallback path: when the user record is unavailable, fall back to $HOME.
testseam.Swap(t, &upgradeCurrentUser, func() (*user.User, error) {
return nil, errors.New("user record unavailable")
})
got, err = ResolveSystemHomeDir()
if err != nil {
t.Fatalf("ResolveSystemHomeDir fallback returned error: %v", err)
}
if got == "" {
t.Fatalf("ResolveSystemHomeDir fallback returned empty home")
}
// Empty HomeDir is also treated as "unresolved" and falls back.
testseam.Swap(t, &upgradeCurrentUser, func() (*user.User, error) {
return &user.User{HomeDir: ""}, nil
})
got, err = ResolveSystemHomeDir()
if err != nil {
t.Fatalf("ResolveSystemHomeDir empty-home fallback returned error: %v", err)
}
if got == "" {
t.Fatalf("ResolveSystemHomeDir empty-home fallback returned empty home")
}
}