Compare commits

..

8 Commits

Author SHA1 Message Date
Lucien Greathouse
cafb547894 v0.2.3 2017-12-04 00:19:17 -08:00
Lucien Greathouse
35543c2790 Structured test-folder project 2017-12-04 00:17:46 -08:00
Lucien Greathouse
88efdb5ba4 Make tests compatible with TestEZ, provide 'runTests' script 2017-12-04 00:09:30 -08:00
Lucien Greathouse
eeff7cfd92 Add dependencies to rojo.json for development 2017-12-03 23:57:23 -08:00
Lucien Greathouse
f66cbe0049 Add dependencies:
* Roact
* Rodux
* RoactRodux
* TestEZ
2017-12-03 23:50:54 -08:00
Lucien Greathouse
d0c6f2a470 Clean up development a little bit -- when 'dev' is set to true, port 8001 is used 2017-12-03 19:20:54 -08:00
Lucien Greathouse
34d5de9f2c Tighten init file handling, fixes some buggy edge cases by not supporting them 2017-12-03 19:02:58 -08:00
Lucien Greathouse
16676ebfa1 Add Studio Bridge to README, forgot it! 2017-12-03 13:35:18 -08:00
22 changed files with 92 additions and 11 deletions

12
.gitmodules vendored Normal file
View File

@@ -0,0 +1,12 @@
[submodule "modules/Roact"]
path = modules/Roact
url = https://github.com/Roblox/Roact.git
[submodule "modules/Rodux"]
path = modules/Rodux
url = https://github.com/Roblox/Rodux.git
[submodule "modules/RoactRodux"]
path = modules/RoactRodux
url = https://github.com/Roblox/RoactRodux.git
[submodule "modules/TestEZ"]
path = modules/TestEZ
url = https://github.com/Roblox/TestEZ.git

View File

@@ -3,6 +3,11 @@
## Current Master ## Current Master
* *No changes* * *No changes*
## 0.2.3
* Plugin only release
* Tightened `init` file rules to only match script files
* Previously, Rojo would sometimes pick up the wrong file when syncing
## 0.2.2 ## 0.2.2
* Plugin only release * Plugin only release
* Fixed broken reconciliation behavior with `init` files * Fixed broken reconciliation behavior with `init` files

View File

@@ -110,27 +110,28 @@ Creation of Roblox instances follows a simple set of rules. The first rule that
| `*.lua` | `ModuleScript` | `Source` will contain the file's contents | | `*.lua` | `ModuleScript` | `Source` will contain the file's contents |
| `*` | `StringValue` | `Value` will contain the file's contents | | `*` | `StringValue` | `Value` will contain the file's contents |
Any folders on the filesystem will turn into `Folder` objects unless they contain a file named `init` with any extension. Following the convention of Lua, those objects will instead be whatever the `init` file would turn into. Any folders on the filesystem will turn into `Folder` objects unless they contain a file named `init.lua`, `init.server.lua`, or `init.client.lua`. Following the convention of Lua, those objects will instead be whatever the `init` file would turn into.
For example, this file tree: For example, this file tree:
* my-game * my-game
* init.lua * init.client.lua
* foo.lua * foo.lua
Will turn into this tree in Roblox: Will turn into this tree in Roblox:
* `my-game` (`ModuleScript` with source from `my-game/init.lua`) * `my-game` (`LocalScript` with source from `my-game/init.client.lua`)
* `foo` (`ModuleScript` with source from `my-game/foo.lua`) * `foo` (`ModuleScript` with source from `my-game/foo.lua`)
## Inspiration ## Inspiration
There are lots of other tools that sync scripts into Roblox, or otherwise work to improve the development flow outside of Roblox Studio. There are lots of other tools that sync scripts into Roblox, or otherwise work to improve the development flow outside of Roblox Studio.
Here are a few, if you're looking for alternatives or supplements to Rojo: Here are a few, if you're looking for alternatives or supplements to Rojo:
* [rbxmk by Anaminus](https://github.com/anaminus/rbxmk) * [Studio Bridge by Vocksel](https://github.com/vocksel/studio-bridge)
* [RbxRefresh by Osyris](https://github.com/osyrisrblx/RbxRefresh) * [RbxRefresh by Osyris](https://github.com/osyrisrblx/RbxRefresh)
* [RbxSync by evaera](https://github.com/evaera/RbxSync) * [RbxSync by evaera](https://github.com/evaera/RbxSync)
* [CodeSync](https://github.com/MemoryPenguin/CodeSync) and [rbx-exteditor](https://github.com/MemoryPenguin/rbx-exteditor) by [MemoryPenguin](https://github.com/MemoryPenguin) * [CodeSync](https://github.com/MemoryPenguin/CodeSync) and [rbx-exteditor](https://github.com/MemoryPenguin/rbx-exteditor) by [MemoryPenguin](https://github.com/MemoryPenguin)
* [rbxmk by Anaminus](https://github.com/anaminus/rbxmk)
I also have a couple tools that Rojo intends to replace: I also have a couple tools that Rojo intends to replace:
* [rbxfs](https://github.com/LPGhatguy/rbxfs), which has been deprecated by Rojo * [rbxfs](https://github.com/LPGhatguy/rbxfs), which has been deprecated by Rojo

1
modules/Roact Submodule

Submodule modules/Roact added at 7cce62b130

1
modules/RoactRodux Submodule

Submodule modules/RoactRodux added at 43c4f347fe

1
modules/Rodux Submodule

Submodule modules/Rodux added at 6c573259ab

1
modules/TestEZ Submodule

Submodule modules/TestEZ added at 9945f562e5

View File

@@ -51,6 +51,6 @@ files["**/*.server.lua"] = {
std = "+plugin", std = "+plugin",
} }
files["**/*-spec.lua"] = { files["**/*.spec.lua"] = {
std = "+testez", std = "+testez",
} }

View File

@@ -1,4 +1,5 @@
return { return {
pollingRate = 0.3, pollingRate = 0.3,
version = "0.2.2", version = "v0.2.3",
dev = false,
} }

View File

@@ -8,7 +8,9 @@ local Config = require(script.Parent.Config)
local function main() local function main()
local pluginInstance = Plugin.new() local pluginInstance = Plugin.new()
local toolbar = plugin:CreateToolbar("Rojo Plugin v" .. Config.version) local displayedVersion = Config.dev and "DEV" or Config.version
local toolbar = plugin:CreateToolbar("Rojo Plugin " .. displayedVersion)
toolbar:CreateButton("Test Connection", "Connect to Rojo Server", "") toolbar:CreateButton("Test Connection", "Connect to Rojo Server", "")
.Click:Connect(function() .Click:Connect(function()

View File

@@ -19,7 +19,7 @@ Plugin.__index = Plugin
function Plugin.new() function Plugin.new()
local address = "localhost" local address = "localhost"
local port = 8000 local port = Config.dev and 8001 or 8000
local remote = ("http://%s:%d"):format(address, port) local remote = ("http://%s:%d"):format(address, port)

View File

@@ -1,13 +1,27 @@
local Reconciler = {} local Reconciler = {}
--[[
The set of file names that should pass as init files
These files usurp their parents.
]]
local initNames = {
["init.lua"] = true,
["init.server.lua"] = true,
["init.client.lua"] = true,
}
local function isInit(item, itemFileName) local function isInit(item, itemFileName)
if item and item.type == "dir" then if item and item.type == "dir" then
return return
end end
return not not itemFileName:find("^init%.") return initNames[itemFileName] or false
end end
--[[
Determines if the given VFS item has an init file. Yields information about
the file.
]]
local function findInit(item) local function findInit(item)
if item.type ~= "dir" then if item.type ~= "dir" then
return nil, nil return nil, nil
@@ -22,6 +36,12 @@ local function findInit(item)
return nil, nil return nil, nil
end end
--[[
Given a VFS item, returns a Name and ClassName for a corresponding Roblox
instance.
Doesn't take into account init files.
]]
local function itemToName(item, fileName) local function itemToName(item, fileName)
if item and item.type == "dir" then if item and item.type == "dir" then
return fileName, "Folder" return fileName, "Folder"
@@ -40,6 +60,10 @@ local function itemToName(item, fileName)
end end
end end
--[[
Given a VFS item, assigns all relevant values (except Name!) to a Roblox
instance.
]]
local function setValues(rbx, item, fileName) local function setValues(rbx, item, fileName)
local _, className = itemToName(item, fileName) local _, className = itemToName(item, fileName)
@@ -79,6 +103,9 @@ function Reconciler._reifyShallow(item, fileName)
end end
end end
--[[
Construct a new Roblox instance tree that corresponds to the given VFS item.
]]
function Reconciler._reify(item, fileName, parent) function Reconciler._reify(item, fileName, parent)
local rbx = Reconciler._reifyShallow(item, fileName) local rbx = Reconciler._reifyShallow(item, fileName)

4
plugin/src/runTests.lua Normal file
View File

@@ -0,0 +1,4 @@
return function()
local TestEZ = require(script.Parent.Parent.TestEZ)
TestEZ.TestBootstrap:run(script.Parent)
end

View File

@@ -4,7 +4,23 @@
"partitions": { "partitions": {
"plugin": { "plugin": {
"path": "plugin/src", "path": "plugin/src",
"target": "ReplicatedStorage.Rojo Plugin" "target": "ReplicatedStorage.Rojo"
},
"modules/Roact": {
"path": "modules/Roact/lib",
"target": "ReplicatedStorage.Rojo.modules.Roact"
},
"modules/Rodux": {
"path": "modules/Rodux/lib",
"target": "ReplicatedStorage.Rojo.modules.Rodux"
},
"modules/RoactRodux": {
"path": "modules/RoactRodux/lib",
"target": "ReplicatedStorage.Rojo.modules.RoactRodux"
},
"modules/TestEZ": {
"path": "modules/TestEZ/lib",
"target": "ReplicatedStorage.TestEZ"
} }
} }
} }

View File

@@ -1 +0,0 @@
-- meh/init.lua

10
test-project/rojo.json Normal file
View File

@@ -0,0 +1,10 @@
{
"name": "test-project",
"servePort": 8001,
"partitions": {
"src": {
"path": "src",
"target": "ReplicatedStorage.TestProject"
}
}
}

View File