aboutsummaryrefslogtreecommitdiffstats
path: root/pkgs/populate/default.nix
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-13 21:09:17 +0000
committertv <tv@krebsco.de>2026-11-13 22:14:45 +0100
commit8dfa3f18d42d852ece3f2d9cf1ae117acccc0b15 (patch)
tree2f521e0c7307a4fac6481dc968a9e4f5c21a7cc0 /pkgs/populate/default.nix
parent0273a55087e2614323d6ebd145b08c56b370a483 (diff)
populate: refer to flakes as git+file: only with a usable .git
Writing the lock file of a git+file: flake, Nix runs Git, with the repository's configuration and hooks, which may run commands. A .git in a source's directory can come from anywhere, e.g. one planted in a materialized flake, or one a file source keeps. So drawing inputs refers to a flake as git+file: only if git_problems finds nothing wrong with its .git directory, the way git sources check their work trees, and else as path:. lock-foreign-git plants a .git in a materialized flake and in a file source that keeps it, whose configuration names an fsmonitor command.
Diffstat (limited to 'pkgs/populate/default.nix')
-rw-r--r--pkgs/populate/default.nix10
1 files changed, 8 insertions, 2 deletions
diff --git a/pkgs/populate/default.nix b/pkgs/populate/default.nix
index b724b23..7b22662 100644
--- a/pkgs/populate/default.nix
+++ b/pkgs/populate/default.nix
@@ -608,14 +608,20 @@ let
fi
}
- # Prints the flake URL of the source named $1.
+ ${gitProblems}
+ # Prints the flake URL of the source named $1: git+file: if it has a
+ # .git directory git_problems finds nothing wrong with, else path:.
+ # Nix runs Git in a git+file: flake, with the repository's
+ # configuration and hooks.
flake_url() {
path=$(readlink -f ${quote target.path}/"$1")
if ! test -d "$path"; then
>&2 printf 'error: source %s is not a directory\n' "$1"
exit 1
fi
- if test -e "$path"/.git; then
+ if ! test -L "$path"/.git && test -d "$path"/.git &&
+ problems=$(git_problems "$path" 2>/dev/null) &&
+ test -z "$problems"; then
if test -e "$path"/.gitmodules; then
printf 'git+file:%s?submodules=1' "$(url_path "$path")"
else