1
0
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:
JakobDev 2019-05-25 19:04:56 +02:00 committed by SquidDev
parent 99bdff0f92
commit a81db2cda6
5 changed files with 58 additions and 16 deletions

View File

@ -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".

View File

@ -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 )

View File

@ -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 )

View File

@ -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

View 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)