How Diffs are Generated in Subversion Client Libraries
======================================================

  This is an overview of how the Subversion client libraries calculate a
  difference between two trees.  The two trees might be the working copy
  and its base state, or two trees in the repository, or one tree in the
  repository and one in the working copy.


DATA FLOWS

    "delta edit" => svn_delta_editor_t
    "diff cb." => svn_wc_diff_callbacks4_t
    "ra report" => svn_ra_reporter3_t
    "summary cb." => svn_client_diff_summarize_func_t

Merge (a repos-repos diff)

    +-------------+           +---------------+           +----------+
    | Diff two    |           | Convert delta |           | Merge    |
    |  repo trees |           | edit to diff  |           | into WC  |
    |             |           | callbacks     |           |          |
    |             | --------> |               | --------> |          |
    |             |  delta    |               |  diff     |          |
    |             |  edit     |               |  cb.      |          |
    +-------------+           +---------------+           +----------+
    ra_do_diff3()             client_get_diff_ed.()       merge_callbacks
    <virtual>                 cl/repos_diff.c             cl/merge.c

Diff [--git] (repos-repos)

    +-------------+           +---------------+           +----------+
    | Diff two    |           | Convert delta |           | Print a  |
    | repo trees  |           | edit to diff  |           | plain or |
    |             |           | callbacks     |       [1] | git diff |
    |             | --------> |               | --------> |          |
    |             |  delta    |               |  diff     |          |
    |             |  edit     |               |  cb.      |          |
    +-------------+           +---------------+           +----------+
    ra_do_diff3()             client_get_diff_ed.()       diff_callbacks
    <virtual>                 cl/repos_diff.c             cl/diff.c

    [1] See "diff --summarize" below for an alternative ending.

Diff [--git] (wc-wc)

    +-------------+                                       +----------+
    | Diff two    |                                       | Print a  |
    | WC trees    |                                       | plain or |
    |             |                                   [1] | git diff |
    |             | ------------------------------------> |          |
    |             |                              diff     |          |
    |             |                              cb.      |          |
    +-------------+                                       +----------+
    wc_diff6()                                            diff_callbacks
    wc/diff_local.c                                       cl/diff.c

    [1] See "diff --summarize" below for an alternative ending.

Diff [--git] (repos-wc)

    +----------+      +----------+      +----------+      +----------+
    | Crawl WC |      | Diff repo|      | WC diff  |      | Print a  |
    | and      |      | against  |      | editor   |      | plain or |
    | report   |      | reported |      |          |  [2] | git diff |
    |          | ---> |          | ---> |          | ---> |          |
    |          | ra   |          | delta|          | diff |          |
    |          | rept.|          | edit |          | cb.  |          |
    +----------+      +----------+      +----------+      +----------+
    wc_crawl_rev's5() ra_do_diff3()    wc_get_diff_ed.6() diff_callbacks
    wc/diff_local.c   <virtual>        wc/diff_editor.c   cl/diff.c

    [2] If diff --summarize were supported, this is where it would plug in.

Diff --summarize (repos-repos or wc-wc)

        - - -  ----+           +-----------+           +----------+
        (Either of |           | Summarize |           | Print a  |
        the flows  |           | the diff  |           | summary  |
        marked [1] | [1]       |           |           |          |
        above.)    | --------> |           | --------> |          |
                   |  diff     |           |  summary  |          |
                   |  cb.      |           |  cb.      |          |
        - - -  ----+           +-----------+           +----------+
                               cb_*()                  summarize_regular()
                               cl/repos_diff_summ..c   svn/diff-cmd.c

Diff --summarize --xml (repos-repos or wc-wc)

        - - -  ----+           +-----------+           +----------+
        (Either of |           | Summarize |           | Print an |
        the flows  |           | the diff  |           | XML      |
        marked [1] | [1]       |           |           | summary  |
        above.)    | --------> |           | --------> |          |
                   |  diff     |           |  summary  |          |
                   |  cb.      |           |  cb.      |          |
        - - -  ----+           +-----------+           +----------+
                               cb_*()                  summarize_xml()
                               cl/repos_diff_summ..c   svn/diff-cmd.c

