feat: add mirror settings #29
This commit is contained in:
@@ -117,3 +117,48 @@ func (c *MiseController) UnsetGlobal(ctx *gin.Context) {
|
||||
}
|
||||
utils.Success(ctx, nil)
|
||||
}
|
||||
|
||||
// Envs 获取全局环境变量
|
||||
func (c *MiseController) Envs(ctx *gin.Context) {
|
||||
envs, err := c.service.Envs()
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取全局环境变量失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, envs)
|
||||
}
|
||||
|
||||
// SetEnv 设置全局环境变量
|
||||
func (c *MiseController) SetEnv(ctx *gin.Context) {
|
||||
var req struct {
|
||||
Key string `json:"key"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "参数错误: "+err.Error())
|
||||
return
|
||||
}
|
||||
if req.Key == "" {
|
||||
utils.BadRequest(ctx, "参数 key 不能为空")
|
||||
return
|
||||
}
|
||||
if err := c.service.SetEnv(req.Key, req.Value); err != nil {
|
||||
utils.ServerError(ctx, "设置环境变量失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, nil)
|
||||
}
|
||||
|
||||
// UnsetEnv 取消全局环境变量
|
||||
func (c *MiseController) UnsetEnv(ctx *gin.Context) {
|
||||
key := ctx.Query("key")
|
||||
if key == "" {
|
||||
utils.BadRequest(ctx, "参数 key 不能为空")
|
||||
return
|
||||
}
|
||||
if err := c.service.UnsetEnv(key); err != nil {
|
||||
utils.ServerError(ctx, "取消环境变量失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, nil)
|
||||
}
|
||||
|
||||
@@ -212,6 +212,9 @@ func registerMiseRoutes(g *gin.RouterGroup, c *Controllers) {
|
||||
mise.GET("/verify-cmd", c.Mise.VerifyCommand)
|
||||
mise.POST("/use-global", c.Mise.UseGlobal)
|
||||
mise.POST("/unset-global", c.Mise.UnsetGlobal)
|
||||
mise.GET("/envs", c.Mise.Envs)
|
||||
mise.POST("/envs", c.Mise.SetEnv)
|
||||
mise.DELETE("/envs", c.Mise.UnsetEnv)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -359,3 +359,50 @@ func (s *MiseService) UnsetGlobal(plugin, version string) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// Envs 获取全局环境变量
|
||||
func (s *MiseService) Envs() (map[string]string, error) {
|
||||
cmd := exec.Command("mise", "set")
|
||||
cmd.Env = os.Environ()
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("mise set failed: %v, output: %s", err, string(output))
|
||||
}
|
||||
|
||||
envs := make(map[string]string)
|
||||
lines := strings.Split(string(output), "\n")
|
||||
for _, line := range lines {
|
||||
fields := strings.Fields(line)
|
||||
// 期望格式: KEY VALUE SOURCE
|
||||
// 跳过标题行或不合规行
|
||||
if len(fields) < 3 || strings.ToLower(fields[0]) == "key" {
|
||||
continue
|
||||
}
|
||||
// 仅显示来自全局配置文件的环境变量
|
||||
if strings.Contains(strings.ToLower(fields[len(fields)-1]), "config.toml") {
|
||||
envs[fields[0]] = fields[1]
|
||||
}
|
||||
}
|
||||
return envs, nil
|
||||
}
|
||||
|
||||
// SetEnv 设置全局环境变量
|
||||
func (s *MiseService) SetEnv(key, value string) error {
|
||||
cmd := exec.Command("mise", "set", "-g", fmt.Sprintf("%s=%s", key, value))
|
||||
cmd.Env = os.Environ()
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("mise set -g failed: %v, output: %s", err, string(output))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// UnsetEnv 取消全局环境变量
|
||||
func (s *MiseService) UnsetEnv(key string) error {
|
||||
cmd := exec.Command("mise", "unset", "-g", key)
|
||||
cmd.Env = os.Environ()
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("mise unset -g failed: %v, output: %s", err, string(output))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user