@@ -7,12 +7,14 @@ package main
7
7
8
8
import (
9
9
"archive/zip"
10
+ "context"
10
11
"fmt"
11
12
"github.com/jessevdk/go-flags"
12
13
log "github.com/sirupsen/logrus"
13
14
"go.amzn.com/lambda/interop"
14
15
"go.amzn.com/lambda/rapidcore"
15
16
"io"
17
+ "io/fs"
16
18
"math"
17
19
"net/http"
18
20
"os"
@@ -196,6 +198,69 @@ func DownloadCodeArchive(url string) {
196
198
197
199
}
198
200
201
+ func resetListener (changeChannel <- chan bool , server * CustomInteropServer ) {
202
+ for {
203
+ _ , more := <- changeChannel
204
+ if ! more {
205
+ return
206
+ }
207
+ log .Println ("Resetting environment..." )
208
+ _ , err := server .Reset ("HotReload" , 2000 )
209
+ if err != nil {
210
+ log .Warnln ("Error resetting server: " , err )
211
+ }
212
+ }
213
+
214
+ }
215
+
216
+ func RunHotReloadingListener (server * CustomInteropServer , targetPaths []string , opts * LsOpts , ctx context.Context ) {
217
+ if ! opts .HotReloading {
218
+ log .Debugln ("Hot reloading disabled." )
219
+ return
220
+ }
221
+ defaultDebouncingDuration := 500 * time .Millisecond
222
+ log .Infoln ("Hot reloading enabled, starting filewatcher." , targetPaths )
223
+ changeListener , err := NewChangeListener (defaultDebouncingDuration )
224
+ if err != nil {
225
+ log .Errorln ("Hot reloading disabled due to change listener error." , err )
226
+ return
227
+ }
228
+ defer changeListener .Close ()
229
+ go changeListener .Start ()
230
+ changeListener .AddTargetPaths (targetPaths )
231
+ go resetListener (changeListener .debouncedChannel , server )
232
+
233
+ <- ctx .Done ()
234
+ log .Infoln ("Closing down filewatcher." )
235
+
236
+ }
237
+
238
+ func getSubFolders (dirPath string ) []string {
239
+ var subfolders []string
240
+ err := filepath .WalkDir (dirPath , func (path string , d fs.DirEntry , err error ) error {
241
+ if err == nil && d .IsDir () {
242
+ subfolders = append (subfolders , path )
243
+ }
244
+ return err
245
+ })
246
+ if err != nil {
247
+ log .Errorln ("Error listing directory contents: " , err )
248
+ return subfolders
249
+ }
250
+ return subfolders
251
+ }
252
+
253
+ func getSubFoldersInList (prefix string , pathList []string ) (oldFolders []string , newFolders []string ) {
254
+ for _ , pathItem := range pathList {
255
+ if strings .HasPrefix (pathItem , prefix ) {
256
+ oldFolders = append (oldFolders , pathItem )
257
+ } else {
258
+ newFolders = append (newFolders , pathItem )
259
+ }
260
+ }
261
+ return
262
+ }
263
+
199
264
func InitHandler (sandbox Sandbox , functionVersion string , timeout int64 ) (time.Time , time.Time ) {
200
265
additionalFunctionEnvironmentVariables := map [string ]string {}
201
266
0 commit comments