mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Through git-diff(1), a single diff can be generated from a pair of blob revisions directly. Unfortunately, there is not a mechanism to compute batches of specific file pair diffs in a single process. Such a feature is particularly useful on the server-side where diffing between a large set of changes is not feasible all at once due to timeout concerns. To facilitate this, introduce git-diff-pairs(1) which acts as a backend passing its NUL-terminated raw diff format input from stdin through diff machinery to produce various forms of output such as patch or raw. The raw format was originally designed as an interchange format and represents the contents of the diff_queued_diff list making it possible to break the diff pipeline into separate stages. For example, git-diff-tree(1) can be used as a frontend to compute file pairs to queue and feed its raw output to git-diff-pairs(1) to compute patches. With this, batches of diffs can be progressively generated without having to recompute renames or retrieve object context. Something like the following: git diff-tree -r -z -M $old $new | git diff-pairs -p -z should generate the same output as `git diff-tree -p -M`. Furthermore, each line of raw diff formatted input can also be individually fed to a separate git-diff-pairs(1) process and still produce the same output. Based-on-patch-by: Jeff King <peff@peff.net> Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
507 lines
13 KiB
Meson
507 lines
13 KiB
Meson
manpages = {
|
|
# Category 1.
|
|
'git-add.adoc' : 1,
|
|
'git-am.adoc' : 1,
|
|
'git-annotate.adoc' : 1,
|
|
'git-apply.adoc' : 1,
|
|
'git-archimport.adoc' : 1,
|
|
'git-archive.adoc' : 1,
|
|
'git-backfill.adoc' : 1,
|
|
'git-bisect.adoc' : 1,
|
|
'git-blame.adoc' : 1,
|
|
'git-branch.adoc' : 1,
|
|
'git-bugreport.adoc' : 1,
|
|
'git-bundle.adoc' : 1,
|
|
'git-cat-file.adoc' : 1,
|
|
'git-check-attr.adoc' : 1,
|
|
'git-check-ignore.adoc' : 1,
|
|
'git-check-mailmap.adoc' : 1,
|
|
'git-checkout-index.adoc' : 1,
|
|
'git-checkout.adoc' : 1,
|
|
'git-check-ref-format.adoc' : 1,
|
|
'git-cherry-pick.adoc' : 1,
|
|
'git-cherry.adoc' : 1,
|
|
'git-citool.adoc' : 1,
|
|
'git-clean.adoc' : 1,
|
|
'git-clone.adoc' : 1,
|
|
'git-column.adoc' : 1,
|
|
'git-commit-graph.adoc' : 1,
|
|
'git-commit-tree.adoc' : 1,
|
|
'git-commit.adoc' : 1,
|
|
'git-config.adoc' : 1,
|
|
'git-count-objects.adoc' : 1,
|
|
'git-credential-cache--daemon.adoc' : 1,
|
|
'git-credential-cache.adoc' : 1,
|
|
'git-credential-store.adoc' : 1,
|
|
'git-credential.adoc' : 1,
|
|
'git-cvsexportcommit.adoc' : 1,
|
|
'git-cvsimport.adoc' : 1,
|
|
'git-cvsserver.adoc' : 1,
|
|
'git-daemon.adoc' : 1,
|
|
'git-describe.adoc' : 1,
|
|
'git-diagnose.adoc' : 1,
|
|
'git-diff-files.adoc' : 1,
|
|
'git-diff-index.adoc' : 1,
|
|
'git-diff-pairs.adoc' : 1,
|
|
'git-difftool.adoc' : 1,
|
|
'git-diff-tree.adoc' : 1,
|
|
'git-diff.adoc' : 1,
|
|
'git-fast-export.adoc' : 1,
|
|
'git-fast-import.adoc' : 1,
|
|
'git-fetch-pack.adoc' : 1,
|
|
'git-fetch.adoc' : 1,
|
|
'git-filter-branch.adoc' : 1,
|
|
'git-fmt-merge-msg.adoc' : 1,
|
|
'git-for-each-ref.adoc' : 1,
|
|
'git-for-each-repo.adoc' : 1,
|
|
'git-format-patch.adoc' : 1,
|
|
'git-fsck-objects.adoc' : 1,
|
|
'git-fsck.adoc' : 1,
|
|
'git-fsmonitor--daemon.adoc' : 1,
|
|
'git-gc.adoc' : 1,
|
|
'git-get-tar-commit-id.adoc' : 1,
|
|
'git-grep.adoc' : 1,
|
|
'git-gui.adoc' : 1,
|
|
'git-hash-object.adoc' : 1,
|
|
'git-help.adoc' : 1,
|
|
'git-hook.adoc' : 1,
|
|
'git-http-backend.adoc' : 1,
|
|
'git-http-fetch.adoc' : 1,
|
|
'git-http-push.adoc' : 1,
|
|
'git-imap-send.adoc' : 1,
|
|
'git-index-pack.adoc' : 1,
|
|
'git-init-db.adoc' : 1,
|
|
'git-init.adoc' : 1,
|
|
'git-instaweb.adoc' : 1,
|
|
'git-interpret-trailers.adoc' : 1,
|
|
'git-log.adoc' : 1,
|
|
'git-ls-files.adoc' : 1,
|
|
'git-ls-remote.adoc' : 1,
|
|
'git-ls-tree.adoc' : 1,
|
|
'git-mailinfo.adoc' : 1,
|
|
'git-mailsplit.adoc' : 1,
|
|
'git-maintenance.adoc' : 1,
|
|
'git-merge-base.adoc' : 1,
|
|
'git-merge-file.adoc' : 1,
|
|
'git-merge-index.adoc' : 1,
|
|
'git-merge-one-file.adoc' : 1,
|
|
'git-mergetool--lib.adoc' : 1,
|
|
'git-mergetool.adoc' : 1,
|
|
'git-merge-tree.adoc' : 1,
|
|
'git-merge.adoc' : 1,
|
|
'git-mktag.adoc' : 1,
|
|
'git-mktree.adoc' : 1,
|
|
'git-multi-pack-index.adoc' : 1,
|
|
'git-mv.adoc' : 1,
|
|
'git-name-rev.adoc' : 1,
|
|
'git-notes.adoc' : 1,
|
|
'git-p4.adoc' : 1,
|
|
'git-pack-objects.adoc' : 1,
|
|
'git-pack-redundant.adoc' : 1,
|
|
'git-pack-refs.adoc' : 1,
|
|
'git-patch-id.adoc' : 1,
|
|
'git-prune-packed.adoc' : 1,
|
|
'git-prune.adoc' : 1,
|
|
'git-pull.adoc' : 1,
|
|
'git-push.adoc' : 1,
|
|
'git-quiltimport.adoc' : 1,
|
|
'git-range-diff.adoc' : 1,
|
|
'git-read-tree.adoc' : 1,
|
|
'git-rebase.adoc' : 1,
|
|
'git-receive-pack.adoc' : 1,
|
|
'git-reflog.adoc' : 1,
|
|
'git-refs.adoc' : 1,
|
|
'git-remote-ext.adoc' : 1,
|
|
'git-remote-fd.adoc' : 1,
|
|
'git-remote.adoc' : 1,
|
|
'git-repack.adoc' : 1,
|
|
'git-replace.adoc' : 1,
|
|
'git-replay.adoc' : 1,
|
|
'git-request-pull.adoc' : 1,
|
|
'git-rerere.adoc' : 1,
|
|
'git-reset.adoc' : 1,
|
|
'git-restore.adoc' : 1,
|
|
'git-revert.adoc' : 1,
|
|
'git-rev-list.adoc' : 1,
|
|
'git-rev-parse.adoc' : 1,
|
|
'git-rm.adoc' : 1,
|
|
'git-send-email.adoc' : 1,
|
|
'git-send-pack.adoc' : 1,
|
|
'git-shell.adoc' : 1,
|
|
'git-sh-i18n--envsubst.adoc' : 1,
|
|
'git-sh-i18n.adoc' : 1,
|
|
'git-shortlog.adoc' : 1,
|
|
'git-show-branch.adoc' : 1,
|
|
'git-show-index.adoc' : 1,
|
|
'git-show-ref.adoc' : 1,
|
|
'git-show.adoc' : 1,
|
|
'git-sh-setup.adoc' : 1,
|
|
'git-sparse-checkout.adoc' : 1,
|
|
'git-stage.adoc' : 1,
|
|
'git-stash.adoc' : 1,
|
|
'git-status.adoc' : 1,
|
|
'git-stripspace.adoc' : 1,
|
|
'git-submodule.adoc' : 1,
|
|
'git-svn.adoc' : 1,
|
|
'git-switch.adoc' : 1,
|
|
'git-symbolic-ref.adoc' : 1,
|
|
'git-tag.adoc' : 1,
|
|
'git-unpack-file.adoc' : 1,
|
|
'git-unpack-objects.adoc' : 1,
|
|
'git-update-index.adoc' : 1,
|
|
'git-update-ref.adoc' : 1,
|
|
'git-update-server-info.adoc' : 1,
|
|
'git-upload-archive.adoc' : 1,
|
|
'git-upload-pack.adoc' : 1,
|
|
'git-var.adoc' : 1,
|
|
'git-verify-commit.adoc' : 1,
|
|
'git-verify-pack.adoc' : 1,
|
|
'git-verify-tag.adoc' : 1,
|
|
'git-version.adoc' : 1,
|
|
'git-web--browse.adoc' : 1,
|
|
'git-whatchanged.adoc' : 1,
|
|
'git-worktree.adoc' : 1,
|
|
'git-write-tree.adoc' : 1,
|
|
'git.adoc' : 1,
|
|
'gitk.adoc' : 1,
|
|
'gitweb.adoc' : 1,
|
|
'scalar.adoc' : 1,
|
|
|
|
# Category 5.
|
|
'gitattributes.adoc' : 5,
|
|
'gitformat-bundle.adoc' : 5,
|
|
'gitformat-chunk.adoc' : 5,
|
|
'gitformat-commit-graph.adoc' : 5,
|
|
'gitformat-index.adoc' : 5,
|
|
'gitformat-pack.adoc' : 5,
|
|
'gitformat-signature.adoc' : 5,
|
|
'githooks.adoc' : 5,
|
|
'gitignore.adoc' : 5,
|
|
'gitmailmap.adoc' : 5,
|
|
'gitmodules.adoc' : 5,
|
|
'gitprotocol-capabilities.adoc' : 5,
|
|
'gitprotocol-common.adoc' : 5,
|
|
'gitprotocol-http.adoc' : 5,
|
|
'gitprotocol-pack.adoc' : 5,
|
|
'gitprotocol-v2.adoc' : 5,
|
|
'gitrepository-layout.adoc' : 5,
|
|
'gitweb.conf.adoc' : 5,
|
|
|
|
# Category 7.
|
|
'gitcli.adoc' : 7,
|
|
'gitcore-tutorial.adoc' : 7,
|
|
'gitcredentials.adoc' : 7,
|
|
'gitcvs-migration.adoc' : 7,
|
|
'gitdiffcore.adoc' : 7,
|
|
'giteveryday.adoc' : 7,
|
|
'gitfaq.adoc' : 7,
|
|
'gitglossary.adoc' : 7,
|
|
'gitpacking.adoc' : 7,
|
|
'gitnamespaces.adoc' : 7,
|
|
'gitremote-helpers.adoc' : 7,
|
|
'gitrevisions.adoc' : 7,
|
|
'gitsubmodules.adoc' : 7,
|
|
'gittutorial-2.adoc' : 7,
|
|
'gittutorial.adoc' : 7,
|
|
'gitworkflows.adoc' : 7,
|
|
}
|
|
|
|
docs_backend = get_option('docs_backend')
|
|
if docs_backend == 'auto'
|
|
if find_program('asciidoc', required: false).found()
|
|
docs_backend = 'asciidoc'
|
|
elif find_program('asciidoctor', required: false).found()
|
|
docs_backend = 'asciidoctor'
|
|
else
|
|
error('Neither asciidoc nor asciidoctor were found.')
|
|
endif
|
|
endif
|
|
|
|
if docs_backend == 'asciidoc'
|
|
asciidoc = find_program('asciidoc', required: true)
|
|
asciidoc_html = 'xhtml11'
|
|
asciidoc_docbook = 'docbook'
|
|
xmlto_extra = [ ]
|
|
|
|
asciidoc_conf = custom_target(
|
|
command: [
|
|
shell,
|
|
meson.project_source_root() / 'GIT-VERSION-GEN',
|
|
meson.project_source_root(),
|
|
'@INPUT@',
|
|
'@OUTPUT@',
|
|
],
|
|
input: 'asciidoc.conf.in',
|
|
output: 'asciidoc.conf',
|
|
depends: [git_version_file],
|
|
env: version_gen_environment,
|
|
)
|
|
|
|
asciidoc_common_options = [
|
|
asciidoc,
|
|
'--conf-file=' + asciidoc_conf.full_path(),
|
|
'--attribute=build_dir=' + meson.current_build_dir(),
|
|
]
|
|
|
|
documentation_deps = [
|
|
asciidoc_conf,
|
|
]
|
|
elif docs_backend == 'asciidoctor'
|
|
asciidoctor = find_program('asciidoctor', required: true)
|
|
asciidoc_html = 'xhtml5'
|
|
asciidoc_docbook = 'docbook5'
|
|
xmlto_extra = [
|
|
'--skip-validation',
|
|
'-x', meson.current_source_dir() / 'manpage.xsl',
|
|
]
|
|
|
|
asciidoctor_extensions = custom_target(
|
|
command: [
|
|
shell,
|
|
meson.project_source_root() / 'GIT-VERSION-GEN',
|
|
meson.project_source_root(),
|
|
'@INPUT@',
|
|
'@OUTPUT@',
|
|
],
|
|
input: 'asciidoctor-extensions.rb.in',
|
|
output: 'asciidoctor-extensions.rb',
|
|
depends: [git_version_file],
|
|
env: version_gen_environment,
|
|
)
|
|
|
|
asciidoc_common_options = [
|
|
asciidoctor,
|
|
'--attribute', 'compat-mode',
|
|
'--attribute', 'tabsize=8',
|
|
'--attribute', 'litdd=--',
|
|
'--attribute', 'docinfo=shared',
|
|
'--attribute', 'build_dir=' + meson.current_build_dir(),
|
|
'--load-path', meson.current_build_dir(),
|
|
'--require', 'asciidoctor-extensions',
|
|
]
|
|
|
|
documentation_deps = [
|
|
asciidoctor_extensions,
|
|
]
|
|
endif
|
|
|
|
git = find_program('git', required: false)
|
|
xmlto = find_program('xmlto')
|
|
|
|
cmd_lists = [
|
|
'cmds-ancillaryinterrogators.adoc',
|
|
'cmds-ancillarymanipulators.adoc',
|
|
'cmds-mainporcelain.adoc',
|
|
'cmds-plumbinginterrogators.adoc',
|
|
'cmds-plumbingmanipulators.adoc',
|
|
'cmds-synchingrepositories.adoc',
|
|
'cmds-synchelpers.adoc',
|
|
'cmds-guide.adoc',
|
|
'cmds-developerinterfaces.adoc',
|
|
'cmds-userinterfaces.adoc',
|
|
'cmds-purehelpers.adoc',
|
|
'cmds-foreignscminterface.adoc',
|
|
]
|
|
|
|
documentation_deps += custom_target(
|
|
command: [
|
|
perl,
|
|
'@INPUT@',
|
|
meson.project_source_root(),
|
|
meson.current_build_dir(),
|
|
] + cmd_lists,
|
|
input: 'cmd-list.perl',
|
|
output: cmd_lists
|
|
)
|
|
|
|
foreach mode : [ 'diff', 'merge' ]
|
|
documentation_deps += custom_target(
|
|
command: [
|
|
shell,
|
|
'@INPUT@',
|
|
'..',
|
|
mode,
|
|
'@OUTPUT@'
|
|
],
|
|
env: [
|
|
'MERGE_TOOLS_DIR=' + meson.project_source_root() / 'mergetools',
|
|
],
|
|
input: 'generate-mergetool-list.sh',
|
|
output: 'mergetools-' + mode + '.adoc',
|
|
)
|
|
endforeach
|
|
|
|
foreach manpage, category : manpages
|
|
if get_option('docs').contains('man')
|
|
manpage_xml_target = custom_target(
|
|
command: asciidoc_common_options + [
|
|
'--backend=' + asciidoc_docbook,
|
|
'--doctype=manpage',
|
|
'--out-file=@OUTPUT@',
|
|
'@INPUT@',
|
|
],
|
|
depends: documentation_deps,
|
|
input: manpage,
|
|
output: fs.stem(manpage) + '.xml',
|
|
)
|
|
|
|
manpage_path = fs.stem(manpage) + '.' + category.to_string()
|
|
manpage_target = custom_target(
|
|
command: [
|
|
xmlto,
|
|
'-m', '@INPUT0@',
|
|
'-m', '@INPUT1@',
|
|
'--stringparam',
|
|
'man.base.url.for.relative.links=' + get_option('prefix') / get_option('mandir'),
|
|
'man',
|
|
manpage_xml_target,
|
|
'-o',
|
|
meson.current_build_dir(),
|
|
] + xmlto_extra,
|
|
input: [
|
|
'manpage-normal.xsl',
|
|
'manpage-bold-literal.xsl',
|
|
],
|
|
output: manpage_path,
|
|
install: true,
|
|
install_dir: get_option('mandir') / 'man' + category.to_string(),
|
|
)
|
|
endif
|
|
|
|
if get_option('docs').contains('html')
|
|
custom_target(
|
|
command: asciidoc_common_options + [
|
|
'--backend=' + asciidoc_html,
|
|
'--doctype=manpage',
|
|
'--out-file=@OUTPUT@',
|
|
'@INPUT@',
|
|
],
|
|
depends: documentation_deps,
|
|
input: manpage,
|
|
output: fs.stem(manpage) + '.html',
|
|
install: true,
|
|
install_dir: get_option('datadir') / 'doc/git-doc',
|
|
)
|
|
endif
|
|
endforeach
|
|
|
|
if get_option('docs').contains('html')
|
|
configure_file(
|
|
input: 'docinfo-html.in',
|
|
output: 'docinfo.html',
|
|
copy: true,
|
|
install: true,
|
|
install_dir: get_option('datadir') / 'doc/git-doc',
|
|
)
|
|
|
|
configure_file(
|
|
input: 'docbook-xsl.css',
|
|
output: 'docbook-xsl.css',
|
|
copy: true,
|
|
install: true,
|
|
install_dir: get_option('datadir') / 'doc/git-doc',
|
|
)
|
|
|
|
install_symlink('index.html',
|
|
install_dir: get_option('datadir') / 'doc/git-doc',
|
|
pointing_to: 'git.html',
|
|
)
|
|
|
|
xsltproc = find_program('xsltproc')
|
|
|
|
user_manual_xml = custom_target(
|
|
command: asciidoc_common_options + [
|
|
'--backend=' + asciidoc_docbook,
|
|
'--doctype=book',
|
|
'--out-file=@OUTPUT@',
|
|
'@INPUT@',
|
|
],
|
|
input: 'user-manual.adoc',
|
|
output: 'user-manual.xml',
|
|
depends: documentation_deps,
|
|
)
|
|
|
|
custom_target(
|
|
command: [
|
|
xsltproc,
|
|
'--xinclude',
|
|
'--stringparam', 'html.stylesheet', 'docbook-xsl.css',
|
|
'--param', 'generate.consistent.ids', '1',
|
|
'--output', '@OUTPUT@',
|
|
'@INPUT@',
|
|
user_manual_xml,
|
|
],
|
|
input: 'docbook.xsl',
|
|
output: 'user-manual.html',
|
|
install: true,
|
|
install_dir: get_option('datadir') / 'doc/git-doc',
|
|
)
|
|
|
|
articles = [
|
|
'DecisionMaking.adoc',
|
|
'MyFirstContribution.adoc',
|
|
'MyFirstObjectWalk.adoc',
|
|
'ReviewingGuidelines.adoc',
|
|
'SubmittingPatches',
|
|
'ToolsForGit.adoc',
|
|
'git-bisect-lk2009.adoc',
|
|
'git-tools.adoc',
|
|
]
|
|
|
|
foreach article : articles
|
|
custom_target(
|
|
command: asciidoc_common_options + [
|
|
'--backend=' + asciidoc_html,
|
|
'--out-file=@OUTPUT@',
|
|
'@INPUT@',
|
|
],
|
|
input: article,
|
|
output: fs.stem(article) + '.html',
|
|
depends: documentation_deps,
|
|
install: true,
|
|
install_dir: get_option('datadir') / 'doc/git-doc',
|
|
)
|
|
endforeach
|
|
|
|
asciidoc_html_options = asciidoc_common_options + [
|
|
'--backend=' + asciidoc_html,
|
|
'--out-file=@OUTPUT@',
|
|
'--attribute', 'git-relative-html-prefix=../',
|
|
'@INPUT@',
|
|
]
|
|
|
|
subdir('howto')
|
|
subdir('technical')
|
|
endif
|
|
|
|
# Sanity check that we are not missing any tests present in 't/'. This check
|
|
# only runs once at configure time and is thus best-effort, only. Furthermore,
|
|
# it only verifies man pages for the sake of simplicity.
|
|
configured_manpages = manpages.keys() + [ 'git-bisect-lk2009.adoc', 'git-tools.adoc' ]
|
|
actual_manpages = run_command(shell, '-c', 'ls git*.adoc scalar.adoc',
|
|
check: true,
|
|
env: script_environment,
|
|
).stdout().strip().split('\n')
|
|
|
|
if configured_manpages != actual_manpages
|
|
missing_manpage = [ ]
|
|
foreach actual_manpage : actual_manpages
|
|
if actual_manpage not in configured_manpages
|
|
missing_manpage += actual_manpage
|
|
endif
|
|
endforeach
|
|
if missing_manpage.length() > 0
|
|
error('Man page found, but not configured:\n\n - ' + '\n - '.join(missing_manpage))
|
|
endif
|
|
|
|
superfluous_manpage = [ ]
|
|
foreach configured_manpage : configured_manpages
|
|
if configured_manpage not in actual_manpages
|
|
superfluous_manpage += configured_manpage
|
|
endif
|
|
endforeach
|
|
if superfluous_manpage.length() > 0
|
|
error('Man page configured, but not found:\n\n - ' + '\n - '.join(superfluous_manpage))
|
|
endif
|
|
endif
|