@@ -321,3 +321,112 @@ func (s *server) statFileInWorkspace(w http.ResponseWriter, r *http.Request) {
321321
322322 writeResponse (logger , w , map [string ]any {"stdout" : out })
323323}
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