Login
Artifact [3762d541e3]
Login

Artifact 3762d541e3e1337191be8d1482e68d0c09e5b99c78e8cce225cb6268df6cfc88:


#!/usr/bin/env bash
# v0.1 iterate through my fossils.
# v0.2 Add in some git projects.
# v0.3 Added in some more sqlite-related items.
# v0.3a TODO: split this up like fossilweb.sh.
# v0.4 still working on new fossilstuff function - not live yet.
# v0.5 newfossilstuff got the axe. I've got to build a function to
#      cycle through $1.
# v0.6 I added tips to Tcl (Tcl Improvement Proposals).
# v0.6a Added extra line between downloads.
# v0.7 add libfossil, correct mistakes.
# v0.8 create a rarely section for docsrc, book and others.
# v0.9 Added sqlite-wasm to the rarely section, also added althttpd.
# v0.10 Moved sqlite-wasm back out of rarely, due to activity.
# v0.11 Added pikchr into rarely.
# v0.12 Adding params to fossil.
# v0.13 Changed out MYHOME and other vars to FOSHOME etc.
# v0.14 Added sqlite-cloudsqlite, tidied up help.
# v0.15 Put in fnc, should have been in there a while. Poor thing.
# v0.16 Added in pikmojicon, pretty rarely used.
# v0.17 Added in inskinerator, makes skins for fossil.
# v0.18 Made note about veryrarely (created for chisel project files and the like).
# v0.19 Shifted help strings for althttpd and wasm back to sqlite/ and added wapp to tcl.
# v0.20 Added wapp to rarely after cursory examination.
# v0.21 Added REAMDE, no changes to this source as a result.
# v0.22 Added LICENCE, no changes to this source as a result.
# v0.23 Tweaked help, correcting the references to chisel.
# v0.24 Silenced pushd/popd.
# v0.25 Adding "common" to cover {fossil,sqlite}-{code,forum} and tcl/tk.
# v0.26 Fixes to above for some mistakes with cd.
# v0.27 Finally removed libfossil-forum, as forum has been merged into libfossil repo.
# v0.28 Reworked hashbang for portability reasons. Added version and function.
# v0.29 Shortened up the $0, making it into a var and shortening it.
# v0.30 Reworked the help display, removed redundancies.
# v0.31 Added a fossilcommit utility function. (No functional changes to fossilsource)
# v0.32 Added sync command. Only works for fossils you can push to.
# v0.33 Added fossilsource repo.
# v0.34 Added jimtcl. This isn't always kept up to the same place as the git repo.
FOSVERSION=0.34

########
# Notes #
#########
# Really needs to be run from the source directory first.
# fossil has source code, forums, pikchr and a book.
# sqlite has source code, forums, docsrc, althttpd, wasm and a testing harness.
# tcl and tk each have source code, and tcl has proposals (tcl-tip).
# Cannot get TH3 source without a commercial licence, so can't run tests for docsrc.
# leave libfossil out of the main loop, but call them specifically, just like fossil-book, pikchr, sqlite-wasm and sqlite-testing.
FOSHOME="${HOME}/src/c/"

# Doesn't fit, but it's short.
ME="$(basename ${0})"
# Obligatory help function
function dohelp() { # needed renaming, as "help" already exists somewhere else
  echo "Welcome to the $ME help page for version ${FOSVERSION}."
  echo "${ME} {all}: fetches all fossil, all sqlite, all tcl except rarely/veryrarely."
  echo "   -h|help|--help: this help page."
  echo "   -v|version|--version: provides version of this program."
  echo "   common: fetches {fossil,sqlite}-{code,forum}, althttpd and tcl/tk."
  echo "It leaves out things in rarely/veryrarely,"
  echo "plus a few less-updated parts of sqlite/fossil-space"
  echo "### fossil stuff."
  echo "   fossil-[code|forum|book]: fetches named section."
  echo "   fossil: fetches code and forum."
  echo "### wanderinghorse stuff."
  echo "   libfossil{-all}: fetches libfossil (libfossil-code) and fnc."
  echo "   [fsl|fnc|pikchr|pikmojicon]: fetches fsl, pikchr, pikmojicon or fnc."
  echo "### sqlite stuff."
  echo "   sqlite: fetches sqlite fossils (code, forum, docsrc, wasm, althttpd)."
  echo "   sqlite-{code|forum|docsrc|tests|althttpd|wasm|cloud}, fetches:"
  echo "       sqlite code, forum, docsrc, wasm, althttpd or test scripts."
  echo "   althttpd: fetches althttpd code."
  echo "   wasm: fetches wasm-related code."
  echo "### tcl/tk."
  echo "    tcl-code: fetches code."
  echo "    tcl-tip: fetches proposals."
  echo "    tk-code: fetches code."
  echo "### jimtcl."
  echo "    jimtcl: fetches jimtcl fossil. Not always up to date."
  echo "### tangentsoft projects."
  echo "    inskin: fetches inskinerator code."
  echo "    tangentsoft-fossil: fetches local fossil for tangentsoft."
  echo "### Flying-brick project."
  echo "    fossilsource: fetches this codebase for this script"
  echo "### chisel project."
  echo "    flint: fetches the flint code for chisel server."
  echo "=== Rarely-updated stuff."
  echo "    rarely: updates almost all the stuff not touched by [{fossil|sqlite|libfossil}-]all."
  echo "Currently, this includes the following fossil, lifossil and sqlite projects:"
  echo "      fossil-book, pikchr, pikmojicon, fsl, sqlite-tests, sqlite-cloud, and cwal."
  echo "Also includes tangentsoft's inskinerator and james' flint."
  echo "This list will need modifying on occasion."
  echo "=== Very rarely updated stuff (less than yearly)."
  echo "   veryrarely: includes the flint, fuel and fsl projects."
  echo "======= TODO."
  echo "   remove inskinerator from rarely if project updates regularly."
  echo "For more projects (that vary in update frequency), check the chisel"
  echo "hosting site at chiselapp.com."
# Need a section in here for pull
  exit 0
}

function doversion() {
  echo "$ME version: ${FOSVERSION}"
  # This should really check we even _have_ a fossil first.
  echo "fossil version: $(fossil version)"
  exit 0
}
##### fossil-scm and related stuff
function fossil-code() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fossil.fossil
  echo "==== fossil-code...done ==="
}

function fossil-forum() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fossilforum.fossil
  echo "==== fossil-forum...done ==="
}

# Rarely updated
function fossil-book() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fossil-book.fossil
  echo "==== fossil-book...done ==="
}

function fossil-all() { # Excludes fossil-book and pikchr
  cd fossil-scm # Yes, the directory name has -scm appended
  t=fossil
  ${t}-code
  sleep 5
  ${t}-forum
  cd ..
}

###### wanderinghorse items
function libfossil-code() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} libfossil.fossil
  echo "==== libfossil...done ==="
}

# Commented out for now (removal soon), as forums have been merged to master
# https://fossil.wanderinghorse.net/r/libfossil/forumpost/c58421800f
# function libfossil-forum {
#  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} libfossil-forum.fossil
#  echo "==== libfossil-forum...done ==="
# }

# ncurses client for fossil
function fnc {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fnc.fossil
  echo "==== fnc...done ==="
}

# Rarely updated
function pikchr() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} pikchr.fossil
  echo "==== pikchr...done ===="
}

# Rarely updated
function pikmojicon() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} pikmojicon.fossil
  echo "==== pikmojicon...done ===="
}

function libfossil-all {
  cd libfossil
  libfossil-code
#  libfossil-forum
  fnc
  cd -
}

# Scripting engine without a language. Not sure where to put this.
function cwal {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} cwal.fossil
  echo "==== cwal...done ==="
}

# cson - old, but seemingly still in use
function cson {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} cson.fossil
  echo "==== cson...done ==="
}

###### end of wanderinghorse stuff

#### Some non-fossil-project (but fossil-related) ####
# Shell-based front end to fossil, append to rarely. Hasn't been updated since 2019.
function fsl {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fsl.fossil
  echo "==== fsl...done ==="
}

# This is spectacularly unlikely to update further, but is here for completeness' sake
function fuel {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fossil-fuel.fossil
  echo "==== fuel...done ==="
}

function flint {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} flint.fossil
  echo "==== flint...done ==="
}

function fresh {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} Fresh.fossil
  echo "==== fresh...done ==="
}

function inskin { # Shortened from Inskinerator
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} inskinerator.fossil
  echo "==== Inskinerator...done ==="
}

function tangentsoft-fossil() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} tangentsoft.fossil
}

# And of course, my own pet project, fossilsource. Needs renaming so I don't
# trip over my own bash script.
function fossilsource-code() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} fossil-bvscripts.fossil
  echo "==== fossilsource...done ==="
}

##### sqlite-hosted or sqlite-related projects
function sqlite-code() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} sqlite.fossil
  echo "==== sqlite-code...done ==="
}

function sqlite-forum() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} sqliteforum.fossil
  echo "==== sqlite-forum...done ==="
}

function sqlite-wasm() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} wasm.fossil
  echo "==== sqlite-wasm...done ==="
}

function sqlite-docsrc() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} docsrc.fossil
  echo "==== sqlite-docsrc...done ==="
}

function sqlite-althttpd() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} althttpd.fossil
  echo "==== sqlite-althttpd...done ==="
}

### These fossils are rarely updated. ###
function sqlite-tests() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} sqllogictest.fossil
  echo "==== sqlite-tests...done ==="
}

function sqlite-cloud() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} cloudsqlite.fossil
  echo "==== sqlite-cloudsqlite...done ==="
}

# Does everything not in "rarely" section
function sqlite-all() {
  t="sqlite"
  cd ${t}
  ${t}-code
  sleep 5
  ${t}-forum
  sleep 5
  ${t}-docsrc
  sleep 5
  ${t}-wasm
  sleep 5
  ${t}-althttpd # shifted from rarely()
#  ${t}-tests # shifted to rarely()
#  ${t}-cloud # shifted to rarely()
  unset $t
  cd .. # gets us back to ${MYHOME}
}

# Updates tcl sourcecode
function tcl-code() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} tcl.fossil
  echo "==== tcl-code...done ==="
}

# Updates tcl TIP database
function tcl-tips() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} tips.fossil
  echo "==== tcl-tips...done ==="
}

function wapp() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} wapp.fossil
  echo "==== wapp...done ==="
}

# Updates tk sourcecode
function tk-code() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} tk.fossil
  echo "==== tk code...done ==="
}

# Updates both tcl and tk sources
function tcl-all() {
  cd tcl
  tcl-code
  sleep 5
  tcl-tips   # TCL Improvement Proposals, rarely updated
  sleep 5
  wapp
  sleep 5
  cd ../tk
  tk-code
  cd .. # gets us back to ${MYHOME}
}

# Updates jimtcl's fossil
function jimtcl() {
  fossil ${FOSCMD} ${FOSCMDPARAMS[*]} jimtcl.fossil
  echo "==== jimtcl code...done ==="
}

# these don't get updated very often, if at all
function rarely() {
# fossil stuff
  cd fossil-scm
  fossil-book
# sqlite stuff
  cd ../sqlite
  sqlite-tests
  sqlite-cloud
# wanderinghorse - a.k.a. libfossil
  cd ../libfossil
  cwal
  pikchr
  # fsl and pikmojicon moved to veryrarely
# other stuff
  cd ../Fresh
  fresh
  cd ..
# tangentsoft (not tangentsoft-fossil)
  cd ${HOME}/src/perl/hosts/tangentsoft
  inskin
  cd -  # should land me back in /h/v/src/c
}

function veryrarely() { # for stuff that hasn't updated in years
  cd fossil-scm
  fuel # really really rare chance to update
  cd -
  cd libfossil
  fsl
  pikmojicon
  cd -
  cd ${HOME}/src/php/hosts/james
  flint
  cd -
}

function tangentsoft-all() {
  # only one entry at the moment
  cd ${HOME}/src/perl/hosts/tangentsoft
  inskin
  cd - # should land me back in /h/v/src/c
  cd ${HOME}/src/c/hosts/tangentsoft/
  tangentsoft-fossil
  cd -
}

# Meant to be like all, but misses out sqlite docs, tips and other stuff
function common() {
  # First fossil
  fossil-all # this changes dir at end of fossil-all
  # then sqlite - can't use sqlite-all as it includes too much
  t="sqlite"
  cd ${t}
  ${t}-code
  sleep 5
  ${t}-forum
  sleep 5
  ${t}-althttpd
  sleep 5
  # now tcl/tk
  cd ../tcl
  tcl-code
  sleep 5
  cd ../tk
  tk-code
  cd .. # gets us back to ${MYHOME}
}

function all() { # These each have a cd in them
# Note: does not include fsl
  fossil-all # code, forum, not book
  sleep 5
  sqlite-all # code, forum, althttpd, not tests
  sleep 5
  tcl-all    # code (tcl/tk), TCL Improvement Proposals (tip)
  sleep 5
  # tangentsoft-all has two paths, so we're not using it here
  cd ${HOME}/src/c/hosts/tangentsoft/
  tangentsoft-fossil # doesn't include inskinerator (under rarely)
  cd -
  sleep 5
  libfossil-all # added this as it doesn't make much sense to leave it out
  }
# Takes path arg

pushd "${FOSHOME}" >/dev/null
# Let's add something to FOSCMD to make the operation specific
# the caseloop below processes in order. -u needs to be first if
# we want to sync unversioned artifacts
declare FOSCMDPARAMS
# Was here for getting everything and breadcrumbing where I was
# FOSCMDPARAMS=("-v" "--verily" "-R")
# Strip it back a bit, I think.
FOSCMDPARAMS=("-R")

FOSCMD="pull" # default value unless it gets changed by -u
if [ ${#*} -lt 1 ]; then # I want it all
  all # sleep is built in between stages
else #iterate, chuck it in if keyword isn't recognised.
  for t in ${*}; do
    case "${t}" in
    "-u"|"--unversioned")
      # sync can't push without user perms on remote, but can still pull unversioned artifacts
      FOSCMDPARAMS=("-u" "-v" "--verily" "-R")
      FOSCMD="sync"
#      dohelp
    ;;
    "-s"|"--sync")
    # Sync needs remote perms - only works for projects supporting it
      FOSCMD="sync"
    ;;
    "help"|"-h"|"--help")
      dohelp # exits
    ;;
    "-v"|"version"|"--version") doversion  # exits
    ;;
# Each one of these handles path changing for itself
    "rarely"|"veryrarely"|"all"|"common")
      "${t}"
    ;;
    "fossil"|"sqlite"|"tcl"|"libfossil")
      "${t}"-all
    ;;
# All fossil-related stuff
    "fossil-forum"|"fossil-code"|"fossil-book"|"fuel")
      cd fossil-scm
      "${t}" # calls the function directly. I'll have to see if this works.
      cd ..
    ;;
    "book")
      cd fossil-scm
      fossil-book
      cd -
    ;;

# Some non-fossil stuff (hosted in a fossil)
    "fresh"|"Fresh")
      cd Fresh
      fresh
      cd ..
    ;;
# the host software for chisel (very rarely updated)
    "flint")
      cd ${HOME}/src/php/hosts/james
      flint
      cd -
    ;;
# and tangentsoft
    "inskin"|"Inskin"|"inskinerator"|"Inskinerator")
      cd ${HOME}/src/perl/hosts/tangentsoft
      inskin
      cd -
    ;;
    "tangentsoft-fossil")
      cd ${HOME}/src/c/hosts/tangentsoft
      tangentsoft-fossil
      cd -
    ;;
    "tangentsoft-all") 
      cd ${HOME}/src/c/hosts/tangentsoft
      tangentsoft-fossil
      cd -
    ;;
# My own fossilsource - I'll use chiselapp
    "fossilsource")
      cd ${HOME}/src/bash
      fossilsource-code
    ;;
# All wanderinghorse stuff
    "libfossil-all")
      libfossil-all # should do libfossil-code and fnc but not libfossil-forum
    ;;
    "libfossil-code"|"cwal"|"cson"|"fsl"|"fnc"|"pikchr"|"pikmojicon")
      cd libfossil
      ${t} # Seems a bit redundant to make this a full function call
      cd ..
    ;;
# All sqlite-related stuff
    "sqlite-code"|"sqlite-forum"|"sqlite-docsrc"|"docsrc"|"sqlite-tests"|"sqlite-althttpd"|"sqlite-wasm")
      cd sqlite
      "${t}"
      cd -
    ;;
    "althttpd"|"httpd") # whoops, is this duplicated with the above section?
      cd sqlite
      sqlite-althttpd
      cd ..
    ;;
    "docsrc")
      cd sqlite
      sqlite-docsrc
      cd ..
    ;;
    "wasm")
      cd sqlite
      sqlite-wasm
      cd ..
    ;;
    "cloud"|"cloudsqlite"|"sqlite-cloud")
      cd sqlite
      sqlite-cloud
      cd ..
    ;;
# All tcl/tk-related stuff
    "tcl"|"tcl-all")
      tcl-all
    ;;
    "tcl-code"|"tcl-tips"|"wapp")
      cd tcl
      "${t}"
      cd -
    ;;
    "tk")
      cd "${t}"
      "${t}"-code  # Only the code at the moment.
      cd -
    ;;
    "tk-code")
      cd tk; pwd
      "${t}"
      cd -
    ;;
    "jimtcl")
    cd ${HOME}/src/tcl/hosts/msteveb/
    "${t}"
    cd -
    ;;
    esac # end of case ${t}
  done
fi
popd >/dev/null