diff options
| author | ruki <[email protected]> | 2019-09-19 22:37:48 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-09-19 09:46:52 +0800 |
| commit | 5fa580d86834bf0d762c62626a576419724fe5c7 (patch) | |
| tree | 3871ac148006f7cfaf18ed60ed735e5affd37022 | |
| parent | c195ea566eae9e5150519fdadead3576d48ba504 (diff) | |
improve template
| -rw-r--r-- | xmake/actions/create/main.lua | 82 |
1 files changed, 38 insertions, 44 deletions
diff --git a/xmake/actions/create/main.lua b/xmake/actions/create/main.lua index 40317395a..ffa31bb10 100644 --- a/xmake/actions/create/main.lua +++ b/xmake/actions/create/main.lua @@ -29,46 +29,6 @@ function _get_builtinvars(tempinst, targetname) FAQ = function() return io.readfile(path.join(os.programdir(), "scripts", "faq.lua")) end} end --- create project from template -function _create_project(tempinst, sourcedir, targetname) - - -- get project directory - local projectdir = path.absolute(option.get("project") or path.join(os.curdir(), targetname)) - - -- ensure the project directory - if not os.isdir(projectdir) then - os.mkdir(projectdir) - end - - -- copy the project files - os.cp(path.join(sourcedir, "*"), projectdir) - - -- enter the project directory - os.cd(projectdir) - - -- get the builtin variables - local builtinvars = _get_builtinvars(tempinst, targetname) - - -- replace all variables - for _, configfile in ipairs(tempinst:get("configfiles")) do - local pattern = "%${(.-)}" - io.gsub(configfile, "(" .. pattern .. ")", function(_, variable) - variable = variable:trim() - local value = builtinvars[variable] - return type(value) == "function" and value() or value - end) - end - - -- generate .gitignore - os.cp(path.join(os.programdir(), "scripts", "gitignore"), path.join(projectdir, ".gitignore")) - - -- do after_create - local after_create = tempinst:get("create_after") - if after_create then - after_create(tempinst, {targetname = targetname}) - end -end - -- create project or files from template function _create_project_or_files(language, templateid, targetname) @@ -108,15 +68,49 @@ function _create_project_or_files(language, templateid, targetname) end assert(tempinst and tempinst:scriptdir(), "invalid template id: %s!", templateid) + -- get project directory + local projectdir = path.absolute(option.get("project") or path.join(os.curdir(), targetname)) + + -- ensure the project directory + if not os.isdir(projectdir) then + os.mkdir(projectdir) + end + + -- enter the project directory + os.cd(projectdir) + -- create project local sourcedir = path.join(tempinst:scriptdir(), "project") if os.isdir(sourcedir) then - _create_project(tempinst, sourcedir, targetname) - else - raise("template(%s): project and files not found!", templateid) + os.cp(path.join(sourcedir, "*"), projectdir) + os.cp(path.join(os.programdir(), "scripts", "gitignore"), path.join(projectdir, ".gitignore")) end -end + -- create files + sourcedir = path.join(tempinst:scriptdir(), "files") + if os.isdir(sourcedir) then + os.cp(path.join(sourcedir, "*"), projectdir) + end + + -- get the builtin variables + local builtinvars = _get_builtinvars(tempinst, targetname) + + -- replace all variables + for _, configfile in ipairs(tempinst:get("configfiles")) do + local pattern = "%${(.-)}" + io.gsub(configfile, "(" .. pattern .. ")", function(_, variable) + variable = variable:trim() + local value = builtinvars[variable] + return type(value) == "function" and value() or value + end) + end + + -- do after_create + local after_create = tempinst:get("create_after") + if after_create then + after_create(tempinst, {targetname = targetname}) + end +end -- main function main() |
