Skip to content

Commit

Permalink
Merge pull request #59 from pvs/expand-vars
Browse files Browse the repository at this point in the history
Expand env variables
  • Loading branch information
bovine3dom authored Jan 2, 2022
2 parents cb2a59d + 0430165 commit f08e128
Showing 1 changed file with 32 additions and 6 deletions.
38 changes: 32 additions & 6 deletions src/native_main.nim
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,32 @@ proc findUserConfigFile(): string =
if fileExists(path):
return path

proc expandVars(path: string): string =
result = path
when defined(posix):
if "$" notin result:
return

var
name, value, tail: string
(first, last) = (0, 0)
while true:
(first, last) = findBounds(result, re"\$(\w+|\{[^}]*\})", first)
if first < 0 or last < first:
break
name = result[first + 1 .. last]
if name.startsWith('{') and name.endsWith('}'):
name = name[1 .. ^2]
if existsEnv(name):
value = getEnv(name)
else:
first = last
continue
tail = result[last + 1 .. ^1]
result = result[0 .. first - 1] & value
first = len(result)
result = result & tail

proc handleMessage(msg: MessageRecv): MessageResp =
let cmd = msg.cmd.get()
result.cmd = cmd
Expand Down Expand Up @@ -174,7 +200,7 @@ proc handleMessage(msg: MessageRecv): MessageResp =

of "read":
var f: File
if open(f, expandTilde(msg.file.get())):
if open(f, expandTilde(expandVars(msg.file.get()))):
result.content = some(readAll(f))
result.code = some(0)
close(f)
Expand All @@ -184,15 +210,15 @@ proc handleMessage(msg: MessageRecv): MessageResp =

of "mkdir":
try:
createDir(expandTilde(msg.dir.get()))
createDir(expandTilde(expandVars((msg.dir.get()))))
result.content = some("")
result.code = some(0)
except OSError:
result.code = some(2)

of "move":
let src = expandTilde(msg.`from`.get())
let dst = expandTilde(msg.to.get())
let src = expandTilde(expandVars(msg.`from`.get()))
let dst = expandTilde(expandVars(msg.to.get()))
let canMove = msg.overwrite.get(false) or not(fileExists(dst) or
fileExists(joinPath(dst, extractFilename(src))))

Expand Down Expand Up @@ -236,7 +262,7 @@ proc handleMessage(msg: MessageRecv): MessageResp =
of "write":
try:
var f: File
discard open(f, expandTilde(msg.file.get()), fmWrite)
discard open(f, expandTilde(expandVars(msg.file.get())), fmWrite)
var msgContent = msg.content.get()
let expr = re"^data:((.*?)(;charset=.*?)?)(;base64)?,"
if match(msgContent, expr):
Expand All @@ -248,7 +274,7 @@ proc handleMessage(msg: MessageRecv): MessageResp =
result.code = some(2)

of "writerc":
let path = expandTilde(msg.file.get())
let path = expandTilde(expandVars(msg.file.get()))
if not fileExists(path) or msg.force.get(false):
try:
var f: File
Expand Down

0 comments on commit f08e128

Please sign in to comment.