Go to file
Jeff King 436728fe9d diff: return const char from output_prefix callback
The diff_options structure has an output_prefix callback for returning a
prefix string, but it does so by returning a pointer to a strbuf.

This makes the interface awkward. There's no reason the callback should
need to use a strbuf, and it creates questions about whether the
ownership of the resulting buffer should be transferred to the caller
(it should not be, but a recent attempt to clean up this code led to a
double-free in some cases).

The one advantage we get is that the strbuf contains a ptr/len pair, so
we could in theory have a prefix with embedded NULs. But we can observe
that none of the existing callbacks would ever produce such a NUL (they
are usually just indentation or graph symbols, and even the
"--line-prefix" option takes a NUL-terminated string).

And anyway, only one caller (the one in log_tree_diff_flush) actually
looks at the strbuf length. In every other case we use a helper function
which discards the length and just returns the NUL-terminated string.

So let's just have the callback return a "const char *" pointer. It's up
to the callbacks themselves if they want to use a strbuf under the hood.
And now the caller in log_tree_diff_flush() can just use the helper
function along with everybody else. That lets us even simplify out the
function pointer check, since the helper returns an empty string
(technically this does mean we'll sometimes issue an empty fputs() call,
but I don't think this code path is hot enough to care about that).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-10-03 14:22:22 -07:00
.github ci: use regular action versions for linux32 job 2024-09-12 10:21:10 -07:00
Documentation Git 2.46.2 2024-09-23 10:33:01 -07:00
block-sha1
builtin Merge branch 'bl/trailers-and-incomplete-last-line-fix' into maint-2.46 2024-09-23 10:33:00 -07:00
ci ci: add Ubuntu 16.04 job to GitLab CI 2024-09-13 09:02:30 -07:00
compat compat/terminal: mark parameter of git_terminal_prompt() UNUSED 2024-09-01 08:26:51 -07:00
contrib Merge branch 'jk/osxkeychain-username-is-nul-terminated' into maint-2.46 2024-08-26 11:10:17 -07:00
ewah
git-gui Merge https://github.com/j6t/git-gui 2024-07-07 22:50:59 -07:00
gitk-git
gitweb Merge branch 'am/gitweb-feed-use-committer-date' 2024-07-15 10:11:41 -07:00
mergetools
negotiator
oss-fuzz Merge branch 'tb/path-filter-fix' 2024-07-08 14:53:10 -07:00
perl
po l10n: zh_CN: updated translation for 2.46 2024-07-28 19:52:41 +08:00
refs Merge branch 'ss/packed-ref-store-leakfix' into maint-2.46 2024-08-26 11:10:22 -07:00
reftable Merge branch 'cp/unit-test-reftable-record' 2024-07-15 10:11:44 -07:00
sha1
sha1collisiondetection@855827c583
sha1dc
sha256
t line-log: protect inner strbuf from free 2024-10-03 09:07:16 -07:00
templates
trace2
xdiff
.cirrus.yml
.clang-format Merge branch 'rs/clang-format-updates' 2024-07-15 10:11:42 -07:00
.editorconfig
.gitattributes
.gitignore
.gitlab-ci.yml ci: add Ubuntu 16.04 job to GitLab CI 2024-09-13 09:02:30 -07:00
.gitmodules
.mailmap
.tsan-suppressions
CODE_OF_CONDUCT.md
COPYING
GIT-VERSION-GEN Git 2.46.2 2024-09-23 10:33:01 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'cp/unit-test-reftable-record' 2024-07-15 10:11:44 -07:00
README.md
RelNotes Start preparing for Git 2.46.2 2024-09-16 15:19:05 -07:00
SECURITY.md
abspath.c
abspath.h
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c Merge branch 'pw/add-patch-with-suppress-blank-empty' into maint-2.46 2024-08-16 12:50:54 -07:00
advice.c Merge branch 'ds/advice-sparse-index-expansion' 2024-07-16 11:18:56 -07:00
advice.h Merge branch 'ds/advice-sparse-index-expansion' 2024-07-16 11:18:56 -07:00
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'jk/apply-patch-mode-check-fix' into maint-2.46 2024-09-12 11:02:15 -07:00
apply.h Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
archive-tar.c
archive-zip.c
archive.c
archive.h
attr.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
attr.h
banned.h
base85.c
base85.h
bisect.c
bisect.h
blame.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
blame.h
blob.c
blob.h
bloom.c Merge branch 'tb/path-filter-fix' 2024-07-08 14:53:10 -07:00
bloom.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle-uri.c Merge branch 'xx/bundie-uri-fixes' 2024-07-08 14:53:11 -07:00
bundle-uri.h
bundle.c bundle: default to SHA1 when reading bundle headers 2024-08-13 10:26:44 -07:00
bundle.h
cache-tree.c
cache-tree.h
cbtree.c
cbtree.h
chdir-notify.c
chdir-notify.h
check-builtins.sh
checkout.c
checkout.h
chunk-format.c
chunk-format.h
color.c
color.h
column.c
column.h
combine-diff.c
command-list.txt
commit-graph.c Merge branch 'tb/path-filter-fix' 2024-07-08 14:53:10 -07:00
commit-graph.h
commit-reach.c
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
commit.h Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
common-main.c
config.c Merge branch 'tb/config-fixed-value-with-valueless-true' into maint-2.46 2024-08-26 11:10:18 -07:00
config.h
config.mak.dev Merge branch 'tb/dev-build-pedantic-fix' 2024-07-15 10:11:42 -07:00
config.mak.in
config.mak.uname Merge branch 'rj/cygwin-has-dev-tty' into maint-2.46 2024-09-23 10:32:59 -07:00
configure.ac
connect.c
connect.h
connected.c
connected.h
convert.c Merge branch 'dh/encoding-trace-optim' into maint-2.46 2024-08-16 12:50:55 -07:00
convert.h
copy.c
copy.h
credential.c
credential.h
csum-file.c csum-file: introduce discard_hashfile() 2024-07-26 09:04:02 -07:00
csum-file.h csum-file: introduce discard_hashfile() 2024-07-26 09:04:02 -07:00
ctype.c
daemon.c
date.c
date.h
decorate.c
decorate.h
delta-islands.c
delta-islands.h
delta.h
detect-compiler
diagnose.c
diagnose.h
diff-delta.c
diff-lib.c diff: return const char from output_prefix callback 2024-10-03 14:22:22 -07:00
diff-merges.c
diff-merges.h
diff-no-index.c
diff.c diff: return const char from output_prefix callback 2024-10-03 14:22:22 -07:00
diff.h diff: return const char from output_prefix callback 2024-10-03 14:22:22 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
diffcore-rotate.c
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c win32: override `fspathcmp()` with a directory separator-aware version 2024-07-13 16:23:36 -07:00
dir.h win32: override `fspathcmp()` with a directory separator-aware version 2024-07-13 16:23:36 -07:00
editor.c
editor.h
entry.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
entry.h
environment.c
environment.h
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c Merge branch 'xx/bundie-uri-fixes' 2024-07-08 14:53:11 -07:00
fetch-pack.h
fmt-merge-msg.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
fmt-merge-msg.h
fsck.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
fsck.h
fsmonitor--daemon.h
fsmonitor-ipc.c
fsmonitor-ipc.h
fsmonitor-ll.h
fsmonitor-path-utils.h
fsmonitor-settings.c
fsmonitor-settings.h
fsmonitor.c
fsmonitor.h
generate-cmdlist.sh
generate-configlist.sh
generate-hooklist.sh
gettext.c
gettext.h
git-archimport.perl
git-compat-util.h win32: override `fspathcmp()` with a directory separator-aware version 2024-07-13 16:23:36 -07:00
git-curl-compat.h
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl Merge branch 'cb/send-email-sanitize-trailer-addresses' 2024-07-16 11:18:56 -07:00
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git-zlib.c
git-zlib.h
git.c
git.rc
gpg-interface.c
gpg-interface.h
graph.c diff: return const char from output_prefix callback 2024-10-03 14:22:22 -07:00
graph.h
grep.c
grep.h
hash-lookup.c
hash-lookup.h
hash.h
hashmap.c
hashmap.h
help.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
help.h
hex-ll.c
hex-ll.h
hex.c
hex.h
hook.c
hook.h
http-backend.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
http-fetch.c
http-push.c
http-walker.c
http.c Merge branch 'jc/http-cookiefile' 2024-07-17 10:47:26 -07:00
http.h
ident.c
ident.h
imap-send.c
iterator.h
json-writer.c
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c line-log: use diff_line_prefix() instead of custom helper 2024-10-03 14:22:21 -07:00
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c
list-objects-filter-options.h
list-objects-filter.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
list-objects-filter.h
list-objects.c
list-objects.h
list.h
lockfile.c
lockfile.h
log-tree.c diff: return const char from output_prefix callback 2024-10-03 14:22:22 -07:00
log-tree.h
loose.c
loose.h
ls-refs.c
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c mailmap: plug memory leak in read_mailmap_blob() 2024-07-26 08:00:09 -07:00
mailmap.h
match-trees.c
match-trees.h
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ll.c
merge-ll.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c Merge branch 'en/ort-inner-merge-error-fix' 2024-07-16 11:18:55 -07:00
merge-ort.h Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
merge-recursive.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
merge-recursive.h
merge.c
merge.h
mergesort.h
midx-write.c Merge branch 'ds/midx-write-repack-fix' 2024-07-23 16:54:33 -07:00
midx.c
midx.h
name-hash.c
name-hash.h
notes-cache.c
notes-cache.h
notes-merge.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
notes-merge.h
notes-utils.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
notes-utils.h
notes.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
notes.h
object-file-convert.c
object-file-convert.h
object-file.c Merge branch 'ew/object-convert-leakfix' 2024-07-02 09:59:01 -07:00
object-file.h
object-name.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
object-name.h
object-store-ll.h
object-store.h
object.c
object.h Merge branch 'tb/path-filter-fix' 2024-07-08 14:53:10 -07:00
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c
oidtree.h
pack-bitmap-write.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
pack-bitmap.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
pack-bitmap.h
pack-check.c
pack-mtimes.c
pack-mtimes.h
pack-objects.c
pack-objects.h
pack-revindex.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
pack-revindex.h
pack-write.c
pack.h
packfile.c
packfile.h
pager.c Merge branch 'rj/pager-die-upon-exec-failure' 2024-07-08 14:53:08 -07:00
pager.h
parallel-checkout.c
parallel-checkout.h
parse-options-cb.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
parse-options.c
parse-options.h
parse.c
parse.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c
path.h
pathspec.c
pathspec.h Merge branch 'as/pathspec-h-typofix' 2024-07-12 08:41:57 -07:00
pkt-line.c
pkt-line.h
preload-index.c
preload-index.h
pretty.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c
promisor-remote.h
prompt.c
prompt.h
protocol-caps.c
protocol-caps.h
protocol.c
protocol.h
prune-packed.c
prune-packed.h
pseudo-merge.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
pseudo-merge.h
quote.c
quote.h
range-diff.c diff: return const char from output_prefix callback 2024-10-03 14:22:22 -07:00
range-diff.h
reachable.c
reachable.h
read-cache-ll.h
read-cache.c csum-file: introduce discard_hashfile() 2024-07-26 09:04:02 -07:00
read-cache.h
rebase-interactive.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c set errno=0 before strtoX calls 2024-08-05 10:59:20 -07:00
ref-filter.h
reflog-walk.c
reflog-walk.h
reflog.c Merge branch 'jc/reflog-expire-lookup-commit-fix' into maint-2.46 2024-08-26 11:10:21 -07:00
reflog.h
refs.c Merge branch 'ps/ref-storage-migration-fix' 2024-07-23 16:54:34 -07:00
refs.h Merge branch 'ch/refs-without-the-repository-fix' 2024-07-18 08:30:25 -07:00
refspec.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
refspec.h
remote-curl.c Merge branch 'jk/remote-wo-url' 2024-07-02 09:59:01 -07:00
remote.c Merge branch 'jk/remote-wo-url' 2024-07-02 09:59:01 -07:00
remote.h Merge branch 'jk/remote-wo-url' 2024-07-02 09:59:01 -07:00
replace-object.c
replace-object.h
repo-settings.c Merge branch 'tb/path-filter-fix' 2024-07-08 14:53:10 -07:00
repository.c
repository.h Merge branch 'tb/path-filter-fix' 2024-07-08 14:53:10 -07:00
rerere.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
rerere.h
reset.c
reset.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'jk/free-commit-buffer-of-skipped-commits' into maint-2.46 2024-09-13 15:26:49 -07:00
revision.h
run-command.c run-command: declare the `git_shell_path()` function globally 2024-07-13 16:23:37 -07:00
run-command.h run-command: declare the `git_shell_path()` function globally 2024-07-13 16:23:37 -07:00
sane-ctype.h
scalar.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
send-pack.c Merge branch 'jc/disable-push-nego-for-deletion' 2024-07-15 10:11:43 -07:00
send-pack.h
sequencer.c Merge branch 'ps/leakfixes-more' 2024-07-08 14:53:10 -07:00
sequencer.h Merge branch 'pw/rebase-i-error-message' into maint-2.45 2024-07-02 09:27:56 -07:00
serve.c
serve.h
server-info.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
server-info.h
setup.c safe.directory: normalize the configured path 2024-07-30 11:47:59 -07:00
setup.h
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c
shallow.h
shared.mak
shell.c
shortlog.h
sideband.c
sideband.h
sigchain.c
sigchain.h
simple-ipc.h
sparse-index.c Merge branch 'ds/advice-sparse-index-expansion' 2024-07-16 11:18:56 -07:00
sparse-index.h
split-index.c
split-index.h
stable-qsort.c
statinfo.c
statinfo.h
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h
strvec.c strvec: declare the `strvec_push_nodup()` function globally 2024-07-13 16:23:36 -07:00
strvec.h strvec: declare the `strvec_push_nodup()` function globally 2024-07-13 16:23:36 -07:00
sub-process.c
sub-process.h
submodule-config.c
submodule-config.h
submodule.c
submodule.h
symlinks.c
symlinks.h
tag.c
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c
trailer.h
transport-helper.c
transport-internal.h
transport.c Merge branch 'xx/bundie-uri-fixes' 2024-07-08 14:53:11 -07:00
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c
unpack-trees.h
upload-pack.c
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
versioncmp.h
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c
worktree.h
wrap-for-bin.sh
wrapper.c
wrapper.h
write-or-die.c
write-or-die.h
ws.c
ws.h
wt-status.c Merge branch 'ps/use-the-repository' 2024-07-02 09:59:00 -07:00
wt-status.h
xdiff-interface.c
xdiff-interface.h

README.md

Build status

Git - fast, scalable, distributed revision control system

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.

Git is an Open Source project covered by the GNU General Public License version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.txt to get started, then see Documentation/giteveryday.txt for a useful minimum set of commands, and Documentation/git-<commandname>.txt for documentation of each command. If git has been correctly installed, then the tutorial can also be read with man gittutorial or git help tutorial, and the documentation of each command with man git-<commandname> or git help <commandname>.

CVS users may also want to read Documentation/gitcvs-migration.txt (man gitcvs-migration or git help cvs-migration if git is installed).

The user discussion and development of Git take place on the Git mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to git@vger.kernel.org (read Documentation/SubmittingPatches for instructions on patch submission and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • "goddamn idiotic truckload of sh*t": when it breaks