7
7
"errors"
8
8
"fmt"
9
9
"os"
10
+ "slices"
10
11
11
12
"obot-platform/database/pkg/cmd"
12
13
@@ -24,23 +25,29 @@ func main() {
24
25
}
25
26
command := os .Args [1 ]
26
27
27
- g , err := gptscript .NewGPTScript ()
28
+ g , err := gptscript .NewGPTScript (
29
+ gptscript.GlobalOptions {
30
+ WorkspaceTool : "github.com/thedadams/workspace-provider@open-file-with-revision-id" ,
31
+ },
32
+ )
28
33
if err != nil {
29
34
fmt .Printf ("Error creating GPTScript: %v\n " , err )
30
35
os .Exit (1 )
31
36
}
32
37
defer g .Close ()
33
38
34
39
var (
35
- ctx = context .Background ()
36
- dbFileName = "acorn.db"
37
- dbWorkspacePath = "/databases/" + dbFileName
40
+ ctx = context .Background ()
41
+ dbFileName = "acorn.db"
42
+ dbWorkspacePath = "/databases/" + dbFileName
43
+ revisionID string = "-1"
44
+ initialDBData []byte
38
45
)
39
46
40
- // Read the database file from the workspace
41
- initialDBData , err := g .ReadFileInWorkspace (ctx , dbWorkspacePath , gptscript.ReadFileInWorkspaceOptions {
47
+ workspaceDB , err := g .ReadFileWithRevisionInWorkspace (ctx , dbWorkspacePath , gptscript.ReadFileInWorkspaceOptions {
42
48
WorkspaceID : workspaceID ,
43
49
})
50
+
44
51
var notFoundErr * gptscript.NotFoundInWorkspaceError
45
52
if err != nil && ! errors .As (err , & notFoundErr ) {
46
53
fmt .Printf ("Error reading DB file: %v\n " , err )
@@ -57,11 +64,15 @@ func main() {
57
64
defer os .Remove (dbFile .Name ())
58
65
59
66
// Write the data to the temporary file
60
- if initialDBData != nil {
67
+ if workspaceDB != nil && workspaceDB .Content != nil {
68
+ initialDBData = workspaceDB .Content
61
69
if err := os .WriteFile (dbFile .Name (), initialDBData , 0644 ); err != nil {
62
70
fmt .Printf ("Error writing to temp file: %v\n " , err )
63
71
os .Exit (1 )
64
72
}
73
+ if workspaceDB .RevisionID != "" {
74
+ revisionID = workspaceDB .RevisionID
75
+ }
65
76
}
66
77
67
78
// Run the requested command
@@ -74,7 +85,7 @@ func main() {
74
85
case "runDatabaseSQL" :
75
86
result , err = cmd .RunDatabaseCommand (ctx , dbFile , os .Getenv ("SQL" ), "-header" )
76
87
if err == nil {
77
- err = saveWorkspaceDB (ctx , g , dbWorkspacePath , dbFile , initialDBData )
88
+ err = saveWorkspaceDB (ctx , g , dbWorkspacePath , revisionID , dbFile , initialDBData )
78
89
}
79
90
case "databaseContext" :
80
91
result , err = cmd .DatabaseContext (ctx , dbFile )
@@ -95,6 +106,7 @@ func saveWorkspaceDB(
95
106
ctx context.Context ,
96
107
g * gptscript.GPTScript ,
97
108
dbWorkspacePath string ,
109
+ revisionID string ,
98
110
dbFile * os.File ,
99
111
initialDBData []byte ,
100
112
) error {
@@ -108,11 +120,39 @@ func saveWorkspaceDB(
108
120
}
109
121
110
122
if err := g .WriteFileInWorkspace (ctx , dbWorkspacePath , updatedDBData , gptscript.WriteFileInWorkspaceOptions {
111
- WorkspaceID : workspaceID ,
123
+ WorkspaceID : workspaceID ,
124
+ CreateRevision : & ([]bool {true }[0 ]),
125
+ LatestRevisionID : revisionID ,
112
126
}); err != nil {
113
127
return fmt .Errorf ("Error writing updated DB file to workspace: %v" , err )
114
128
}
115
129
130
+ // Delete old revisions after successfully writing the new revision
131
+ revisions , err := g .ListRevisionsForFileInWorkspace (ctx , dbWorkspacePath , gptscript.ListRevisionsForFileInWorkspaceOptions {
132
+ WorkspaceID : workspaceID ,
133
+ })
134
+ if err != nil {
135
+ fmt .Fprintf (os .Stderr , "Error listing revisions: %v\n " , err )
136
+ return nil
137
+ }
138
+
139
+ // Delete all revisions older than the one we just used as LatestRevisionID
140
+ lastRevisionIndex := slices .IndexFunc (revisions , func (rev gptscript.FileInfo ) bool {
141
+ return rev .RevisionID == revisionID
142
+ })
143
+
144
+ if lastRevisionIndex < 0 {
145
+ return nil
146
+ }
147
+
148
+ for _ , rev := range revisions [:lastRevisionIndex + 1 ] {
149
+ if err := g .DeleteRevisionForFileInWorkspace (ctx , dbWorkspacePath , rev .RevisionID , gptscript.DeleteRevisionForFileInWorkspaceOptions {
150
+ WorkspaceID : workspaceID ,
151
+ }); err != nil {
152
+ fmt .Fprintf (os .Stderr , "Error deleting revision %s: %v\n " , rev .RevisionID , err )
153
+ }
154
+ }
155
+
116
156
return nil
117
157
}
118
158
0 commit comments