                      Documentation for Subversion
                      ============================

A rough guide:

  http://svn.red-bean.com/svnbook/
                             Subversion: The Definitive Guide. This is
                             the book that has been published by
                             O'Reilly & Associates. For both newbies and
                             experts alike.  Written in DocBook Lite,
                             and now maintained in a separate repository
                             of its own.
                             
  misc-docs                  Holds additional DocBook Lite material that
                             either isn't yet ready to go into the
                             Definitive Guide, or which may never go
                             into the Guide but instead into companion
                             documents that would be available from the
                             Subversion site.  Think of it as a
                             temporary, but published, holding area.

  HOWTO.DocBook              Instructions on how to build HTML, PDF, 
                             or PostScript from DocBook Lite source.

  programmer/                Documents for Subversion programmers.

  programmer/design/         Subversion's original design document
                             (written in Texinfo).
                             WARNING!  Extremely old!  From June 2000.

  programmer/WritingChangeLogs.txt
                             A longer version of the info in HACKING.

  user/                      Documents for Subversion users.

  user/lj_article.txt        An introductory article from Linux Journal.

  user/svn-ref.tex           LaTeX source for an svn quick-ref sheet.

  user/*.html                Some documentation that should probably be
                             migrated to DocBook Lite and misc-docs/.

  translations/french        A translation of the Subversion handbook
                             (which has been absorbed into the book).
 
If you'd like to document a new feature, try to find a place for it
somewhere in misc-docs.

-------------- NOTES on Texinfo usage -----------------------------

Some of Subversion's documentation is in texinfo format.
The online documentation for texinfo is at:

  http://www.gnu.org/manual/texinfo-4.0/html_chapter/texinfo_toc.html

To build particular things, you'll need one or more of:

  * the 'makeinfo' program from the latest texinfo package in
    ftp://ftp.gnu.org/pub/gnu/texinfo/
  * the 'texi2dvi' or 'texi2html' programs
  * the 'dvipdf' script from Ghostscript (pipes dvi | ps | Ghostscript)


Use these rules for determining how to label something.  These rules
were derived from

http://www.gnu.org/manual/texinfo-4.0/html_chapter/texinfo_toc.html

1) Use <quote>...</quote> for quoting any text in the Subversion book.
   [Do not use the standard Texinfo practice which is `` and ''.
   Do not use a single ' or a single ".]
2) When quoting single characters, such as discussing the output from
   an svn merge or svn update, use @samp{}.
3) Use @samp{} for any commands to run on the command line.  Do not use
   @command{}, this is for the program itself.  So use @samp{ls -l},
   but refer to ls as @command{ls}.  For svn, svnadmin, svnlook
   subcommands, use @samp{}, so to refer to svnlook's youngest
   subcommand, use @samp{youngest}.
4) Use @option{} for command line options to programs that are not
   listed with the program.  So @samp{ls -l}, but refer to -l as
   @option{-l}.
5) Use @uref{} for URLs that anybody on the Internet can access.
   These are converted to real links in HTML pages, while @url{}'s are
   not.  Use @url{} for sample http:// or file:// URLs.  For any
   @uref{} URLs that refer to a site's home page or a directory, place
   a / at the end of the URL.  This saves a redirect and loads the
   page faster.
6) Svn keywords, i.e. svn:ignore, should be in @samp{}.
7) Use @dots{} instead of ``...'' and @enddots{} instead of ``....''.
   Do not use @dots{} or @enddots when showing the output of a command
   and the command really does print the ...'s, such as when ``svn
   commit'' runs.  Do use @dots{} when truncating the example output
   of a command, such as ``svn checkout'', and you don't want to list
   every line of output.  Do not put the ...'s in [] because with
   @dots{} or @enddots{}, the formatted output will use a smaller font
   and the ...'s will be visually distinct already.

-------------
JimB fixed up a lot of our Texinfo problems, here's what he says:
-------------

Anyway, once I can commit things, here's the scoop:

- Info builds cleanly, so I've removed the --no-verify flag from the
  makeinfo command.  Any complains can be taken as real problems.
- The dvi builds without complains about undefined cross references.


As far as I can tell, our tools should work for us exactly as we'd
hope:

- There is no need to list next, prev, and up links in our @node
  lines.  (Certainly a critical requirement.)

- The Emacs commands can rebuild all our menus automatically and
  accurately.

- makeinfo will only complain about real problems.


The only real problem is that makeinfo's error messages are pretty
unhelpful.  It often misidentifies the error, so it's not at all
obvious how to fix a file it doesn't like.  But here are the rules we
have to follow; I found problems in each of these areas.

- @node and sectioning commands (@chapter, @section, ...) should
  always come in pairs --- the @node command on one line, and the
  sectioning command on the very next line.  This goes for the ``top''
  @node as well, which should be followed by a @top command.

- @node names must be globally unique.  This is an unfortunate
  property of info, but it's inherent in the format.  Ben had a lot of
  ``Overview'' nodes.

- @menu commands should be properly formatted.  They should look like
  this:

    @menu
    * Filesystem::
    * Server Library::
    @end menu

  Not this:

    @menu
    * Filesystem
    * Server Library
    @end menu

  If we always use C-c C-u C-a, this should just work.

- @menu commands should always list the correct nodes.

When these rules are broken, the error messages from makeinfo are
pretty unhelpful --- bordering on utterly random.  They complain that
nodes are undefined when they're perfectly clearly correct.

We should always use C-c C-u C-a (`texinfo-all-menus-update') to
reconstruct a file's menus, instead of editing the menus by hand.
That will eliminate the bottom two problems.

You can also give a prefix to C-c C-s, which tells it to list the
@node commands alongside their sectioning commands.  This is helpful
for finding mismatches.

============================================================================
JimB also says:
============================================================================

For defining functions, you should definitely use @deffun or
@deftypefun, not @itemize nor @table.
