]> git.plutz.net Git - busy/blobdiff - pages/Subversion.sh
upgraded to fit new shcgi revision, slightly better input validation, switched to...
[busy] / pages / Subversion.sh
index fa86d8b17140fe7f923cb5fc6d7b359fd17b60e5..6f93ff2956737870bf0c440e697ac0569c00f9cb 100755 (executable)
 # You should have received a copy of the GNU Affero General Public License
 # along with Busy. If not, see <http://www.gnu.org/licenses/>. 
 
-url="$(echo "$_GET[\"i\"]" |sed -rn '1{s:\t: :g;s:\r::g;s:\\:\\\\:g;p}')"
-rev="$(echo "$_GET[\"r\"]" |sed -rn '1{/^[0-9]+$/p}')"
+url="$(echo "${_GET[i]}" |sed -rn '1{s:\t: :g;s:\r::g;s:\\:\\\\:g;s:/+:/:g;p}')"
+rev="$(echo "${_GET[r]}" |sed -rn '1{/^[0-9]+$/p}')"
+url="${url:-/}"
 
 baseuri=$(sed -rn 's:^svnRepo=(.*)$:\1:p' project.meta)
 lastrev=$(svn info "$baseuri" |sed -rn 's;^Revision: *([0-9]+);\1;p')
 [ -z "$rev" ] && rev="$lastrev"
 
+svn_path(){
+  tmp="${url%/*}" 
+  until [ "$tmp" = "${tmp#/}" ]; do
+    echo "<a href='?p=Subversion&amp;i=$tmp/&amp;r=$rev'>${tmp##*/}/</a> "
+    tmp="${tmp%/*}"
+  done \
+  | tac
+  echo "${url##*/}"
+}
+
+svn_revisions(){
+  for i in {1.."$lastrev"}; do
+    echo "<a href='?p=Subversion&amp;i=$url&amp;r=$i'>$i</a>"
+  done
+}
+
+svn_changelog(){
+  svn log "${baseuri}/${url}" \
+  | sed -rn '2,${s:^-+$:</div>:g;
+                 s:^r([0-9]+) \| ([a-zA-Z0-9]+) \| ([0-9: -]+) .+$:<div class="changelog"><h2>Revision \1 by \2<br>at \3</h2>:g;p}'
+}
+
+svn_showurl(){
+  if [ "${url%/}" != "$url" ]; then
+    # we are showing a directory
+    svn propget svn:externals -r "$rev" "${baseuri}/${url}" \
+    | sed -rn "s;^([^ ]+) (.+)$;<span class='extern'>\2/</span> [external include from <a href='\1'>\1</a>]<br>;p"
+
+    svn ls -r "$rev" "${baseuri}/${url}" \
+    | sed -r "s:^.*$:<a href='?p=Subversion\&amp;i=$url&\&amp;r=$rev'>&</a><br>:g"
+  else
+    # we are showing a file
+    if [ "$url" = "${url#*.}" ] && \
+       lang=txt \
+    || lang="$(source-highlight --lang-list |grep -o "^${url##*.} ")"
+    lang="${lang:-sh}"
+    lang="${lang% }"
+    svn cat -r "$rev" "${baseuri}/${url}" \
+    | source-highlight -s "$lang"
+  fi
+}
+
 case "$1" in
   title)
     echo "Code"