diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-09-30 17:15:42 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-09-30 17:15:42 +0200 |
commit | 103e6ddb061248bff57e1df2cd737dfc6dc9bdb5 (patch) | |
tree | 12c8a95caf0fdf72a3cad3c05680e254a2b6c3b4 /instantiate_templates.sh | |
parent | fix(templates/rust/cog.toml): Update to perform new `reuse lint` (diff) | |
download | flake-templates-103e6ddb061248bff57e1df2cd737dfc6dc9bdb5.tar.gz flake-templates-103e6ddb061248bff57e1df2cd737dfc6dc9bdb5.zip |
build(instantiate_templates.sh): Only copy files tracked by git
Diffstat (limited to 'instantiate_templates.sh')
-rwxr-xr-x | instantiate_templates.sh | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/instantiate_templates.sh b/instantiate_templates.sh index c991267..c120b3f 100755 --- a/instantiate_templates.sh +++ b/instantiate_templates.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh -#! Copies the templates from `templates/*` to `build/*` and replaces every symlink with a +#! Copies the templates from `templates/*` to `build/*` and replaces every symbolic link with a #! copy. # Source: https://stackoverflow.com/a/20460402 @@ -12,19 +12,31 @@ stringContain() { case $2 in $1*) return 0 ;; *) return 1 ;; esac } ROOT="$(git rev-parse --show-toplevel)" -DRY_RUN_CMD="" - # TODO: Find a way to do the building step incrementally (i.e. without removing everything) <2024-06-11> [ -n "$ROOT" ] && $DRY_RUN_CMD rm --recursive "$ROOT/build" $DRY_RUN_CMD mkdir --parents "$ROOT/build" +cd "$ROOT" || { + echo "No '$ROOT' (Root) ?!" + exit 1 +} + instantiate_dir() { dir="$1" fd . "$dir" --max-depth 1 --type directory | while read -r template; do - echo "Instantiating template: '.${template#"$ROOT"}'.." + template_path="${template#"$ROOT/"}" + echo "Instantiating template: '$template_path'.." template_new_path="$ROOT/build/$(basename "$template")" - $DRY_RUN_CMD cp --no-target-directory --recursive "${template%/}" "$template_new_path" + + git ls-files --cached --full-name "$template" | while read -r file; do + new_file_path="${file#"$template_path"}" + new_path="$template_new_path/$new_file_path" + + $DRY_RUN_CMD mkdir --parents "$(dirname "$new_path")" + + $DRY_RUN_CMD cp "$file" "$new_path" + done { # Show directories |