The shell variable `$REPO_URL` was often set to `https://github.com/ioccc-src/temp-test-ioccc/blob/master` which was not consistent with the variable name. In some cases the `$REPO_URL` was used as the top level path for a git repo (w/o the `/blob/master`), and in most cases was used as a GitHub URL path under which files may be found (with `/blob/master`). We change the shell variable `$REPO_URL` to be `$REPO_TOP_URL` and use the value `https://github.com/ioccc-src/temp-test-ioccc`, w/o the `/blob/master`, and adjust places where the GitHub URL path (with `/blob/master`) is needed. A new shell variable `$REPO_URL` will contain the `https://github.com/ioccc-src/temp-test-ioccc/blob/master` (with `/blob/master`). In tools that use `-u` the option was changed from `repo_url` to `repo_top_url`. The `-u repo_top_url` will set the `$REPO_TOP_URL` shell variable (w/o the `/blob/master`), and then set the variable `$REPO_URL` as `$REPO_TOP_URL//blob/master`. Fixed a shellcheck issue with `bin/tar-entry.sh`. Corrected name of shell variable `$AUTHOR_GUTHUB_USERNAME` to be `$AUTHOR_GITHUB_USERNAME`. The substitution symbol `%%REPO_URL%%` has used in markdown files remains as before. That is, REPO_URL is set according to the shell variable `$REPO_URL` which includes `/blob/master`). Fixed broken `author_handle` links in `authors.html`. NOTE: Except for correcting links `authors.html` as noted above, no HTML content was modified by these changes. Changed `bin/add-dir.sh`VERSION from "1.1 2024-07-23" to "1.1.1 2024-07-28". Changed `bin/all-run.sh`VERSION from "1.3.4 2024-05-24" to "1.3.5 2024-07-28". Changed `bin/all-years.sh`VERSION from "1.0.3 2024-04-13" to "1.0.4 2024-07-28". Changed `bin/chk-entry.sh`VERSION from "1.1.8 2024-07-06" to "1.1.9 2024-07-28". Changed `bin/cvt-submission.sh`VERSION from "1.0 2024-07-22" to "1.0.1 2024-07-28". Changed `bin/gen-authors.sh`VERSION from "1.10.4 2024-07-13" to "1.10.5 2024-07-28". Changed `bin/gen-location.sh`VERSION from "1.4.3 2024-07-13" to "1.4.4 2024-07-28". Changed `bin/gen-other-html.sh`VERSION from "1.2.4 2024-05-31" to "1.2.5 2024-07-28". Changed `bin/gen-sitemap.sh`VERSION from "1.3.11 2024-07-22" to "1.3.12 2024-07-28". Changed `bin/gen-status.sh`VERSION from "1.5.6 2024-07-22" to "1.5.7 2024-07-28". Changed `bin/gen-top-html.sh`VERSION from "1.4.6 2024-05-24" to "1.4.7 2024-07-28". Changed `bin/gen-year-index.sh`VERSION from "1.1 2024-04-16" to "1.1.1 2024-07-28". Changed `bin/gen-years.sh`VERSION from "1.3.5 2024-07-22" to "1.3.6 2024-07-28". Changed `bin/md2html.sh`VERSION from "1.5.3 2024-07-22" to "1.5.4 2024-07-28". Changed `bin/new-year.sh`VERSION from "1.3.1 2024-07-23" to "1.3.2 2024-07-28". Changed `bin/output-index-author.sh`VERSION from "1.7.1 2024-04-28" to "1.7.2 2024-07-28". Changed `bin/output-index-inventory.sh`VERSION from "1.4.1 2024-04-28" to "1.4.2 2024-07-28". Changed `bin/output-year-index.sh`VERSION from "1.4.2 2024-07-07" to "1.4.3 2024-07-28". Changed `bin/pandoc-wrapper.sh`VERSION from "1.7 2024-06-22" to "1.7.1 2024-07-28". Changed `bin/quick-readme2index.sh`VERSION from "1.1.5 2024-05-19" to "1.1.6 2024-07-28". Changed `bin/readme2index.sh`VERSION from "1.2.5 2024-05-19" to "1.2.6 2024-07-28". Changed `bin/sort.gitignore.sh`VERSION from "1.1.7 2024-04-28" to "1.1.8 2024-07-28". Changed `bin/status2html.sh`VERSION from "1.4.1 2024-04-28" to "1.4.2 2024-07-28". Changed `bin/subst.default.sh`VERSION from "1.3 2024-04-20" to "1.3.1 2024-07-28". Changed `bin/subst.entry-index.sh`VERSION from "1.3.3 2024-04-13" to "1.3.4 2024-07-28". Changed `bin/subst.year-index.sh`VERSION from "1.1.3 2024-04-13" to "1.1.4 2024-07-28". Changed `bin/tar-entry.sh`VERSION from "1.3.8 2024-07-23" to "1.3.9 2024-07-28". Changed `bin/tar-year.sh`VERSION from "1.2.6 2024-07-23" to "1.2.7 2024-07-28". Changed `bin/untar-entry.sh`VERSION from "1.0.2 2024-04-13" to "1.0.3 2024-07-28". Changed `bin/untar-year.sh`VERSION from "1.0.2 2024-04-14" to "1.0.3 2024-07-28". Performed `make www` to accomplish the above and to test under macOS.
434 lines
13 KiB
Awk
Executable File
434 lines
13 KiB
Awk
Executable File
#!/usr/bin/env awk
|
|
#
|
|
# manifest.entry.json.awk - output manifest table from a entry's .entry.json file
|
|
#
|
|
# usage:
|
|
#
|
|
# awk -v github=REPO_URL -f bin/manifest.entry.json.awk YYYY/dir/.entry.json
|
|
#
|
|
# where:
|
|
#
|
|
# YYYY IOCCC year or mock
|
|
# dir name of entry's directory under YYYY containing .entry.json
|
|
# REPO_URL GitHub repo URL, e.g., https://github.com/ioccc-src/winner/blob/master/blob/master
|
|
# We append blob/master to account for how GitHub forms file URLs.
|
|
|
|
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
|
|
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
|
|
# XXX - until we have the jnamval command, we must FAKE PARSE the .entry.json file - XXX
|
|
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
|
|
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
|
|
|
|
BEGIN {
|
|
|
|
# setup
|
|
#
|
|
VERSION="1.1.2 2024-07-28"
|
|
found_manifest_array = 0; # 1 ==> we found the manifest ARRAY
|
|
within_manifest_array = 0; # 1 ==> found start of "manifest" : [ JSON array
|
|
begin_manifest_element = 0; # 1 ==> we have found the start of the manifest array element
|
|
|
|
# error if github is not set via -v github=REPO_URL
|
|
#
|
|
if (length(github) == 0) {
|
|
exit 210; # END section will output ERROR message about github not set
|
|
}
|
|
|
|
# extract YYYY and dir from file argument
|
|
#
|
|
YYYY = "";
|
|
dir = "";
|
|
tmp = ARGV[1];
|
|
gsub(/\.entry\.json$/, "", tmp);
|
|
arg_path_count = split(tmp, part, "/");
|
|
if (arg_path_count >= 2) {
|
|
dir=part[arg_path_count-1];
|
|
YYYY=part[arg_path_count-2];
|
|
}
|
|
if (length(dir) == 0) {
|
|
exit 211; # END section will output ERROR message about cannot find dir
|
|
}
|
|
if (length(YYYY) == 0) {
|
|
exit 212; # END section will output ERROR message about cannot find YYYY
|
|
}
|
|
}
|
|
|
|
# look for the start of "manifest" JSON array
|
|
#
|
|
# We look for a line with 3 tokens:
|
|
#
|
|
# "manifest" : [
|
|
#
|
|
NF == 3 && $1 ~ /^"manifest"$/ && $2 ~ /^:$/ && $3 ~ /^\[$/ {
|
|
|
|
# note we have found the start of "manifest" JSON array
|
|
#
|
|
found_manifest_array = 1;
|
|
within_manifest_array = 1;
|
|
begin_manifest_element = 0;
|
|
}
|
|
|
|
# after start of "manifest" JSON array, process start of a manifest array element
|
|
#
|
|
# We have just seen the start of "manifest" JSON array:
|
|
#
|
|
# "manifest" : [
|
|
#
|
|
# Now, when we see a line of this form:
|
|
#
|
|
# {
|
|
#
|
|
# we know that we are about to see the start of one of the manifest array elements.
|
|
#
|
|
within_manifest_array == 1 && NF == 1 && $1 ~ /^{$/ {
|
|
|
|
# note the start of the manifest array element
|
|
#
|
|
begin_manifest_element = 1;
|
|
|
|
# clear values for the JSON members of this manifest array elements
|
|
#
|
|
file_path = "";
|
|
inventory_order = "";
|
|
OK_to_edit = "";
|
|
display_as = "";
|
|
display_via_github = "";
|
|
entry_text = "";
|
|
|
|
# clear unquoted values for the JSON members of this manifest array elements
|
|
#
|
|
unquote_file_path = "";
|
|
unquote_inventory_order = "";
|
|
unquote_OK_to_edit = "";
|
|
unquote_display_as = "";
|
|
unquote_display_via_github = "";
|
|
unquote_entry_text = "";
|
|
}
|
|
|
|
# record file_path from an manifest array element
|
|
#
|
|
# We are looking for a JSON member line of the form:
|
|
#
|
|
# "file_path" : something,
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF >= 3 && $1 ~ /^"file_path"$/ && $2 ~ /^:$/ {
|
|
|
|
# save JSON member value
|
|
#
|
|
# The JSON member value starts after the 1st and 2nd fields.
|
|
# We remove any leading leading whitespace, such as the FS
|
|
# between the 1st and 2nd fields, and between the 2nd and 3rd field.
|
|
#
|
|
$1 = ""; # remove 1st field
|
|
$2 = ""; # remove 2nd field
|
|
gsub(/^[[:space:]]+/, "", $0); # any leading whitespace
|
|
file_path = $0;
|
|
|
|
# Remove any trailing ,
|
|
#
|
|
if (file_path ~ /,$/) {
|
|
file_path = substr(file_path, 1, length(file_path)-1);
|
|
}
|
|
|
|
# remove any enclosing double quotes
|
|
#
|
|
if (file_path ~ /^".*"$/) {
|
|
unquote_file_path = substr(file_path, 2, length(file_path)-2);
|
|
} else {
|
|
unquote_file_path = file_path;
|
|
}
|
|
}
|
|
|
|
# record inventory_order from an manifest array element
|
|
#
|
|
# We are looking for a JSON member line of the form:
|
|
#
|
|
# "inventory_order" : something,
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF >= 3 && $1 ~ /^"inventory_order"$/ && $2 ~ /^:$/ {
|
|
|
|
# save JSON member value
|
|
#
|
|
# The JSON member value starts after the 1st and 2nd fields.
|
|
# We remove any leading leading whitespace, such as the FS
|
|
# between the 1st and 2nd fields, and between the 2nd and 3rd field.
|
|
#
|
|
$1 = ""; # remove 1st field
|
|
$2 = ""; # remove 2nd field
|
|
gsub(/^[[:space:]]+/, "", $0); # any leading whitespace
|
|
inventory_order = $0;
|
|
|
|
# Remove any trailing ,
|
|
#
|
|
if (inventory_order ~ /,$/) {
|
|
inventory_order = substr(inventory_order, 1, length(inventory_order)-1);
|
|
}
|
|
|
|
# remove any enclosing double quotes
|
|
#
|
|
if (inventory_order ~ /^".*"$/) {
|
|
unquote_inventory_order = substr(inventory_order, 2, length(inventory_order)-2);
|
|
} else {
|
|
unquote_inventory_order = inventory_order;
|
|
}
|
|
}
|
|
|
|
# record OK_to_edit from an manifest array element
|
|
#
|
|
# We are looking for a JSON member line of the form:
|
|
#
|
|
# "OK_to_edit" : something,
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF >= 3 && $1 ~ /^"OK_to_edit"$/ && $2 ~ /^:$/ {
|
|
|
|
# save JSON member value
|
|
#
|
|
# The JSON member value starts after the 1st and 2nd fields.
|
|
# We remove any leading leading whitespace, such as the FS
|
|
# between the 1st and 2nd fields, and between the 2nd and 3rd field.
|
|
#
|
|
$1 = ""; # remove 1st field
|
|
$2 = ""; # remove 2nd field
|
|
gsub(/^[[:space:]]+/, "", $0); # any leading whitespace
|
|
OK_to_edit = $0;
|
|
|
|
# Remove any trailing ,
|
|
#
|
|
if (OK_to_edit ~ /,$/) {
|
|
OK_to_edit = substr(OK_to_edit, 1, length(OK_to_edit)-1);
|
|
}
|
|
|
|
# remove any enclosing double quotes
|
|
#
|
|
if (OK_to_edit ~ /^".*"$/) {
|
|
unquote_OK_to_edit = substr(OK_to_edit, 2, length(OK_to_edit)-2);
|
|
} else {
|
|
unquote_OK_to_edit = OK_to_edit;
|
|
}
|
|
}
|
|
|
|
# record display_as from an manifest array element
|
|
#
|
|
# We are looking for a JSON member line of the form:
|
|
#
|
|
# "display_as" : something,
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF >= 3 && $1 ~ /^"display_as"$/ && $2 ~ /^:$/ {
|
|
|
|
# save JSON member value
|
|
#
|
|
# The JSON member value starts after the 1st and 2nd fields.
|
|
# We remove any leading leading whitespace, such as the FS
|
|
# between the 1st and 2nd fields, and between the 2nd and 3rd field.
|
|
#
|
|
$1 = ""; # remove 1st field
|
|
$2 = ""; # remove 2nd field
|
|
gsub(/^[[:space:]]+/, "", $0); # any leading whitespace
|
|
display_as = $0;
|
|
|
|
# Remove any trailing ,
|
|
#
|
|
if (display_as ~ /,$/) {
|
|
display_as = substr(display_as, 1, length(display_as)-1);
|
|
}
|
|
|
|
# remove any enclosing double quotes
|
|
#
|
|
if (display_as ~ /^".*"$/) {
|
|
unquote_display_as = substr(display_as, 2, length(display_as)-2);
|
|
} else {
|
|
unquote_display_as = display_as;
|
|
}
|
|
}
|
|
|
|
# record display_via_github from an manifest array element
|
|
#
|
|
# We are looking for a JSON member line of the form:
|
|
#
|
|
# "display_via_github" : something,
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF >= 3 && $1 ~ /^"display_via_github"$/ && $2 ~ /^:$/ {
|
|
|
|
# save JSON member value
|
|
#
|
|
# The JSON member value starts after the 1st and 2nd fields.
|
|
# We remove any leading leading whitespace, such as the FS
|
|
# between the 1st and 2nd fields, and between the 2nd and 3rd field.
|
|
#
|
|
$1 = ""; # remove 1st field
|
|
$2 = ""; # remove 2nd field
|
|
gsub(/^[[:space:]]+/, "", $0); # any leading whitespace
|
|
display_via_github = $0;
|
|
|
|
# Remove any trailing ,
|
|
#
|
|
if (display_via_github ~ /,$/) {
|
|
display_via_github = substr(display_via_github, 1, length(display_via_github)-1);
|
|
}
|
|
|
|
# remove any enclosing double quotes
|
|
#
|
|
if (display_via_github ~ /^".*"$/) {
|
|
unquote_display_via_github = substr(display_via_github, 2, length(display_via_github)-2);
|
|
} else {
|
|
unquote_display_via_github = display_via_github;
|
|
}
|
|
}
|
|
|
|
# record entry_text from an manifest array element
|
|
#
|
|
# We are looking for a JSON member line of the form:
|
|
#
|
|
# "entry_text" : something
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF >= 3 && $1 ~ /^"entry_text"$/ && $2 ~ /^:$/ {
|
|
|
|
# save JSON member value
|
|
#
|
|
# The JSON member value starts after the 1st and 2nd fields.
|
|
# We remove any leading leading whitespace, such as the FS
|
|
# between the 1st and 2nd fields, and between the 2nd and 3rd field.
|
|
#
|
|
$1 = ""; # remove 1st field
|
|
$2 = ""; # remove 2nd field
|
|
gsub(/^[[:space:]]+/, "", $0); # any leading whitespace
|
|
entry_text = $0;
|
|
|
|
# Remove any trailing ,
|
|
#
|
|
if (entry_text ~ /,$/) {
|
|
entry_text = substr(entry_text, 1, length(entry_text)-1);
|
|
}
|
|
|
|
# remove any enclosing double quotes
|
|
#
|
|
if (entry_text ~ /^".*"$/) {
|
|
unquote_entry_text = substr(entry_text, 2, length(entry_text)-2);
|
|
} else {
|
|
unquote_entry_text = entry_text;
|
|
}
|
|
}
|
|
|
|
# process end of manifest array element
|
|
#
|
|
within_manifest_array == 1 && begin_manifest_element == 1 && NF == 1 && $1 ~ /^},?$/ {
|
|
|
|
# verify we have seen a file_path JSON member
|
|
#
|
|
if (length(file_path) == 0) {
|
|
print "ERROR: manifest array JSON member did not have a file_path JSON member in:", ARGV[1] > "/dev/stderr";
|
|
exit 213;
|
|
}
|
|
|
|
# verify we have seen a inventory_order JSON member
|
|
#
|
|
if (length(inventory_order) == 0) {
|
|
print "ERROR: manifest array JSON member did not have a inventory_order JSON member in:", ARGV[1] > "/dev/stderr";
|
|
exit 214;
|
|
}
|
|
|
|
# verify we have seen a OK_to_edit JSON member
|
|
#
|
|
if (length(OK_to_edit) == 0) {
|
|
print "ERROR: manifest array JSON member did not have a OK_to_edit JSON member in:", ARGV[1] > "/dev/stderr";
|
|
exit 215;
|
|
}
|
|
|
|
# verify we have seen a display_as JSON member
|
|
#
|
|
if (length(display_as) == 0) {
|
|
print "ERROR: manifest array JSON member did not have a display_as JSON member in:", ARGV[1] > "/dev/stderr";
|
|
exit 216;
|
|
}
|
|
|
|
# verify we have seen a display_via_github JSON member
|
|
#
|
|
if (length(display_via_github) == 0) {
|
|
print "ERROR: manifest array JSON member did not have a display_via_github JSON member in:", ARGV[1] > "/dev/stderr";
|
|
exit 217;
|
|
}
|
|
|
|
# verify we have seen a entry_text JSON member
|
|
#
|
|
if (length(entry_text) == 0) {
|
|
print "ERROR: manifest array JSON member did not have a entry_text JSON member in:", ARGV[1] > "/dev/stderr";
|
|
exit 218;
|
|
}
|
|
|
|
# print manifest information
|
|
#
|
|
# print "# debug: file_path:", file_path;
|
|
# print "# debug: inventory_order:", inventory_order;
|
|
# print "# debug: OK_to_edit:", OK_to_edit;
|
|
# print "# debug: display_as:", display_as;
|
|
# print "# debug: display_via_github:", display_via_github;
|
|
# print "# debug: entry_text:", entry_text;
|
|
#
|
|
# print "# debug: unquote_file_path:", unquote_file_path;
|
|
# print "# debug: unquote_inventory_order:", unquote_inventory_order;
|
|
# print "# debug: unquote_OK_to_edit:", unquote_OK_to_edit;
|
|
# print "# debug: unquote_display_as:", unquote_display_as;
|
|
# print "# debug: unquote_display_via_github:", unquote_display_via_github;
|
|
# print "# debug: unquote_entry_text:", unquote_entry_text;
|
|
#
|
|
if (unquote_display_via_github == "false") {
|
|
url = unquote_file_path;
|
|
} else {
|
|
url = github "/" YYYY "/" dir "/" unquote_file_path;
|
|
}
|
|
print inventory_order, "* [" unquote_file_path "](" url ") -", unquote_entry_text;
|
|
|
|
# note the end of the manifest array element
|
|
#
|
|
begin_manifest_element = 0;
|
|
|
|
# note if we found the end of the manifest array
|
|
#
|
|
if ($1 ~ /^}$/) {
|
|
within_manifest_array = 0;
|
|
}
|
|
}
|
|
|
|
END {
|
|
|
|
# case: we quit due to github unset
|
|
#
|
|
if (length(github) == 0) {
|
|
print "ERROR: github variable not set, call with -v github=REPO_URL" > "/dev/stderr";
|
|
exit 219; # use 200 to match exit code from BEGIN
|
|
}
|
|
|
|
# case: we quit because we could not determine dir from ARGV[1]
|
|
#
|
|
if (length(dir) == 0) {
|
|
print "ERROR: cannot determine dir from:", ARGV[1] > "/dev/stderr";
|
|
exit 220; # END section will output ERROR message about cannot find dir
|
|
}
|
|
|
|
if (length(YYYY) == 0) {
|
|
print "ERROR: cannot determine YYYY from:", ARGV[1] > "/dev/stderr";
|
|
exit 221; # END section will output ERROR message about cannot find YYYY
|
|
}
|
|
|
|
# case: no manifest array was found
|
|
#
|
|
if (!found_manifest_array) {
|
|
print "ERROR: we did not find a manifest JSON array in:", ARGV[1] > "/dev/stderr";
|
|
exit 222;
|
|
}
|
|
|
|
# case: manifest array was found, but manifest array element did not finish
|
|
#
|
|
if (begin_manifest_element) {
|
|
print "ERROR: manifest JSON array element did not end in:", ARGV[1] > "/dev/stderr";
|
|
exit 223;
|
|
}
|
|
|
|
# case: manifest array did not end
|
|
#
|
|
if (within_manifest_array) {
|
|
print "ERROR: manifest JSON array did not end in:", ARGV[1] > "/dev/stderr";
|
|
exit 224;
|
|
}
|
|
}
|