From 64ff01e6f0f3c2fb37c51befe5036bedb92d0bfe Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 27 Nov 2023 02:36:30 +0100 Subject: [PATCH] add scripts for treewide mainProgram --- treewideMainProgram/ed_main_program.sh | 15 ++++++ .../list_missing_main_programs.sh | 21 +++++++++ .../neovim_fill_buffer_plugin.lua | 12 +++++ treewideMainProgram/verify_main_programs.sh | 47 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100755 treewideMainProgram/ed_main_program.sh create mode 100755 treewideMainProgram/list_missing_main_programs.sh create mode 100644 treewideMainProgram/neovim_fill_buffer_plugin.lua create mode 100755 treewideMainProgram/verify_main_programs.sh diff --git a/treewideMainProgram/ed_main_program.sh b/treewideMainProgram/ed_main_program.sh new file mode 100755 index 0000000..f4de72d --- /dev/null +++ b/treewideMainProgram/ed_main_program.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +PACKAGE_PATH=$1 +PACKAGE_NAME=$1 + +if [ -f $1 ]; then + PACKAGE_NAME=$(dirname $PACKAGE_NAME) +else + PACKAGE_PATH="${PACKAGE_PATH%%/}/default.nix" +fi + +PACKAGE_NAME="${PACKAGE_NAME%/}" +PACKAGE_NAME="${PACKAGE_NAME##*/}" + +NVIM_CLIPBOARD="mainProgram = \"$PACKAGE_NAME\";" nvim $PACKAGE_PATH diff --git a/treewideMainProgram/list_missing_main_programs.sh b/treewideMainProgram/list_missing_main_programs.sh new file mode 100755 index 0000000..698895b --- /dev/null +++ b/treewideMainProgram/list_missing_main_programs.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p bash ripgrep nix + +FILES_WITHOUT_MAINPROGRAM=$(rg --case-sensitive --files-without-match "mainProgram" -g 'default.nix' .) + +trap "exit 0" SIGINT + +for FILE in $FILES_WITHOUT_MAINPROGRAM; do + PACKAGE=$(dirname "$FILE" | sed 's|^./||') + echo "Building: $PACKAGE" + + NIXPKGS_ALLOW_UNFREE=1 nix build ".#$PACKAGE" --impure || continue + + if [ "$(find result/bin | wc -w)" == 1 ]; then + echo "$PACKAGE: $(ls result/bin)" >> packages.txt + elif [ "$(find result-bin/bin | wc -w)" == 1 ]; then + echo "$PACKAGE: $(ls result-bin/bin)" >> packages.txt + fi + + rm result* || true +done diff --git a/treewideMainProgram/neovim_fill_buffer_plugin.lua b/treewideMainProgram/neovim_fill_buffer_plugin.lua new file mode 100644 index 0000000..32c64cd --- /dev/null +++ b/treewideMainProgram/neovim_fill_buffer_plugin.lua @@ -0,0 +1,12 @@ +local function paste_buf() + local content = os.getenv("NVIM_CLIPBOARD") + + local line = vim.api.nvim_get_current_line() + local indent = string.match(line, " +") + + vim.fn.setreg("a", indent .. content) + vim.cmd("put a") +end + +-- Use ';' to insert paste_buf +vim.keymap.set('n', ';', paste_buf) diff --git a/treewideMainProgram/verify_main_programs.sh b/treewideMainProgram/verify_main_programs.sh new file mode 100755 index 0000000..c0ace34 --- /dev/null +++ b/treewideMainProgram/verify_main_programs.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p bash ripgrep nix + +if [ "$1" == "head" ]; then + ADDED_MAINPROGRAMS=$(git diff-tree --no-commit-id --name-only -r HEAD) +elif [ "$1" == "wip" ]; then + ADDED_MAINPROGRAMS=$(git diff --name-only --cached) +else + echo "USAGE: $0 [ head | wip ]" + exit 1 +fi + +trap "exit 0" SIGINT + +TOTAL_COUNT=$(echo $ADDED_MAINPROGRAMS | wc -w) +COUNTER=0 +for FILE in $ADDED_MAINPROGRAMS; do + PACKAGE_PATH=$(dirname "$FILE") + PACKAGE="${PACKAGE_PATH%/}" + PACKAGE="${PACKAGE##*/}" + + COUNTER=$((COUNTER + 1)) + + echo "($COUNTER/$TOTAL_COUNT) Verifying mainProgram of: $PACKAGE" + + NIXPKGS_ALLOW_UNFREE=1 nix build ".#$PACKAGE" --option builders '' --impure || { + echo "$PACKAGE" >> missing_main_program.txt && continue; + } + + MAIN_PROGRAM=$(rg "mainProgram = \"(.+?)\";" --replace "\$1" --only-matching --no-line-number "$FILE" | xargs) + + echo "mainProgram: $PACKAGE" + if ! { + { + [ -d "result/bin" ] && [ "$(ls result/bin | xargs)" == "$MAIN_PROGRAM" ]; + } || { + [ -d "result-bin/bin" ] && [ "$(ls result-bin/bin | xargs)" == "$MAIN_PROGRAM" ]; + }; + }; then + echo "mainProgram doesn't match contents:" + ls result/bin 2>/dev/null || true + ls result-bin/bin 2>/dev/null || true + echo "$PACKAGE" >> missing_main_program.txt + fi + + rm result* || true +done