1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-11-08 02:03:12 +01:00
Find a file
Fredrik Kuivinen 9eceddeec6 Use kwset in grep
Benchmarks for the hot cache case:

before:
$ perf stat --repeat=5 git grep qwerty > /dev/null

Performance counter stats for 'git grep qwerty' (5 runs):

        3,478,085 cache-misses             #      2.322 M/sec   ( +-   2.690% )
       11,356,177 cache-references         #      7.582 M/sec   ( +-   2.598% )
        3,872,184 branch-misses            #      0.363 %       ( +-   0.258% )
    1,067,367,848 branches                 #    712.673 M/sec   ( +-   2.622% )
    3,828,370,782 instructions             #      0.947 IPC     ( +-   0.033% )
    4,043,832,831 cycles                   #   2700.037 M/sec   ( +-   0.167% )
            8,518 page-faults              #      0.006 M/sec   ( +-   3.648% )
              847 CPU-migrations           #      0.001 M/sec   ( +-   3.262% )
            6,546 context-switches         #      0.004 M/sec   ( +-   2.292% )
      1497.695495 task-clock-msecs         #      3.303 CPUs    ( +-   2.550% )

       0.453394396  seconds time elapsed   ( +-   0.912% )

after:
$ perf stat --repeat=5 git grep qwerty > /dev/null

Performance counter stats for 'git grep qwerty' (5 runs):

        2,989,918 cache-misses             #      3.166 M/sec   ( +-   5.013% )
       10,986,041 cache-references         #     11.633 M/sec   ( +-   4.899% )  (scaled from 95.06%)
        3,511,993 branch-misses            #      1.422 %       ( +-   0.785% )
      246,893,561 branches                 #    261.433 M/sec   ( +-   3.967% )
    1,392,727,757 instructions             #      0.564 IPC     ( +-   0.040% )
    2,468,142,397 cycles                   #   2613.494 M/sec   ( +-   0.110% )
            7,747 page-faults              #      0.008 M/sec   ( +-   3.995% )
              897 CPU-migrations           #      0.001 M/sec   ( +-   2.383% )
            6,535 context-switches         #      0.007 M/sec   ( +-   1.993% )
       944.384228 task-clock-msecs         #      3.177 CPUs    ( +-   0.268% )

       0.297257643  seconds time elapsed   ( +-   0.450% )

So we gain about 35% by using the kwset code.

As a side effect of using kwset two grep tests are fixed by this
patch. The first is fixed because kwset can deal with case-insensitive
search containing NULs, something strcasestr cannot do. The second one
is fixed because we consider patterns containing NULs as fixed strings
(regcomp cannot accept patterns with NULs).

Signed-off-by: Fredrik Kuivinen <frekui@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-08-20 22:33:58 -07:00
block-sha1
builtin Merge branch 'maint' 2011-08-18 22:06:03 -07:00
compat Add obstack.[ch] from EGLIBC 2.10 2011-08-20 22:30:46 -07:00
contrib Merge branch 'js/ref-namespaces' 2011-08-17 17:35:38 -07:00
Documentation Update draft release notes to 1.7.7 2011-08-18 22:10:23 -07:00
git-gui Merge git-gui 0.14.0 2011-03-26 10:42:35 -07:00
git_remote_helpers transport-helper: update ref status after push with export 2011-07-19 11:17:48 -07:00
gitk-git Merge git://git.kernel.org/pub/scm/gitk/gitk 2011-04-11 09:33:06 -07:00
gitweb Merge branch 'jn/mime-type-with-params' into maint 2011-08-16 11:41:26 -07:00
perl
po i18n: Makefile: "pot" target to extract messages marked for translation 2011-03-09 23:52:52 -08:00
ppc
t Use kwset in grep 2011-08-20 22:33:58 -07:00
templates
vcs-svn Merge branch 'rj/sparse' 2011-04-27 11:36:42 -07:00
xdiff xdiff/xhistogram: drop need for additional variable 2011-08-08 13:00:17 -07:00
.gitattributes
.gitignore Revert clock-skew based attempt to optimize tag --contains traversal 2011-07-14 11:02:06 -07:00
.mailmap
abspath.c Merge branch 'js/maint-add-path-stat-pwd' into maint 2011-08-16 11:41:27 -07:00
aclocal.m4
advice.c
advice.h
alias.c
alloc.c unbreak and eliminate NO_C99_FORMAT 2011-03-17 15:30:49 -07:00
archive-tar.c upload-archive: allow user to turn off filters 2011-06-22 11:12:35 -07:00
archive-zip.c Merge branch 'jk/archive-tar-filter' 2011-07-19 09:45:32 -07:00
archive.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
archive.h upload-archive: allow user to turn off filters 2011-06-22 11:12:35 -07:00
attr.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
attr.h Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
base85.c
bisect.c bisect: introduce support for --no-checkout option. 2011-08-04 15:34:32 -07:00
bisect.h bisect: introduce support for --no-checkout option. 2011-08-04 15:34:32 -07:00
blob.c
blob.h
branch.c Merge branch 'jh/maint-do-not-track-non-branches' 2011-03-15 14:22:13 -07:00
branch.h
builtin.h Revert clock-skew based attempt to optimize tag --contains traversal 2011-07-14 11:02:06 -07:00
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'js/ref-namespaces' 2011-08-17 17:35:38 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c Share color list between graph and show-branch 2011-04-04 23:20:39 -07:00
color.h Share color list between graph and show-branch 2011-04-04 23:20:39 -07:00
combine-diff.c Merge branch 'jc/maint-combined-diff-work-tree' 2011-08-17 17:25:59 -07:00
command-list.txt
commit.c
commit.h Merge branch 'jk/format-patch-am' 2011-05-31 12:19:11 -07:00
config.c Merge branch 'jc/pack-order-tweak' 2011-08-05 14:54:57 -07:00
config.mak.in Merge branch 'kk/maint-prefix-in-config-mak' into maint 2011-06-01 14:02:39 -07:00
configure.ac configure: Check for libpcre 2011-05-09 16:29:46 -07:00
connect.c Merge branch 'maint' 2011-08-01 14:45:02 -07:00
convert.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
convert.h stream filter: add "no more input" to the filters 2011-05-26 16:47:15 -07:00
copy.c
COPYING
csum-file.c Merge branch 'jc/index-pack' 2011-07-19 09:54:51 -07:00
csum-file.h
ctype.c magic pathspec: futureproof shorthand form 2011-04-08 16:19:48 -07:00
daemon.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
date.c date: avoid "X years, 12 months" in relative dates 2011-04-20 19:23:16 -07:00
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c Merge branch 'jc/maint-reset-unmerged-path' into maint 2011-08-16 11:41:28 -07:00
diff-no-index.c
diff.c Merge branch 'rc/histogram-diff' 2011-08-17 17:36:06 -07:00
diff.h Merge branch 'mg/diff-stat-count' 2011-06-29 17:03:10 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c Use kwset in pickaxe 2011-08-20 22:33:57 -07:00
diffcore-rename.c diffcore-rename.c: avoid set-but-not-used warning 2011-06-01 13:54:17 -07:00
diffcore.h
dir.c Merge branch 'nd/struct-pathspec' 2011-05-06 10:50:06 -07:00
dir.h Merge branch 'nd/maint-setup' 2011-05-02 15:58:30 -07:00
editor.c
entry.c Add streaming filter API 2011-05-26 16:47:15 -07:00
environment.c Merge branch 'js/ref-namespaces' 2011-08-17 17:35:38 -07:00
exec_cmd.c Name make_*_path functions more accurately 2011-03-17 16:08:30 -07:00
exec_cmd.h
fast-import.c Merge branch 'sr/transport-helper-fix' 2011-08-01 15:00:14 -07:00
fetch-pack.h standardize brace placement in struct definitions 2011-03-16 12:49:02 -07:00
fixup-builtins
fsck.c Merge branch 'jm/maint-misc-fix' into maint 2011-05-30 00:09:41 -07:00
fsck.h
generate-cmdlist.sh misc-sh: fix up whitespace in some other .sh files. 2011-08-05 15:04:48 -07:00
gettext.c
gettext.h i18n: avoid parenthesized string as array initializer 2011-04-11 10:33:51 -07:00
git-add--interactive.perl add -i: ignore terminal escape sequences 2011-05-17 20:44:17 -07:00
git-am.sh Merge branch 'db/am-skip-blank-at-the-beginning' 2011-08-18 22:07:57 -07:00
git-archimport.perl
git-bisect.sh bisect: add support for bisecting bare repositories 2011-08-09 10:26:18 -07:00
git-compat-util.h Merge branch 'cb/maint-exec-error-report' 2011-08-17 17:25:55 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl Merge branch 'gr/cvsimport-alternative-cvspass-location' into maint 2011-05-13 10:44:54 -07:00
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh Merge branch 'js/sh-style' 2011-08-17 17:35:50 -07:00
git-instaweb.sh git-instaweb: Check that correct config file exists for (re)start 2011-06-27 09:11:41 +00:00
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh Merge branch 'jk/merge-one-file-working-tree' into maint 2011-05-13 10:44:19 -07:00
git-merge-resolve.sh
git-mergetool--lib.sh misc-sh: fix up whitespace in some other .sh files. 2011-08-05 15:04:48 -07:00
git-mergetool.sh mergetool: check return value from read 2011-07-01 16:17:29 -07:00
git-parse-remote.sh Merge branch 'mz/rebase' 2011-04-28 14:11:39 -07:00
git-pull.sh Merge branch 'oa/pull-reflog' 2011-08-08 12:33:36 -07:00
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh rebase -i -p: include non-first-parent commits in todo list 2011-06-19 14:37:23 -07:00
git-rebase--merge.sh
git-rebase.sh misc-sh: fix up whitespace in some other .sh files. 2011-08-05 15:04:48 -07:00
git-relink.perl
git-remote-testgit.py transport-helper: implement marks location as capability 2011-07-19 11:17:48 -07:00
git-repack.sh
git-request-pull.sh
git-send-email.perl git-send-email: fix missing space in error message 2011-04-29 11:34:32 -07:00
git-sh-i18n.sh git-sh-i18n.sh: add GIT_GETTEXT_POISON support 2011-05-14 20:29:11 -07:00
git-sh-setup.sh git-sh-setup: add die_with_status 2011-06-13 11:23:28 -07:00
git-stash.sh Merge branch 'dc/stash-con-untracked' 2011-07-22 14:46:28 -07:00
git-submodule.sh Merge branch 'jl/submodule-update-quiet' into maint 2011-08-16 12:41:14 -07:00
git-svn.perl git-svn: Correctly handle root commits in mergeinfo ranges 2011-06-28 03:26:11 +00:00
GIT-VERSION-GEN Start 1.7.7 cycle 2011-07-06 17:00:46 -07:00
git-web--browse.sh
git.c Merge branch 'js/bisect-no-checkout' 2011-08-17 17:36:09 -07:00
git.spec.in
graph.c Share color list between graph and show-branch 2011-04-04 23:20:39 -07:00
graph.h
grep.c Use kwset in grep 2011-08-20 22:33:58 -07:00
grep.h Use kwset in grep 2011-08-20 22:33:58 -07:00
hash.c
hash.h
help.c Merge branch 'ms/help-unknown' 2011-07-22 14:43:21 -07:00
help.h
hex.c
http-backend.c zlib: zlib can only process 4GB at a time 2011-06-10 11:52:15 -07:00
http-fetch.c Fix two unused variable warnings in gcc 4.6 2011-04-03 10:59:40 -07:00
http-push.c Merge branch 'jc/zlib-wrap' into maint 2011-08-16 11:23:26 -07:00
http-walker.c http: make curl callbacks match contracts from curl header 2011-05-04 13:30:28 -07:00
http.c Merge branch 'rc/maint-http-wrong-free' 2011-08-11 11:03:13 -07:00
http.h Merge branch 'jc/zlib-wrap' into maint 2011-08-16 11:23:26 -07:00
ident.c Merge branch 'rg/no-gecos-in-pwent' 2011-05-26 10:32:19 -07:00
imap-send.c sparse: Fix some "Using plain integer as NULL pointer" warnings 2011-04-11 10:35:25 -07:00
INSTALL Add explanation of the profile feedback build to the README 2011-06-20 16:31:44 -07:00
kwset.c Adapt the kwset code to Git 2011-08-20 22:33:57 -07:00
kwset.h Adapt the kwset code to Git 2011-08-20 22:33:57 -07:00
levenshtein.c
levenshtein.h
LGPL-2.1 provide a copy of the LGPLv2.1 2011-05-19 18:23:17 -07:00
list-objects.c Merge branch 'nd/struct-pathspec' 2011-05-06 10:50:06 -07:00
list-objects.h
ll-merge.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
ll-merge.h
lockfile.c Name make_*_path functions more accurately 2011-03-17 16:08:30 -07:00
log-tree.c Merge branch 'jk/format-patch-am' 2011-05-31 12:19:11 -07:00
log-tree.h
mailmap.c
mailmap.h
Makefile Use kwset in pickaxe 2011-08-20 22:33:57 -07:00
match-trees.c
merge-file.c sparse: Fix an "symbol 'merge_file' not decared" warning 2011-04-11 10:35:25 -07:00
merge-file.h sparse: Fix an "symbol 'merge_file' not decared" warning 2011-04-11 10:35:25 -07:00
merge-recursive.c teach --histogram to diff 2011-07-12 09:29:20 -07:00
merge-recursive.h Merge branch 'jk/merge-rename-ux' 2011-03-19 23:23:56 -07:00
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c index_fd(): turn write_object and format_check arguments into one flag 2011-05-09 11:58:19 -07:00
notes-merge.h
notes.c notes: refactor display notes default handling 2011-03-29 14:31:59 -07:00
notes.h notes: refactor display notes default handling 2011-03-29 14:31:59 -07:00
object.c read_sha1_file(): get rid of read_sha1_file_repl() madness 2011-05-15 15:23:33 -07:00
object.h object.h: Remove obsolete struct object_refs 2011-03-14 10:49:28 -07:00
pack-check.c zlib: zlib can only process 4GB at a time 2011-06-10 11:52:15 -07:00
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options.c parse-options: add OPT_STRING_LIST helper 2011-06-22 11:25:20 -07:00
parse-options.h parse-options: add OPT_STRING_LIST helper 2011-06-22 11:25:20 -07:00
patch-delta.c
patch-ids.c
patch-ids.h
path.c Name make_*_path functions more accurately 2011-03-17 16:08:30 -07:00
pkt-line.c sparse: Fix errors and silence warnings 2011-04-03 10:14:53 -07:00
pkt-line.h
preload-index.c
pretty.c Merge branch 'jk/format-patch-am' 2011-05-31 12:19:11 -07:00
progress.c
progress.h
quote.c
quote.h
reachable.c Remove unused variables 2011-03-22 11:43:27 -07:00
reachable.h
read-cache.c Merge branch 'ef/maint-win-verify-path' 2011-06-29 17:09:17 -07:00
README
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'js/ref-namespaces' 2011-08-17 17:35:38 -07:00
refs.h Merge branch 'js/ref-namespaces' 2011-08-17 17:35:38 -07:00
RelNotes Prepare for 1.7.6.1 2011-08-16 12:42:17 -07:00
remote-curl.c Merge branch 'cb/maint-quiet-push' 2011-08-17 17:26:05 -07:00
remote.c make copy_ref globally available 2011-06-07 16:07:07 -07:00
remote.h make copy_ref globally available 2011-06-07 16:07:07 -07:00
replace_object.c inline lookup_replace_object() calls 2011-05-15 15:23:33 -07:00
rerere.c Merge branch 'maint' 2011-05-30 00:09:55 -07:00
rerere.h rerere: libify rerere_clear() and rerere_gc() 2011-05-08 12:55:34 -07:00
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'jc/notes-batch-removal' 2011-05-29 23:51:26 -07:00
revision.h Merge branch 'jk/format-patch-am' 2011-05-31 12:19:11 -07:00
run-command.c notice error exit from pager 2011-08-01 16:21:55 -07:00
run-command.h
send-pack.h
server-info.c
setup.c Merge branch 'cb/partial-commit-relative-pathspec' 2011-08-11 11:04:28 -07:00
sh-i18n--envsubst.c Merge branch 'js/i18n-windows' 2011-06-29 17:03:13 -07:00
sha1-array.c receive-pack: eliminate duplicate .have refs 2011-05-19 20:02:31 -07:00
sha1-array.h receive-pack: eliminate duplicate .have refs 2011-05-19 20:02:31 -07:00
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'jc/zlib-wrap' into maint 2011-08-16 11:23:26 -07:00
sha1_name.c Merge branch 'jc/magic-pathspec' 2011-05-23 09:58:35 -07:00
shallow.c
shell.c shell: add missing initialization of argv0_path 2011-05-05 09:32:28 -07:00
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c Merge branch 'jk/maint-config-param' 2011-07-19 09:45:21 -07:00
strbuf.h Merge branch 'jk/maint-config-param' 2011-07-19 09:45:21 -07:00
streaming.c Merge branch 'jc/streaming-filter' 2011-08-01 15:00:29 -07:00
streaming.h Add streaming filter API 2011-05-26 16:47:15 -07:00
string-list.c
string-list.h standardize brace placement in struct definitions 2011-03-16 12:49:02 -07:00
submodule.c Merge branch 'jl/maint-fetch-recursive-fix' into maint 2011-08-01 14:44:17 -07:00
submodule.h
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-index-version.c
test-line-buffer.c vcs-svn: remove buffer_read_string 2011-03-26 00:17:35 -05:00
test-match-trees.c
test-mktemp.c
test-obj-pool.c
test-parse-options.c parse-options: add OPT_STRING_LIST helper 2011-06-22 11:25:20 -07:00
test-path-utils.c test-path-utils: Add subcommand "prefix_path" 2011-08-04 15:57:18 -07:00
test-run-command.c tests: check error message from run_command 2011-04-20 10:08:54 -07:00
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-pool.c
test-subprocess.c Remove unused variables 2011-03-22 11:43:27 -07:00
test-svn-fe.c
test-treap.c
thread-utils.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
thread-utils.h
trace.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
transport-helper.c transport-helper: die early on encountering deleted refs 2011-07-19 11:17:48 -07:00
transport.c propagate --quiet to send-pack/receive-pack 2011-07-31 18:45:41 -07:00
transport.h refactor refs_from_alternate_cb to allow passing extra data 2011-05-19 20:01:10 -07:00
tree-diff.c Merge branch 'jk/diff-not-so-quick' 2011-06-06 11:40:14 -07:00
tree-walk.c pathspec: rename per-item field has_wildcard to use_wildcard 2011-04-05 09:30:36 -07:00
tree-walk.h
tree.c Convert read_tree{,_recursive} to support struct pathspec 2011-03-25 09:20:33 -07:00
tree.h Convert read_tree{,_recursive} to support struct pathspec 2011-03-25 09:20:33 -07:00
unimplemented.sh
unpack-trees.c Merge branch 'jc/diff-index-quick-exit-early' into maint 2011-08-16 11:23:25 -07:00
unpack-trees.h Merge branch 'jc/diff-index-quick-exit-early' into maint 2011-08-16 11:23:25 -07:00
upload-pack.c Merge branch 'jc/maint-smart-http-race-upload-pack' 2011-08-17 17:35:58 -07:00
url.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
url.h
usage.c error_routine: use parent's stderr if exec fails 2011-07-31 18:27:07 -07:00
userdiff.c Merge branch 'jk/combine-diff-binary-etc' into maint 2011-08-16 11:23:24 -07:00
userdiff.h refactor get_textconv to not require diff_filespec 2011-05-23 15:46:02 -07:00
utf8.c
utf8.h
walker.c
walker.h
wrap-for-bin.sh
wrapper.c read_in_full: always report errors 2011-05-26 13:54:18 -07:00
write_or_die.c
ws.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
wt-status.c Merge branch 'jk/maint-1.7.2-status-ignored' 2011-06-29 17:03:12 -07:00
wt-status.h Merge branch 'jn/status-translatable' 2011-03-19 23:24:19 -07:00
xdiff-interface.c add, merge, diff: do not use strcasecmp to compare config variable names 2011-05-14 18:53:39 -07:00
xdiff-interface.h
zlib.c zlib: allow feeding more than 4GB in one go 2011-06-10 16:17:19 -07:00

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, 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

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.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.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).

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

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. 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
http://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.