Merge remote-tracking branch 'upstream/master'
Resolve minor editing 2.6-to-2.7 editing conflict in bb.sh
This commit is contained in:
commit
62a26bb575
2 changed files with 38 additions and 17 deletions
|
@ -7,10 +7,14 @@ I created it because I wanted a very, very simple way to post entries to a blog
|
||||||
|
|
||||||
*How simple? Just type `./bb.sh post` and start writing your blogpost.*
|
*How simple? Just type `./bb.sh post` and start writing your blogpost.*
|
||||||
|
|
||||||
You can see it live here: [read the initial blog post](https://web.archive.org/web/20130520204024/http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html). That page was 100% generated using bashblog, no additional tweaking.
|
[![asciinema](https://asciinema.org/a/4nr44km9ipow4s7u2w2eabeik.png)](https://asciinema.org/a/4nr44km9ipow4s7u2w2eabeik)
|
||||||
|
|
||||||
|
You can see a sample here: [read the initial blog post](https://web.archive.org/web/20130520204024/http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html). That page was 100% generated using bashblog, no additional tweaking.
|
||||||
|
|
||||||
[![demo](https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo_thumb.png)](https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo.png)
|
[![demo](https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo_thumb.png)](https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo.png)
|
||||||
|
|
||||||
|
Check out [other bashblog users](https://www.google.com/search?q=%22Generated+with+bashblog,+a+single+bash+script+to+easily+create+blogs+like+this+one%22)
|
||||||
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
@ -128,6 +132,8 @@ As a guideline, pull requests should:
|
||||||
Changelog
|
Changelog
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
- 2.7 Store post date on a comment in the html file (#96).
|
||||||
|
On rebuild, the post date will be synchronised between comment date and file date, with precedence for comment date.
|
||||||
- 2.6 Support for multiple authors, use a different `.config` for each one
|
- 2.6 Support for multiple authors, use a different `.config` for each one
|
||||||
- 2.5 Massive code cleanup by Martijn Dekker<br/>
|
- 2.5 Massive code cleanup by Martijn Dekker<br/>
|
||||||
'tags' command<br/>
|
'tags' command<br/>
|
||||||
|
|
47
bb.sh
47
bb.sh
|
@ -29,7 +29,7 @@ global_config=".config"
|
||||||
# by the 'global_config' file contents
|
# by the 'global_config' file contents
|
||||||
global_variables() {
|
global_variables() {
|
||||||
global_software_name="BashBlog"
|
global_software_name="BashBlog"
|
||||||
global_software_version="2.6"
|
global_software_version="2.7"
|
||||||
|
|
||||||
# Blog title
|
# Blog title
|
||||||
global_title="My fancy blog"
|
global_title="My fancy blog"
|
||||||
|
@ -136,10 +136,14 @@ global_variables() {
|
||||||
template_twitter_button="Tweet"
|
template_twitter_button="Tweet"
|
||||||
template_twitter_comment="<Type your comment here but please leave the URL so that other people can follow the comments>"
|
template_twitter_comment="<Type your comment here but please leave the URL so that other people can follow the comments>"
|
||||||
|
|
||||||
# The locale to use for the dates displayed on screen (not for the timestamps)
|
# The locale to use for the dates displayed on screen
|
||||||
date_format="%B %d, %Y"
|
date_format="%B %d, %Y"
|
||||||
date_allposts_header="%B %Y"
|
|
||||||
date_locale="C"
|
date_locale="C"
|
||||||
|
date_inpost="bashblog_timestamp"
|
||||||
|
# Don't change these dates
|
||||||
|
date_format_full="%a, %d %b %Y %H:%M:%S %z"
|
||||||
|
date_format_timestamp="%Y%m%d%H%M.%S"
|
||||||
|
date_allposts_header="%B %Y"
|
||||||
|
|
||||||
# Perform the post title -> filename conversion
|
# Perform the post title -> filename conversion
|
||||||
# Experts only. You may need to tune the locales too
|
# Experts only. You may need to tune the locales too
|
||||||
|
@ -285,9 +289,10 @@ invoke_editor() {
|
||||||
# "full" to edit full HTML, and not only text part (keeps old filename)
|
# "full" to edit full HTML, and not only text part (keeps old filename)
|
||||||
# leave empty for default behavior (edit only text part and change name)
|
# leave empty for default behavior (edit only text part and change name)
|
||||||
edit() {
|
edit() {
|
||||||
|
[[ ! -f "${1%%.*}.html" ]] && echo "Can't edit post "${1%%.*}.html", did you mean to use \"bb.sh post <draft_file>\"?" && exit -1
|
||||||
# Original post timestamp
|
# Original post timestamp
|
||||||
edit_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +"%a, %d %b %Y %H:%M:%S %z" )
|
edit_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +"$date_format_full" )
|
||||||
touch_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +'%Y%m%d%H%M')
|
touch_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +"$date_format_timestamp")
|
||||||
tags_before=$(tags_in_post "${1%%.*}.html")
|
tags_before=$(tags_in_post "${1%%.*}.html")
|
||||||
if [[ $2 == full ]]; then
|
if [[ $2 == full ]]; then
|
||||||
invoke_editor "$1"
|
invoke_editor "$1"
|
||||||
|
@ -323,6 +328,7 @@ edit() {
|
||||||
rm "$TMPFILE"
|
rm "$TMPFILE"
|
||||||
fi
|
fi
|
||||||
touch -t "$touch_timestamp" "$filename"
|
touch -t "$touch_timestamp" "$filename"
|
||||||
|
touch -t "$touch_timestamp" "$1"
|
||||||
chmod 644 "$filename"
|
chmod 644 "$filename"
|
||||||
echo "Posted $filename"
|
echo "Posted $filename"
|
||||||
tags_after=$(tags_in_post "$filename")
|
tags_after=$(tags_in_post "$filename")
|
||||||
|
@ -454,11 +460,17 @@ create_html_page() {
|
||||||
echo "$title"
|
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 "<!-- $date_inpost: #$(LC_ALL=$date_locale date +"$date_format_timestamp")# -->"
|
||||||
else
|
else
|
||||||
echo "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format" --date="$timestamp") — "
|
echo "<!-- $date_inpost: #$(LC_ALL=$date_locale date +"$date_format_timestamp" --date="$timestamp")# -->"
|
||||||
fi
|
fi
|
||||||
echo "$author</div>"
|
if [[ -z $timestamp ]]; then
|
||||||
|
echo -n "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format")"
|
||||||
|
else
|
||||||
|
echo -n "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format" --date="$timestamp")"
|
||||||
|
fi
|
||||||
|
[[ -n $author ]] && echo -e " — \n$author"
|
||||||
|
echo "</div>"
|
||||||
echo '<!-- text begin -->' # This marks the text body, after the title, date...
|
echo '<!-- text begin -->' # This marks the text body, after the title, date...
|
||||||
fi
|
fi
|
||||||
cat "$content" # Actual content
|
cat "$content" # Actual content
|
||||||
|
@ -900,7 +912,7 @@ make_rss() {
|
||||||
while [[ -f $rssfile ]]; do rssfile=$blog_feed.$RANDOM; done
|
while [[ -f $rssfile ]]; do rssfile=$blog_feed.$RANDOM; done
|
||||||
|
|
||||||
{
|
{
|
||||||
pubdate=$(LC_ALL=C date +"%a, %d %b %Y %H:%M:%S %z")
|
pubdate=$(LC_ALL=C date +"$date_format_full")
|
||||||
echo '<?xml version="1.0" encoding="UTF-8" ?>'
|
echo '<?xml version="1.0" encoding="UTF-8" ?>'
|
||||||
echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">'
|
echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">'
|
||||||
echo "<channel><title>$global_title</title><link>$global_url/$index_file</link>"
|
echo "<channel><title>$global_title</title><link>$global_url/$index_file</link>"
|
||||||
|
@ -921,7 +933,7 @@ make_rss() {
|
||||||
echo "]]></description><link>$global_url/${i#./}</link>"
|
echo "]]></description><link>$global_url/${i#./}</link>"
|
||||||
echo "<guid>$global_url/$i</guid>"
|
echo "<guid>$global_url/$i</guid>"
|
||||||
echo "<dc:creator>$(get_post_author "$i")</dc:creator>"
|
echo "<dc:creator>$(get_post_author "$i")</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" +"$date_format_full")</pubDate></item>"
|
||||||
|
|
||||||
n=$(( n + 1 ))
|
n=$(( n + 1 ))
|
||||||
done
|
done
|
||||||
|
@ -989,6 +1001,7 @@ create_css() {
|
||||||
#description{font-size:large;margin-bottom:12px;}
|
#description{font-size:large;margin-bottom:12px;}
|
||||||
h3{margin-top:42px;margin-bottom:8px;}
|
h3{margin-top:42px;margin-bottom:8px;}
|
||||||
h4{margin-left:24px;margin-right:24px;}
|
h4{margin-left:24px;margin-right:24px;}
|
||||||
|
img{max-width:100%;}
|
||||||
#twitter{line-height:20px;vertical-align:top;text-align:right;font-style:italic;color:#333;margin-top:24px;font-size:14px;}' > blog.css
|
#twitter{line-height:20px;vertical-align:top;text-align:right;font-style:italic;color:#333;margin-top:24px;font-size:14px;}' > blog.css
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1022,8 +1035,7 @@ create_css() {
|
||||||
rebuild_all_entries() {
|
rebuild_all_entries() {
|
||||||
echo -n "Rebuilding all entries "
|
echo -n "Rebuilding all entries "
|
||||||
|
|
||||||
for i in $(set +f; printf '%s\n' *.html) # no need to sort
|
for i in $(set +f; printf '%s\n' *.html); do
|
||||||
do
|
|
||||||
is_boilerplate_file "$i" && continue;
|
is_boilerplate_file "$i" && continue;
|
||||||
contentfile=.tmp.$RANDOM
|
contentfile=.tmp.$RANDOM
|
||||||
while [[ -f $contentfile ]]; do contentfile=.tmp.$RANDOM; done
|
while [[ -f $contentfile ]]; do contentfile=.tmp.$RANDOM; done
|
||||||
|
@ -1034,12 +1046,15 @@ rebuild_all_entries() {
|
||||||
|
|
||||||
get_html_file_content 'text' 'text' <"$i" >> "$contentfile"
|
get_html_file_content 'text' 'text' <"$i" >> "$contentfile"
|
||||||
|
|
||||||
# Original post timestamp
|
# Read timestamp from post, if present, and sync file timestamp
|
||||||
timestamp=$(LC_ALL=C date -r "$i" +"%a, %d %b %Y %H:%M:%S %z" )
|
timestamp=$(awk '/<!-- '$date_inpost': .+ -->/ { print }' "$i" | cut -d '#' -f 2)
|
||||||
|
[[ -n $timestamp ]] && touch -t "$timestamp" "$i"
|
||||||
|
# Read timestamp from file in correct format for 'create_html_page'
|
||||||
|
timestamp=$(LC_ALL=C date -r "$i" +"$date_format_full")
|
||||||
|
|
||||||
create_html_page "$contentfile" "$i.rebuilt" no "$title" "$timestamp" "$(get_post_author "$i")"
|
create_html_page "$contentfile" "$i.rebuilt" no "$title" "$timestamp" "$(get_post_author "$i")"
|
||||||
# keep the original timestamp!
|
# keep the original timestamp!
|
||||||
timestamp=$(LC_ALL=C date -r "$i" +'%Y%m%d%H%M')
|
timestamp=$(LC_ALL=C date -r "$i" +"$date_format_timestamp")
|
||||||
mv "$i.rebuilt" "$i"
|
mv "$i.rebuilt" "$i"
|
||||||
chmod 644 "$i"
|
chmod 644 "$i"
|
||||||
touch -t "$timestamp" "$i"
|
touch -t "$timestamp" "$i"
|
||||||
|
@ -1103,7 +1118,7 @@ date_version_detect() {
|
||||||
stat -f "%Sm" -t "$format" "$2"
|
stat -f "%Sm" -t "$format" "$2"
|
||||||
elif [[ $2 == --date* ]]; then
|
elif [[ $2 == --date* ]]; then
|
||||||
# convert between dates using BSD date syntax
|
# convert between dates using BSD date syntax
|
||||||
command date -j -f "%a, %d %b %Y %H:%M:%S %z" "${2#--date=}" "$1"
|
command date -j -f "$date_format_full" "${2#--date=}" "$1"
|
||||||
else
|
else
|
||||||
# acceptable format for BSD date
|
# acceptable format for BSD date
|
||||||
command date -j "$@"
|
command date -j "$@"
|
||||||
|
|
Loading…
Reference in a new issue