@@ -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
193193func (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+
296327type statFileInWorkspaceRequest struct {
297328 workspaceCommonRequest `json:",inline"`
298329 FilePath string `json:"filePath"`
330+ WithLatestRevisionID bool `json:"withLatestRevisionID"`
299331}
300332
301333func (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