Go to file
Ævar Arnfjörð Bjarmason 9725c8dda2 built-ins: trust the "prefix" from run_builtin()
Change code in "builtin/grep.c" and "builtin/ls-tree.c" to trust the
"prefix" passed from "run_builtin()". The "prefix" we get from setup.c
is either going to be NULL or a string of length >0, never "".

So we can drop the "prefix && *prefix" checks added for
"builtin/grep.c" in 0d042fecf2 (git-grep: show pathnames relative to
the current directory, 2006-08-11), and for "builtin/ls-tree.c" in
a69dd585fc (ls-tree: chomp leading directories when run from a
subdirectory, 2005-12-23).

As seen in code in revision.c that was added in cd676a5136 (diff
--relative: output paths as relative to the current subdirectory,
2008-02-12) we already have existing code that does away with this
assertion.

This makes it easier to reason about a subsequent change to the
"prefix_length" code in grep.c in a subsequent commit, and since we're
going to the trouble of doing that let's leave behind an assert() to
promise this to any future callers.

For "builtin/grep.c" it would be painful to pass the "prefix" down the
callchain of:

    cmd_grep -> grep_tree -> grep_submodule -> grep_cache -> grep_oid ->
    grep_source_name

So for the code that needs it in grep_source_name() let's add a
"grep_prefix" variable similar to the existing "ls_tree_prefix".

While at it let's move the code in cmd_ls_tree() around so that we
assign to the "ls_tree_prefix" right after declaring the variables,
and stop assigning to "prefix". We only subsequently used that
variable later in the function after clobbering it. Let's just use our
own "grep_prefix" instead.

Let's also add an assert() in git.c, so that we'll make this promise
about the "prefix" to any current and future callers, as well as to
any readers of the code.

Code history:

 * The strlen() in "grep.c" hasn't been used since 493b7a08d8 (grep:
   accept relative paths outside current working directory, 2009-09-05).

   When that code was added in 0d042fecf2 (git-grep: show pathnames
   relative to the current directory, 2006-08-11) we used the length.

   But since 493b7a08d8 we haven't used it for anything except a
   boolean check that we could have done on the "prefix" member
   itself.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-02-15 18:00:50 -08:00
.github Merge branch 'ab/ci-updates' 2021-12-15 09:39:49 -08:00
Documentation Last minute fixes before -rc1 2022-01-12 16:27:08 -08:00
block-sha1
builtin built-ins: trust the "prefix" from run_builtin() 2022-02-15 18:00:50 -08:00
ci Merge branch 'ab/ci-updates' 2021-12-15 09:39:49 -08:00
compat Merge branch 'ma/windows-dynload-fix' 2022-01-12 15:11:41 -08:00
contrib Merge branch 'jl/subtree-check-parents-argument-passing-fix' 2022-01-10 11:52:54 -08:00
ewah
git-gui
gitk-git
gitweb
mergetools
negotiator
perl
po l10n: README: call more attention to plural strings 2021-12-21 12:55:28 -08:00
ppc
refs Merge branch 'ab/refs-errno-cleanup' 2022-01-14 15:25:15 -08:00
reftable reftable tests: avoid "int" overflow, use "uint64_t" 2022-01-13 13:39:09 -08:00
sha1collisiondetection@855827c583
sha1dc
sha256
t grep tests: add missing "grep.patternType" config tests 2022-02-15 18:00:50 -08:00
templates
trace2 Merge branch 'ab/run-command' 2021-12-15 09:39:47 -08:00
xdiff Merge branch 'pw/xdiff-classify-record-in-histogram' 2021-12-21 15:03:14 -08:00
.cirrus.yml
.clang-format
.editorconfig
.gitattributes
.gitignore
.gitmodules
.mailmap
.tsan-suppressions
CODE_OF_CONDUCT.md
COPYING
GIT-VERSION-GEN Git 2.35-rc1 2022-01-14 15:26:53 -08:00
INSTALL
LGPL-2.1
Makefile Merge branch 'ab/makefile-hook-list-dependency-fix' 2022-01-10 11:52:52 -08:00
README.md CI: use shorter names that fit in UX tooltips 2021-11-23 16:51:53 -08:00
RelNotes Git 2.34.1 2021-11-24 10:55:13 -08:00
SECURITY.md
abspath.c
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c run-command API users: use strvec_pushv(), not argv assignment 2021-11-25 22:15:07 -08:00
advice.c
advice.h
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'ja/i18n-similar-messages' 2022-01-10 11:52:56 -08:00
apply.h git-apply: add --allow-empty flag 2021-12-13 14:30:25 -08:00
archive-tar.c run-command API users: use strvec_push(), not argv construction 2021-11-25 22:15:07 -08:00
archive-zip.c
archive.c i18n: factorize "--foo requires --bar" and the like 2022-01-05 13:31:00 -08:00
archive.h
attr.c
attr.h
banned.h
base85.c
bisect.c
bisect.h
blame.c
blame.h
blob.c
blob.h
bloom.c
bloom.h
branch.c Merge branch 'ak/protect-any-current-branch' 2022-01-12 15:11:41 -08:00
branch.h branch: add flags and config to inherit tracking 2021-12-20 22:40:21 -08:00
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c Merge branch 'vd/sparse-reset' 2021-12-10 14:35:12 -08:00
cache-tree.h
cache.h Merge branch 'ma/header-dup-cleanup' 2022-01-12 15:11:43 -08:00
cbtree.c cbtree: remove broken and unused cb_unlink 2021-12-07 15:18:35 -08:00
cbtree.h cbtree: remove broken and unused cb_unlink 2021-12-07 15:18:35 -08:00
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 commit-graph: return if there is no git directory 2021-12-06 09:55:05 -08:00
commit-graph.h
commit-reach.c
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c ssh signing: make verify-commit consider key lifetime 2021-12-09 13:38:04 -08:00
commit.h
common-main.c Merge branch 'en/keep-cwd' 2022-01-05 14:01:28 -08:00
config.c Merge branch 'js/branch-track-inherit' 2022-01-10 11:52:54 -08:00
config.h
config.mak.dev config.mak.dev: specify -std=gnu99 for gcc/clang 2021-12-08 13:16:44 -08:00
config.mak.in
config.mak.uname Merge branch 'da/rhel7-lacks-uncompress2-and-c99' 2022-01-17 15:15:59 -08:00
configure.ac Merge branch 'hn/reftable' 2021-12-15 09:39:45 -08:00
connect.c
connect.h
connected.c run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
connected.h
convert.c Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
convert.h
copy.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c Merge branch 'rs/daemon-plug-leak' 2022-01-05 14:01:31 -08:00
date.c
decorate.c
decorate.h
delta-islands.c
delta-islands.h
delta.h
detect-compiler
diff-delta.c
diff-lib.c
diff-merges.c
diff-merges.h
diff-no-index.c
diff.c Merge branch 'ja/i18n-similar-messages' 2022-01-10 11:52:56 -08:00
diff.h
diffcore-break.c
diffcore-delta.c diffcore-delta.c: LLP64 compatibility, upcast unity for left shift 2021-12-01 14:48:10 -08:00
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore-rotate.c
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'ds/sparse-checkout-malformed-pattern-fix' 2022-01-10 11:52:49 -08:00
dir.h dir: new flag to remove_dir_recurse() to spare the original_cwd 2021-12-09 13:33:13 -08:00
editor.c run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
entry.c Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
entry.h Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
environment.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
environment.h
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c i18n: factorize "--foo requires --bar" and the like 2022-01-05 13:31:00 -08:00
fetch-pack.h
fmt-merge-msg.c Merge branch 'fs/ssh-signing-key-lifetime' 2022-01-12 15:11:41 -08:00
fmt-merge-msg.h merge: allow to pretend a merge is made into a different branch 2021-12-20 14:55:02 -08:00
fsck.c
fsck.h
fsmonitor.c
fsmonitor.h
fuzz-commit-graph.c
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh
generate-configlist.sh
generate-hooklist.sh
gettext.c
gettext.h
git-add--interactive.perl add -p: avoid use of undefined $key when ReadKey -> EOF 2021-11-28 15:14:09 -08:00
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'ab/usage-die-message' 2022-01-10 11:52:53 -08: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 Merge branch 'jh/p4-remove-unused' 2022-01-10 11:52:50 -08:00
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh
git-sh-setup.sh Merge branch 'ab/sh-retire-helper-functions' 2021-11-29 15:41:50 -08:00
git-submodule.sh
git-svn.perl
git-web--browse.sh
git.c built-ins: trust the "prefix" from run_builtin() 2022-02-15 18:00:50 -08:00
git.rc
gpg-interface.c Merge branch 'fs/ssh-signing-other-keytypes' 2021-12-21 15:03:16 -08:00
gpg-interface.h ssh signing: make verify-commit consider key lifetime 2021-12-09 13:38:04 -08:00
graph.c
graph.h
grep.c built-ins: trust the "prefix" from run_builtin() 2022-02-15 18:00:50 -08:00
grep.h built-ins: trust the "prefix" from run_builtin() 2022-02-15 18:00:50 -08:00
hash-lookup.c
hash-lookup.h
hash.h
hashmap.c
hashmap.h
help.c help: make auto-correction prompt more consistent 2021-12-16 13:49:39 -08:00
help.h
hex.c
hook.c
hook.h
http-backend.c Merge branch 'ab/usage-die-message' 2022-01-10 11:52:53 -08:00
http-fetch.c i18n: factorize "--foo requires --bar" and the like 2022-01-05 13:31:00 -08:00
http-push.c
http-walker.c
http.c run-command API users: use strvec_pushv(), not argv assignment 2021-11-25 22:15:07 -08:00
http.h
ident.c
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.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
list-objects-filter.h
list-objects.c
list-objects.h
list.h
ll-merge.c
ll-merge.h
lockfile.c
lockfile.h
log-tree.c ssh signing: make git log verify key lifetime 2021-12-09 13:38:04 -08:00
log-tree.h
ls-refs.c
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c
mailmap.h
match-trees.c
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c merge-ort: fix bug with renormalization and rename/delete conflicts 2021-12-30 10:40:26 -08:00
merge-ort.h
merge-recursive.c
merge-recursive.h
merge.c
mergesort.c
mergesort.h
midx.c Merge branch 'tb/plug-pack-bitmap-leaks' 2021-11-29 15:41:49 -08:00
midx.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object-file.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
object-name.c
object-store.h Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
object.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
object.h
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c
oidtree.h
pack-bitmap-write.c
pack-bitmap.c Merge branch 'jk/test-bitmap-fix' 2021-12-10 14:35:08 -08:00
pack-bitmap.h
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
packfile.c Merge branch 'jt/pack-header-lshift-overflow' 2022-01-12 15:11:41 -08:00
packfile.h Merge branch 'tb/pack-revindex-on-disk-cleanup' 2021-12-15 09:39:50 -08:00
pager.c pager: fix crash when pager program doesn't exist 2021-11-24 16:14:10 -08:00
parallel-checkout.c Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
parallel-checkout.h
parse-options-cb.c branch: add flags and config to inherit tracking 2021-12-20 22:40:21 -08:00
parse-options.c Merge branch 'ab/usage-die-message' 2022-01-10 11:52:53 -08:00
parse-options.h Merge branch 'js/branch-track-inherit' 2022-01-10 11:52:54 -08:00
patch-delta.c
patch-ids.c
patch-ids.h
path.c
path.h
pathspec.c
pathspec.h pathspec: use BUG(...) not die("BUG:%s:%d....", <file>, <line>) 2021-12-07 12:31:17 -08:00
pkt-line.c
pkt-line.h
preload-index.c
pretty.c Merge branch 'es/pretty-describe-more' 2021-12-15 09:39:48 -08:00
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c
promisor-remote.h
prompt.c run-command API users: use strvec_push(), not argv construction 2021-11-25 22:15:07 -08:00
prompt.h
protocol-caps.c
protocol-caps.h
protocol.c
protocol.h
prune-packed.c
prune-packed.h
quote.c
quote.h
range-diff.c i18n: refactor "foo and bar are mutually exclusive" 2022-01-05 13:29:23 -08:00
range-diff.h
reachable.c
reachable.h
read-cache.c Merge branch 'vd/sparse-reset' 2021-12-10 14:35:12 -08:00
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c i18n: ref-filter: factorize "%(foo) atom used without %(bar) atom" 2022-01-05 13:31:00 -08:00
ref-filter.h
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'ab/refs-errno-cleanup' 2022-01-14 15:25:15 -08:00
refs.h reflog + refs-backend: move "verbose" out of the backend 2021-12-22 16:24:14 -08:00
refspec.c
refspec.h
remote-curl.c run-command API users: use strvec_pushv(), not argv assignment 2021-11-25 22:15:07 -08:00
remote.c Merge branch 'gc/remote-with-fewer-static-global-variables' 2021-12-10 14:35:02 -08:00
remote.h
replace-object.c
replace-object.h
repo-settings.c repo-settings: prepare_repo_settings only in git repos 2021-12-06 09:55:06 -08:00
repository.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
repository.h Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
rerere.c
rerere.h
reset.c
reset.h
resolve-undo.c
resolve-undo.h
revision.c built-ins: trust the "prefix" from run_builtin() 2022-02-15 18:00:50 -08:00
revision.h log: let --invert-grep only invert --grep 2021-12-17 14:13:08 -08:00
run-command.c Merge branch 'ab/usage-die-message' 2022-01-10 11:52:53 -08:00
run-command.h run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
send-pack.c
send-pack.h
sequencer.c Merge branch 'en/keep-cwd' 2022-01-05 14:01:28 -08:00
sequencer.h
serve.c
serve.h
server-info.c
setup.c setup: introduce startup_info->original_cwd 2021-12-09 13:33:12 -08:00
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c
shallow.h
shell.c
shortlog.h
sideband.c
sideband.h
sigchain.c
sigchain.h
simple-ipc.h
sparse-index.c sparse-index: add ensure_correct_sparsity function 2021-11-24 16:32:38 -08:00
sparse-index.h sparse-index: add ensure_correct_sparsity function 2021-11-24 16:32:38 -08:00
split-index.c
split-index.h
stable-qsort.c
strbuf.c
strbuf.h strbuf.h: use BUG(...) not die("BUG: ...") 2021-12-07 12:31:16 -08:00
streaming.c
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h
strvec.c
strvec.h
sub-process.c run-command API: remove "argv" member, always use "args" 2021-11-25 22:15:07 -08:00
sub-process.h
submodule-config.c
submodule-config.h
submodule.c
submodule.h
symlinks.c symlinks: do not include startup_info->original_cwd in dir removal 2021-12-09 13:33:13 -08:00
tag.c ssh signing: make verify-tag consider key lifetime 2021-12-09 13:38:04 -08:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c tmp-objdir: new API for creating temporary writable databases 2021-12-08 14:06:36 -08:00
tmp-objdir.h tmp-objdir: new API for creating temporary writable databases 2021-12-08 14:06:36 -08:00
trace.c
trace.h
trace2.c
trace2.h
trailer.c run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
trailer.h
transport-helper.c
transport-internal.h
transport.c Merge branch 'ps/lockfile-cleanup-fix' 2022-01-12 15:11:43 -08:00
transport.h fetch: fix deadlock when cleaning up lockfiles in async signals 2022-01-07 13:49:19 -08:00
tree-diff.c pathspec: use BUG(...) not die("BUG:%s:%d....", <file>, <line>) 2021-12-07 12:31:17 -08:00
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 Merge branch 'en/keep-cwd' 2022-01-05 14:01:28 -08:00
unpack-trees.h unpack-trees: refuse to remove startup_info->original_cwd 2021-12-09 13:33:12 -08:00
upload-pack.c upload-pack.c: increase output buffer size 2021-12-15 11:51:18 -08:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c config API: use get_error_routine(), not vreportf() 2021-12-07 13:25:16 -08:00
userdiff.c
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c worktree: simplify find_shared_symref() memory ownership model 2021-12-01 22:18:25 -08:00
worktree.h worktree: simplify find_shared_symref() memory ownership model 2021-12-01 22:18:25 -08:00
wrap-for-bin.sh
wrapper.c
write-or-die.c Merge branch 'ew/test-wo-fsync' 2021-12-15 09:39:52 -08:00
ws.c
wt-status.c Merge branch 'xw/am-empty' 2022-01-05 14:01:28 -08:00
wt-status.h
xdiff-interface.c xdiff: implement a zealous diff3, or "zdiff3" 2021-12-01 14:45:58 -08:00
xdiff-interface.h
zlib.c

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). To subscribe to the list, send an email with just "subscribe git" in the body to majordomo@vger.kernel.org. The mailing list archives are available at https://lore.kernel.org/git/, http://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