Skip to content

Commit 926b9da

Browse files
committed
enhance: add support for disabling the creation of file revisions
Signed-off-by: Donnie Adams <[email protected]>
1 parent 83490b5 commit 926b9da

File tree

2 files changed

+181
-6
lines changed

2 files changed

+181
-6
lines changed

workspace.go

+11-6
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ func (g *GPTScript) RemoveAll(ctx context.Context, opts ...RemoveAllOptions) err
121121
}
122122

123123
type WriteFileInWorkspaceOptions struct {
124-
WorkspaceID string
124+
WorkspaceID string
125+
CreateRevision *bool
125126
}
126127

127128
func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, filePath string, contents []byte, opts ...WriteFileInWorkspaceOptions) error {
@@ -130,18 +131,22 @@ func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, filePath string, c
130131
if o.WorkspaceID != "" {
131132
opt.WorkspaceID = o.WorkspaceID
132133
}
134+
if o.CreateRevision != nil {
135+
opt.CreateRevision = o.CreateRevision
136+
}
133137
}
134138

135139
if opt.WorkspaceID == "" {
136140
opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
137141
}
138142

139143
_, err := g.runBasicCommand(ctx, "workspaces/write-file", map[string]any{
140-
"id": opt.WorkspaceID,
141-
"contents": base64.StdEncoding.EncodeToString(contents),
142-
"filePath": filePath,
143-
"workspaceTool": g.globalOpts.WorkspaceTool,
144-
"env": g.globalOpts.Env,
144+
"id": opt.WorkspaceID,
145+
"contents": base64.StdEncoding.EncodeToString(contents),
146+
"filePath": filePath,
147+
"createRevision": opt.CreateRevision,
148+
"workspaceTool": g.globalOpts.WorkspaceTool,
149+
"env": g.globalOpts.Env,
145150
})
146151

147152
return err

workspace_test.go

+170
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,89 @@ func TestRevisionsForFileInWorkspace(t *testing.T) {
224224
}
225225
}
226226

227+
func TestDisableCreateRevisionsForFileInWorkspace(t *testing.T) {
228+
id, err := g.CreateWorkspace(context.Background(), "directory")
229+
if err != nil {
230+
t.Fatalf("Error creating workspace: %v", err)
231+
}
232+
233+
t.Cleanup(func() {
234+
err := g.DeleteWorkspace(context.Background(), id)
235+
if err != nil {
236+
t.Errorf("Error deleting workspace: %v", err)
237+
}
238+
})
239+
240+
err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test0"), WriteFileInWorkspaceOptions{WorkspaceID: id})
241+
if err != nil {
242+
t.Fatalf("Error creating file: %v", err)
243+
}
244+
245+
err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test1"), WriteFileInWorkspaceOptions{WorkspaceID: id, CreateRevision: new(bool)})
246+
if err != nil {
247+
t.Fatalf("Error creating file: %v", err)
248+
}
249+
250+
err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test2"), WriteFileInWorkspaceOptions{WorkspaceID: id})
251+
if err != nil {
252+
t.Fatalf("Error creating file: %v", err)
253+
}
254+
255+
revisions, err := g.ListRevisionsForFileInWorkspace(context.Background(), "test.txt", ListRevisionsForFileInWorkspaceOptions{WorkspaceID: id})
256+
if err != nil {
257+
t.Errorf("Error reading file: %v", err)
258+
}
259+
260+
if len(revisions) != 1 {
261+
t.Errorf("Unexpected number of revisions: %d", len(revisions))
262+
}
263+
264+
for i, rev := range revisions {
265+
if rev.WorkspaceID != id {
266+
t.Errorf("Unexpected file workspace ID: %v", rev.WorkspaceID)
267+
}
268+
269+
if rev.Name != "test.txt" {
270+
t.Errorf("Unexpected file name: %s", rev.Name)
271+
}
272+
273+
if rev.Size != 5 {
274+
t.Errorf("Unexpected file size: %d", rev.Size)
275+
}
276+
277+
if rev.ModTime.IsZero() {
278+
t.Errorf("Unexpected file mod time: %v", rev.ModTime)
279+
}
280+
281+
if rev.MimeType != "text/plain" {
282+
t.Errorf("Unexpected file mime type: %s", rev.MimeType)
283+
}
284+
285+
if rev.RevisionID != fmt.Sprintf("%d", i+1) {
286+
t.Errorf("Unexpected revision ID: %s", rev.RevisionID)
287+
}
288+
}
289+
290+
err = g.DeleteRevisionForFileInWorkspace(context.Background(), "test.txt", "1", DeleteRevisionForFileInWorkspaceOptions{WorkspaceID: id})
291+
if err != nil {
292+
t.Errorf("Error deleting revision for file: %v", err)
293+
}
294+
295+
revisions, err = g.ListRevisionsForFileInWorkspace(context.Background(), "test.txt", ListRevisionsForFileInWorkspaceOptions{WorkspaceID: id})
296+
if err != nil {
297+
t.Errorf("Error reading file: %v", err)
298+
}
299+
300+
if len(revisions) != 0 {
301+
t.Errorf("Unexpected number of revisions: %d", len(revisions))
302+
}
303+
304+
err = g.DeleteFileInWorkspace(context.Background(), "test.txt", DeleteFileInWorkspaceOptions{WorkspaceID: id})
305+
if err != nil {
306+
t.Errorf("Error deleting file: %v", err)
307+
}
308+
}
309+
227310
func TestLsComplexWorkspace(t *testing.T) {
228311
id, err := g.CreateWorkspace(context.Background(), "directory")
229312
if err != nil {
@@ -607,6 +690,93 @@ func TestRevisionsForFileInWorkspaceS3(t *testing.T) {
607690
}
608691
}
609692

693+
func TestDisableCreatingRevisionsForFileInWorkspaceS3(t *testing.T) {
694+
if os.Getenv("AWS_ACCESS_KEY_ID") == "" || os.Getenv("AWS_SECRET_ACCESS_KEY") == "" || os.Getenv("WORKSPACE_PROVIDER_S3_BUCKET") == "" {
695+
t.Skip("Skipping test because AWS credentials are not set")
696+
}
697+
698+
id, err := g.CreateWorkspace(context.Background(), "s3")
699+
if err != nil {
700+
t.Fatalf("Error creating workspace: %v", err)
701+
}
702+
703+
t.Cleanup(func() {
704+
err := g.DeleteWorkspace(context.Background(), id)
705+
if err != nil {
706+
t.Errorf("Error deleting workspace: %v", err)
707+
}
708+
})
709+
710+
err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test0"), WriteFileInWorkspaceOptions{WorkspaceID: id})
711+
if err != nil {
712+
t.Fatalf("Error creating file: %v", err)
713+
}
714+
715+
err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test1"), WriteFileInWorkspaceOptions{WorkspaceID: id, CreateRevision: new(bool)})
716+
if err != nil {
717+
t.Fatalf("Error creating file: %v", err)
718+
}
719+
720+
err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test2"), WriteFileInWorkspaceOptions{WorkspaceID: id})
721+
if err != nil {
722+
t.Fatalf("Error creating file: %v", err)
723+
}
724+
725+
revisions, err := g.ListRevisionsForFileInWorkspace(context.Background(), "test.txt", ListRevisionsForFileInWorkspaceOptions{WorkspaceID: id})
726+
if err != nil {
727+
t.Errorf("Error reading file: %v", err)
728+
}
729+
730+
if len(revisions) != 1 {
731+
t.Errorf("Unexpected number of revisions: %d", len(revisions))
732+
}
733+
734+
for i, rev := range revisions {
735+
if rev.WorkspaceID != id {
736+
t.Errorf("Unexpected file workspace ID: %v", rev.WorkspaceID)
737+
}
738+
739+
if rev.Name != "test.txt" {
740+
t.Errorf("Unexpected file name: %s", rev.Name)
741+
}
742+
743+
if rev.Size != 5 {
744+
t.Errorf("Unexpected file size: %d", rev.Size)
745+
}
746+
747+
if rev.ModTime.IsZero() {
748+
t.Errorf("Unexpected file mod time: %v", rev.ModTime)
749+
}
750+
751+
if rev.MimeType != "text/plain" {
752+
t.Errorf("Unexpected file mime type: %s", rev.MimeType)
753+
}
754+
755+
if rev.RevisionID != fmt.Sprintf("%d", i+1) {
756+
t.Errorf("Unexpected revision ID: %s", rev.RevisionID)
757+
}
758+
}
759+
760+
err = g.DeleteRevisionForFileInWorkspace(context.Background(), "test.txt", "1", DeleteRevisionForFileInWorkspaceOptions{WorkspaceID: id})
761+
if err != nil {
762+
t.Errorf("Error deleting revision for file: %v", err)
763+
}
764+
765+
revisions, err = g.ListRevisionsForFileInWorkspace(context.Background(), "test.txt", ListRevisionsForFileInWorkspaceOptions{WorkspaceID: id})
766+
if err != nil {
767+
t.Errorf("Error reading file: %v", err)
768+
}
769+
770+
if len(revisions) != 0 {
771+
t.Errorf("Unexpected number of revisions: %d", len(revisions))
772+
}
773+
774+
err = g.DeleteFileInWorkspace(context.Background(), "test.txt", DeleteFileInWorkspaceOptions{WorkspaceID: id})
775+
if err != nil {
776+
t.Errorf("Error deleting file: %v", err)
777+
}
778+
}
779+
610780
func TestLsComplexWorkspaceS3(t *testing.T) {
611781
if os.Getenv("AWS_ACCESS_KEY_ID") == "" || os.Getenv("AWS_SECRET_ACCESS_KEY") == "" || os.Getenv("WORKSPACE_PROVIDER_S3_BUCKET") == "" {
612782
t.Skip("Skipping test because AWS credentials are not set")

0 commit comments

Comments
 (0)