1
0
mirror of https://github.com/git/git.git synced 2024-10-03 15:11:22 +02:00
Git Source Code Mirror. Please follow Documentation/SubmittingPatches procedure for any of your improvements.
Go to file
Junio C Hamano 68067ca1ef builtin-branch.c: optimize --merged and --no-merged
"git branch --no-merged $commit" used to compute the merge base between
the tip of each and every branch with the named $commit, but this was
wasteful when you have many branches.  Inside append_ref() we literally
ran has_commit() between the tip of the branch and the merge_filter_ref.

Instead, we can let the revision machinery traverse the history as if we
are running:

    $ git rev-list --branches --not $commit

by queueing the tips of branches we encounter as positive refs (this
mimicks the "--branches" option in the above command line) and then
appending the merge_filter_ref commit as a negative one, and finally
calling prepare_revision_walk() to limit the list..

After the traversal is done, branch tips that are reachable from $commit
are painted UNINTERESTING; they are already fully contained in $commit
(i.e. --merged).  Tips that are not painted UNINTERESTING still have
commits that are not reachable from $commit, thus "--no-merged" will show
them.

With an artificial repository that has "master" and 1000 test-$i branches
where they were created by "git branch test-$i master~$i":

    (with patch)
    $ /usr/bin/time git-branch --no-merged master >/dev/null
    0.12user 0.02system 0:00.15elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+1588minor)pagefaults 0swaps

    $ /usr/bin/time git-branch --no-merged test-200 >/dev/null
    0.15user 0.03system 0:00.18elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+1711minor)pagefaults 0swaps

    (without patch)
    $ /usr/bin/time git-branch --no-merged master >/dev/null
    0.69user 0.03system 0:00.72elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+2229minor)pagefaults 0swaps

    $ /usr/bin/time git-branch --no-merged test-200 >/dev/null
    0.58user 0.03system 0:00.61elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+2248minor)pagefaults 0swaps

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-23 16:57:04 -07:00
arm
compat Add ANSI control code emulation for the Windows console 2008-07-19 11:17:43 -07:00
contrib In perforce, RCS keywords are case-sensitive 2008-07-23 11:33:34 -07:00
Documentation Fix two leftovers from path_list->string_list 2008-07-22 15:28:22 -07:00
git-gui Merge git://repo.or.cz/git-gui 2008-07-15 00:08:02 -07:00
gitk-git
gitweb
mozilla-sha1
perl Git.pm: Add remote_refs() git-ls-remote frontend 2008-07-08 22:46:01 -07:00
ppc
t git-am: Add colon before the subject that is printed out as being applied 2008-07-23 12:31:37 -07:00
templates
xdiff
.gitattributes
.gitignore
.mailmap .mailmap update 2008-07-19 11:25:51 -07:00
abspath.c
alias.c
alloc.c
archive-tar.c archive: remove unused headers 2008-07-19 11:17:43 -07:00
archive-zip.c archive: remove unused headers 2008-07-19 11:17:43 -07:00
archive.c archive: unify file attribute handling 2008-07-15 07:18:04 -07:00
archive.h archive: make zip compression level independent from core git 2008-07-19 11:17:43 -07:00
attr.c Fix buffer overflow in prepare_attr_stack 2008-07-16 14:05:50 -07:00
attr.h
base85.c
blob.c
blob.h
branch.c Move MERGE_RR from .git/rr-cache/ into .git/ 2008-07-13 01:03:10 -07:00
branch.h
builtin-add.c Merge branch 'jc/add-addremove' 2008-07-20 17:53:17 -07:00
builtin-annotate.c
builtin-apply.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-archive.c archive: remove unused headers 2008-07-19 11:17:43 -07:00
builtin-blame.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-branch.c builtin-branch.c: optimize --merged and --no-merged 2008-07-23 16:57:04 -07:00
builtin-bundle.c
builtin-cat-file.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-check-attr.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-check-ref-format.c
builtin-checkout-index.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-checkout.c add context pointer to read_tree_recursive() 2008-07-15 07:17:59 -07:00
builtin-clean.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-clone.c builtin-clone: rewrite guess_dir_name() 2008-07-19 11:17:43 -07:00
builtin-commit-tree.c
builtin-commit.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-config.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-count-objects.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-describe.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-diff-files.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-diff-index.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-diff-tree.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-diff.c Allow pager of diff command be enabled/disabled 2008-07-23 11:14:47 -07:00
builtin-fast-export.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-fetch--tool.c
builtin-fetch-pack.c git fetch-pack: do not complain about "no common commits" in an empty repo 2008-07-16 15:53:43 -07:00
builtin-fetch.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-fmt-merge-msg.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-for-each-ref.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-fsck.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-gc.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-grep.c Merge branch 'maint' 2008-07-20 17:16:29 -07:00
builtin-http-fetch.c
builtin-init-db.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-log.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-ls-files.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-ls-remote.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-ls-tree.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-mailinfo.c mailinfo: better parse email adresses containg parentheses 2008-07-21 20:09:12 -07:00
builtin-mailsplit.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-merge-base.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-merge-file.c
builtin-merge-ours.c
builtin-merge-recursive.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-merge.c builtin-merge: add missing structure initialization 2008-07-21 22:32:53 -07:00
builtin-mv.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-name-rev.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-pack-objects.c
builtin-pack-refs.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-prune-packed.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-prune.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-push.c builtin-push.c: Cleanup - use OPT_BIT() and remove some variables 2008-07-20 14:41:49 -07:00
builtin-read-tree.c
builtin-reflog.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-remote.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-rerere.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-reset.c "needs update" considered harmful 2008-07-20 17:21:32 -07:00
builtin-rev-list.c Merge branch 'maint' 2008-07-19 11:28:06 -07:00
builtin-rev-parse.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-revert.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-rm.c Merge branch 'maint' 2008-07-19 11:28:06 -07:00
builtin-send-pack.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-shortlog.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-show-branch.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-show-ref.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-stripspace.c
builtin-symbolic-ref.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-tag.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-tar-tree.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-unpack-objects.c
builtin-update-index.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-update-ref.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-upload-archive.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-verify-pack.c
builtin-verify-tag.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-write-tree.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin.h Allow pager of diff command be enabled/disabled 2008-07-23 11:14:47 -07:00
bundle.c
bundle.h
cache-tree.c cache-tree.c: make cache_tree_find() static 2008-07-16 08:50:27 -07:00
cache-tree.h cache-tree.c: make cache_tree_find() static 2008-07-16 08:50:27 -07:00
cache.h "needs update" considered harmful 2008-07-20 17:21:32 -07:00
check_bindir
check-builtins.sh
check-racy.c
color.c
color.h
combine-diff.c
command-list.txt
commit.c sort_in_topological_order(): avoid setting a commit flag 2008-07-23 12:00:21 -07:00
commit.h Merge branch 'mv/merge-in-c' 2008-07-15 19:09:46 -07:00
config.c Move code interpreting path relative to exec-dir to new function system_path() 2008-07-13 14:41:28 -07:00
config.mak.in
configure.ac
connect.c
convert.c Fixed text file auto-detection: treat EOF character 032 at the end of file as printable 2008-07-11 21:14:27 -07:00
copy.c
COPYING
csum-file.c
csum-file.h
ctype.c
daemon.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c Fix buffer overflow in git diff 2008-07-16 14:03:24 -07:00
diff-no-index.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
diff.c Merge branch 'maint' 2008-07-16 17:10:28 -07:00
diff.h Fix buffer overflow in git diff 2008-07-16 14:03:24 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore.h
dir.c
dir.h
dump-cache-tree.c
entry.c
environment.c
exec_cmd.c Move code interpreting path relative to exec-dir to new function system_path() 2008-07-13 14:41:28 -07:00
exec_cmd.h Move code interpreting path relative to exec-dir to new function system_path() 2008-07-13 14:41:28 -07:00
fast-import.c Support gitlinks in fast-import. 2008-07-19 11:25:51 -07:00
fetch-pack.h
fixup-builtins make remove-dashes: apply to scripts and programs as well, not just to builtins 2008-07-11 21:13:17 -07:00
fsck.c
fsck.h
generate-cmdlist.sh
git-add--interactive.perl Merge branch 'sp/win' 2008-07-15 18:59:45 -07:00
git-am.sh git-am: Add colon before the subject that is printed out as being applied 2008-07-23 12:31:37 -07:00
git-archimport.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-bisect.sh git-bisect: use dash-less form on git bisect log 2008-07-11 21:13:16 -07:00
git-compat-util.h Merge branch 'mv/merge-in-c' 2008-07-15 19:09:46 -07:00
git-cvsexportcommit.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-cvsimport.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-cvsserver.perl cvsserver: Add cvs co -c support 2008-07-19 11:17:43 -07:00
git-filter-branch.sh
git-instaweb.sh Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool.sh
git-parse-remote.sh
git-pull.sh Ignore dirty submodule states in "git pull --rebase" 2008-07-23 11:36:56 -07:00
git-quiltimport.sh Rename .git/rebase to .git/rebase-apply 2008-07-21 18:51:47 -07:00
git-rebase--interactive.sh rebase -i: When an 'edit' stops, mention the commit 2008-07-23 12:02:57 -07:00
git-rebase.sh Rename .git/rebase to .git/rebase-apply 2008-07-21 18:51:47 -07:00
git-relink.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-repack.sh Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-request-pull.sh git-request-pull: replace call to deprecated peek-remote 2008-07-13 16:08:27 -07:00
git-send-email.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-sh-setup.sh Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-stash.sh stash save: fix parameter handling 2008-07-23 16:57:03 -07:00
git-submodule.sh git-submodule: move ill placed shift. 2008-07-21 22:36:29 -07:00
git-svn.perl git-svn: fix git svn info to work without arguments 2008-07-20 15:16:50 -07:00
GIT-VERSION-GEN
git-web--browse.sh
git.c Revert "make git-status use a pager" 2008-07-21 19:41:17 -07:00
git.spec.in
graph.c
graph.h
grep.c
grep.h
hash-object.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
hash.c
hash.h
help.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
http-push.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
http-walker.c Merge branch 'maint' 2008-07-19 11:28:06 -07:00
http.c
http.h
ident.c
imap-send.c
index-pack.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
INSTALL Tone down warning about GNU Interactive Tools 2008-07-08 23:05:26 -07:00
interpolate.c
interpolate.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c
log-tree.h
mailmap.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
mailmap.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
Makefile Rename path_list to string_list 2008-07-21 19:11:50 -07:00
match-trees.c
merge-file.c
merge-index.c
merge-recursive.h
merge-tree.c
mktag.c
mktree.c
name-hash.c
object.c
object.h
pack-check.c
pack-redundant.c Make usage strings dash-less 2008-07-13 14:12:48 -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: fix segmentation fault when a required value is missing 2008-07-21 21:20:04 -07:00
parse-options.h parse-options: add PARSE_OPT_LASTARG_DEFAULT flag 2008-07-09 01:33:24 -07:00
patch-delta.c
patch-id.c
patch-ids.c
patch-ids.h
path.c Merge branch 'maint' to sync with 1.5.6.3 2008-07-13 15:45:38 -07:00
pkt-line.c
pkt-line.h
pretty.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
progress.c
progress.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c "needs update" considered harmful 2008-07-20 17:21:32 -07:00
README
receive-pack.c
reflog-walk.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
reflog-walk.h
refs.c Merge branch 'maint' 2008-07-09 00:19:50 -07:00
refs.h
RelNotes Start preparing 1.5.6.4 release notes 2008-07-16 15:55:51 -07:00
remote.c Reword "your branch has diverged..." lines to reduce line length 2008-07-16 17:56:59 -07:00
remote.h
rerere.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
rerere.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
revision.c Merge branch 'maint' 2008-07-16 17:10:28 -07:00
revision.h sort_in_topological_order(): avoid setting a commit flag 2008-07-23 12:00:21 -07:00
run-command.c
run-command.h
send-pack.h
server-info.c
setup.c
sha1_file.c restore legacy behavior for read_sha1_file() 2008-07-14 23:35:32 -07:00
sha1_name.c
sha1-lookup.c
sha1-lookup.h
shallow.c
shell.c
shortlog.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
show-index.c
sideband.c
sideband.h
strbuf.c Add some useful functions for strbuf manipulation. 2008-07-13 14:04:04 -07:00
strbuf.h Add some useful functions for strbuf manipulation. 2008-07-13 14:04:04 -07:00
string-list.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
string-list.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-date.c
test-delta.c
test-genrandom.c
test-match-trees.c
test-parse-options.c
test-path-utils.c
test-sha1.c
test-sha1.sh
thread-utils.c
thread-utils.h
trace.c
transport.c
transport.h
tree-diff.c Fix buffer overflow in git diff 2008-07-16 14:03:24 -07:00
tree-walk.c
tree-walk.h
tree.c add context pointer to read_tree_recursive() 2008-07-15 07:17:59 -07:00
tree.h add context pointer to read_tree_recursive() 2008-07-15 07:17:59 -07:00
unpack-file.c
unpack-trees.c
unpack-trees.h
update-server-info.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
upload-pack.c
usage.c
utf8.c
utf8.h
var.c
walker.c
walker.h
wrapper.c Move read_in_full() and write_in_full() to wrapper.c 2008-07-20 17:17:09 -07:00
write_or_die.c Move read_in_full() and write_in_full() to wrapper.c 2008-07-20 17:17:09 -07:00
ws.c
wt-status.c Merge branch 'jc/report-tracking' 2008-07-13 15:15:23 -07:00
wt-status.h
xdiff-interface.c
xdiff-interface.h

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

	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/tutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands,
and "man git-commandname" for documentation of each command.
CVS users may also want to read Documentation/cvs-migration.txt.

Many Git online resources are accessible from http://git.or.cz/
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.