1. Mechiel Lukkien
  2. hgweb


# summary

this package implements a web frontend to hgfs, the mercurial file system.
html pages are generated for the various views on mercurial repositories.

the following pages are provided:

- last commit message for each repository
- links to often used files/information for a given repository, such man
  pages it contains, .b & .m files, the latest .tgz, command to clone the
  repository, etc.
- rss feed of the previous two views
- diff between any two revisions of a given repository
- the man2html-formatted manual page of a given unprocessed man page in
  a given repository, for a given file
- last n commit messages for a given repository, in short or long format

# download

the homepage of this software is at:


# install

make sure the packages "web", "scgid" and "textmangle" installed (see

make sure $ROOT is set.  now type "mk" and then "mk install" to
compile and install.  next, install the files in /lib into your
inferno installation.

to generate diffs for file trees, hgweb uses a modified version of
inferno's diff(1).  it is called ndiff and can be created by applying
the patch ndiff.diff or ndiff.udiff (in unified format) to inferno's
appl/cmd/diff.b (be sure to copy that to the file name ndiff.b
before running patch).  the patch adds flag -n (which only does
anything when -r is specified too), which treats absent files as
/dev/null when calculating the diff.  this shows the contents of
added and removed files.

# run

running this can become quite complicated.  first of all, hgweb needs
to be started by scgid, see its documentation for usage information.
second, hgweb assumes /n/hg holds all repositories.  multiple hg/fs'en can
easily be exported by styxlisten, and mounted using "mount -P", allowing
you to restart the hg/fs'en+styxlisten without restarting the scgid.

hgweb also links (on the webserver) to files named "../hg/$repository".
the links in /lib/template/hgweb/* may have to be changed.  also, files
in that directory contain instructions specific to my own installation,
so be sure to look through them.

# licence & author

this code is in the public domain.  the code is written by mechiel
lukkien, reachable at mechiel@ueber.net.

diff.b (to which ndiff.diff an ndiff.udiff can be applied) is copyrighted
by vita nuova.  the modification is in the public domain.

# todo

- the url's should be more repo-centric, not the current function-centric.
- add a view that, given a repo+path, lists the revisions the file was
  changed in.  one revision can have its changelog shown in full.
- allow seeing patches files (not dirs, that is harder) of a revision too?
  need to replace max 1 absent file by /dev/null.
- better error handling.  the wrong error reasons might be given sometimes.