@@ -321,3 +321,112 @@ func (s *server) statFileInWorkspace(w http.ResponseWriter, r *http.Request) {
321
321
322
322
writeResponse (logger , w , map [string ]any {"stdout" : out })
323
323
}
324
+
325
+ type listRevisionsRequest struct {
326
+ workspaceCommonRequest `json:",inline"`
327
+ FilePath string `json:"filePath"`
328
+ }
329
+
330
+ func (s * server ) listRevisions (w http.ResponseWriter , r * http.Request ) {
331
+ logger := gcontext .GetLogger (r .Context ())
332
+ var reqObject listRevisionsRequest
333
+ if err := json .NewDecoder (r .Body ).Decode (& reqObject ); err != nil {
334
+ writeError (logger , w , http .StatusBadRequest , fmt .Errorf ("invalid request body: %w" , err ))
335
+ }
336
+
337
+ prg , err := loader .Program (r .Context (), s .getWorkspaceTool (reqObject .workspaceCommonRequest ), "List Revisions for File in Workspace" , loader.Options {Cache : s .client .Cache })
338
+ if err != nil {
339
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to load program: %w" , err ))
340
+ return
341
+ }
342
+
343
+ out , err := s .client .Run (
344
+ r .Context (),
345
+ prg ,
346
+ s .getServerToolsEnv (reqObject .Env ),
347
+ fmt .Sprintf (
348
+ `{"workspace_id": "%s", "file_path": "%s"}` ,
349
+ reqObject .ID , reqObject .FilePath ,
350
+ ),
351
+ )
352
+ if err != nil {
353
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
354
+ return
355
+ }
356
+
357
+ writeResponse (logger , w , map [string ]any {"stdout" : out })
358
+ }
359
+
360
+ type getRevisionForFileInWorkspaceRequest struct {
361
+ workspaceCommonRequest `json:",inline"`
362
+ FilePath string `json:"filePath"`
363
+ RevisionID string `json:"revisionID"`
364
+ }
365
+
366
+ func (s * server ) getRevisionForFileInWorkspace (w http.ResponseWriter , r * http.Request ) {
367
+ logger := gcontext .GetLogger (r .Context ())
368
+ var reqObject getRevisionForFileInWorkspaceRequest
369
+ if err := json .NewDecoder (r .Body ).Decode (& reqObject ); err != nil {
370
+ writeError (logger , w , http .StatusBadRequest , fmt .Errorf ("invalid request body: %w" , err ))
371
+ return
372
+ }
373
+
374
+ prg , err := loader .Program (r .Context (), s .getWorkspaceTool (reqObject .workspaceCommonRequest ), "Get a Revision for File in Workspace" , loader.Options {Cache : s .client .Cache })
375
+ if err != nil {
376
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to load program: %w" , err ))
377
+ return
378
+ }
379
+
380
+ out , err := s .client .Run (
381
+ r .Context (),
382
+ prg ,
383
+ s .getServerToolsEnv (reqObject .Env ),
384
+ fmt .Sprintf (
385
+ `{"workspace_id": "%s", "file_path": "%s", "revision_id": "%s"}` ,
386
+ reqObject .ID , reqObject .FilePath , reqObject .RevisionID ,
387
+ ),
388
+ )
389
+ if err != nil {
390
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
391
+ return
392
+ }
393
+
394
+ writeResponse (logger , w , map [string ]any {"stdout" : out })
395
+ }
396
+
397
+ type deleteRevisionForFileInWorkspaceRequest struct {
398
+ workspaceCommonRequest `json:",inline"`
399
+ FilePath string `json:"filePath"`
400
+ RevisionID string `json:"revisionID"`
401
+ }
402
+
403
+ func (s * server ) deleteRevisionForFileInWorkspace (w http.ResponseWriter , r * http.Request ) {
404
+ logger := gcontext .GetLogger (r .Context ())
405
+ var reqObject deleteRevisionForFileInWorkspaceRequest
406
+ if err := json .NewDecoder (r .Body ).Decode (& reqObject ); err != nil {
407
+ writeError (logger , w , http .StatusBadRequest , fmt .Errorf ("invalid request body: %w" , err ))
408
+ return
409
+ }
410
+
411
+ prg , err := loader .Program (r .Context (), s .getWorkspaceTool (reqObject .workspaceCommonRequest ), "Delete a Revision for File in Workspace" , loader.Options {Cache : s .client .Cache })
412
+ if err != nil {
413
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to load program: %w" , err ))
414
+ return
415
+ }
416
+
417
+ out , err := s .client .Run (
418
+ r .Context (),
419
+ prg ,
420
+ s .getServerToolsEnv (reqObject .Env ),
421
+ fmt .Sprintf (
422
+ `{"workspace_id": "%s", "file_path": "%s", "revision_id": "%s"}` ,
423
+ reqObject .ID , reqObject .FilePath , reqObject .RevisionID ,
424
+ ),
425
+ )
426
+ if err != nil {
427
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
428
+ return
429
+ }
430
+
431
+ writeResponse (logger , w , map [string ]any {"stdout" : out })
432
+ }
0 commit comments