From f465d079ed102d71daacba629c2611d3b3a42951 Mon Sep 17 00:00:00 2001 From: Rajdeep Malakar Date: Wed, 13 Dec 2023 22:53:19 +0530 Subject: [PATCH 1/4] redo of pkgxdev/brewkit#196 --- lib/hooks/usePantry.ts | 88 ++++++++++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 30 deletions(-) diff --git a/lib/hooks/usePantry.ts b/lib/hooks/usePantry.ts index 52dde45f..c4145e21 100644 --- a/lib/hooks/usePantry.ts +++ b/lib/hooks/usePantry.ts @@ -60,15 +60,15 @@ const getPlatforms = async (pkg: Package | PackageRequirement) => { return rv } -const getRawDistributableURL = (yml: PlainObject) => { - if (isPlainObject(yml.distributable)) { - return validate.str(yml.distributable.url) - } else if (isString(yml.distributable)) { - return yml.distributable - } else if (yml.distributable === null || yml.distributable === undefined) { +const getRawDistributableURL = (dist: PlainObject) => { + if (isPlainObject(dist)) { + return validate.str(dist.url) + } else if (isString(dist)) { + return dist + } else if (dist === null || dist === undefined) { return } else { - throw new Error(`invalid distributable node: ${yml.distributable}`) + throw new Error(`invalid distributable node: ${dist}`) } } @@ -93,30 +93,58 @@ const getDistributable = async (pkg: Package) => { const moustaches = useMoustaches() const yml = await hooks.usePantry().project(pkg).yaml() - - if (yml.distributable?.git) { - console.warn("brewkit: using distributable.git instead of distributable.url is deprecated") - return getGitDistribution({ pkg, ...yml.distributable}) - } - if (yml.distributable?.url?.startsWith("git")) { - return getGitDistribution({ pkg, ...yml.distributable}) + const dists = isArray(yml.distributable) ? yml.distributable : [yml.distributable] + + for (const dist of dists) { + if (!dist) continue + //FIXME: Add check for Git dists as well + if (dist.git) { + console.warn( + "brewkit: using distributable.git instead of distributable.url is deprecated", + ) + return getGitDistribution({ pkg, ...dist }) + } + + if (dist.url?.startsWith("git")) { + return getGitDistribution({ pkg, ...dist }) + } + + let urlstr = getRawDistributableURL(dist) + if (!urlstr) continue + + let v = pkg.version + const stripComponents = flatmap(dist["strip-components"], coerceNumber) + + if (isPlainObject(dist)) { + if (dist.rewrite?.match) { + const v_raw = v.raw.replace( + new RegExp(dist.rewrite["match"], "gi"), + dist.rewrite["with"], + ) + Object.assign(v, { raw: new_v }) + } + + if (dist.if) { + const matched = new RegExp(dist.if).test(pkg.version.raw); + if (!matched) continue + } + } + + urlstr = moustaches.apply(urlstr, [ + ...moustaches.tokenize.version(v), + ...moustaches.tokenize.host(), + ]) + + const rsp = await fetch(urlstr, { method: "HEAD" }) + + if (rsp.status == 200) { + const url = new URL(urlstr) + return { url, ref: undefined, stripComponents, type: "url" } + } else { + console.warn(`brewkit: Could not fetch ${urlstr} [${rsp.status}]`) + } } - - let urlstr = getRawDistributableURL(yml) - if (!urlstr) return - let stripComponents: number | undefined - if (isPlainObject(yml.distributable)) { - stripComponents = flatmap(yml.distributable["strip-components"], coerceNumber) - } - - urlstr = moustaches.apply(urlstr, [ - ...moustaches.tokenize.version(pkg.version), - ...moustaches.tokenize.host() - ]) - - const url = new URL(urlstr) - - return { url, ref: undefined, stripComponents, type: 'url' } + return; } // deno-lint-ignore no-explicit-any From 9ff834ac4a3229eb9a28160f53dd29b1a1223f44 Mon Sep 17 00:00:00 2001 From: Rajdeep Malakar Date: Wed, 13 Dec 2023 22:58:48 +0530 Subject: [PATCH 2/4] typo --- lib/hooks/usePantry.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/hooks/usePantry.ts b/lib/hooks/usePantry.ts index c4145e21..40b4b157 100644 --- a/lib/hooks/usePantry.ts +++ b/lib/hooks/usePantry.ts @@ -121,7 +121,7 @@ const getDistributable = async (pkg: Package) => { new RegExp(dist.rewrite["match"], "gi"), dist.rewrite["with"], ) - Object.assign(v, { raw: new_v }) + Object.assign(v, { raw: v_raw }) } if (dist.if) { From 1b8623e03fe50366fcec63fda85ab820bd9281d8 Mon Sep 17 00:00:00 2001 From: Max Howell Date: Wed, 13 Dec 2023 12:35:38 -0500 Subject: [PATCH 3/4] Add a fixture for multiple distributables --- bin/cmd/edit | 18 +++++++++--------- projects/toolchain.com/package.yml | 5 +++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/bin/cmd/edit b/bin/cmd/edit index a96b17c1..7a3458ac 100755 --- a/bin/cmd/edit +++ b/bin/cmd/edit @@ -2,12 +2,14 @@ set -eo pipefail +d="$(cd "$(dirname "$0")" && pwd)" + if test -z "$1"; then if test -z "$PKGX_PANTRY_PATH"; then echo "error: PKGX_PANTRY_PATH is not set" >&2 exit 1 fi - d="$(cd "$(dirname "$0")" && pwd)" + for x in $(echo "$PKGX_PANTRY_PATH" | tr ':' '\n'); do if test -z "$PKGS" -a -d "$x"/.git; then #^^^^^^^^^^^^^^^ stop at first match @@ -15,16 +17,14 @@ if test -z "$1"; then fi done else - PKGS=($(deno run --allow-read --allow-env - < hooks.usePantry().find(arg).then(x => x.map(y => y.path.string))); const paths = await Promise.all(pp); - console.log(paths.flatMap(x => x).join("\n")); + console.log(paths.flat().map(x => x.replaceAll(" ", "\\\\ ")).join("\n")); Deno.exit(0); EoTS - )) - - echo "${PKGS[@]}" + )" fi if test -z "$EDITOR"; then @@ -53,9 +53,9 @@ if test -z "$PKGS"; then echo "usage: bk edit " >&2 fi exit 1 -elif test "$EDITOR" = code; then - exec $EDITOR "$PKGX_PANTRY_PATH" "${PKGS[@]}" +elif test "$EDITOR" = code -a -n "$PKGX_PANTRY_PATH"; then + exec $EDITOR "$PKGX_PANTRY_PATH" ${PKGS[@]} # ^^ be more useful else - exec $EDITOR "${PKGS[@]}" + exec $EDITOR ${PKGS} fi diff --git a/projects/toolchain.com/package.yml b/projects/toolchain.com/package.yml index 2007f864..c8e255fd 100644 --- a/projects/toolchain.com/package.yml +++ b/projects/toolchain.com/package.yml @@ -1,6 +1,7 @@ distributable: - url: https://github.com/pkgxdev/brewkit/archive/refs/tags/v{{ version }}.tar.gz - strip-components: 1 + - url: https://FAILURE.DOT.COM + - url: https://github.com/pkgxdev/brewkit/archive/refs/tags/v{{ version }}.tar.gz + strip-components: 1 versions: github: pkgxdev/brewkit From 55a94df12c7e139460bf4f85aba1cef87ea0e4f0 Mon Sep 17 00:00:00 2001 From: Rajdeep Malakar Date: Wed, 13 Dec 2023 23:33:33 +0530 Subject: [PATCH 4/4] fix --- lib/hooks/usePantry.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/hooks/usePantry.ts b/lib/hooks/usePantry.ts index 40b4b157..329798b3 100644 --- a/lib/hooks/usePantry.ts +++ b/lib/hooks/usePantry.ts @@ -135,13 +135,17 @@ const getDistributable = async (pkg: Package) => { ...moustaches.tokenize.host(), ]) - const rsp = await fetch(urlstr, { method: "HEAD" }) - - if (rsp.status == 200) { - const url = new URL(urlstr) - return { url, ref: undefined, stripComponents, type: "url" } - } else { - console.warn(`brewkit: Could not fetch ${urlstr} [${rsp.status}]`) + try { + const rsp = await fetch(urlstr, { method: "HEAD" }) + + if (rsp.status == 200) { + const url = new URL(urlstr) + return { url, ref: undefined, stripComponents, type: "url" } + } else { + console.warn(`brewkit: Could not fetch ${urlstr} [${rsp.status}]`) + } + } catch (err) { + console.warn(`brewkit: Could not fetch ${urlstr}\nError: ${err}`) } } return;