From 849771c682905859f57d5c0a73dff421a88efc6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Daniel=20Colmenares=20Oviedo?= Date: Thu, 14 Mar 2024 20:51:19 -0400 Subject: sysutils/gh-md-toc: Update to 0.10.0 ChangeLog: https://github.com/ekalinin/github-markdown-toc/releases/tag/0.10.0 * Update for a new GH HTML layout PR: 276219 --- sysutils/gh-md-toc/Makefile | 7 +- sysutils/gh-md-toc/distinfo | 6 +- sysutils/gh-md-toc/files/patch-gh-md-toc | 251 +++++++++++++++++++++++++------ 3 files changed, 211 insertions(+), 53 deletions(-) diff --git a/sysutils/gh-md-toc/Makefile b/sysutils/gh-md-toc/Makefile index 6c4ba85a795d..aa18724b6d97 100644 --- a/sysutils/gh-md-toc/Makefile +++ b/sysutils/gh-md-toc/Makefile @@ -1,5 +1,5 @@ PORTNAME= gh-md-toc -DISTVERSION= 0.8.0 +DISTVERSION= 0.10.0 CATEGORIES= sysutils MAINTAINER= DtxdF@disroot.org @@ -9,7 +9,8 @@ WWW= https://github.com/ekalinin/github-markdown-toc LICENSE= MIT LICENSE_FILE= ${WRKSRC}/LICENSE -RUN_DEPENDS= curl>0:ftp/curl +RUN_DEPENDS= curl>0:ftp/curl \ + jq>0:textproc/jq USE_GITHUB= yes GH_ACCOUNT= ekalinin @@ -21,7 +22,7 @@ PLIST_FILES= bin/gh-md-toc PORTDOCS= README.md -OPTIONS_DEFINE= DOCS +OPTIONS_DEFINE= DOCS do-install: ${INSTALL_SCRIPT} ${WRKSRC}/gh-md-toc ${STAGEDIR}${PREFIX}/bin diff --git a/sysutils/gh-md-toc/distinfo b/sysutils/gh-md-toc/distinfo index 16f7fc92da8d..1ed73e90898b 100644 --- a/sysutils/gh-md-toc/distinfo +++ b/sysutils/gh-md-toc/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1687043066 -SHA256 (ekalinin-github-markdown-toc-0.8.0_GH0.tar.gz) = 7f6079026a32c03d6e7254e5921b94f6802c2d52c9d74d85a1f8015d864b58d0 -SIZE (ekalinin-github-markdown-toc-0.8.0_GH0.tar.gz) = 10927 +TIMESTAMP = 1710461706 +SHA256 (ekalinin-github-markdown-toc-0.10.0_GH0.tar.gz) = d123d360b76e0ba97974cb32fb386905612d6b0ebb0a018161056062d9b44023 +SIZE (ekalinin-github-markdown-toc-0.10.0_GH0.tar.gz) = 24032 diff --git a/sysutils/gh-md-toc/files/patch-gh-md-toc b/sysutils/gh-md-toc/files/patch-gh-md-toc index ac4e37045b34..c2c5213ec763 100644 --- a/sysutils/gh-md-toc/files/patch-gh-md-toc +++ b/sysutils/gh-md-toc/files/patch-gh-md-toc @@ -1,4 +1,4 @@ ---- gh-md-toc.orig 2023-06-30 18:59:15 UTC +--- gh-md-toc.orig 2024-03-03 10:54:38 UTC +++ gh-md-toc @@ -1,4 +1,4 @@ -#!/usr/bin/env bash @@ -6,22 +6,23 @@ # # Steps: -@@ -34,12 +34,10 @@ gh_user_agent="gh-md-toc v$gh_toc_version" +@@ -34,12 +34,10 @@ gh_toc_load() { gh_toc_load() { local gh_url=$1 - if type curl &>/dev/null; then -+ if type curl > /dev/null 2>&1; then - curl --user-agent "$gh_user_agent" -s "$gh_url" +- curl --user-agent "$gh_user_agent" -s "$gh_url" - elif type wget &>/dev/null; then - wget --user-agent="$gh_user_agent" -qO- "$gh_url" ++ if type curl > /dev/null 2>&1; then ++ curl --location --fail --user-agent "$gh_user_agent" -s "$gh_url" else - echo "Please, install 'curl' or 'wget' and try again." + echo "Please, install 'curl' and try again." exit 1 fi } -@@ -56,7 +54,7 @@ gh_toc_md2html() { +@@ -58,7 +56,7 @@ gh_toc_md2html() { if [ ! -z "$GH_TOC_TOKEN" ]; then TOKEN=$GH_TOC_TOKEN else @@ -30,65 +31,221 @@ if [ -f "$TOKEN_FILE" ]; then TOKEN="$(cat $TOKEN_FILE)" fi -@@ -124,12 +122,14 @@ gh_toc(){ +@@ -109,6 +107,15 @@ gh_is_url() { + esac + } + ++gh_is_invalid_url() { ++ local gh_hostname="github.com" ++ ++ case $1 in ++ https://${gh_hostname}/* | http://${gh_hostname}/* ) return 0 ;; ++ *) return 1 ;; ++ esac ++} ++ + # + # TOC generator + # +@@ -139,75 +146,112 @@ gh_toc(){ fi if [ "$(gh_is_url "$gh_src")" == "yes" ]; then -- gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy" +- gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy" "$indent" - if [ "${PIPESTATUS[0]}" != "0" ]; then -+ local gh_content -+ gh_content=`gh_toc_load "$gh_src"` ++ if ! which -s "jq"; then ++ echo "Please, install 'jq' and try again." ++ exit 1 ++ fi ++ ++ if ! gh_is_invalid_url "${gh_src}"; then ++ echo "It looks like an invalid URL." ++ echo "Note that valid URLs are, for example, \"https://github.com//\"." ++ exit 1 ++ fi ++ ++ local account repo ++ ++ account=$(echo -n "${gh_src}" | sed -Ee 's#https?://github\.com/([^/]+).+#\1#') ++ repo=$(echo -n "${gh_src}" | sed -Ee 's#https?://github\.com/[^/]+/([^/]+)/?.*#\1#') ++ ++ local gh_content ++ gh_content=$(gh_toc_load "${gh_src}") + if [ $? -ne 0 ]; then echo "Could not load remote document." echo "Please check your url or network connectivity" exit 1 fi -+ printf "%s\n" "$gh_content" | gh_toc_grab "$gh_src_copy" ++ if [ "$need_replace" = "yes" ]; then echo echo "!! '$gh_src' is not a local file" -@@ -146,7 +146,7 @@ gh_toc(){ - if [ "$rawhtml" == "XXRateLimitXX" ]; then - echo "Parsing local markdown file requires access to github API" - echo "Error: You exceeded the hourly limit. See: https://developer.github.com/v3/#rate-limiting" -- TOKEN_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt" -+ TOKEN_FILE="$(cd "$(dirname "$0")" && pwd)/token.txt" - echo "or place GitHub auth token here: ${TOKEN_FILE}" - exit 1 + echo "!! Can't insert the TOC into it." + echo ++ exit 1 + fi +- else +- local rawhtml=$(gh_toc_md2html "$gh_src" "$skip_header") +- if [ "$rawhtml" == "XXNetworkErrorXX" ]; then +- echo "Parsing local markdown file requires access to github API" +- echo "Please make sure curl is installed and check your network connectivity" +- exit 1 ++ ++ local json_file ++ json_file=$(mktemp -t gh-md-toc) ++ printf "%s\n" "${gh_content}" | grep defaultBranch | sed -Ee 's##\1#' > "${json_file}" ++ ++ local refName path ++ ++ refName=$(cat "${json_file}" | jq --raw-output '.props.initialPayload.overview.overviewFiles.[] | select(.preferredFileType == "readme") | .refName' 2> /dev/null) ++ path=$(cat "${json_file}" | jq --raw-output '.props.initialPayload.overview.overviewFiles.[] | select(.preferredFileType == "readme") | .path' 2> /dev/null) ++ ++ gh_src=$(mktemp -t gh-md-toc) ++ ++ gh_content=`gh_toc_load "https://raw.githubusercontent.com/${account}/${repo}/${refName}/${path}"` ++ if [ $? -ne 0 ]; then ++ echo "Could not load remote document." ++ echo "Please check your url or network connectivity" ++ exit 1 fi -@@ -175,11 +175,7 @@ gh_toc(){ - fi +- if [ "$rawhtml" == "XXRateLimitXX" ]; then +- echo "Parsing local markdown file requires access to github API" +- echo "Error: You exceeded the hourly limit. See: https://developer.github.com/v3/#rate-limiting" +- TOKEN_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt" +- echo "or place GitHub auth token here: ${TOKEN_FILE}" +- exit 1 +- fi +- local toc=`echo "$rawhtml" | gh_toc_grab "$gh_src_copy" "$indent"` +- echo "$toc" +- if [ "$need_replace" = "yes" ]; then +- if grep -Fxq "" "$gh_src" && grep -Fxq "" "$gh_src"; then +- echo "Found markers" +- else +- echo "You don't have or in your file...exiting" +- exit 1 +- fi +- local ts="<\!--ts-->" +- local te="<\!--te-->" +- local dt=`date +'%F_%H%M%S'` +- local ext=".orig.${dt}" +- local toc_path="${gh_src}.toc.${dt}" +- local toc_createdby="" +- local toc_footer="" +- # http://fahdshariff.blogspot.ru/2012/12/sed-mutli-line-replacement-between-two.html +- # clear old TOC +- sed -i${ext} "/${ts}/,/${te}/{//!d;}" "$gh_src" +- # create toc file +- echo "${toc}" > "${toc_path}" +- if [ "${no_footer}" != "yes" ]; then +- echo -e "\n${toc_createdby}\n${toc_footer}\n" >> "$toc_path" +- fi - # insert toc file -- if [[ "`uname`" == "Darwin" ]]; then +- # insert toc file +- if ! sed --version > /dev/null 2>&1; then - sed -i "" "/${ts}/r ${toc_path}" "$gh_src" - else - sed -i "/${ts}/r ${toc_path}" "$gh_src" - fi -+ sed -i "" "/${ts}/r ${toc_path}" "$gh_src" - echo - if [ "${no_backup}" = "yes" ]; then - rm ${toc_path} ${gh_src}${ext} -@@ -296,14 +292,18 @@ gh_toc_app() { - if [ "$1" = '--version' ]; then - echo "$gh_toc_version" - echo -- echo "os: `lsb_release -d | cut -f 2`" -- echo "kernel: `cat /proc/version`" -- echo "shell: `$SHELL --version`" -+ echo "os: `uname -rs`" -+ echo "kernel: `uname -K`" -+ echo "shell: $SHELL" - echo -- for tool in curl wget grep awk sed; do -+ for tool in grep awk; do - printf "%-5s: " $tool - echo `$tool --version | head -n 1` - done -+ printf "%-5s: " sed -+ echo "sed (BSD sed)" -+ printf "%-5s: " fetch -+ echo "fetch (BSD fetch)" - return +- echo +- if [ "${no_backup}" = "yes" ]; then +- rm "$toc_path" "$gh_src$ext" +- fi +- echo "!! TOC was added into: '$gh_src'" +- if [ -z "${no_backup}" ]; then +- echo "!! Origin version of the file: '${gh_src}${ext}'" +- echo "!! TOC added into a separate file: '${toc_path}'" ++ printf "%s\n" "${gh_content}" > "${gh_src}" ++ ++ rm -f "${json_file}" ++ fi ++ ++ local rawhtml=$(gh_toc_md2html "$gh_src" "$skip_header") ++ if [ "$rawhtml" == "XXNetworkErrorXX" ]; then ++ echo "Parsing local markdown file requires access to github API" ++ echo "Please make sure curl is installed and check your network connectivity" ++ exit 1 ++ fi ++ if [ "$rawhtml" == "XXRateLimitXX" ]; then ++ echo "Parsing local markdown file requires access to github API" ++ echo "Error: You exceeded the hourly limit. See: https://developer.github.com/v3/#rate-limiting" ++ TOKEN_FILE="$(cd "$(dirname "$0}")" && pwd)/token.txt" ++ echo "or place GitHub auth token here: ${TOKEN_FILE}" ++ exit 1 ++ fi ++ local toc=`echo "$rawhtml" | gh_toc_grab "$gh_src_copy" "$indent"` ++ echo "$toc" ++ if [ "$need_replace" = "yes" ]; then ++ if grep -Fxq "" "$gh_src" && grep -Fxq "" "$gh_src"; then ++ echo "Found markers" ++ else ++ echo "You don't have or in your file...exiting" ++ exit 1 + fi +- echo ++ local ts="<\!--ts-->" ++ local te="<\!--te-->" ++ local dt=`date +'%F_%H%M%S'` ++ local ext=".orig.${dt}" ++ local toc_path="${gh_src}.toc.${dt}" ++ local toc_createdby="" ++ local toc_footer="" ++ # http://fahdshariff.blogspot.ru/2012/12/sed-mutli-line-replacement-between-two.html ++ # clear old TOC ++ sed -i${ext} "/${ts}/,/${te}/{//!d;}" "$gh_src" ++ # create toc file ++ echo "${toc}" > "${toc_path}" ++ if [ "${no_footer}" != "yes" ]; then ++ echo -e "\n${toc_createdby}\n${toc_footer}\n" >> "$toc_path" + fi ++ ++ # insert toc file ++ sed -i "" "/${ts}/r ${toc_path}" "$gh_src" ++ echo ++ if [ "${no_backup}" = "yes" ]; then ++ rm "$toc_path" "$gh_src$ext" ++ fi ++ echo "!! TOC was added into: '$gh_src'" ++ if [ -z "${no_backup}" ]; then ++ echo "!! Origin version of the file: '${gh_src}${ext}'" ++ echo "!! TOC added into a separate file: '${toc_path}'" fi ++ echo ++ fi + } + + # +@@ -218,7 +262,6 @@ gh_toc_grab() { + # $2 - number of spaces used to indent. + # + gh_toc_grab() { +- + href_regex="/href=\"[^\"]+?\"/" + common_awk_script=' + modified_href = "" +@@ -298,19 +341,21 @@ show_version() { + show_version() { + echo "$gh_toc_version" + echo +- echo "os: `uname -s`" ++ echo "os: `uname -rs`" + echo "arch: `uname -m`" +- echo "kernel: `uname -r`" +- echo "shell: `$SHELL --version`" ++ echo "kernel: `uname -i`" ++ echo "shell: $SHELL" + echo +- for tool in curl wget grep awk sed; do ++ for tool in curl grep awk jq; do + printf "%-5s: " $tool +- if `type $tool &>/dev/null`; then ++ if type $tool > /dev/null 2>&1; then + echo `$tool --version | head -n 1` + else + echo "not installed" + fi + done ++ printf "%-5s: " sed ++ echo "sed (BSD sed)" + } + show_help() { -- cgit v1.2.3