@@ -187,7 +187,7 @@ type writeFileInWorkspaceRequest struct {
187
187
FilePath string `json:"filePath"`
188
188
Contents string `json:"contents"`
189
189
CreateRevision * bool `json:"createRevision"`
190
- LatestRevision string `json:"latestRevision "`
190
+ LatestRevisionID string `json:"latestRevisionID "`
191
191
}
192
192
193
193
func (s * server ) writeFileInWorkspace (w http.ResponseWriter , r * http.Request ) {
@@ -209,8 +209,8 @@ func (s *server) writeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
209
209
prg ,
210
210
s .getServerToolsEnv (reqObject .Env ),
211
211
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 ,
214
214
),
215
215
)
216
216
if err != nil {
@@ -293,9 +293,41 @@ func (s *server) readFileInWorkspace(w http.ResponseWriter, r *http.Request) {
293
293
writeResponse (logger , w , map [string ]any {"stdout" : out })
294
294
}
295
295
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
+
296
327
type statFileInWorkspaceRequest struct {
297
328
workspaceCommonRequest `json:",inline"`
298
329
FilePath string `json:"filePath"`
330
+ WithLatestRevisionID bool `json:"withLatestRevisionID"`
299
331
}
300
332
301
333
func (s * server ) statFileInWorkspace (w http.ResponseWriter , r * http.Request ) {
@@ -317,8 +349,8 @@ func (s *server) statFileInWorkspace(w http.ResponseWriter, r *http.Request) {
317
349
prg ,
318
350
s .getServerToolsEnv (reqObject .Env ),
319
351
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 ,
322
354
),
323
355
)
324
356
if err != nil {
0 commit comments