/
niceSOFT
/
subversion
Обзор
Документация
Войти
/
niceSOFT
/
subversion
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
notes/diff-data-flows.txt
99 строк
5 KB
Julian Foad
Add a file showing visually how the various client-side diffs work.
22 авг 2011, 20:15
22 авг 2011, 20:15
8329a9f
Код
Авторство
О чём код?
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