Skip to content

Commit 86e85f0

Browse files
authored
enhance: add option to return revision ID when reading file in workspace (#949)
* enhance: add option to return revision ID when reading file in workspace Signed-off-by: Donnie Adams <[email protected]>
1 parent ed71575 commit 86e85f0

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

pkg/sdkserver/routes.go

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ func (s *server) addRoutes(mux *http.ServeMux) {
7979
mux.HandleFunc("POST /workspaces/write-file", s.writeFileInWorkspace)
8080
mux.HandleFunc("POST /workspaces/delete-file", s.removeFileInWorkspace)
8181
mux.HandleFunc("POST /workspaces/read-file", s.readFileInWorkspace)
82+
mux.HandleFunc("POST /workspaces/read-file-with-revision", s.readFileWithRevisionInWorkspace)
8283
mux.HandleFunc("POST /workspaces/stat-file", s.statFileInWorkspace)
8384
mux.HandleFunc("POST /workspaces/list-revisions", s.listRevisions)
8485
mux.HandleFunc("POST /workspaces/get-revision", s.getRevisionForFileInWorkspace)

pkg/sdkserver/workspaces.go

+37-5
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ type writeFileInWorkspaceRequest struct {
187187
FilePath string `json:"filePath"`
188188
Contents string `json:"contents"`
189189
CreateRevision *bool `json:"createRevision"`
190-
LatestRevision string `json:"latestRevision"`
190+
LatestRevisionID string `json:"latestRevisionID"`
191191
}
192192

193193
func (s *server) writeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
@@ -209,8 +209,8 @@ func (s *server) writeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
209209
prg,
210210
s.getServerToolsEnv(reqObject.Env),
211211
fmt.Sprintf(
212-
`{"workspace_id": "%s", "file_path": "%s", "body": "%s", "create_revision": %t, "latest_revision": "%s"}`,
213-
reqObject.ID, reqObject.FilePath, reqObject.Contents, reqObject.CreateRevision == nil || *reqObject.CreateRevision, reqObject.LatestRevision,
212+
`{"workspace_id": "%s", "file_path": "%s", "body": "%s", "create_revision": %t, "latest_revision_id": "%s"}`,
213+
reqObject.ID, reqObject.FilePath, reqObject.Contents, reqObject.CreateRevision == nil || *reqObject.CreateRevision, reqObject.LatestRevisionID,
214214
),
215215
)
216216
if err != nil {
@@ -293,9 +293,41 @@ func (s *server) readFileInWorkspace(w http.ResponseWriter, r *http.Request) {
293293
writeResponse(logger, w, map[string]any{"stdout": out})
294294
}
295295

296+
func (s *server) readFileWithRevisionInWorkspace(w http.ResponseWriter, r *http.Request) {
297+
logger := gcontext.GetLogger(r.Context())
298+
var reqObject readFileInWorkspaceRequest
299+
if err := json.NewDecoder(r.Body).Decode(&reqObject); err != nil {
300+
writeError(logger, w, http.StatusBadRequest, fmt.Errorf("invalid request body: %w", err))
301+
return
302+
}
303+
304+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Read File With Revision In Workspace", loader.Options{Cache: s.client.Cache})
305+
if err != nil {
306+
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
307+
return
308+
}
309+
310+
out, err := s.client.Run(
311+
r.Context(),
312+
prg,
313+
s.getServerToolsEnv(reqObject.Env),
314+
fmt.Sprintf(
315+
`{"workspace_id": "%s", "file_path": "%s", "with_latest_revision_id": "true"}`,
316+
reqObject.ID, reqObject.FilePath,
317+
),
318+
)
319+
if err != nil {
320+
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to run program: %w", err))
321+
return
322+
}
323+
324+
writeResponse(logger, w, map[string]any{"stdout": out})
325+
}
326+
296327
type statFileInWorkspaceRequest struct {
297328
workspaceCommonRequest `json:",inline"`
298329
FilePath string `json:"filePath"`
330+
WithLatestRevisionID bool `json:"withLatestRevisionID"`
299331
}
300332

301333
func (s *server) statFileInWorkspace(w http.ResponseWriter, r *http.Request) {
@@ -317,8 +349,8 @@ func (s *server) statFileInWorkspace(w http.ResponseWriter, r *http.Request) {
317349
prg,
318350
s.getServerToolsEnv(reqObject.Env),
319351
fmt.Sprintf(
320-
`{"workspace_id": "%s", "file_path": "%s"}`,
321-
reqObject.ID, reqObject.FilePath,
352+
`{"workspace_id": "%s", "file_path": "%s", "with_latest_revision_id": "%v"}`,
353+
reqObject.ID, reqObject.FilePath, reqObject.WithLatestRevisionID,
322354
),
323355
)
324356
if err != nil {

0 commit comments

Comments
 (0)