Skip to content
This repository was archived by the owner on Jan 17, 2021. It is now read-only.

Commit f3ae9cd

Browse files
committed
fixup! Add flag to sync extensions back to local
1 parent aa6ad45 commit f3ae9cd

File tree

3 files changed

+44
-13
lines changed

3 files changed

+44
-13
lines changed

.sail/Dockerfile

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
FROM codercom/ubuntu-dev-go
22

3+
# Go module tooling is completely broken.
4+
ENV GO111MODULE=off
5+
36
LABEL project_root "~/go/src/go.coder.com"

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@ To disable this feature entirely, pass the `--skipsync` flag.
5353

5454
### Sync-back
5555

56-
By default, extensions installed on the remote server won't be sync'd back
56+
By default, VS Code changes on the remote server won't be synced back
5757
when the connection closes. To synchronize back to local when the connection ends,
5858
pass the `-b` flag.

main.go

+40-12
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,17 @@ chmod +x `+codeServerPath+`
8080
flog.Fatal("failed to update code-server: %v", err)
8181
}
8282

83-
if !(*skipSyncFlag) {
83+
if !*skipSyncFlag {
8484
start := time.Now()
8585
flog.Info("syncing settings")
86-
err = syncUserSettings(host)
86+
err = syncUserSettings(host, false)
8787
if err != nil {
8888
flog.Fatal("failed to sync settings: %v", err)
8989
}
9090
flog.Info("synced settings in %s", time.Since(start))
9191

9292
flog.Info("syncing extensions")
93-
err = syncExtensions(host)
93+
err = syncExtensions(host, false)
9494
if err != nil {
9595
flog.Fatal("failed to sync extensions: %v", err)
9696
}
@@ -137,7 +137,7 @@ chmod +x `+codeServerPath+`
137137
break
138138
}
139139

140-
ctx, cancel := context.WithCancel()
140+
ctx, cancel = context.WithCancel(context.Background())
141141
go func() {
142142
defer cancel()
143143
openBrowser(url)
@@ -161,6 +161,18 @@ chmod +x `+codeServerPath+`
161161
flog.Info("shutting down")
162162
return
163163
}
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+
}
164176
}()
165177

166178
shutdownWg.Wait()
@@ -228,40 +240,56 @@ func randomPort() (string, error) {
228240
return "", xerrors.Errorf("max number of tries exceeded: %d", maxTries)
229241
}
230242

231-
func syncUserSettings(host string) error {
243+
func syncUserSettings(host string, back bool) error {
232244
localConfDir, err := configDir()
233245
if err != nil {
234246
return err
235247
}
236248
const remoteSettingsDir = ".local/share/code-server/User"
237249

250+
var (
251+
src = localConfDir + "/"
252+
dest = host + ":" + remoteSettingsDir
253+
)
254+
255+
if back {
256+
dest, src = src, dest
257+
}
258+
238259
// 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")
240261
}
241262

242-
func syncExtensions(host string) error {
263+
func syncExtensions(host string, back bool) error {
243264
localExtensionsDir, err := extensionsDir()
244265
if err != nil {
245266
return err
246267
}
247268
const remoteExtensionsDir = ".local/share/code-server/extensions"
248269

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)
250279
}
251280

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 {
254282
excludeFlags := make([]string, len(excludePaths))
255283
for i, path := range excludePaths {
256284
excludeFlags[i] = "--exclude=" + path
257285
}
258286

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)...)
260288
cmd.Stdout = os.Stdout
261289
cmd.Stderr = os.Stderr
262290
err := cmd.Run()
263291
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)
265293
}
266294

267295
return nil

0 commit comments

Comments
 (0)