Fossil

download.html
Login
<div class='fossil-doc' data-title='Download Page'>

<!--
  This document uses AJAX to read the /juvlist page from the
  Fossil server, then constructs the list of downloads from the
  returned JSON.

  Edit the "releases" variable with each new release.  Then
  add unversioned content files for the build products.
-->

<center><font size=4>
<b>To install Fossil &rarr;</b> download the stand-alone executable
and put it on your $PATH.
</font><p><small>
RPMs available
<a href="http://download.opensuse.org/repositories/home:/rmax:/fossil/">
here.</a>
Cryptographic checksums for download files are
<a href="http://www.hwaci.com/fossil_download_checksums.html">here</a>.
</small></p>
<div id="download_filelist">
<!-- The JS below will fills in this <div> with a table of download products
     derived from the output of /juvlist -->
</div>

<p><small>
<a href="../doc/trunk/www/aboutdownload.wiki">How this download page
is implemented</a></small></p>
</center>
</div>

<script>
/***** Edit the following with each new release *******/
var releases = [
  {"re":        /-2\.3\.(tar\.gz|zip)$/,
   "title":     "Version 2.3",
   "titleurl":  "../doc/trunk/www/changes.wiki#v2_3",
   "date":      "2017-07-21",
   "dateurl":   "../timeline?c=version-2.3&amp;y=ci"},
  {"re":        /-2\.2\.(tar\.gz|zip)$/,
   "title":     "Version 2.2",
   "titleurl":  "../doc/trunk/www/changes.wiki#v2_2",
   "date":      "2017-04-11",
   "dateurl":   "../timeline?c=version-2.2&amp;y=ci"},
  {"re":        /-2\.1\.(tar\.gz|zip)$/,
   "title":     "Version 2.1",
   "titleurl":  "../doc/trunk/www/changes.wiki#v2_1",
   "date":      "2017-03-10",
   "dateurl":   "../timeline?c=version-2.1&amp;y=ci"},
  {"re":        /-2\.0\.(tar\.gz|zip)$/,
   "title":     "Version 2.0",
   "titleurl":  "../doc/trunk/www/changes.wiki#v2_0",
   "date":      "2017-03-03",
   "dateurl":   "../timeline?c=version-2.0&amp;y=ci"}]
/******* Should not need to change anything else ******/
function escHTML(x){
  return x.replace(/&/g,"&amp").replace(/</g,"&lt").replace(/>/g,"&gt");
}
var r1 = new XMLHttpRequest();
r1.onreadystatechange = function(){
  if(r1.readyState!=4) return
  var jx = JSON.parse(r1.responseText);
  /* The jx returned will look like this:
  ** [{"name":NAME, "mtime":MTIME, "hash":HASH, "size":SIZE, "user":USER}]
  **
  ** The sequence[] array describes the columns in the download matrix
  */
  var sequence = [
    {"name":  "linux",
     "re":    /-linux-/,
     "icon":  "build-icons/linux.gif",
     "title": "Linux x64"  },
    {"name":  "mac",
     "re":    /-macosx-/,
     "icon":  "build-icons/mac.gif",
     "title": "MacOS 10.x"  },
    {"name":  "openbsd",
     "re":    /-openbsd-/,
     "icon":  "build-icons/openbsd.gif",
     "title": "OpenBSD"  },
    {"name":  "win",
     "re":    /-w32-/,
     "icon":  "build-icons/win32.gif",
     "title": "Windows"  },
    {"name":  "src",
     "re":    /-src-/,
     "icon":  "build-icons/src.gif",
     "title": "Source Tarball"  }]

  /* Accumulate HTML for the download matrix in h */
  var h = "<table cellpadding='10'>\n"

  for(var i=0; i<releases.length; i++){
    var cnt = 0;
    var products = {"dummy":0};
    for(var j=0; j<jx.length; j++){
      var nm = jx[j].name;
      if( !releases[i].re.test(nm) ) continue;
      for(k=0; k<sequence.length; k++){
        if( sequence[k].re.test(nm) ){
          products[sequence[k].name] = jx[j];
          cnt++
          break
        }
      }
    }
    if( cnt==0 ) continue
    h += "<tr><td colspan=6 align=left><hr>\n"
    h += "<center><b>"
    if( releases[i].titleurl ){
      h += "<a href='" + releases[i].titleurl + "'>" + releases[i].title +
           "</a>\n"
    }else{
      h += releases[i].title
    }
    if( releases[i].dateurl ){
      h += "(<a href='" + releases[i].dateurl + "'>" + releases[i].date +
           "</a>)\n"
    }else if( releases[i].date ){
      h += "(" + releases[i].date + ")\n"
    }
    h += "</b></center></td></tr>\n<tr>"
    for(k=0; k<sequence.length; k++){
      var nm = sequence[k].name
      h += "<td align='center' valign='bottom'>\n"
      if( products[nm] ){
        h += "<a href='" + encodeURI(products[nm].name) + "'>\n"
        h += "<img src='" + sequence[k].icon + "'><br>\n"
        h += sequence[k].title + "</a><br>\n"
        var sz = products[nm].size;
        sz /= 1000000.0;
        h += sz.toFixed(2) + " MB\n"
      }
      h += "</td>\n"
    }
    h += "</tr>\n"
  }
  h += "</table>"
  document.getElementById("download_filelist").innerHTML = h;
}
r1.open("GET","../juvlist",true);
r1.send()
</script>