Dedupe output parts

This commit is contained in:
2024-01-19 22:00:49 +01:00
parent 96a20b9278
commit 23e043fee2
2 changed files with 48 additions and 10 deletions

View File

@@ -1,4 +1,4 @@
import std/[algorithm, dirs, logging, options, paths, strutils, syncio]
import std/[algorithm, dirs, envvars, logging, options, paths, strutils, syncio]
import strformat
import commandant
@@ -19,6 +19,7 @@ Usage:
pathsd [options] search_path ...
Options:
-s --shell target shell (defaults to bash)
-d --dedupe deduplicate the final paths
-v --verbose turn debugging messages on
-q --quiet supress all logging messages
--version show the version
@@ -63,7 +64,7 @@ proc readPart(path: Path): seq[string] =
return result
proc main*(searchPaths: seq[string]): MainResult =
proc main*(searchPaths: seq[string], envParts: seq[string], dedupe: bool): MainResult =
var parts: seq[string] = @[]
logger.log(lvlDebug, fmt"Processing search paths: {searchPaths}")
@@ -84,6 +85,16 @@ proc main*(searchPaths: seq[string]): MainResult =
for partPath in partPaths:
parts = parts & readPart(partPath)
parts = parts & envParts
if dedupe == true:
var dedupedParts: seq[string] = @[]
for part in parts:
if dedupedParts.contains(part) == false:
dedupedParts.add(part)
parts = dedupedParts
return MainResult(output: parts, errorCode: QuitSuccess)
@@ -93,6 +104,7 @@ when isMainModule:
commandant.option(shell, string, "shell", "s", "bash")
flag(verbose, "verbose", "v")
flag(quiet, "quiet", "q")
flag(dedupe, "dedupe", "d")
exitoption("help", "h", help_string, QuitFailure)
exitoption("version", "", version_string, QuitFailure)
errorproc(handleCommandantError)
@@ -105,7 +117,11 @@ when isMainModule:
logger.levelThreshold = loggerLevel
var mainResult = main(searchPaths)
var envParts: seq[string] = @[]
var envPath = envvars.getEnv("PATH")
envParts = envPath.split(":")
var mainResult = main(searchPaths, envParts, dedupe)
if mainResult.output != @[] and mainResult.errorCode == QuitSuccess:
var output: string = ""
@@ -113,7 +129,7 @@ when isMainModule:
case shell
of "bash":
let pathComponents = join(mainResult.output, ":")
output = fmt"""export PATH="{pathComponents}":$PATH"""
output = fmt"""export PATH="{pathComponents}""""
if output != "":
echo(output)