Revert "fix(skills): make app-bundle detection gate HOME-independent"
This reverts commit 37cd629335.
This commit is contained in:
1 parent
c0da89e674
commit
9abcdb4deb
3 files changed
+2
-69
No files matched your search
@@ -127,7 +127,7 @@ var (
|
|||||||
skillSetupExecutable = os.Executable
|
skillSetupExecutable = os.Executable
|
||||||
skillSetupGetwd = os.Getwd
|
skillSetupGetwd = os.Getwd
|
||||||
skillSetupUserHomeDir = os.UserHomeDir
|
skillSetupUserHomeDir = os.UserHomeDir
|
||||||
skillSetupSystemHomeDir = upgrade.ResolveSystemHomeDir
|
skillSetupSystemHomeDir = os.UserHomeDir
|
||||||
skillSetupRemoveAll = os.RemoveAll
|
skillSetupRemoveAll = os.RemoveAll
|
||||||
skillSetupBackupAndRemove = upgrade.BackupAndRemoveSkillDir
|
skillSetupBackupAndRemove = upgrade.BackupAndRemoveSkillDir
|
||||||
skillSetupRestoreBackup = upgrade.RestoreSkillPath
|
skillSetupRestoreBackup = upgrade.RestoreSkillPath
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
@@ -140,26 +139,9 @@ var universalSkillDirs = map[string]bool{
|
|||||||
".amp/skills": true,
|
".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 (
|
var (
|
||||||
upgradeUserHomeDir = os.UserHomeDir
|
upgradeUserHomeDir = os.UserHomeDir
|
||||||
upgradeSystemHomeDir = ResolveSystemHomeDir
|
upgradeSystemHomeDir = os.UserHomeDir
|
||||||
upgradeExecutable = os.Executable
|
upgradeExecutable = os.Executable
|
||||||
upgradeEvalSymlinks = filepath.EvalSymlinks
|
upgradeEvalSymlinks = filepath.EvalSymlinks
|
||||||
upgradeCopyDir = copyDir
|
upgradeCopyDir = copyDir
|
||||||
|
|||||||
@@ -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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user