blob: 26d685f329307aca3ec50ec883362c95f3818744 [file]
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
load("@rules_shell//shell:sh_binary.bzl", "sh_binary")
load("//contrib/bazel:defs.bzl", "GIT_COPTS", "GIT_LINKOPTS")
package(default_visibility = ["//visibility:public"])
exports_files([
"Makefile",
"help.c",
"diagnose.c",
"streaming.c",
"streaming.h",
])
filegroup(
name = "templates",
srcs = glob(["templates/**"]),
)
filegroup(
name = "documentation",
srcs = glob(["Documentation/**"]),
)
filegroup(
name = "po",
srcs = glob(["po/**"]),
)
filegroup(
name = "perl",
srcs = glob(["perl/**"]),
)
filegroup(
name = "mergetools",
srcs = glob(["mergetools/**"]),
)
sh_binary(
name = "generate_script",
srcs = ["generate-script.sh"],
)
sh_binary(
name = "generate_perl",
srcs = ["generate-perl.sh"],
)
expand_template(
name = "git_build_options_default",
out = "GIT-BUILD-OPTIONS.default",
substitutions = {
"@BROKEN_PATH_FIX@": "''",
"@DIFF@": "'diff'",
"@FSMONITOR_DAEMON_BACKEND@": "''",
"@FSMONITOR_OS_SETTINGS@": "''",
"@GITWEBDIR@": "\"${GIT_BUILD_DIR}/gitweb\"",
"@GIT_INTEROP_MAKE_OPTS@": "''",
"@GIT_PERF_LARGE_REPO@": "''",
"@GIT_PERF_MAKE_COMMAND@": "''",
"@GIT_PERF_MAKE_OPTS@": "''",
"@GIT_PERF_REPEAT_COUNT@": "''",
"@GIT_PERF_REPO@": "''",
"@GIT_SOURCE_DIR@": "\"${GIT_BUILD_DIR}\"",
"@GIT_TEST_CMP@": "''",
"@GIT_TEST_CMP_USE_COPIED_CONTEXT@": "''",
"@GIT_TEST_GITPERLLIB@": "\"${GIT_BUILD_DIR}/perl\"",
"@GIT_TEST_INDEX_VERSION@": "''",
"@GIT_TEST_OPTS@": "''",
"@GIT_TEST_PERL_FATAL_WARNINGS@": "''",
"@GIT_TEST_TEMPLATE_DIR@": "\"${GIT_TEST_TEMPLATE_DIR:-${GIT_BUILD_DIR}/templates}\"",
"@GIT_TEST_TEXTDOMAINDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@GIT_TEST_UTF8_LOCALE@": "''",
"@LOCALEDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@NO_CURL@": "''",
"@NO_EXPAT@": "''",
"@NO_GETTEXT@": "'YesPlease'",
"@NO_GITWEB@": "''",
"@NO_ICONV@": "'YesPlease'",
"@NO_PERL@": "''",
"@NO_PERL_CPAN_FALLBACKS@": "''",
"@NO_PTHREADS@": "''",
"@NO_PYTHON@": "''",
"@NO_REGEX@": "''",
"@NO_UNIX_SOCKETS@": "''",
"@PAGER_ENV@": "'LESS=FRX LV=-c'",
"@PERL_LOCALEDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@PERL_PATH@": "'/usr/bin/perl'", # TODO(sluongng): replace with toolchain
"@PYTHON_PATH@": "'/usr/bin/python3'", # TODO(sluongng): replace with toolchain
"@RUNTIME_PREFIX@": "'false'",
"@SANITIZE_ADDRESS@": "''",
"@SANITIZE_LEAK@": "''",
"@SHELL_PATH@": "'/bin/sh'", # TODO(sluongng): replace with toolchain
"@TAR@": "'tar'",
"@TEST_OUTPUT_DIRECTORY@": "\"${TEST_TMPDIR:-}\"",
"@TEST_SHELL_PATH@": "'/bin/sh'", # TODO(sluongng): replace with toolchain
"@USE_GETTEXT_SCHEME@": "'fallthrough'",
"@USE_LIBPCRE2@": "''",
"@WITH_BREAKING_CHANGES@": "''",
"@X@": "''",
},
template = "GIT-BUILD-OPTIONS.in",
)
expand_template(
name = "git_build_options_darwin",
out = "GIT-BUILD-OPTIONS.darwin",
substitutions = {
"@BROKEN_PATH_FIX@": "''",
"@DIFF@": "'diff'",
"@FSMONITOR_DAEMON_BACKEND@": "'darwin'",
"@FSMONITOR_OS_SETTINGS@": "'darwin'",
"@GITWEBDIR@": "\"${GIT_BUILD_DIR}/gitweb\"",
"@GIT_INTEROP_MAKE_OPTS@": "''",
"@GIT_PERF_LARGE_REPO@": "''",
"@GIT_PERF_MAKE_COMMAND@": "''",
"@GIT_PERF_MAKE_OPTS@": "''",
"@GIT_PERF_REPEAT_COUNT@": "''",
"@GIT_PERF_REPO@": "''",
"@GIT_SOURCE_DIR@": "\"${GIT_BUILD_DIR}\"",
"@GIT_TEST_CMP@": "''",
"@GIT_TEST_CMP_USE_COPIED_CONTEXT@": "''",
"@GIT_TEST_GITPERLLIB@": "\"${GIT_BUILD_DIR}/perl\"",
"@GIT_TEST_INDEX_VERSION@": "''",
"@GIT_TEST_OPTS@": "''",
"@GIT_TEST_PERL_FATAL_WARNINGS@": "''",
"@GIT_TEST_TEMPLATE_DIR@": "\"${GIT_TEST_TEMPLATE_DIR:-${GIT_BUILD_DIR}/templates}\"",
"@GIT_TEST_TEXTDOMAINDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@GIT_TEST_UTF8_LOCALE@": "''",
"@LOCALEDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@NO_CURL@": "''",
"@NO_EXPAT@": "''",
"@NO_GETTEXT@": "'YesPlease'",
"@NO_GITWEB@": "''",
"@NO_ICONV@": "''",
"@NO_PERL@": "''",
"@NO_PERL_CPAN_FALLBACKS@": "''",
"@NO_PTHREADS@": "''",
"@NO_PYTHON@": "''",
"@NO_REGEX@": "''",
"@NO_UNIX_SOCKETS@": "''",
"@PAGER_ENV@": "'LESS=FRX LV=-c'",
"@PERL_LOCALEDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@PERL_PATH@": "'/usr/bin/perl'", # TODO(sluongng): replace with toolchain
"@PYTHON_PATH@": "'/usr/bin/python3'", # TODO(sluongng): replace with toolchain
"@RUNTIME_PREFIX@": "'false'",
"@SANITIZE_ADDRESS@": "''",
"@SANITIZE_LEAK@": "''",
"@SHELL_PATH@": "'/bin/sh'", # TODO(sluongng): replace with toolchain
"@TAR@": "'tar'",
"@TEST_OUTPUT_DIRECTORY@": "\"${TEST_TMPDIR:-}\"",
"@TEST_SHELL_PATH@": "'/bin/sh'", # TODO(sluongng): replace with toolchain
"@USE_GETTEXT_SCHEME@": "'fallthrough'",
"@USE_LIBPCRE2@": "''",
"@WITH_BREAKING_CHANGES@": "''",
"@X@": "''",
},
template = "GIT-BUILD-OPTIONS.in",
)
expand_template(
name = "git_build_options_win32",
out = "GIT-BUILD-OPTIONS.win32",
substitutions = {
"@BROKEN_PATH_FIX@": "''",
"@DIFF@": "'diff'",
"@FSMONITOR_DAEMON_BACKEND@": "'win32'",
"@FSMONITOR_OS_SETTINGS@": "'win32'",
"@GITWEBDIR@": "\"${GIT_BUILD_DIR}/gitweb\"",
"@GIT_INTEROP_MAKE_OPTS@": "''",
"@GIT_PERF_LARGE_REPO@": "''",
"@GIT_PERF_MAKE_COMMAND@": "''",
"@GIT_PERF_MAKE_OPTS@": "''",
"@GIT_PERF_REPEAT_COUNT@": "''",
"@GIT_PERF_REPO@": "''",
"@GIT_SOURCE_DIR@": "\"${GIT_BUILD_DIR}\"",
"@GIT_TEST_CMP@": "''",
"@GIT_TEST_CMP_USE_COPIED_CONTEXT@": "''",
"@GIT_TEST_GITPERLLIB@": "\"${GIT_BUILD_DIR}/perl\"",
"@GIT_TEST_INDEX_VERSION@": "''",
"@GIT_TEST_OPTS@": "''",
"@GIT_TEST_PERL_FATAL_WARNINGS@": "''",
"@GIT_TEST_TEMPLATE_DIR@": "\"${GIT_TEST_TEMPLATE_DIR:-${GIT_BUILD_DIR}/templates}\"",
"@GIT_TEST_TEXTDOMAINDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@GIT_TEST_UTF8_LOCALE@": "''",
"@LOCALEDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@NO_CURL@": "''",
"@NO_EXPAT@": "''",
"@NO_GETTEXT@": "'YesPlease'",
"@NO_GITWEB@": "''",
"@NO_ICONV@": "'YesPlease'",
"@NO_PERL@": "''",
"@NO_PERL_CPAN_FALLBACKS@": "''",
"@NO_PTHREADS@": "''",
"@NO_PYTHON@": "''",
"@NO_REGEX@": "''",
"@NO_UNIX_SOCKETS@": "''",
"@PAGER_ENV@": "'LESS=FRX LV=-c'",
"@PERL_LOCALEDIR@": "\"${GIT_BUILD_DIR}/po\"",
"@PERL_PATH@": "'/usr/bin/perl'", # TODO(sluongng): replace with toolchain
"@PYTHON_PATH@": "'/usr/bin/python3'", # TODO(sluongng): replace with toolchain
"@RUNTIME_PREFIX@": "'false'",
"@SANITIZE_ADDRESS@": "''",
"@SANITIZE_LEAK@": "''",
"@SHELL_PATH@": "'/bin/sh'", # TODO(sluongng): replace with toolchain
"@TAR@": "'tar'",
"@TEST_OUTPUT_DIRECTORY@": "\"${TEST_TMPDIR:-}\"",
"@TEST_SHELL_PATH@": "'/bin/sh'", # TODO(sluongng): replace with toolchain
"@USE_GETTEXT_SCHEME@": "'fallthrough'",
"@USE_LIBPCRE2@": "''",
"@WITH_BREAKING_CHANGES@": "''",
"@X@": "''",
},
template = "GIT-BUILD-OPTIONS.in",
)
copy_file(
name = "git_build_options",
src = select({
"@platforms//os:macos": ":git_build_options_darwin",
"@platforms//os:windows": ":git_build_options_win32",
"//conditions:default": ":git_build_options_default",
}),
out = "GIT-BUILD-OPTIONS",
)
genrule(
name = "git_version_file",
srcs = ["GIT-VERSION-FILE.in"],
outs = ["GIT-VERSION-FILE"],
cmd = """
set -euo pipefail
GIT_VERSION="2.52.0"
GIT_BUILT_FROM_COMMIT="9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed"
GIT_DATE="2025-11-17"
GIT_USER_AGENT="git/$${GIT_VERSION}"
export GIT_VERSION GIT_BUILT_FROM_COMMIT GIT_DATE GIT_USER_AGENT
$(location :git_version_gen) "$$(pwd)" "$(location GIT-VERSION-FILE.in)" "$@"
""",
tools = [":git_version_gen"],
)
genrule(
name = "git_sh_i18n",
srcs = [
"git-sh-i18n.sh",
":git_build_options",
],
outs = ["git-sh-i18n"],
cmd = """
set -euo pipefail
$(location :generate_script) $(location git-sh-i18n.sh) "$@" $(location :git_build_options)
""",
executable = True,
tools = [":generate_script"],
)
genrule(
name = "git_sh_setup",
srcs = [
"git-sh-setup.sh",
":git_build_options",
],
outs = ["git-sh-setup"],
cmd = """
set -euo pipefail
$(location :generate_script) $(location git-sh-setup.sh) "$@" $(location :git_build_options)
""",
executable = True,
tools = [":generate_script"],
)
genrule(
name = "git_submodule",
srcs = [
"git-submodule.sh",
":git_build_options",
],
outs = ["git-submodule"],
cmd = """
set -euo pipefail
$(location :generate_script) $(location git-submodule.sh) "$@" $(location :git_build_options)
""",
executable = True,
tools = [":generate_script"],
)
genrule(
name = "git_web__browse",
srcs = [
"git-web--browse.sh",
":git_build_options",
],
outs = ["git-web--browse"],
cmd = """
set -euo pipefail
$(location :generate_script) $(location git-web--browse.sh) "$@" $(location :git_build_options)
""",
executable = True,
tools = [":generate_script"],
)
genrule(
name = "git_filter_branch",
srcs = [
"git-filter-branch.sh",
":git_build_options",
],
outs = ["git-filter-branch"],
cmd = """
set -euo pipefail
$(location :generate_script) $(location git-filter-branch.sh) "$@" $(location :git_build_options)
""",
executable = True,
tools = [":generate_script"],
)
sh_binary(
name = "generate_cmdlist",
srcs = ["generate-cmdlist.sh"],
)
genrule(
name = "command_list",
srcs = ["command-list.txt"] + glob(["Documentation/git*.adoc"]) + [
"Documentation/scalar.adoc",
],
outs = ["command-list.h"],
cmd = """
set -euo pipefail
$(location :generate_cmdlist) \
--exclude-program foo --exclude-program bar \
. "$@"
""",
tools = [":generate_cmdlist"],
)
sh_binary(
name = "generate_hooklist",
srcs = ["generate-hooklist.sh"],
)
genrule(
name = "hook_list",
srcs = ["Documentation/githooks.adoc"],
outs = ["hook-list.h"],
cmd = """
set -euo pipefail
$(location :generate_hooklist) . "$@"
""",
tools = [":generate_hooklist"],
)
sh_binary(
name = "generate_configlist",
srcs = ["generate-configlist.sh"],
)
genrule(
name = "config_list",
srcs = glob([
"Documentation/*config.adoc",
"Documentation/config/*.adoc",
]),
outs = ["config-list.h"],
cmd = """
set -euo pipefail
$(location :generate_configlist) . "$@"
""",
tools = [":generate_configlist"],
)
sh_binary(
name = "git_version_gen",
srcs = ["GIT-VERSION-GEN"],
)
# Generates version-def.h from version-def.h.in using hard-coded version info.
genrule(
name = "version_def",
srcs = ["version-def.h.in"],
outs = ["version-def.h"],
cmd = """
set -euo pipefail
GIT_VERSION="2.52.0"
GIT_BUILT_FROM_COMMIT="9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed"
GIT_DATE="2025-11-17"
GIT_USER_AGENT="git/$${GIT_VERSION}"
export GIT_VERSION GIT_BUILT_FROM_COMMIT GIT_DATE GIT_USER_AGENT
$(location :git_version_gen) "$$(pwd)" "$(location version-def.h.in)" "$@"
""",
tools = [":git_version_gen"],
)
cc_library(
name = "generated",
hdrs = [
"command-list.h",
"config-list.h",
"hook-list.h",
"version-def.h",
],
)
# =============================================================================
# Fine-grained header libraries
# Each header gets its own cc_library target for precise dependency tracking.
# =============================================================================
# Base header needed by compat/posix.h
cc_library(
name = "sane_ctype",
hdrs = ["sane-ctype.h"],
)
# Core compatibility header - almost everything depends on this
cc_library(
name = "git_compat_util",
hdrs = ["git-compat-util.h"],
textual_hdrs = [
"banned.h",
"wrapper.h",
],
deps = [
"//compat:headers",
"@openssl//:ssl",
],
)
# Individual header libraries (alphabetical)
cc_library(
name = "abspath",
hdrs = ["abspath.h"],
)
cc_library(
name = "alloc",
hdrs = ["alloc.h"],
)
cc_library(
name = "chdir_notify",
hdrs = ["chdir-notify.h"],
)
cc_library(
name = "add_interactive",
hdrs = ["add-interactive.h"],
deps = [":color"],
)
cc_library(
name = "color",
hdrs = ["color.h"],
)
cc_library(
name = "commit",
hdrs = ["commit.h"],
deps = [
":add_interactive",
":object",
],
)
cc_library(
name = "config",
hdrs = ["config.h"],
deps = [
":hashmap",
":parse",
":repository",
":string_list",
],
)
cc_library(
name = "convert",
hdrs = ["convert.h"],
deps = [
":hash",
":string_list",
],
)
cc_library(
name = "copy",
hdrs = ["copy.h"],
)
cc_library(
name = "dir",
hdrs = ["dir.h"],
deps = [
":hash",
":hashmap",
":pathspec",
":statinfo",
":strbuf",
],
)
cc_library(
name = "pathspec",
hdrs = ["pathspec.h"],
)
cc_library(
name = "dir_iterator",
hdrs = ["dir-iterator.h"],
)
cc_library(
name = "environment",
hdrs = ["environment.h"],
)
cc_library(
name = "fetch_negotiator",
hdrs = ["fetch-negotiator.h"],
)
cc_library(
name = "fsck",
hdrs = ["fsck.h"],
deps = [":oidset"],
)
cc_library(
name = "fsmonitor_daemon",
hdrs = ["fsmonitor--daemon.h"],
deps = [
":fsmonitor_path_utils",
":hashmap",
":thread_utils",
],
)
cc_library(
name = "fsmonitor_ipc",
hdrs = ["fsmonitor-ipc.h"],
deps = [":simple_ipc"],
)
cc_library(
name = "fsmonitor_ll",
hdrs = ["fsmonitor-ll.h"],
)
cc_library(
name = "fsmonitor_path_utils",
hdrs = ["fsmonitor-path-utils.h"],
deps = [":strbuf"],
)
cc_library(
name = "fsmonitor_settings",
hdrs = ["fsmonitor-settings.h"],
)
cc_library(
name = "oidset",
hdrs = ["oidset.h"],
deps = [":khash"],
)
cc_library(
name = "khash",
hdrs = ["khash.h"],
)
cc_library(
name = "gettext",
hdrs = ["gettext.h"],
)
cc_library(
name = "hash",
hdrs = ["hash.h"],
deps = [":sha1dc_git"],
)
cc_library(
name = "sha1dc_git",
hdrs = ["sha1dc_git.h"],
)
cc_library(
name = "hashmap",
hdrs = ["hashmap.h"],
)
cc_library(
name = "hex",
hdrs = ["hex.h"],
deps = [":hex_ll"],
)
cc_library(
name = "hex_ll",
hdrs = ["hex-ll.h"],
)
cc_library(
name = "ident",
hdrs = ["ident.h"],
)
cc_library(
name = "iterator",
hdrs = ["iterator.h"],
)
cc_library(
name = "json_writer",
hdrs = ["json-writer.h"],
)
cc_library(
name = "lockfile",
hdrs = ["lockfile.h"],
deps = [":tempfile"],
)
cc_library(
name = "object",
hdrs = ["object.h"],
deps = [":hash"],
)
cc_library(
name = "object_file",
hdrs = ["object-file.h"],
deps = [
":git_zlib",
":object",
],
)
cc_library(
name = "git_zlib",
hdrs = ["git-zlib.h"],
)
cc_library(
name = "odb",
hdrs = ["odb.h"],
deps = [
":oidmap",
":oidset",
":thread_utils",
],
)
cc_library(
name = "oidmap",
hdrs = ["oidmap.h"],
)
cc_library(
name = "packfile",
hdrs = ["packfile.h"],
deps = [":list"],
)
cc_library(
name = "parse",
hdrs = ["parse.h"],
)
cc_library(
name = "path",
hdrs = ["path.h"],
)
cc_library(
name = "pkt_line",
hdrs = ["pkt-line.h"],
)
cc_library(
name = "prio_queue",
hdrs = ["prio-queue.h"],
)
cc_library(
name = "quote",
hdrs = ["quote.h"],
)
cc_library(
name = "refs",
hdrs = ["refs.h"],
deps = [":commit"],
)
cc_library(
name = "replace_object",
hdrs = ["replace-object.h"],
)
cc_library(
name = "repo_settings",
hdrs = ["repo-settings.h"],
)
cc_library(
name = "repository",
hdrs = ["repository.h"],
deps = [
":repo_settings",
":strmap",
],
)
cc_library(
name = "revision",
hdrs = ["revision.h"],
deps = [
":commit",
":commit_slab_decl",
":decorate",
":diff",
":grep",
":ident",
":list_objects_filter_options",
":notes",
":oidset",
":pretty",
":strvec",
],
)
cc_library(
name = "commit_slab_decl",
hdrs = ["commit-slab-decl.h"],
)
cc_library(
name = "decorate",
hdrs = ["decorate.h"],
)
cc_library(
name = "list_objects_filter_options",
hdrs = ["list-objects-filter-options.h"],
)
cc_library(
name = "diff",
hdrs = ["diff.h"],
)
cc_library(
name = "pretty",
hdrs = ["pretty.h"],
deps = [":date"],
)
cc_library(
name = "date",
hdrs = ["date.h"],
)
cc_library(
name = "grep",
hdrs = ["grep.h"],
deps = [
":thread_utils",
":userdiff",
],
)
cc_library(
name = "userdiff",
hdrs = ["userdiff.h"],
deps = [":notes_cache"],
)
cc_library(
name = "notes_cache",
hdrs = ["notes-cache.h"],
deps = [":notes"],
)
cc_library(
name = "notes",
hdrs = ["notes.h"],
)
cc_library(
name = "run_command",
hdrs = ["run-command.h"],
deps = [
":strvec",
":thread_utils",
],
)
cc_library(
name = "strvec",
hdrs = ["strvec.h"],
)
cc_library(
name = "setup",
hdrs = ["setup.h"],
)
cc_library(
name = "sigchain",
hdrs = ["sigchain.h"],
)
cc_library(
name = "simple_ipc",
hdrs = ["simple-ipc.h"],
deps = [":pkt_line"],
)
cc_library(
name = "statinfo",
hdrs = ["statinfo.h"],
)
cc_library(
name = "strbuf",
hdrs = ["strbuf.h"],
)
cc_library(
name = "string_list",
hdrs = ["string-list.h"],
)
cc_library(
name = "strmap",
hdrs = ["strmap.h"],
deps = [":hashmap"],
)
cc_library(
name = "symlinks",
hdrs = ["symlinks.h"],
)
cc_library(
name = "tag",
hdrs = ["tag.h"],
)
cc_library(
name = "list",
hdrs = ["list.h"],
)
cc_library(
name = "tempfile",
hdrs = ["tempfile.h"],
deps = [
":list",
":strbuf",
],
)
cc_library(
name = "thread_utils",
hdrs = ["thread-utils.h"],
)
cc_library(
name = "trace",
hdrs = ["trace.h"],
)
cc_library(
name = "trace2",
hdrs = ["trace2.h"],
)
cc_library(
name = "unix_socket",
hdrs = ["unix-socket.h"],
)
cc_library(
name = "unix_stream_server",
hdrs = ["unix-stream-server.h"],
)
cc_library(
name = "utf8",
hdrs = ["utf8.h"],
)
cc_library(
name = "version",
hdrs = ["version.h"],
)
cc_library(
name = "wildmatch",
hdrs = ["wildmatch.h"],
)
cc_library(
name = "worktree",
hdrs = ["worktree.h"],
)
cc_library(
name = "write_or_die",
hdrs = ["write-or-die.h"],
)
# Split libgit into layered libs so incremental rebuilds can avoid transport/http.
cc_library(
name = "libgit_core",
alwayslink = True,
srcs = [
"abspath.c",
"add-interactive.c",
"add-patch.c",
"advice.c",
"alias.c",
"alloc.c",
"apply.c",
"archive.c",
"archive-tar.c",
"archive-zip.c",
"attr.c",
"base85.c",
"bisect.c",
"blame.c",
"blob.c",
"bloom.c",
"branch.c",
"bundle.c",
"bundle-uri.c",
"cache-tree.c",
"cbtree.c",
"chdir-notify.c",
"checkout.c",
"chunk-format.c",
"color.c",
"column.c",
"combine-diff.c",
"commit.c",
"commit-graph.c",
"commit-reach.c",
"common-exit.c",
"common-init.c",
"config.c",
"connected.c",
"convert.c",
"copy.c",
"credential.c",
"csum-file.c",
"ctype.c",
"date.c",
"decorate.c",
"delta-islands.c",
"diff.c",
"diff-delta.c",
"diff-lib.c",
"diff-merges.c",
"diff-no-index.c",
"diffcore-break.c",
"diffcore-delta.c",
"diffcore-order.c",
"diffcore-pickaxe.c",
"diffcore-rename.c",
"diffcore-rotate.c",
"dir.c",
"dir-iterator.c",
"editor.c",
"entry.c",
"environment.c",
"exec-cmd.c",
"fetch-negotiator.c",
"fmt-merge-msg.c",
"fsck.c",
"fsmonitor.c",
"fsmonitor-ipc.c",
"fsmonitor-settings.c",
"gettext.c",
"git-zlib.c",
"gpg-interface.c",
"graph.c",
"grep.c",
"hash.c",
"hash-lookup.c",
"hashmap.c",
"hex.c",
"hex-ll.c",
"hook.c",
"ident.c",
"json-writer.c",
"kwset.c",
"levenshtein.c",
"line-log.c",
"line-range.c",
"linear-assignment.c",
"list-objects.c",
"list-objects-filter.c",
"list-objects-filter-options.c",
"lockfile.c",
"log-tree.c",
"loose.c",
"mailinfo.c",
"mailmap.c",
"match-trees.c",
"mem-pool.c",
"merge.c",
"merge-blobs.c",
"merge-ll.c",
"merge-ort.c",
"merge-ort-wrappers.c",
"midx.c",
"midx-write.c",
"name-hash.c",
"notes.c",
"notes-cache.c",
"notes-merge.c",
"notes-utils.c",
"object.c",
"object-file.c",
"object-file-convert.c",
"object-name.c",
"odb.c",
"oid-array.c",
"oidmap.c",
"oidset.c",
"oidtree.c",
"pack-bitmap.c",
"pack-bitmap-write.c",
"pack-check.c",
"pack-mtimes.c",
"pack-objects.c",
"pack-refs.c",
"pack-revindex.c",
"pack-write.c",
"packfile.c",
"pager.c",
"parallel-checkout.c",
"parse.c",
"parse-options.c",
"parse-options-cb.c",
"patch-delta.c",
"patch-ids.c",
"path.c",
"path-walk.c",
"pathspec.c",
"pkt-line.c",
"preload-index.c",
"pretty.c",
"prio-queue.c",
"progress.c",
"promisor-remote.c",
"prompt.c",
"prune-packed.c",
"pseudo-merge.c",
"quote.c",
"range-diff.c",
"reachable.c",
"read-cache.c",
"rebase.c",
"rebase-interactive.c",
"ref-filter.c",
"reflog.c",
"reflog-walk.c",
"refs.c",
"refspec.c",
"remote.c",
"repack.c",
"repack-cruft.c",
"repack-filtered.c",
"repack-geometry.c",
"repack-midx.c",
"repack-promisor.c",
"replace-object.c",
"repo-settings.c",
"repository.c",
"rerere.c",
"reset.c",
"resolve-undo.c",
"revision.c",
"run-command.c",
"sequencer.c",
"setup.c",
"sha1dc_git.c",
"shallow.c",
"sigchain.c",
"sparse-index.c",
"split-index.c",
"stable-qsort.c",
"statinfo.c",
"strbuf.c",
"string-list.c",
"strmap.c",
"strvec.c",
"sub-process.c",
"submodule.c",
"submodule-config.c",
"symlinks.c",
"tag.c",
"tempfile.c",
"thread-utils.c",
"tmp-objdir.c",
"trace.c",
"trace2.c",
"trailer.c",
"tree.c",
"tree-diff.c",
"tree-walk.c",
"unix-socket.c",
"unix-stream-server.c",
"unpack-trees.c",
"url.c",
"urlmatch.c",
"usage.c",
"userdiff.c",
"utf8.c",
"varint.c",
"version.c",
"versioncmp.c",
"walker.c",
"wildmatch.c",
"worktree.c",
"wrapper.c",
"write-or-die.c",
"ws.c",
"wt-status.c",
"xdiff-interface.c",
],
hdrs = glob(["*.h"]),
copts = GIT_COPTS,
deps = [
"//:generated",
"//compat",
"//compat/simple-ipc",
"//compiler-tricks",
"//ewah",
"//negotiator",
"//odb",
"//refs",
"//reftable",
"//sha1dc",
"//sha256",
"//trace2",
"//xdiff",
"@curl",
"@openssl//:ssl",
"@zlib",
],
)
cc_library(
name = "libgit_transport",
alwayslink = True,
srcs = [
"connect.c",
"fetch-pack.c",
"ls-refs.c",
"protocol.c",
"protocol-caps.c",
"send-pack.c",
"serve.c",
"server-info.c",
"sideband.c",
"transport.c",
"transport-helper.c",
"upload-pack.c",
],
copts = GIT_COPTS,
deps = [
":libgit_core",
],
)
cc_library(
name = "libgit_http",
srcs = [
"http.c",
"http-walker.c",
"remote-curl.c",
],
copts = GIT_COPTS,
deps = [
":libgit_transport",
"@curl",
],
)
cc_library(
name = "libgit",
deps = [
":libgit_core",
":libgit_http",
":libgit_transport",
],
)
cc_binary(
name = "git",
srcs = [
"common-main.c",
"git.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_transport",
"//builtin",
],
)
cc_binary(
name = "git-daemon",
srcs = [
"common-main.c",
"daemon.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [":libgit_transport"],
)
cc_binary(
name = "git-http-backend",
srcs = [
"common-main.c",
"http-backend.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [":libgit_transport"],
)
cc_binary(
name = "git-http-fetch",
srcs = [
"common-main.c",
"http-fetch.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_http",
],
)
cc_binary(
name = "git-http-push",
srcs = [
"common-main.c",
"http-push.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_http",
"@libexpat",
],
)
cc_binary(
name = "git-imap-send",
srcs = [
"common-main.c",
"imap-send.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_http",
],
)
cc_binary(
name = "git-sh-i18n--envsubst",
srcs = [
"common-main.c",
"sh-i18n--envsubst.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_transport",
],
)
cc_binary(
name = "git-shell",
srcs = [
"common-main.c",
"shell.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_transport",
],
)
cc_binary(
name = "git-remote-http",
srcs = [
"common-main.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_http",
],
)
[
copy_file(
name = t.replace("-", "_"),
src = ":git-remote-http",
out = t,
allow_symlink = True,
is_executable = True,
)
for t in [
"git-remote-ftp",
"git-remote-ftps",
"git-remote-https",
]
]
# Server binaries aliases
[
copy_file(
name = t.replace("-", "_"),
src = ":git",
out = t,
allow_symlink = True,
is_executable = True,
)
for t in [
"git-receive-pack",
"git-upload-archive",
"git-upload-pack",
]
]
cc_binary(
name = "scalar",
srcs = [
"common-main.c",
"help.c",
"scalar.c",
],
copts = GIT_COPTS,
linkopts = GIT_LINKOPTS,
deps = [
":libgit_core",
":libgit_transport",
],
)
copy_file(
name = "git_merge_ours",
src = ":git",
out = "git-merge-ours",
allow_symlink = True,
is_executable = True,
)
[
copy_file(
name = t.replace("-", "_"),
src = t + ".sh",
out = t,
allow_symlink = True,
is_executable = True,
)
for t in [
"git-merge-resolve",
"git-merge-one-file",
"git-merge-octopus",
"git-request-pull",
"git-mergetool",
"git-difftool--helper",
]
]
copy_file(
name = "git_mergetool__lib",
src = "git-mergetool--lib.sh",
out = "git-mergetool--lib",
allow_symlink = False,
is_executable = True,
)
expand_template(
name = "git_perl_header",
out = "GIT-PERL-HEADER",
substitutions = {
"@INSTLIBDIR@": "/dev/null",
"@PATHSEP@": ":",
},
template = "perl/header_templates/fixed_prefix.template.pl",
)
genrule(
name = "git_send_email",
srcs = [
"git-send-email.perl",
":git_build_options",
":git_perl_header",
":git_version_file",
],
outs = ["git-send-email"],
cmd = """
set -euo pipefail
$(location :generate_perl) \
$(location :git_build_options) \
$(location :git_version_file) \
$(location :git_perl_header) \
$(location git-send-email.perl) \
"$@"
""",
executable = True,
tools = [":generate_perl"],
)