package devcontainer import ( "bytes" "context" "regexp" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/user" files_service "code.gitea.io/gitea/services/repository/files" ) func GetDevcontainerConfigurationString(ctx context.Context, repo *repo.Repository) (string, error) { configuration, err := GetFileContentByPath(ctx, repo, ".devcontainer/devcontainer.json") if err != nil { return "", err } cleanedContent, err := removeComments(configuration) if err != nil { return "", err } return cleanedContent, nil } // 移除 JSON 文件中的注释 func removeComments(data string) (string, error) { // 移除单行注释 // ... re := regexp.MustCompile(`//.*`) data = re.ReplaceAllString(data, "") // 移除多行注释 /* ... */ re = regexp.MustCompile(`/\*.*?\*/`) data = re.ReplaceAllString(data, "") return data, nil } func UpdateDevcontainerConfiguration(newContent string, repo *repo.Repository, doer *user.User) error { // 更新devcontainer.json配置文件 _, err := files_service.ChangeRepoFiles(db.DefaultContext, repo, doer, &files_service.ChangeRepoFilesOptions{ Files: []*files_service.ChangeRepoFile{ { Operation: "update", TreePath: ".devcontainer/devcontainer.json", ContentReader: bytes.NewReader([]byte(newContent)), }, }, OldBranch: repo.DefaultBranch, Message: "Update container", }) if err != nil { return err } return nil }