feat(external): Switch between packages & programs automatically

This commit is contained in:
Vincent Ambo 2019-12-12 23:26:08 +00:00 committed by Vincent Ambo
parent f5e3183de1
commit 875628a097
2 changed files with 21 additions and 9 deletions

28
external/default.nix vendored
View file

@ -3,7 +3,7 @@
{ pkgs, program, package }:
let
inherit (builtins) foldl'fromJSON head readFile replaceStrings tail throw;
inherit (builtins) elemAt foldl' fromJSON head length readFile replaceStrings tail throw;
inherit (pkgs) lib runCommand go jq ripgrep;
pathToName = p: replaceStrings ["/"] ["_"] (toString p);
@ -36,14 +36,24 @@ let
if path == [] then { gopkg = value; }
else { "${head path}" = mkset (tail path) value; };
toPackage = self: src: path: entry: package {
name = pathToName entry.name entry.name;
path = lib.concatStringsSep "/" ([ path ] ++ entry.locator);
srcs = map (f: src + ("/" + f)) entry.files;
deps = map (d: lib.attrByPath (d ++ [ "gopkg" ]) (
throw "missing local dependency '${lib.concatStringsSep "." d}' in '${path}'"
) self) entry.localDeps;
};
last = l: elemAt l ((length l) - 1);
toPackage = self: src: path: entry:
let
args = {
srcs = map (f: src + ("/" + f)) entry.files;
deps = map (d: lib.attrByPath (d ++ [ "gopkg" ]) (
throw "missing local dependency '${lib.concatStringsSep "." d}' in '${path}'"
) self) entry.localDeps;
};
libArgs = args // {
name = pathToName entry.name;
path = lib.concatStringsSep "/" ([ path ] ++ entry.locator);
};
binArgs = args // {
name = last ([ path ] ++ entry.locator);
};
in if entry.isCommand then (program binArgs) else (package libArgs);
in { src, path, deps ? [] }: let
name = pathToName path;

2
external/main.go vendored
View file

@ -34,6 +34,7 @@ type pkg struct {
Files []string `json:"files"`
LocalDeps [][]string `json:"localDeps"`
ForeignDeps []string `json:"foreignDeps"`
IsCommand bool `json:"isCommand"`
}
// findGoDirs returns a filepath.WalkFunc that identifies all
@ -116,6 +117,7 @@ func analysePackage(root, source, importpath string, stdlib map[string]bool) (pk
Files: files,
LocalDeps: local,
ForeignDeps: foreign,
IsCommand: p.IsCommand(),
}, nil
}