diff --git a/justfile b/justfile index c845134..8d57bba 100644 --- a/justfile +++ b/justfile @@ -248,10 +248,10 @@ rebase-commits commit=`cd "$invokedir"; just _a_commit`: [no-cd] _bump +$packages: - #!/usr/bin/env -S bash -euo pipefail - test -e .git + #!/usr/bin/env -S bash -euo pipefail -x + [[ -e .git && flake.nix ]] printf "%s.src\n" "$@" | xargs just _build_packages results-src-old ||: # TODO: unpack? - config=( + config=(env NIXPKGS_ALLOW_UNFREE=1 NIXPKGS_ALLOW_BROKEN=1 NIXPKGS_ALLOW_INSECURE=1 @@ -281,59 +281,72 @@ _bump +$packages: $GIT diff printf "delta results-src-{old,new}/%s/.\n" "$@" -#fix package=`just _a_package`: - -# ./mk-fix.sh "{{package}}" -@fix $package=`just _a_package`: +@fix +packages: + [[ $# -gt 0 ]] || set -- $(just _some_packages); \ cd "$(just _new_worktree fix "$(echo "$package" | rev | cut -d. -f1 | rev)")"; \ just _fix "$package" && $SHELL [no-cd] -_fix $package: +_fix +packages: #!/usr/bin/env -S bash -euo pipefail - test -e .git - nix-build . -A "$package".src --out-link result-src - test -d $(readlink result-src) && { - mkdir -p result-src-writeable - rsync -rxL result-src/ result-src-writeable/ - chmod -R +w result-src-writeable - } ||: - test -f $(readlink result-src) && { - mkdir result-src-writeable - atool $(readlink result-src) --extract-to=result-src-writeable - if test $(ls result-src-writeable | wc -l ) -eq 1 && test -d result-src-writeable/* ; then - mv result-src-writeable{,-old} - mv result-src-writeable-old/* result-src-writeable - rmdir result-src-writeable-old - fi - } ||: - test -d result-src-writeable && ( - cd result-src-writeable - $GIT init - $GIT add . - $GIT commit -m "Base" >/dev/null - ) - cat <<-"EOF" > build.nix - #!/usr/bin/env -S nom build -f - let pkgs = import ./. {}; in pkgs.{{ package }}.overrideAttrs { src = ./result-src-writeable; } - EOF + [[ -e .git && flake.nix ]] + local packages=("$@") + just _build_packages results-src "${packages[@]/%/.src}" ||: + # TODO: make this rutine reuseable? + mkdir -p result-src-writeable + for result in results-src/*; do; + result_writeable=result-src-writeable/$(basename "$result") + mkdir -p "$result_writeable" + if [[ -d $(readlink "$result") ]]; then + rsync -rxL "$result/" "$result_writeable/" && + chmod -R +w "$result_writeable/" ||: + elif [[ -f $(readlink "$result") ]]; then + atool "$(readlink result-src)" --extract-to="$result_writeable/" ||: + if [[ $(ls "$result_writeable" | wc -l ) -eq 1 && test -d "$result_writeable"/* ]]; then + mv "$result_writeable"{,-old} + mv "$result_writeable"-old/* "$result_writeable" + rmdir "$result_writeable"-old + fi + fi + ( + cd "$result_writeable" + $GIT init + $GIT add . + $GIT commit -m "Base" >/dev/null + ) ||: + done + printf >build.nix "#!/usr/bin/env -S nom build -f\n" + printf >build.nix "let pkgs = import ./. { }; in {\n%s\n}\n" "$( + for package in "${packages[@]}"; do + printf " %s = pkgs.%s.overrideAttrs { src = ./result-src-writeable/%s-src; };" "$package" "$package" "$package" + done + )" chmod +x build.nix - NIXPKGS_ALLOW_UNFREE=1 just build-packages "$package" ||: + if command -v bat >/dev/null; + then bat build.nix + else cat build.nix + fi + NIXPKGS_ALLOW_UNFREE=1 just build-packages "${packages[@]}" ||: echo "# $package" - echo ' ./build.nix' - echo ' ./results/_rerun.sh' + echo " ./build.nix "${packages[*]/#/-A }" + echo " ./results/_rerun.sh" pr $number=`just _a_pr`: #!/usr/bin/env -S bash -euo pipefail number=$(just _sanitize_pr_url "$number") - if test -d prs/pr-"$number"-* ; then - cd prs/pr-"$number"-* && $SHELL + if [[ -d prs/pr-"$number" ]]; then + cd prs/pr-"$number" + elif test -d prs/pr-"$number"-*; then + cd prs/pr-"$number"-* else - cd "$(just _new_worktree prs pr-{{ number }} "upstream/master" "")" - gh pr checkout {{ number }} - $GIT branch -D prs-$(basename "$PWD") - $SHELL + (cd master; + $GIT worktree prune + $GIT worktree add ../prs/pr-"$number" + ) + cd prs/pr-"$number" + gh pr checkout "$number" fi + $SHELL @pr-comment-diff: cd "$invokedir"; just _pr_post_diff comment @@ -414,7 +427,7 @@ _mk_worktree $name $dir $base="upstream/master" $onto="": $GIT worktree add ../"$dir" "$name" cd ../"$dir" $GIT pull "$remote" "$branch" - test -z "$onto" || just rebase-onto HEAD "$onto" + just rebase-onto HEAD "$onto" pop-commits-to-new-worktree $commits=`cd "$invokedir"; just _some_commits`: #!/usr/bin/env -S bash -euo pipefail @@ -565,7 +578,7 @@ _packages_json: gum spin --show-output just list-packages | cut -f1 | fzf --sync --layout=reverse --height 15 | grep . @_some_packages: - gum spin --show-output just list-packages | cut -f1 | fzf --sync --layout=reverse --multi | grep . + gum spin --show-output just list-packages | cut -f1 | fzf --sync --layout=reverse --height 15 --multi | grep . @_a_pr: cd master; gh pr list --limit 1000 --json 'number,title' --state open | jq '.[]|"\(.number) - \(.title)"' -r | gum filter --placeholder "Pick PR..." --height 10 | cut -d' ' -f1