diff --git a/l3build-check.lua b/l3build-check.lua index fb624e7e..f7782af6 100644 --- a/l3build-check.lua +++ b/l3build-check.lua @@ -134,7 +134,7 @@ local function normalize_log(content,engine,errlevels) not match(line, "%.%.%.$") then return "", (lastline or "") .. line end - local line = (lastline or "") .. line + line = (lastline or "") .. line lastline = "" -- Zap ./ at begin of filename line = gsub(line, "%(%.%/", "(") @@ -696,17 +696,17 @@ function runtest(name, engine, hide, ext, pdfmode, breakout) cp(lvtfile, fileexists(testfiledir .. "/" .. lvtfile) and testfiledir or unpackdir, testdir) local checkopts = checkopts - local engine = engine or stdengine + engine = engine or stdengine local binary = engine - local format = gsub(engine,"tex$",checkformat) + format = gsub(engine,"tex$",checkformat) -- Special binary/format combos if specialformats[checkformat] and next(specialformats[checkformat]) then local t = specialformats[checkformat] - if t[engine] and next(t[engine]) then - local t = t[engine] - binary = t.binary or binary - checkopts = t.options or checkopts - format = t.format or format + local t_ngn = t[engine] + if t_ngn and next(t_ngn) then + binary = t_ngn.binary or binary + checkopts = t_ngn.options or checkopts + format = t_ngn.format or format end end -- Finalise format string @@ -807,11 +807,11 @@ function runtest(name, engine, hide, ext, pdfmode, breakout) for _,filetype in pairs(auxfiles) do for _,file in pairs(filelist(testdir, filetype)) do if match(file,"^" .. name .. ".[^.]+$") then - local ext = match(file, "%.[^.]+$") - if ext ~= lvtext and - ext ~= tlgext and - ext ~= lveext and - ext ~= logext then + local e7n = match(file, "%.[^.]+$") + if e7n ~= lvtext and + e7n ~= tlgext and + e7n ~= lveext and + e7n ~= logext then local newname = gsub(file,"(%.[^.]+)$","." .. engine .. "%1") if fileexists(testdir,newname) then rm(testdir,newname) @@ -908,17 +908,12 @@ function check(names) end end end - -- https://stackoverflow.com/a/32167188 - local function shuffle(tbl) - local len, random = #tbl, rnd - for i = len, 2, -1 do - local j = random(1, i) - tbl[i], tbl[j] = tbl[j], tbl[i] - end - return tbl - end if options["shuffle"] then - names = shuffle(names) + -- https://stackoverflow.com/a/32167188 + for i = #names, 2, -1 do + local j = rnd(1, i) + names[i], names[j] = names[j], names[i] + end end -- Actually run the tests print("Running checks on") diff --git a/l3build-file-functions.lua b/l3build-file-functions.lua index c80a761b..2dfaa791 100644 --- a/l3build-file-functions.lua +++ b/l3build-file-functions.lua @@ -36,7 +36,6 @@ local execute = os.execute local exit = os.exit local getenv = os.getenv local remove = os.remove -local os_time = os.time local os_type = os.type local luatex_revision = status.luatex_revision @@ -183,6 +182,7 @@ function abspath(path) error(msg) end +-- TODO: Fix the cross platform problem function escapepath(path) if os_type == "windows" then local path,count = gsub(path,'"','') @@ -214,22 +214,21 @@ end -- Copy files 'quietly' function cp(glob, source, dest) local errorlevel - for i,_ in pairs(tree(source, glob)) do - local source = source .. "/" .. i + for p_rel,p_cwd in pairs(tree(source, glob)) do if os_type == "windows" then - if attributes(source)["mode"] == "directory" then + if attributes(p_cwd)["mode"] == "directory" then errorlevel = execute( - 'xcopy /y /e /i "' .. unix_to_win(source) .. '" "' - .. unix_to_win(dest .. '/' .. i) .. '" > nul' + 'xcopy /y /e /i "' .. unix_to_win(p_cwd) .. '" "' + .. unix_to_win(dest .. '/' .. p_rel) .. '" > nul' ) else errorlevel = execute( - 'xcopy /y "' .. unix_to_win(source) .. '" "' + 'xcopy /y "' .. unix_to_win(p_cwd) .. '" "' .. unix_to_win(dest .. '/') .. '" > nul' ) end else - errorlevel = execute("cp -RLf '" .. source .. "' '" .. dest .. "'") + errorlevel = execute("cp -RLf '" .. p_cwd .. "' '" .. dest .. "'") end if errorlevel ~=0 then return errorlevel @@ -302,10 +301,10 @@ function tree(path, glob) end local dirs = {["."] = cropdots(path)} for pattern, criterion in gmatch(cropdots(glob), "([^/]+)(/?)") do - local criterion = criterion == "/" and is_dir or always_true - local function fill(path, dir, table) + criterion = criterion == "/" and is_dir or always_true + local function fill(path_a, dir, table) for _, file in ipairs(filelist(dir, pattern)) do - local fullpath = path .. "/" .. file + local fullpath = path_a .. "/" .. file if file ~= "." and file ~= ".." and fullpath ~= builddir then @@ -319,13 +318,13 @@ function tree(path, glob) local newdirs = {} if pattern == "**" then while true do - local path, dir = next(dirs) - if not path then + local path_a, dir = next(dirs) + if not path_a then break end - dirs[path] = nil - newdirs[path] = dir - fill(path, dir, dirs) + dirs[path_a] = nil + newdirs[path_a] = dir + fill(path_a, dir, dirs) end else for path, dir in pairs(dirs) do @@ -357,7 +356,7 @@ function mkdir(dir) if os_type == "windows" then -- Windows (with the extensions) will automatically make directory trees -- but issues a warning if the dir already exists: avoid by including a test - local dir = unix_to_win(dir) + dir = unix_to_win(dir) return execute( "if not exist " .. dir .. "\\nul " .. "mkdir " .. dir ) @@ -368,10 +367,10 @@ end -- Rename function ren(dir, source, dest) - local dir = dir .. "/" + dir = dir .. "/" if os_type == "windows" then - local source = gsub(source, "^%.+/", "") - local dest = gsub(dest, "^%.+/", "") + source = gsub(source, "^%.+/", "") + dest = gsub(dest, "^%.+/", "") return execute("ren " .. unix_to_win(dir) .. source .. " " .. dest) else return execute("mv " .. dir .. source .. " " .. dir .. dest) diff --git a/l3build-help.lua b/l3build-help.lua index 8627e14f..6431ac54 100644 --- a/l3build-help.lua +++ b/l3build-help.lua @@ -39,7 +39,7 @@ end function help() local function setup_list(list) local longest = 0 - for k,v in pairs(list) do + for k,_ in pairs(list) do if k:len() > longest then longest = k:len() end @@ -70,7 +70,7 @@ function help() end print("") print("Valid options are:") - local longest,t = setup_list(option_list) + longest,t = setup_list(option_list) for _,k in ipairs(t) do local opt = option_list[k] local filler = rep(" ", longest - k:len() + 1) diff --git a/l3build-install.lua b/l3build-install.lua index 92bfa126..cea9aa19 100644 --- a/l3build-install.lua +++ b/l3build-install.lua @@ -97,7 +97,7 @@ function uninstall() if errorlevel ~= 0 then return errorlevel end -- Finally, clean up special locations for _,location in ipairs(tdslocations) do - local path,glob = splitpath(location) + local path = splitpath(location) errorlevel = zapdir(path) if errorlevel ~= 0 then return errorlevel end end @@ -140,11 +140,11 @@ function install_files(target,full,dry_run) end local matched = false for _,location in ipairs(tdslocations) do - local path,glob = splitpath(location) - local pattern = glob_to_pattern(glob) + local l_dir,l_glob = splitpath(location) + local pattern = glob_to_pattern(l_glob) if match(filename,pattern) then - insert(paths,path) - insert(filenames,path .. sourcepath .. filename) + insert(paths,l_dir) + insert(filenames,l_dir .. sourcepath .. filename) matched = true break end @@ -162,12 +162,12 @@ function install_files(target,full,dry_run) if next(filenames) then if not dry_run then for _,path in pairs(paths) do - local dir = target .. "/" .. path - if not cleanpaths[dir] then - errorlevel = cleandir(dir) + local dir_a = target .. "/" .. path + if not cleanpaths[dir_a] then + errorlevel = cleandir(dir_a) if errorlevel ~= 0 then return errorlevel end end - cleanpaths[dir] = true + cleanpaths[dir_a] = true end end for _,file in ipairs(filenames) do @@ -192,17 +192,17 @@ function install_files(target,full,dry_run) exclude = exclude or { } dir = dir or currentdir local includelist = { } - local excludelist = { } + local excludelist_a = { } for _,glob_table in pairs(exclude) do for _,glob in pairs(glob_table) do for file,_ in pairs(tree(dir,glob)) do - excludelist[file] = true + excludelist_a[file] = true end end end for _,glob in pairs(include) do for file,_ in pairs(tree(dir,glob)) do - if not excludelist[file] then + if not excludelist_a[file] then insert(includelist, file) end end diff --git a/l3build-manifest-setup.lua b/l3build-manifest-setup.lua index e00f48ff..e0da78e5 100644 --- a/l3build-manifest-setup.lua +++ b/l3build-manifest-setup.lua @@ -221,18 +221,16 @@ end --]] manifest_sort_within_match = manifest_sort_within_match or function(files) - local f = files - table.sort(f) - return f + table.sort(files) + return files end manifest_sort_within_group = manifest_sort_within_group or function(files) - local f = files --[[ -- no-op by default; make your own definition to customise. E.g.: - table.sort(f) + table.sort(files) --]] - return f + return files end --[[ diff --git a/l3build-stdmain.lua b/l3build-stdmain.lua index b086eb07..48d596f0 100644 --- a/l3build-stdmain.lua +++ b/l3build-stdmain.lua @@ -22,6 +22,8 @@ for those people who are interested. --]] +local lfs = require("lfs") + local exit = os.exit local insert = table.insert diff --git a/l3build-tagging.lua b/l3build-tagging.lua index aa84b0d5..3dbe4b17 100644 --- a/l3build-tagging.lua +++ b/l3build-tagging.lua @@ -51,7 +51,7 @@ local function update_file_tag(file,tagname,tagdate) else local path = dirname(file) ren(path,filename,filename .. ".bak") - local f = assert(open(file,"w")) + f = assert(open(file,"w")) -- Convert line ends back if required during write -- Watch for the second return value! f:write((gsub(updated_content,"\n",os_newline))) diff --git a/l3build-typesetting.lua b/l3build-typesetting.lua index 0ae25a90..da57cb84 100644 --- a/l3build-typesetting.lua +++ b/l3build-typesetting.lua @@ -49,9 +49,9 @@ end -- An auxiliary used to set up the environmental variables function runcmd(cmd,dir,vars) - local dir = dir or "." - local dir = abspath(dir) - local vars = vars or {} + dir = dir or "." + dir = abspath(dir) + vars = vars or {} -- Allow for local texmf files local env = os_setenv .. " TEXMFCNF=." .. os_pathsep local localtexmf = "" @@ -80,7 +80,7 @@ function biber(name,dir) end function bibtex(name,dir) - local dir = dir or "." + dir = dir or "." if fileexists(dir .. "/" .. name .. ".aux") then -- LaTeX always generates an .aux file, so there is a need to -- look inside it for a \citation line @@ -105,7 +105,7 @@ function bibtex(name,dir) end function makeindex(name,dir,inext,outext,logext,style) - local dir = dir or "." + dir = dir or "." if fileexists(dir .. "/" .. name .. inext) then if style == "" then style = nil end return runcmd(makeindexexe .. " " .. makeindexopts @@ -119,15 +119,15 @@ function makeindex(name,dir,inext,outext,logext,style) end function tex(file,dir,cmd) - local dir = dir or "." - local cmd = cmd or typesetexe .. typesetopts + dir = dir or "." + cmd = cmd or typesetexe .. typesetopts return runcmd(cmd .. " \"" .. typesetcmds .. "\\input " .. file .. "\"", dir,{"TEXINPUTS","LUAINPUTS"}) end local function typesetpdf(file,dir) - local dir = dir or "." + dir = dir or "." local name = jobname(file) print("Typesetting " .. name) local fn = typeset @@ -141,7 +141,7 @@ local function typesetpdf(file,dir) print(" ! Compilation failed") return errorlevel end - pdfname = name .. pdfext + local pdfname = name .. pdfext rm(docfiledir,pdfname) return cp(pdfname,dir,docfiledir) end @@ -226,7 +226,7 @@ function doc(files) end -- Now know if we should typeset this source if typeset then - local errorlevel = typesetpdf(srcname,path) + errorlevel = typesetpdf(srcname,path) if errorlevel ~= 0 then return errorlevel else diff --git a/l3build-unpack.lua b/l3build-unpack.lua index d5c8e301..83466c07 100644 --- a/l3build-unpack.lua +++ b/l3build-unpack.lua @@ -22,8 +22,6 @@ for those people who are interested. --]] -local execute = os.execute - -- Unpack the package files using an 'isolated' system: this requires -- a copy of the 'basic' DocStrip program, which is used then removed function unpack(sources, sourcedirs) diff --git a/l3build-upload.lua b/l3build-upload.lua index 7270ebfc..a4dcf108 100644 --- a/l3build-upload.lua +++ b/l3build-upload.lua @@ -78,6 +78,12 @@ end -- if upload is anything else, the user will be prompted whether to upload. -- For now, this is undocumented. I think I would prefer to keep it always set to ask for the time being. +local ctan_post -- this is private to the module + +-- TODO: next is a public global method, +-- but following functions are semantically local +-- despite they are declared globally. + function upload(tagnames) local uploadfile = ctanzip..".zip" @@ -100,7 +106,7 @@ function upload(tagnames) uploadconfig.note = uploadconfig.note or file_contents(uploadconfig.note_file) - local tagnames = tagnames or { } + tagnames = tagnames or { } uploadconfig.version = tagnames[1] or uploadconfig.version local override_update_check = false @@ -214,7 +220,7 @@ end function shell(s) local h = assert(popen(s, 'r')) - t = assert(h:read('*a')) + local t = assert(h:read('*a')) h:close() return t end @@ -248,11 +254,13 @@ function construct_ctan_post(uploadfile,debug) ctan_field("uploader", uploadconfig.uploader, 255, "Name of uploader", true, false ) ctan_field("version", uploadconfig.version, 32, "Package version", true, false ) + --[=[ `qq` is unused because line 258 is commented -- finish constructing the curl command: local qq = '"' if os_type == "windows" then qq = '\"' end + --]=] -- commandline ctan_post = ctan_post .. ' --form ' .. qq .. 'file=@' .. tostring(uploadfile) .. ';filename=' .. tostring(uploadfile) .. qq ctan_post = ctan_post .. '\nform="file=@' .. tostring(uploadfile) .. ';filename=' .. tostring(uploadfile) .. '"' @@ -352,7 +360,7 @@ function file_contents (filename) local f= open(filename,"r") if f==nil then return nil - else + else local s = f:read("*all") close(f) return s