diff --git a/hash2html b/git/commit2html similarity index 94% rename from hash2html rename to git/commit2html index a28f5ae..971d09c 100755 --- a/hash2html +++ b/git/commit2html @@ -1,6 +1,6 @@ #!/bin/bash # -# Outputs formatted HTML for the given hash +# Outputs formatted HTML for the given commit hash # # Copyright (C) 2012 Mike Gerwitz # diff --git a/git/list b/git/list new file mode 100755 index 0000000..6202177 --- /dev/null +++ b/git/list @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Outputs parsable commit list for Git repositories +# +# Copyright (C) 2012 Mike Gerwitz +# +# This file is part of repo2html. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# # + +# add an extra newline to prevent read from getting confused +git log --pretty='format:%H %h %at %f %s' && echo diff --git a/processor b/processor new file mode 100755 index 0000000..e3583d0 --- /dev/null +++ b/processor @@ -0,0 +1,100 @@ +#!/bin/bash +# +# Generates HTML from repository commit messages +# +# Copyright (C) 2012 Mike Gerwitz +# +# This file is part of repo2html. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# # + +repotype="${1?Missing repository type}" +path_out="${2?Missing output path}" + +cat < + + + Mike Gerwitz's Thoughts and Ramblings + + +

Mike Gerwitz's Thoughts and Ramblings

+EOH + + +prevdate= +lastts= +firstyear= +lastyear= +lasthash= + +# generate index +while read hash commit ts id subject; do + echo "Found $commit: $subject" >&2 + + dateout="$( printf "%(%Y-%m-%d)T" "$ts" )" + dategroup="${dateout%-*}" + day="${dateout##*-}" + month="$( printf "%(%m)T" "$ts" )" + year="${dateout%%-*}" + + # commits are ordered by date desc + lasthash="${lasthash:-$hash}" + lastts="${lastts:-$ts}" + lastyear="${lastyear:-$year}" + firstyear="$year" + + pagefile="$year/$month/$id.html" + fmtsubject="$( ./msgfmt < <( echo "$subject"; echo ) )" + + [ "$prevdate" == "$dategroup" ] || { + echo "

$dategroup

" + } + + printf '' \ + "$day" "$pagefile" "$fmtsubject" + + prevdate="$dategroup" + + # create the containing directory (if it does not yet exist and then generate + # the commit page + mkdir -p "$( dirname "$pagefile" )" \ + && ( + # make the majority of the data available as environment variables (for + # convenience), lowercase so as not to be conflict with conventional + # environment variables + export hash commit id subject="$fmtsubject" timestamp="$ts" + export dategroup month day year + + # invoke template + "$repotype"/commit2html "$commit" | ./tpl/commit.sh + ) > "$path_out/$pagefile" +done + +yearrange="$firstyear" +if [ "$lastyear" -gt "$firstyear" ]; then + yearrange="$firstyear–$lastyear" +fi + +cat < +
+
Copyright © $yearrange Mike Gerwitz
+
Last Updated: $( printf "%(%F %H:%M:%S)T" "$lastts" )
+
$lasthash
+
+ + +EOF diff --git a/repo2html b/repo2html index dcb0ca6..35e6fac 100755 --- a/repo2html +++ b/repo2html @@ -1,6 +1,6 @@ #!/bin/bash # -# Generates HTML from repository commit messages (currently Git only) +# Detects repository VCS and begins VCS-specific processing # # Copyright (C) 2012 Mike Gerwitz # @@ -20,83 +20,21 @@ # along with this program. If not, see . # # +# repository detection +repotype= +if repodir="$( git rev-parse --git-dir 2>/dev/null )"; then + # use absolute path for git directory + export GIT_DIR="$( cd $repodir && pwd )" + repotype=git +else + # contribute! + echo "fatal: only git repositories are currently supported" >&2 + exit 128 +fi + path_out="$( pwd )" path="$( dirname "$0" )" cd "$path" -export GIT_DIR="$path_out/.git" - -cat < - - - Mike Gerwitz's Thoughts and Ramblings - - -

Mike Gerwitz's Thoughts and Ramblings

-EOH - - -lastdate= -firstyear= -lastyear= - -# generate index -while read hash commit ts id subject; do - echo "Found $commit: $subject" >&2 - - dateout="$( printf "%(%Y-%m-%d)T" "$ts" )" - dategroup="${dateout%-*}" - day="${dateout##*-}" - month="$( printf "%(%m)T" "$ts" )" - year="${dateout%%-*}" - - # commits are ordered by date desc - lastyear="${lastyear:-$year}" - firstyear="$year" - - pagefile="$year/$month/$id.html" - fmtsubject="$( ./msgfmt < <( echo "$subject"; echo ) )" - - [ "$lastdate" == "$dategroup" ] || { - echo "

$dategroup

" - } - - printf '' \ - "$day" "$pagefile" "$fmtsubject" - - lastdate="$dategroup" - - # create the containing directory (if it does not yet exist and then generate - # the commit page - mkdir -p "$( dirname "$pagefile" )" \ - && ( - # make the majority of the data available as environment variables (for - # convenience), lowercase so as not to be conflict with conventional - # environment variables - export hash commit id subject="$fmtsubject" timestamp="$ts" - export dategroup month day year - - # invoke template - ./hash2html "$commit" | ./tpl/commit.sh - ) > "$path_out/$pagefile" -done < <( - git log --pretty='format:%H %h %at %f %s' && echo -) - - -yearrange="$firstyear" -if [ "$lastyear" -gt "$firstyear" ]; then - yearrange="$firstyear–$lastyear" -fi - -cat < - - - -EOF +# pass commit list to the processor +"$repotype"/list | ./processor "$repotype" "$path_out"