From 22c238764a87c6d2231d22e529575380dd044788 Mon Sep 17 00:00:00 2001 From: Karolin Varner Date: Thu, 23 Feb 2023 22:46:54 +0100 Subject: [PATCH 1/2] feat: `rp` now detects rosenpass binary in nix builds --- rp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rp b/rp index 5c34ecf..4d276db 100755 --- a/rp +++ b/rp @@ -292,7 +292,9 @@ main() { scriptdir="$(dirname "${script}")" verbose=0 binary="$( - find "${scriptdir}"/target/{release,debug}/"${project_name}" -printf "%T@ %p\n" 2>/dev/null \ + find "result/bin/rosenpass" \ + "${scriptdir}"/target/{release,debug}/"${project_name}" \ + "${PWD}/rosenpass" -printf "%T@ %p\n" 2>/dev/null \ | sort -nr \ | awk -v fallback="${project_name}" ' NR == 1 { print($2) } From 55e4fc7e9aace57874503d4b6a0c879504123479 Mon Sep 17 00:00:00 2001 From: Karolin Varner Date: Thu, 23 Feb 2023 22:47:48 +0100 Subject: [PATCH 2/2] fix: Support for absolute paths in rp This was not a very functional way of removing trailing slashes. Fixes: #3 --- rp | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/rp b/rp index 4d276db..ce57675 100755 --- a/rp +++ b/rp @@ -123,7 +123,7 @@ fatal() { genkey() { usagestack+=("PRIVATE_KEYS_DIR") local skdir - skdir="${1/\//}"; shift || fatal "Required positional argument: PRIVATE_KEYS_DIR" + skdir="${1%/}"; shift || fatal "Required positional argument: PRIVATE_KEYS_DIR" while (( $# > 0 )); do local arg; arg="$1"; shift @@ -149,8 +149,8 @@ genkey() { pubkey() { usagestack+=("PRIVATE_KEYS_DIR" "PUBLIC_KEYS_DIR") local skdir pkdir - skdir="${1/\//}"; shift || fatal "Required positional argument: PRIVATE_KEYS_DIR" - pkdir="${1/\//}"; shift || fatal "Required positional argument: PUBLIC_KEYS_DIR" + skdir="${1%/}"; shift || fatal "Required positional argument: PRIVATE_KEYS_DIR" + pkdir="${1%/}"; shift || fatal "Required positional argument: PUBLIC_KEYS_DIR" while (( $# > 0 )); do local arg; arg="$1"; shift @@ -174,7 +174,7 @@ exchange() { usagestack+=("PRIVATE_KEYS_DIR" "[dev ]" "[listen :]" "[peer PUBLIC_KEYS_DIR [endpoint :] [persistent-keepalive ] [allowed-ips /[,/]...]]...") local skdir dev lport dev="${project_name}0" - skdir="${1/\//}"; shift || fatal "Required positional argument: PRIVATE_KEYS_DIR" + skdir="${1%/}"; shift || fatal "Required positional argument: PRIVATE_KEYS_DIR" while (( $# > 0 )); do local arg; arg="$1"; shift @@ -238,7 +238,7 @@ exchange() { shift; # Skip "peer" argument local peerdir ip port keepalive allowedips - peerdir="${1/\//}"; shift || fatal "Required peer argument: PUBLIC_KEYS_DIR" + peerdir="${1%/}"; shift || fatal "Required peer argument: PUBLIC_KEYS_DIR" while (( $# > 0 )); do local arg; arg="$1"; shift @@ -282,6 +282,29 @@ exchange() { done } +find_rosenpass_binary() { + local binary; binary="" + if [[ -n "${gitdir}" ]]; then + # If rp is run from the git repo, use the newest build artifact + binary=$( + find "${gitdir}/result/bin/${project_name}" \ + "${gitdir}"/target/{release,debug}/"${project_name}" \ + -printf "%T@ %p\n" 2>/dev/null \ + | sort -nr \ + | awk 'NR==1 { print($2) }' + ) + elif [[ -n "${nixdir}" ]]; then + # If rp is run from nix, use the nix-installed rosenpass version + binary="${nixdir}/bin/${project_name}" + fi + + if [[ -z "${binary}" ]]; then + binary="${project_name}" + fi + + echo "${binary}" +} + main() { formatting_init cleanup_init @@ -289,17 +312,11 @@ main() { frag_init project_name="rosenpass" - scriptdir="$(dirname "${script}")" verbose=0 - binary="$( - find "result/bin/rosenpass" \ - "${scriptdir}"/target/{release,debug}/"${project_name}" \ - "${PWD}/rosenpass" -printf "%T@ %p\n" 2>/dev/null \ - | sort -nr \ - | awk -v fallback="${project_name}" ' - NR == 1 { print($2) } - END { if (NR == 0) print(fallback) }' - )" + scriptdir="$(dirname "${script}")" + gitdir="$(git -C "${scriptdir}" rev-parse --show-toplevel 2>/dev/null)" || true + nixdir="$(readlink -f result/bin/rp | grep -Pio '^/nix/store/[^/]+(?=/bin/[^/]+)')" || true + binary="$(find_rosenpass_binary)" # Parse command