mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 03:00:30 +00:00
Allow multiple arguments for mkdir (#216)
This commit is contained in:
parent
99bdff0f92
commit
a81db2cda6
@ -2,3 +2,4 @@ View the source code at https://github.com/SquidDev-CC/CC-Tweaked
|
|||||||
View the documentation at https://wiki.computercraft.cc
|
View the documentation at https://wiki.computercraft.cc
|
||||||
Visit the forum at https://forums.computercraft.cc
|
Visit the forum at https://forums.computercraft.cc
|
||||||
You can disable these messages by running "set motd.enable false"
|
You can disable these messages by running "set motd.enable false"
|
||||||
|
You can create a directory with "mkdir".
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
local tArgs = { ... }
|
local tArgs = { ... }
|
||||||
|
|
||||||
if #tArgs < 1 then
|
if #tArgs < 1 then
|
||||||
print( "Usage: mkdir <path>" )
|
print( "Usage: mkdir <paths>" )
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local sNewDir = shell.resolve( tArgs[1] )
|
for _, v in ipairs( tArgs ) do
|
||||||
|
local sNewDir = shell.resolve( v )
|
||||||
if fs.exists( sNewDir ) and not fs.isDir(sNewDir) then
|
if fs.exists( sNewDir ) and not fs.isDir( sNewDir ) then
|
||||||
printError( "Destination exists" )
|
printError( v..": Destination exists" )
|
||||||
return
|
elseif fs.isReadOnly( sNewDir ) then
|
||||||
|
printError( v..": Access denied" )
|
||||||
|
else
|
||||||
|
fs.makeDir( sNewDir )
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
fs.makeDir( sNewDir )
|
|
||||||
|
|
||||||
|
@ -66,6 +66,9 @@ local function completeFile( shell, nIndex, sText, tPreviousText )
|
|||||||
return fs.complete( sText, shell.dir(), true, false )
|
return fs.complete( sText, shell.dir(), true, false )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local function completeFileMany( shell, nIndex, sText, tPreviousText )
|
||||||
|
return fs.complete( sText, shell.dir(), true, false )
|
||||||
|
end
|
||||||
local function completeDir( shell, nIndex, sText, tPreviousText )
|
local function completeDir( shell, nIndex, sText, tPreviousText )
|
||||||
if nIndex == 1 then
|
if nIndex == 1 then
|
||||||
return fs.complete( sText, shell.dir(), false, true )
|
return fs.complete( sText, shell.dir(), false, true )
|
||||||
@ -192,7 +195,7 @@ shell.setCompletionFunction( "rom/programs/help.lua", completeHelp )
|
|||||||
shell.setCompletionFunction( "rom/programs/id.lua", completePeripheral )
|
shell.setCompletionFunction( "rom/programs/id.lua", completePeripheral )
|
||||||
shell.setCompletionFunction( "rom/programs/label.lua", completeLabel )
|
shell.setCompletionFunction( "rom/programs/label.lua", completeLabel )
|
||||||
shell.setCompletionFunction( "rom/programs/list.lua", completeDir )
|
shell.setCompletionFunction( "rom/programs/list.lua", completeDir )
|
||||||
shell.setCompletionFunction( "rom/programs/mkdir.lua", completeFile )
|
shell.setCompletionFunction( "rom/programs/mkdir.lua", completeFileMany )
|
||||||
shell.setCompletionFunction( "rom/programs/monitor.lua", completeMonitor )
|
shell.setCompletionFunction( "rom/programs/monitor.lua", completeMonitor )
|
||||||
shell.setCompletionFunction( "rom/programs/move.lua", completeEitherEither )
|
shell.setCompletionFunction( "rom/programs/move.lua", completeEitherEither )
|
||||||
shell.setCompletionFunction( "rom/programs/redstone.lua", completeRedstone )
|
shell.setCompletionFunction( "rom/programs/redstone.lua", completeRedstone )
|
||||||
|
@ -47,22 +47,23 @@ local function try(fn)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local ok, err = xpcall(fn, function(err)
|
local ok, err = xpcall(fn, function(err)
|
||||||
return { message = err, trace = debug.traceback() }
|
return { message = err, trace = debug.traceback(nil, 2) }
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Restore a whole bunch of state
|
-- Restore a whole bunch of state
|
||||||
io.input(io.stdin)
|
io.input(io.stdin)
|
||||||
io.output(io.stdout)
|
io.output(io.stdout)
|
||||||
|
|
||||||
-- If we're an existing error, or we succeded then propagate it.
|
-- If we succeeded, propagate it
|
||||||
if ok then return ok, err end
|
if ok then return ok, err end
|
||||||
|
|
||||||
|
-- Error handling failed for some reason - just return a simpler error
|
||||||
if type(err) ~= "table" then
|
if type(err) ~= "table" then
|
||||||
return setmetatable({ message = tostring(err) }, error_mt)
|
return ok, setmetatable({ message = tostring(err) }, error_mt)
|
||||||
end
|
end
|
||||||
|
|
||||||
if getmetatable(err.message) == error_mt then return ok, err.message end
|
-- Find the common substring the errors' trace and the current one. Then
|
||||||
|
-- eliminate it.
|
||||||
-- Find the common substring between the two traces. Yes, this is horrible.
|
|
||||||
local trace = debug.traceback()
|
local trace = debug.traceback()
|
||||||
for i = 1, #trace do
|
for i = 1, #trace do
|
||||||
if trace:sub(-i) ~= err.trace:sub(-i) then
|
if trace:sub(-i) ~= err.trace:sub(-i) then
|
||||||
@ -71,6 +72,12 @@ local function try(fn)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- If we've received a rethrown error, copy
|
||||||
|
if getmetatable(err.message) == error_mt then
|
||||||
|
for k, v in pairs(err.message) do err[k] = v end
|
||||||
|
return ok, err
|
||||||
|
end
|
||||||
|
|
||||||
return ok, setmetatable(err, error_mt)
|
return ok, setmetatable(err, error_mt)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
29
src/test/resources/test-rom/spec/programs/mkdir_spec.lua
Normal file
29
src/test/resources/test-rom/spec/programs/mkdir_spec.lua
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
describe("The mkdir program", function()
|
||||||
|
it("creates a directory", function()
|
||||||
|
fs.delete("/test-files")
|
||||||
|
|
||||||
|
shell.run("mkdir /test-files/a")
|
||||||
|
|
||||||
|
expect(fs.isDir("/test-files/a")):eq(true)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("creates many directories", function()
|
||||||
|
fs.delete("/test-files")
|
||||||
|
|
||||||
|
shell.run("mkdir /test-files/a /test-files/b")
|
||||||
|
|
||||||
|
expect(fs.isDir("/test-files/a")):eq(true)
|
||||||
|
expect(fs.isDir("/test-files/b")):eq(true)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("can be completed", function()
|
||||||
|
fs.delete("/test-files")
|
||||||
|
fs.makeDir("/test-files/a")
|
||||||
|
fs.makeDir("/test-files/b")
|
||||||
|
io.open("/test-files.a.txt", "w"):close()
|
||||||
|
|
||||||
|
local complete = shell.getCompletionInfo()["rom/programs/mkdir.lua"].fnComplete
|
||||||
|
expect(complete(shell, 1, "/test-files/", {})):same { "a/", "b/" }
|
||||||
|
expect(complete(shell, 2, "/test-files/", { "/" })):same { "a/", "b/" }
|
||||||
|
end)
|
||||||
|
end)
|
Loading…
Reference in New Issue
Block a user