diff options
Diffstat (limited to 'scripts/context/lua/mtx-rsync.lua')
-rw-r--r-- | scripts/context/lua/mtx-rsync.lua | 378 |
1 files changed, 189 insertions, 189 deletions
diff --git a/scripts/context/lua/mtx-rsync.lua b/scripts/context/lua/mtx-rsync.lua index 1095f2d05..65f795ee5 100644 --- a/scripts/context/lua/mtx-rsync.lua +++ b/scripts/context/lua/mtx-rsync.lua @@ -1,189 +1,189 @@ -if not modules then modules = { } end modules ['mtx-rsync'] = {
- version = 1.000,
- comment = "companion to mtxrun.lua",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- This is an experimental script that will be extended over time and
--- is used by myself. An example or a copy spec:
---
---
--- local devdir = "m:/develop/services"
--- local orgdir = "m:/pod/m4all"
---
--- return {
--- {
--- origin = { devdir, "framework/scripts/d-dispatchers.lua"},
--- target = { orgdir, "framework/scripts" },
--- },
--- {
--- origin = { devdir, "framework/scripts/common/*"},
--- target = { orgdir, "framework/scripts/common" },
--- },
--- {
--- origin = { devdir, "framework/scripts/d-buildtool.lua" },
--- target = { orgdir, "framework/scripts" }
--- },
--- {
--- origin = { devdir, "framework/scripts/buildtool/*"},
--- target = { orgdir, "framework/scripts/buildtool" },
--- },
--- {
--- origin = { devdir, "framework/m4all*" },
--- target = { orgdir, "framework" },
--- },
--- {
--- origin = { devdir, "framework/configurations/*m4all*"},
--- target = { orgdir, "framework/configurations" },
--- },
--- {
--- recurse = true,
--- origin = { devdir, "context/tex/texmf-project/tex/context/user/m4all/*" },
--- target = { orgdir, "context/tex/texmf-project/tex/context/user/m4all" },
--- },
--- }
-
-local helpinfo = [[
-<?xml version="1.0"?>
-<application>
- <metadata>
- <entry name="name">mtx-rsync</entry>
- <entry name="detail">Rsync Helpers</entry>
- <entry name="version">0.10</entry>
- </metadata>
- <flags>
- <category name="basic">
- <subcategory>
- <flag name="job"><short>use given file as specification</short></flag>
- <flag name="dryrun"><short>show what would happen</short></flag>
- <flag name="force"><short>force run</short></flag>
- </subcategory>
- </category>
- </flags>
-</application>
-]]
-
-local application = logs.application {
- name = "mtx-rsync",
- banner = "Rsync Helpers 0.10",
- helpinfo = helpinfo,
-}
-
-local format, gsub = string.format, string.gsub
-local concat = table.concat
-
-local report_message = logs.new("rsync message")
-local report_dryrun = logs.new("rsync dryrun")
-local report_normal = logs.new("rsync normal")
-local report_command = logs.new("rsync command")
-
-local cleanup
-
-if os.platform == "mswin" then
- os.setenv("CYGWIN","nontsec")
- cleanup = function(name)
- return (gsub(name,"([a-zA-Z]):/", "/cygdrive/%1/"))
- end
-else
- cleanup = function(name)
- return name
- end
-end
-
-function rsynccommand(dryrun,recurse,origin,target)
- local command = "rsync -ptlva "
- if dryrun then
- command = command .. "-n "
- end
- if recurse then
- command = command .. "-r "
- end
- return format('%s %s %s',command,origin,target)
-end
-
-scripts = scripts or { }
-scripts.rsync = scripts.rsync or { }
-local rsync = scripts.rsync
-
-rsync.mode = "command"
-
-function rsync.run(origin,target,message,recurse)
- if type(origin) == "table" then
- origin = concat(origin,"/")
- end
- if type(target) == "table" then
- target = concat(target,"/")
- end
- origin = cleanup(origin)
- target = cleanup(target)
- local path = gsub(target,"^/cygdrive/(.)","%1:")
- if not lfs.isdir(path) then
- report_message("creating target dir %s",path)
- dir.makedirs(path) -- as rsync only creates them when --recursive
- end
- if message then
- report_message(message)
- end
- if rsync.mode == "dryrun" then
- local command = rsynccommand(true,recurse,origin,target)
- report_dryrun(command.."\n")
- os.execute(command)
- elseif rsync.mode == "force" then
- local command = rsynccommand(false,recurse,origin,target)
- report_normal(command.."\n")
- os.execute(command)
- else
- local command = rsynccommand(true,recurse,origin,target)
- report_command(command)
- end
-end
-
-function rsync.job(list)
- if type(list) == "string" and lfs.isfile(list) then
- list = dofile(list)
- end
- if type(list) ~= "table" then
- report_message("invalid job specification")
- return
- end
- for i=1,#list do
- local li = list[i]
- local origin = li.origin
- local target = li.target
- local message = li.message
- local recurse = li.recurse
- if origin and #origin > 0 and target and #target > 0 then -- string or table
- rsync.run(origin,target,message,recurse)
- else
- report_message("invalid job specification at index %s",i)
- end
- end
-end
-
-if environment.ownscript then
- -- stand alone
-else
- report(application.banner)
- return rsync
-end
-
-local arguments = environment.arguments
-local files = environment.files
-
-if arguments.dryrun then
- rsync.mode = "dryrun"
-elseif arguments.force then
- rsync.mode = "force"
-end
-
-if arguments.exporthelp then
- application.export(arguments.exporthelp,environment.files[1])
-elseif arguments.job then
- rsync.job(files[1])
-elseif files[1] and files[2] then
- rsync.run(files[1],files[2])
-else
- application.help()
-end
+if not modules then modules = { } end modules ['mtx-rsync'] = { + version = 1.000, + comment = "companion to mtxrun.lua", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- This is an experimental script that will be extended over time and +-- is used by myself. An example or a copy spec: +-- +-- +-- local devdir = "m:/develop/services" +-- local orgdir = "m:/pod/m4all" +-- +-- return { +-- { +-- origin = { devdir, "framework/scripts/d-dispatchers.lua"}, +-- target = { orgdir, "framework/scripts" }, +-- }, +-- { +-- origin = { devdir, "framework/scripts/common/*"}, +-- target = { orgdir, "framework/scripts/common" }, +-- }, +-- { +-- origin = { devdir, "framework/scripts/d-buildtool.lua" }, +-- target = { orgdir, "framework/scripts" } +-- }, +-- { +-- origin = { devdir, "framework/scripts/buildtool/*"}, +-- target = { orgdir, "framework/scripts/buildtool" }, +-- }, +-- { +-- origin = { devdir, "framework/m4all*" }, +-- target = { orgdir, "framework" }, +-- }, +-- { +-- origin = { devdir, "framework/configurations/*m4all*"}, +-- target = { orgdir, "framework/configurations" }, +-- }, +-- { +-- recurse = true, +-- origin = { devdir, "context/tex/texmf-project/tex/context/user/m4all/*" }, +-- target = { orgdir, "context/tex/texmf-project/tex/context/user/m4all" }, +-- }, +-- } + +local helpinfo = [[ +<?xml version="1.0"?> +<application> + <metadata> + <entry name="name">mtx-rsync</entry> + <entry name="detail">Rsync Helpers</entry> + <entry name="version">0.10</entry> + </metadata> + <flags> + <category name="basic"> + <subcategory> + <flag name="job"><short>use given file as specification</short></flag> + <flag name="dryrun"><short>show what would happen</short></flag> + <flag name="force"><short>force run</short></flag> + </subcategory> + </category> + </flags> +</application> +]] + +local application = logs.application { + name = "mtx-rsync", + banner = "Rsync Helpers 0.10", + helpinfo = helpinfo, +} + +local format, gsub = string.format, string.gsub +local concat = table.concat + +local report_message = logs.new("rsync message") +local report_dryrun = logs.new("rsync dryrun") +local report_normal = logs.new("rsync normal") +local report_command = logs.new("rsync command") + +local cleanup + +if os.platform == "mswin" then + os.setenv("CYGWIN","nontsec") + cleanup = function(name) + return (gsub(name,"([a-zA-Z]):/", "/cygdrive/%1/")) + end +else + cleanup = function(name) + return name + end +end + +function rsynccommand(dryrun,recurse,origin,target) + local command = "rsync -ptlva " + if dryrun then + command = command .. "-n " + end + if recurse then + command = command .. "-r " + end + return format('%s %s %s',command,origin,target) +end + +scripts = scripts or { } +scripts.rsync = scripts.rsync or { } +local rsync = scripts.rsync + +rsync.mode = "command" + +function rsync.run(origin,target,message,recurse) + if type(origin) == "table" then + origin = concat(origin,"/") + end + if type(target) == "table" then + target = concat(target,"/") + end + origin = cleanup(origin) + target = cleanup(target) + local path = gsub(target,"^/cygdrive/(.)","%1:") + if not lfs.isdir(path) then + report_message("creating target dir %s",path) + dir.makedirs(path) -- as rsync only creates them when --recursive + end + if message then + report_message(message) + end + if rsync.mode == "dryrun" then + local command = rsynccommand(true,recurse,origin,target) + report_dryrun(command.."\n") + os.execute(command) + elseif rsync.mode == "force" then + local command = rsynccommand(false,recurse,origin,target) + report_normal(command.."\n") + os.execute(command) + else + local command = rsynccommand(true,recurse,origin,target) + report_command(command) + end +end + +function rsync.job(list) + if type(list) == "string" and lfs.isfile(list) then + list = dofile(list) + end + if type(list) ~= "table" then + report_message("invalid job specification") + return + end + for i=1,#list do + local li = list[i] + local origin = li.origin + local target = li.target + local message = li.message + local recurse = li.recurse + if origin and #origin > 0 and target and #target > 0 then -- string or table + rsync.run(origin,target,message,recurse) + else + report_message("invalid job specification at index %s",i) + end + end +end + +if environment.ownscript then + -- stand alone +else + report(application.banner) + return rsync +end + +local arguments = environment.arguments +local files = environment.files + +if arguments.dryrun then + rsync.mode = "dryrun" +elseif arguments.force then + rsync.mode = "force" +end + +if arguments.exporthelp then + application.export(arguments.exporthelp,environment.files[1]) +elseif arguments.job then + rsync.job(files[1]) +elseif files[1] and files[2] then + rsync.run(files[1],files[2]) +else + application.help() +end |