Some more code and performance optimisations
- Use builtin 'command -v' rather than external 'which'. - The clean_filename() function just removed the initial ./ from a file name; do this with a parameter substitution instead. This gets rid of the need to fork subshells for command substitutions, so is much faster. - Where convenient, replace 'echo ... | sed ...' with fast parameter substitutions.
This commit is contained in:
parent
c683019d7c
commit
7771fab820
1 changed files with 21 additions and 28 deletions
49
bb.sh
49
bb.sh
|
@ -144,7 +144,7 @@ global_variables() {
|
||||||
|
|
||||||
# Markdown location. Trying to autodetect by default.
|
# Markdown location. Trying to autodetect by default.
|
||||||
# The invocation must support the signature 'markdown_bin in.md > out.html'
|
# The invocation must support the signature 'markdown_bin in.md > out.html'
|
||||||
markdown_bin=$(which Markdown.pl || which markdown)
|
markdown_bin=$(command -v Markdown.pl || command -v markdown)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for the validity of some variables
|
# Check for the validity of some variables
|
||||||
|
@ -162,7 +162,7 @@ global_variables_check() {
|
||||||
# Test if the markdown script is working correctly
|
# Test if the markdown script is working correctly
|
||||||
test_markdown() {
|
test_markdown() {
|
||||||
[[ -z $markdown_bin ]] && return 1
|
[[ -z $markdown_bin ]] && return 1
|
||||||
[[ -z $(which diff) ]] && return 1
|
command -v diff >/dev/null || return 1
|
||||||
|
|
||||||
in=/tmp/md-in-${RANDOM}.md
|
in=/tmp/md-in-${RANDOM}.md
|
||||||
out=/tmp/md-out-${RANDOM}.html
|
out=/tmp/md-out-${RANDOM}.html
|
||||||
|
@ -388,7 +388,7 @@ twitter() {
|
||||||
# Return 0 (bash return value 'true') if the input file is an index, feed, etc
|
# Return 0 (bash return value 'true') if the input file is an index, feed, etc
|
||||||
# or 1 (bash return value 'false') if it is a blogpost
|
# or 1 (bash return value 'false') if it is a blogpost
|
||||||
is_boilerplate_file() {
|
is_boilerplate_file() {
|
||||||
name=$(clean_filename "$1")
|
name=${1#./}
|
||||||
case $name in
|
case $name in
|
||||||
( "$index_file" | "$archive_index" | "$tags_index" | "$footer_file" | "$header_file" | "$global_analytics_file" | "$prefix_tags"* )
|
( "$index_file" | "$archive_index" | "$tags_index" | "$footer_file" | "$header_file" | "$global_analytics_file" | "$prefix_tags"* )
|
||||||
return 0 ;;
|
return 0 ;;
|
||||||
|
@ -400,14 +400,6 @@ is_boilerplate_file() {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
# Filenames sometimes have leading './' or other oddities which need to be cleaned
|
|
||||||
#
|
|
||||||
# $1 the file name
|
|
||||||
# returns the clean file name
|
|
||||||
clean_filename() {
|
|
||||||
echo "${1#./}" # Delete leading './'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Adds all the bells and whistles to format the html page
|
# Adds all the bells and whistles to format the html page
|
||||||
# Every blog post is marked with a <!-- entry begin --> and <!-- entry end -->
|
# Every blog post is marked with a <!-- entry begin --> and <!-- entry end -->
|
||||||
# which is parsed afterwards in the other functions. There is also a marker
|
# which is parsed afterwards in the other functions. There is also a marker
|
||||||
|
@ -445,14 +437,16 @@ create_html_page() {
|
||||||
echo '</div></div></div>' # title, header, headerholder
|
echo '</div></div></div>' # title, header, headerholder
|
||||||
echo '<div id="divbody"><div class="content">'
|
echo '<div id="divbody"><div class="content">'
|
||||||
|
|
||||||
file_url=$(clean_filename "$filename")
|
file_url=${filename#./}
|
||||||
file_url=$(sed 's/.rebuilt//g' <<< "$file_url") # Get the correct URL when rebuilding
|
file_url=${file_url%.rebuilt} # Get the correct URL when rebuilding
|
||||||
# one blog entry
|
# one blog entry
|
||||||
if [[ $index == no ]]; then
|
if [[ $index == no ]]; then
|
||||||
echo '<!-- entry begin -->' # marks the beginning of the whole post
|
echo '<!-- entry begin -->' # marks the beginning of the whole post
|
||||||
echo "<h3><a class=\"ablack\" href=\"$file_url\">"
|
echo "<h3><a class=\"ablack\" href=\"$file_url\">"
|
||||||
# remove possible <p>'s on the title because of markdown conversion
|
# remove possible <p>'s on the title because of markdown conversion
|
||||||
echo "$title" | sed 's/<\/*p>//g'
|
title=${title//<p>/}
|
||||||
|
title=${title//<\/p>/}
|
||||||
|
echo "$title"
|
||||||
echo '</a></h3>'
|
echo '</a></h3>'
|
||||||
if [[ -z $timestamp ]]; then
|
if [[ -z $timestamp ]]; then
|
||||||
echo "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format") — "
|
echo "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format") — "
|
||||||
|
@ -684,14 +678,13 @@ all_tags() {
|
||||||
{
|
{
|
||||||
echo "<h3>$template_tags_title</h3>"
|
echo "<h3>$template_tags_title</h3>"
|
||||||
echo "<ul>"
|
echo "<ul>"
|
||||||
for i in ./$prefix_tags*.html; do
|
for i in $prefix_tags*.html; do
|
||||||
[[ -f "$i" ]] || break
|
[[ -f "$i" ]] || break
|
||||||
echo -n "." 1>&3
|
echo -n "." 1>&3
|
||||||
nposts=$(grep -c "<\!-- text begin -->" "$i")
|
nposts=$(grep -c "<\!-- text begin -->" "$i")
|
||||||
tagname=$(echo "$i" | cut -c "$((${#prefix_tags}+3))-" | sed 's/\.html//g')
|
tagname=${i#"$prefix_tags"}
|
||||||
i=$(clean_filename "$i")
|
tagname=${tagname%.html}
|
||||||
word=$template_tags_posts_singular
|
((nposts > 1)) && word=$template_tags_posts || word=$template_tags_posts_singular
|
||||||
(($nposts > 1)) && word=$template_tags_posts
|
|
||||||
echo "<li><a href=\"$i\">$tagname</a> — $nposts $word</li>"
|
echo "<li><a href=\"$i\">$tagname</a> — $nposts $word</li>"
|
||||||
done
|
done
|
||||||
echo "" 1>&3
|
echo "" 1>&3
|
||||||
|
@ -810,7 +803,8 @@ rebuild_tags() {
|
||||||
rm "$tmpfile"
|
rm "$tmpfile"
|
||||||
# Now generate the tag files with headers, footers, etc
|
# Now generate the tag files with headers, footers, etc
|
||||||
while IFS='' read -r i; do
|
while IFS='' read -r i; do
|
||||||
tagname=$(echo "$i" | cut -c "$((${#prefix_tags}+3))-" | sed 's/\.tmp\.html//g')
|
tagname=${i#./"$prefix_tags"}
|
||||||
|
tagname=${tagname%.tmp.html}
|
||||||
create_html_page "$i" "$prefix_tags$tagname.html" yes "$global_title — $template_tag_title \"$tagname\""
|
create_html_page "$i" "$prefix_tags$tagname.html" yes "$global_title — $template_tag_title \"$tagname\""
|
||||||
rm "$i"
|
rm "$i"
|
||||||
done < <(ls -t ./"$prefix_tags"*.tmp.html 2>/dev/null)
|
done < <(ls -t ./"$prefix_tags"*.tmp.html 2>/dev/null)
|
||||||
|
@ -828,24 +822,23 @@ get_post_title() {
|
||||||
#
|
#
|
||||||
# $2 if "-n", tags will be sorted by number of posts
|
# $2 if "-n", tags will be sorted by number of posts
|
||||||
list_tags() {
|
list_tags() {
|
||||||
if [[ $2 ]] && [[ $2 == -n ]]; then do_sort=1; else do_sort=0; fi
|
if [[ $2 == -n ]]; then do_sort=1; else do_sort=0; fi
|
||||||
|
|
||||||
ls ./$prefix_tags*.html &> /dev/null
|
ls ./$prefix_tags*.html &> /dev/null
|
||||||
(($? != 0)) && echo "No posts yet. Use 'bb.sh post' to create one" && return
|
(($? != 0)) && echo "No posts yet. Use 'bb.sh post' to create one" && return
|
||||||
|
|
||||||
lines=""
|
lines=""
|
||||||
for i in ./$prefix_tags*.html; do
|
for i in $prefix_tags*.html; do
|
||||||
[[ -f "$i" ]] || break
|
[[ -f "$i" ]] || break
|
||||||
nposts=$(grep -c "<\!-- text begin -->" "$i")
|
nposts=$(grep -c "<\!-- text begin -->" "$i")
|
||||||
tagname=$(echo "$i" | cut -c "$((${#prefix_tags}+3))-" | sed 's/\.html//g')
|
tagname=${i#"$prefix_tags"}
|
||||||
i=$(clean_filename "$i")
|
tagname=${tagname#.html}
|
||||||
word=$template_tags_posts_singular
|
((nposts > 1)) && word=$template_tags_posts || word=$template_tags_posts_singular
|
||||||
(($nposts > 1)) && word=$template_tags_posts
|
|
||||||
line="$tagname # $nposts # $word"
|
line="$tagname # $nposts # $word"
|
||||||
lines+=$line\\n
|
lines+=$line\\n
|
||||||
done
|
done
|
||||||
|
|
||||||
if (( $do_sort == 1 )); then
|
if (( do_sort == 1 )); then
|
||||||
echo -e "$lines" | column -t -s "#" | sort -nrk 2
|
echo -e "$lines" | column -t -s "#" | sort -nrk 2
|
||||||
else
|
else
|
||||||
echo -e "$lines" | column -t -s "#"
|
echo -e "$lines" | column -t -s "#"
|
||||||
|
@ -895,7 +888,7 @@ make_rss() {
|
||||||
get_post_title "$i"
|
get_post_title "$i"
|
||||||
echo '</title><description><![CDATA['
|
echo '</title><description><![CDATA['
|
||||||
get_html_file_content 'text' 'entry' $cut_do <"$i"
|
get_html_file_content 'text' 'entry' $cut_do <"$i"
|
||||||
echo "]]></description><link>$global_url/$(clean_filename "$i")</link>"
|
echo "]]></description><link>$global_url/${i#./}</link>"
|
||||||
echo "<guid>$global_url/$i</guid>"
|
echo "<guid>$global_url/$i</guid>"
|
||||||
echo "<dc:creator>$global_author</dc:creator>"
|
echo "<dc:creator>$global_author</dc:creator>"
|
||||||
echo "<pubDate>$(LC_ALL=C date -r "$i" +"%a, %d %b %Y %H:%M:%S %z")</pubDate></item>"
|
echo "<pubDate>$(LC_ALL=C date -r "$i" +"%a, %d %b %Y %H:%M:%S %z")</pubDate></item>"
|
||||||
|
|
Loading…
Reference in a new issue