@@ -80,17 +80,17 @@ chmod +x `+codeServerPath+`
80
80
flog .Fatal ("failed to update code-server: %v" , err )
81
81
}
82
82
83
- if ! ( * skipSyncFlag ) {
83
+ if ! * skipSyncFlag {
84
84
start := time .Now ()
85
85
flog .Info ("syncing settings" )
86
- err = syncUserSettings (host )
86
+ err = syncUserSettings (host , false )
87
87
if err != nil {
88
88
flog .Fatal ("failed to sync settings: %v" , err )
89
89
}
90
90
flog .Info ("synced settings in %s" , time .Since (start ))
91
91
92
92
flog .Info ("syncing extensions" )
93
- err = syncExtensions (host )
93
+ err = syncExtensions (host , false )
94
94
if err != nil {
95
95
flog .Fatal ("failed to sync extensions: %v" , err )
96
96
}
@@ -137,7 +137,7 @@ chmod +x `+codeServerPath+`
137
137
break
138
138
}
139
139
140
- ctx , cancel : = context .WithCancel ()
140
+ ctx , cancel = context .WithCancel (context . Background () )
141
141
go func () {
142
142
defer cancel ()
143
143
openBrowser (url )
@@ -161,6 +161,18 @@ chmod +x `+codeServerPath+`
161
161
flog .Info ("shutting down" )
162
162
return
163
163
}
164
+
165
+ flog .Info ("synchronizing VS Code back to local" )
166
+
167
+ err = syncExtensions (host , true )
168
+ if err != nil {
169
+ flog .Fatal ("failed to sync extensions back: %v" , err )
170
+ }
171
+
172
+ err = syncUserSettings (host , true )
173
+ if err != nil {
174
+ flog .Fatal ("failed to user settigns extensions back: %v" , err )
175
+ }
164
176
}()
165
177
166
178
shutdownWg .Wait ()
@@ -228,40 +240,56 @@ func randomPort() (string, error) {
228
240
return "" , xerrors .Errorf ("max number of tries exceeded: %d" , maxTries )
229
241
}
230
242
231
- func syncUserSettings (host string ) error {
243
+ func syncUserSettings (host string , back bool ) error {
232
244
localConfDir , err := configDir ()
233
245
if err != nil {
234
246
return err
235
247
}
236
248
const remoteSettingsDir = ".local/share/code-server/User"
237
249
250
+ var (
251
+ src = localConfDir + "/"
252
+ dest = host + ":" + remoteSettingsDir
253
+ )
254
+
255
+ if back {
256
+ dest , src = src , dest
257
+ }
258
+
238
259
// Append "/" to have rsync copy the contents of the dir.
239
- return rsync (localConfDir + "/" , remoteSettingsDir , host , "workspaceStorage" , "logs" , "CachedData" )
260
+ return rsync (src , dest , "workspaceStorage" , "logs" , "CachedData" )
240
261
}
241
262
242
- func syncExtensions (host string ) error {
263
+ func syncExtensions (host string , back bool ) error {
243
264
localExtensionsDir , err := extensionsDir ()
244
265
if err != nil {
245
266
return err
246
267
}
247
268
const remoteExtensionsDir = ".local/share/code-server/extensions"
248
269
249
- return rsync (localExtensionsDir + "/" , remoteExtensionsDir , host )
270
+ var (
271
+ src = localExtensionsDir + "/"
272
+ dest = host + ":" + remoteExtensionsDir
273
+ )
274
+ if back {
275
+ dest , src = src , dest
276
+ }
277
+
278
+ return rsync (src , dest )
250
279
}
251
280
252
- func rsync (src string , dest string , host string , excludePaths ... string ) error {
253
- remoteDest := fmt .Sprintf ("%s:%s" , host , dest )
281
+ func rsync (src string , dest string , excludePaths ... string ) error {
254
282
excludeFlags := make ([]string , len (excludePaths ))
255
283
for i , path := range excludePaths {
256
284
excludeFlags [i ] = "--exclude=" + path
257
285
}
258
286
259
- cmd := exec .Command ("rsync" , append (excludeFlags , "-azv" , "--copy-unsafe-links" , src , remoteDest )... )
287
+ cmd := exec .Command ("rsync" , append (excludeFlags , "-azv" , "--copy-unsafe-links" , src , dest )... )
260
288
cmd .Stdout = os .Stdout
261
289
cmd .Stderr = os .Stderr
262
290
err := cmd .Run ()
263
291
if err != nil {
264
- return xerrors .Errorf ("failed to rsync '%s' to '%s': %w" , src , remoteDest , err )
292
+ return xerrors .Errorf ("failed to rsync '%s' to '%s': %w" , src , dest , err )
265
293
}
266
294
267
295
return nil
0 commit comments