Commit Graph

58 Commits

Author SHA1 Message Date
Asher c9f91e77cd
Fix coping and moving files around using the file tree (#568)
* Implement write/read buffers in electron fill

This makes cutting and copy files from the file tree work.

* Implement fs.createReadStream

This is used by the file tree to copy files.

* Allow passing proxies back from client to server

This makes things like piping streams possible.

* Synchronously bind to proxy events

This eliminates any chance whatsoever of missing events due to binding
too late.

* Make it possible to bind some events on demand

* Add some protocol documentation
2019-04-24 10:38:21 -05:00
Asher aabb2ecda7
Update node to 10.15.1 (#472)
* Update Node to 10.15.1

* Remove string replace that was used for oclif

* Update nbin

* Package node-pty and spdlog with nbin

* Label stderr/stdout from shared process

* Remove fork override

* Prevent "already disposed" errors when trying to kill disposed proxies

* Include spdlog dependencies

* Shim /node_modules

* Add node_modules to Docker ignore

It keeps using my already-built .node files which results in a
mismatching GLIBC version error.

* Update nbin
2019-04-15 19:48:12 -05:00
Asher a1136b3a02
Update VS Code to 1.33.0 (#445)
* Update VS Code to 1.33.0

* Fix slow file tree

* Fix WindowsService fill

* Provide `off` on event listeners

* Fix webview

* Fix double title bar and missing preferences on Mac

* Bump VS Code version in Travis config

* Fix black dialog text (again)

* Fix shared process not starting
2019-04-05 18:49:29 -05:00
Asher e73eb74208
Fix sending dates through the protocol
Fixes #253.
2019-04-04 18:24:53 -05:00
Kyle Carberry 4af84fcaf6 Add flags for customizing user data dir and extensions dir (#420)
* Add flags for customizing extensions directory

* Update @coder/nbin
2019-04-03 17:07:47 -05:00
Asher 3a672d725a Convert fully to protobuf (was partially JSON) (#402)
* Convert fully to protobuf (was partially JSON)

* Handle all floating promises

* Remove stringified proto from trace logging

It wasn't proving to be very useful.
2019-04-02 17:44:28 -05:00
Asher 03ad2a17b2 Handle disconnects (#363)
* Make proxies decide how to handle disconnects

* Connect to a new terminal instance on disconnect

* Use our retry for the watcher

* Specify method when proxy doesn't exist

* Don't error when closing/killing disconnected proxy

* Specify proxy ID when a method doesn't exist

* Use our retry for the searcher

Also dispose some things for the watcher because it doesn't seem that
was done properly.

The searcher also now starts immediately so there won't be lag when you
perform your first search.

* Use our retry for the extension host

* Emit error in parent proxy class

Reduces duplicate code. Not all items are "supposed" to have an error
event according to the original implementation we are filling, but there
is no reason why we can't emit our own events (and are already doing so
for the "disconnected" event anyway).

* Reconnect spdlog

* Add error message when shared process disconnects

* Pass method resolve to parse

* Don't pass method to getProxy

It doesn't tell you anything that trace logging wouldn't and has
no relation to what the function actually does.

* Fix infinite recursion when disposing protocol client in tests
2019-03-28 17:59:49 -05:00
Asher 259095eae2 Watcher and initial load performance improvements (#357)
* Set low CPU priority on watcher

Fixes #247.

* Batch stat and readdir calls

* Fix fs.exists

callbackify seems to always adds an error as the first argument. Opted
to just use the promise for this one.

* Batch lstat

* Add maximum time for flushing batches
2019-03-27 17:04:19 -05:00
Asher dc2253e718 Refactor evaluations (#285)
* Replace evaluations with proxies and messages

* Return proxies synchronously

Otherwise events can be lost.

* Ensure events cannot be missed

* Refactor remaining fills

* Use more up-to-date version of util

For callbackify.

* Wait for dispose to come back before removing

This prevents issues with the "done" event not always being the last
event fired. For example a socket might close and then end, but only
if the caller called end.

* Remove old node-pty tests

* Fix emitting events twice on duplex streams

* Preserve environment when spawning processes

* Throw a better error if the proxy doesn't exist

* Remove rimraf dependency from ide

* Update net.Server.listening

* Use exit event instead of killed

Doesn't look like killed is even a thing.

* Add response timeout to server

* Fix trash

* Require node-pty & spdlog after they get unpackaged

This fixes an error when running in the binary.

* Fix errors in down emitter preventing reconnecting

* Fix disposing proxies when nothing listens to "error" event

* Refactor event tests to use jest.fn()

* Reject proxy call when disconnected

Otherwise it'll wait for the timeout which is a waste of time since we
already know the connection is dead.

* Use nbin for binary packaging

* Remove additional module requires

* Attempt to remove require for local bootstrap-fork

* Externalize fsevents
2019-03-26 13:01:25 -05:00
Asher f7c1ebf667
Fix moving data directory across devices 2019-03-12 15:45:44 -05:00
Asher e1dc6967ed
Fix trash 2019-03-12 14:04:17 -05:00
Asher e597d49912
Fix issues with configuration directories
- Move the old data directory if possible.
- Fix extension path to not use a hard-coded path and instead use the
  data directory.
- Create every part of the path during startup.
- Create each path when a connection is made as well in case they are
  deleted while the server is running.
- Create every part of the path before saving settings or writing a file
  using the resource endpoint.
2019-03-12 11:44:56 -05:00
Asher 47765dde23 Add ping/pong to the protocol (#2) 2019-03-04 19:26:17 -08:00
Kyle Carberry e8174095ca
Add windows support (#41)
* Add windows support

* Improve multi-platform support

* Install with network-concurrency 1

* Use file-glob to upload windows binary

* Don't install packages in parallel if on windows

* Rename vscode-remote to code-server

* Add output at intervals so CI doesn't kill build

* Update all tasks to provide timed output

* Don't perform tasks sync otherwise we can't log
2019-02-28 14:04:19 -06:00
Kyle Carberry 83b64365ba
Convert to node-pty-prebuilt 2019-02-27 22:16:31 -06:00
Asher 3bacbca325
Fix images not appearing (iconv encoding issue)
Fixed by returning the original buffer from `fs.read` and then just
using whatever encoding was passed in to iconv, so this should all work
exactly the same now as it does on native Node.
2019-02-27 14:44:25 -06:00
Kyle Carberry 20c0fc4c52
Use default user shell 2019-02-27 12:43:00 -06:00
Asher 71b7bbf99a
Check EISDIR for Mac when performing mkdir 2019-02-26 18:23:33 -06:00
Asher d556e110cb
Include code in stringified errors
This is done by returning the entire error stringified instead of just
the message.

This fixes the issue with the "save as" dialog.
2019-02-26 16:27:01 -06:00
Asher eaea947318
Fix spdlog and node-pty in binary 2019-02-25 15:18:44 -06:00
Asher 80d9baadc0
Attempt to require spdlog and node-pty 2019-02-22 18:57:19 -06:00
Asher d9fc29fb0b
Pass data directory when forking with bootstrap 2019-02-22 16:31:21 -06:00
Asher 8b8bef015e
Add evaluation helpers (#33)
* Add evaluation helpers

* Make some helpers only available server-side

They don't make any sense on the client side.

* Fork the right thing
2019-02-22 15:56:29 -06:00
Asher 7edf797efc
Parse args sent through evaluation function
Previously they'd go in still stringified so we didn't get a chance to
convert buffer objects back to buffers, for example, making things like
`fs.write` write `[object Object]` to files.
2019-02-21 14:11:49 -06:00
Asher fe107802e3
Fix stringifying Uint8Array 2019-02-21 14:11:49 -06:00
Asher d80f82ab98
Move and refactor fs tests 2019-02-19 14:21:04 -06:00
Asher 2889b3fede
Add test for disposing active evaluations 2019-02-19 10:42:32 -06:00
Asher 4a80bcb42c
Make everything use active evals (#30)
* Add trace log level

* Use active eval to implement spdlog

* Split server/client active eval interfaces

Since all properties are *not* valid on both sides

* +200% fire resistance

* Implement exec using active evaluations

* Fully implement child process streams

* Watch impl, move child_process back to explicitly adding events

Automatically forwarding all events might be the right move, but wanna
think/discuss it a bit more because it didn't come out very cleanly.

* Would you like some args with that callback?

* Implement the rest of child_process using active evals

* Rampant memory leaks

Emit "kill" to active evaluations when client disconnects in order to
kill processes. Most likely won't be the final solution.

* Resolve some minor issues with output panel

* Implement node-pty with active evals

* Provide clearTimeout to vm sandbox

* Implement socket with active evals

* Extract some callback logic

Also remove some eval interfaces, need to re-think those.

* Implement net.Server and remainder of net.Socket using active evals

* Implement dispose for active evaluations

* Use trace for express requests

* Handle sending buffers through evaluation events

* Make event logging a bit more clear

* Fix some errors due to us not actually instantiating until connect/listen

* is this a commit message?

* We can just create the evaluator in the ctor

Not sure what I was thinking.

* memory leak for you, memory leak for everyone

* it's a ternary now

* Don't dispose automatically on close or error

The code may or may not be disposable at that point.

* Handle parsing buffers on the client side as well

* Remove unused protobuf

* Remove TypedValue

* Remove unused forkProvider and test

* Improve dispose pattern for active evals

* Socket calls close after error; no need to bind both

* Improve comment

* Comment is no longer wishy washy due to explicit boolean

* Simplify check for sendHandle and options

* Replace _require with __non_webpack_require__

Webpack will then replace this with `require` which we then provide to
the vm sandbox.

* Provide path.parse

* Prevent original-fs from loading

* Start with a pid of -1

vscode immediately checks the PID to see if the debug process launch
correctly, but of course we don't get the pid synchronously.

* Pass arguments to bootstrap-fork

* Fully implement streams

Was causing errors because internally the stream would set this.writing
to true and it would never become false, so subsequent messages would
never send.

* Fix serializing errors and streams emitting errors multiple times

* Was emitting close to data

* Fix missing path for spawned processes

* Move evaluation onDispose call

Now it's accurate and runs when the active evaluation has actually
disposed.

* Fix promisifying fs.exists

* Fix some active eval callback issues

* Patch existsSync in debug adapter
2019-02-19 10:17:03 -06:00
Asher 81f48b8b06
Add trash module 2019-02-07 11:05:17 -06:00
Asher 5d02194048
Throw errors if accessing paths before set 2019-02-06 16:55:29 -06:00
Asher 5ea1d8b2aa
Bit of cleanup, some test fixes, moving some funcs 2019-02-06 16:45:11 -06:00
Asher 588da0443c
Some cleanup
- Use whateverEmitter.event for the onWhatever methods.
- Add readonly to a bunch of things.
- Remove some redundancy in types.
- Move initializations out of the constructor and into the declarations
  where it was reasonable to do so.
- Disable a few no-any violations.
2019-02-06 11:53:23 -06:00
Asher 91bd6775c3
Move node fill implementations to ide package 2019-02-06 10:49:29 -06:00
Asher e770920be0
Remove block padding (blank lines)
Also made a rule for it.
2019-02-05 18:09:04 -06:00
Asher 70ad911641
vscode-online -> vscode-remote 2019-02-05 15:26:57 -06:00
Kyle Carberry 797efe72fd
Fix loading within the CLI (#27)
* Fix loading within the CLI

* Remove app

* Remove promise handle

* Fix requested changes
2019-02-05 11:16:09 -06:00
Asher c594af4396
More exit debugging
Papers, please.
2019-02-05 11:16:03 -06:00
Asher ebe5e1b1a9
Uploader online (#26) 2019-02-05 11:16:02 -06:00
Asher a0c443d8d3
Sometimes an exec has no callback
How lonely.
2019-02-05 11:16:00 -06:00
Kyle Carberry 20f5d8eeed
Add active evals (#25)
* Add active evals

* Convert type of stats to date or string

* Fix generic overloads for run

* Lower evaluate timeout

* Add comment for createWriteStream
2019-02-05 11:16:00 -06:00
Asher 3a88ae5fb2
Get search working and clean up disconnected client (#23)
* Use ipc instead of pipe

* Run callback passed to child process's send method

* It also returns true

* Correct send signature

* Kill processes when client disconnects
2019-02-05 11:15:59 -06:00
Kyle Carberry b4798d1a48
Fix syntax highlighting, process spawning, extensions, terminals (#22)
* Fix syntax highlighting, process spawning, extensions, terminals

* Replace colons in toISOString

* Move pathSets included in task
2019-02-05 11:15:59 -06:00
Asher c6d35d098a
Extension host (#20)
* Implement net.Server

* Move Socket class into Client

This way we don't need to expose anything.

* Remove some unused imports

* Pass environment variables to bootstrap fork

* Add debug log for when socket disconnects from server

* Use VSCODE_ALLOW_IO for shared process only

* Extension host can send messages now

* Support callback for logging

This lets us do potentially expensive operations which will only be
performed if the log level is sufficiently low.

* Stop extension host from committing suicide

* Blank line

* Add static serve (#21)

* Add extension URLs

* how did i remove this

* Fix writing an empty string

* Implement dialogs on window service
2019-02-05 11:15:58 -06:00
Asher 536ded2cc5
Add some debug logging 2019-02-05 11:15:58 -06:00
Asher b08237d63f
Fill net.createServer 2019-02-05 11:15:57 -06:00
Kyle Carberry 6c178d615d
Add createServer (#18) 2019-02-05 11:15:57 -06:00
Asher 5cb657b415
Get forked watcher & searcher working 2019-02-05 11:15:56 -06:00
Kyle Carberry 4cd6bed8d2
Add stdio sources (#17) 2019-02-05 11:15:56 -06:00
Asher 8a789ac957
Get boostrap stuff forking
They don't run yet but seem to be forking correctly now.
2019-02-05 11:15:55 -06:00
Asher b1cd5c142f
Fix some styling issues 2019-02-05 11:15:55 -06:00