https://github.com/git/git
Revision 1b600e659abc7e409c9d830e332d3cef01062c1c authored by Shawn O. Pearce on 27 January 2007, 06:54:21 UTC, committed by Junio C Hamano on 28 January 2007, 10:08:51 UTC
My prior change to git-describe attempts to print the distance
between the input commit and the best matching tag, but this distance
was usually only an estimate as we always aborted revision walking
as soon as we overflowed the configured limit on the number of
possible tags (as set by --candidates).

Displaying an estimated distance is not very useful and can just be
downright confusing.  Most users (heck, most Git developers) don't
immediately understand why this distance differs from the output
of common tools such as `git rev-list | wc -l`.  Even worse, the
estimated distance could change in the future (including decreasing
despite no rebase occuring) if we find more possible tags earlier
on during traversal.  (This could happen if more tags are merged
into the branch between queries.)  These factors basically make an
estimated distance useless.

Fortunately we are usually most of the way through an accurate
distance computation by the time we abort (due to reaching the
current --candidates limit).  This means we can simply finish
counting out the revisions still in our commit queue to present
the accurate distance at the end.  The number of commits remaining
in the commit queue is probably less than the number of commits
already traversed, so finishing out the count is not likely to take
very long.  This final distance will then always match the output of
`git rev-list | wc -l`.

We can easily reduce the total number of commits that need to be
walked at the end by stopping as soon as all of the commits in the
commit queue are flagged as being merged into the already selected
best possible tag.  If that's true then there are no remaining
unseen commits which can contribute to our best possible tag's
depth counter, so further traversal is useless.

Basic testing on my Mac OS X system shows there is no noticable
performance difference between this accurate distance counting
version of git-describe and the prior version of git-describe,
at least when run on git.git.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent 1891261
History
Tip revision: 1b600e659abc7e409c9d830e332d3cef01062c1c authored by Shawn O. Pearce on 27 January 2007, 06:54:21 UTC
Compute accurate distances in git-describe before output.
Tip revision: 1b600e6
File Mode Size
Documentation
arm
compat
contrib
gitweb
mozilla-sha1
perl
ppc
t
templates
xdiff
.gitignore -rw-r--r-- 2.1 KB
.mailmap -rw-r--r-- 1.5 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 751 bytes
INSTALL -rw-r--r-- 4.1 KB
Makefile -rw-r--r-- 26.7 KB
README -rw-r--r-- 1.9 KB
alloc.c -rw-r--r-- 1.4 KB
archive-tar.c -rw-r--r-- 8.1 KB
archive-zip.c -rw-r--r-- 8.8 KB
archive.h -rw-r--r-- 1.1 KB
base85.c -rw-r--r-- 2.9 KB
blob.c -rw-r--r-- 1.2 KB
blob.h -rw-r--r-- 311 bytes
builtin-add.c -rw-r--r-- 4.4 KB
builtin-annotate.c -rw-r--r-- 444 bytes
builtin-apply.c -rw-r--r-- 66.1 KB
builtin-archive.c -rw-r--r-- 5.8 KB
builtin-blame.c -rw-r--r-- 48.0 KB
builtin-branch.c -rw-r--r-- 11.6 KB
builtin-cat-file.c -rw-r--r-- 3.2 KB
builtin-check-ref-format.c -rw-r--r-- 282 bytes
builtin-checkout-index.c -rw-r--r-- 7.6 KB
builtin-commit-tree.c -rw-r--r-- 3.9 KB
builtin-count-objects.c -rw-r--r-- 2.9 KB
builtin-describe.c -rw-r--r-- 6.6 KB
builtin-diff-files.c -rw-r--r-- 1.3 KB
builtin-diff-index.c -rw-r--r-- 1.0 KB
builtin-diff-stages.c -rw-r--r-- 2.5 KB
builtin-diff-tree.c -rw-r--r-- 3.2 KB
builtin-diff.c -rw-r--r-- 8.6 KB
builtin-fmt-merge-msg.c -rw-r--r-- 7.7 KB
builtin-for-each-ref.c -rw-r--r-- 20.4 KB
builtin-grep.c -rw-r--r-- 16.3 KB
builtin-init-db.c -rw-r--r-- 8.8 KB
builtin-log.c -rw-r--r-- 16.7 KB
builtin-ls-files.c -rw-r--r-- 11.5 KB
builtin-ls-tree.c -rw-r--r-- 3.5 KB
builtin-mailinfo.c -rw-r--r-- 16.7 KB
builtin-mailsplit.c -rw-r--r-- 4.1 KB
builtin-merge-file.c -rw-r--r-- 1.5 KB
builtin-mv.c -rw-r--r-- 7.4 KB
builtin-name-rev.c -rw-r--r-- 5.4 KB
builtin-pack-objects.c -rw-r--r-- 42.4 KB
builtin-pack-refs.c -rw-r--r-- 2.9 KB
builtin-prune-packed.c -rw-r--r-- 1.8 KB
builtin-prune.c -rw-r--r-- 1.9 KB
builtin-push.c -rw-r--r-- 7.6 KB
builtin-read-tree.c -rw-r--r-- 6.5 KB
builtin-reflog.c -rw-r--r-- 9.5 KB
builtin-repo-config.c -rw-r--r-- 5.4 KB
builtin-rerere.c -rw-r--r-- 10.1 KB
builtin-rev-list.c -rw-r--r-- 6.4 KB
builtin-rev-parse.c -rw-r--r-- 7.7 KB
builtin-rm.c -rw-r--r-- 5.5 KB
builtin-runstatus.c -rw-r--r-- 812 bytes
builtin-shortlog.c -rw-r--r-- 7.9 KB
builtin-show-branch.c -rw-r--r-- 21.0 KB
builtin-show-ref.c -rw-r--r-- 5.7 KB
builtin-stripspace.c -rw-r--r-- 1012 bytes
builtin-symbolic-ref.c -rw-r--r-- 1.0 KB
builtin-tar-tree.c -rw-r--r-- 2.1 KB
builtin-unpack-objects.c -rw-r--r-- 9.0 KB
builtin-update-index.c -rw-r--r-- 16.6 KB
builtin-update-ref.c -rw-r--r-- 1.5 KB
builtin-upload-archive.c -rw-r--r-- 4.1 KB
builtin-verify-pack.c -rw-r--r-- 1.7 KB
builtin-write-tree.c -rw-r--r-- 2.1 KB
builtin.h -rw-r--r-- 5.2 KB
cache-tree.c -rw-r--r-- 12.5 KB
cache-tree.h -rw-r--r-- 921 bytes
cache.h -rw-r--r-- 16.1 KB
check-builtins.sh -rwxr-xr-x 588 bytes
check-racy.c -rw-r--r-- 517 bytes
color.c -rw-r--r-- 3.2 KB
color.h -rw-r--r-- 376 bytes
combine-diff.c -rw-r--r-- 25.0 KB
commit.c -rw-r--r-- 27.2 KB
commit.h -rw-r--r-- 3.6 KB
config.c -rw-r--r-- 19.7 KB
config.mak.in -rw-r--r-- 906 bytes
configure.ac -rw-r--r-- 10.8 KB
connect.c -rw-r--r-- 17.2 KB
convert-objects.c -rw-r--r-- 7.3 KB
copy.c -rw-r--r-- 692 bytes
csum-file.c -rw-r--r-- 2.9 KB
csum-file.h -rw-r--r-- 566 bytes
ctype.c -rw-r--r-- 890 bytes
daemon.c -rw-r--r-- 25.8 KB
date.c -rw-r--r-- 17.0 KB
delta.h -rw-r--r-- 3.2 KB
diff-delta.c -rw-r--r-- 13.8 KB
diff-lib.c -rw-r--r-- 8.8 KB
diff.c -rw-r--r-- 70.3 KB
diff.h -rw-r--r-- 6.7 KB
diffcore-break.c -rw-r--r-- 8.5 KB
diffcore-delta.c -rw-r--r-- 5.1 KB
diffcore-order.c -rw-r--r-- 2.2 KB
diffcore-pickaxe.c -rw-r--r-- 3.2 KB
diffcore-rename.c -rw-r--r-- 13.0 KB
diffcore.h -rw-r--r-- 3.7 KB
dir.c -rw-r--r-- 9.5 KB
dir.h -rw-r--r-- 1.7 KB
dump-cache-tree.c -rw-r--r-- 1.5 KB
entry.c -rw-r--r-- 4.1 KB
environment.c -rw-r--r-- 2.5 KB
exec_cmd.c -rw-r--r-- 2.8 KB
exec_cmd.h -rw-r--r-- 295 bytes
fetch-pack.c -rw-r--r-- 17.4 KB
fetch.c -rw-r--r-- 6.6 KB
fetch.h -rw-r--r-- 1.6 KB
fsck-objects.c -rw-r--r-- 15.5 KB
generate-cmdlist.sh -rwxr-xr-x 544 bytes
git-add--interactive.perl -rwxr-xr-x 15.9 KB
git-am.sh -rwxr-xr-x 11.1 KB
git-applymbox.sh -rwxr-xr-x 2.8 KB
git-applypatch.sh -rwxr-xr-x 5.4 KB
git-archimport.perl -rwxr-xr-x 34.2 KB
git-bisect.sh -rwxr-xr-x 5.7 KB
git-checkout.sh -rwxr-xr-x 6.7 KB
git-clean.sh -rwxr-xr-x 1.5 KB
git-clone.sh -rwxr-xr-x 10.0 KB
git-commit.sh -rwxr-xr-x 13.4 KB
git-compat-util.h -rw-r--r-- 6.3 KB
git-cvsexportcommit.perl -rwxr-xr-x 7.5 KB
git-cvsimport.perl -rwxr-xr-x 25.6 KB
git-cvsserver.perl -rwxr-xr-x 91.3 KB
git-fetch.sh -rwxr-xr-x 11.6 KB
git-gc.sh -rwxr-xr-x 417 bytes
git-instaweb.sh -rwxr-xr-x 5.2 KB
git-lost-found.sh -rwxr-xr-x 468 bytes
git-ls-remote.sh -rwxr-xr-x 2.4 KB
git-merge-octopus.sh -rwxr-xr-x 2.4 KB
git-merge-one-file.sh -rwxr-xr-x 3.1 KB
git-merge-ours.sh -rwxr-xr-x 356 bytes
git-merge-resolve.sh -rwxr-xr-x 955 bytes
git-merge-stupid.sh -rwxr-xr-x 1.4 KB
git-merge.sh -rwxr-xr-x 10.6 KB
git-p4import.py -rw-r--r-- 10.5 KB
git-parse-remote.sh -rwxr-xr-x 6.6 KB
git-pull.sh -rwxr-xr-x 3.2 KB
git-quiltimport.sh -rwxr-xr-x 3.0 KB
git-rebase.sh -rwxr-xr-x 8.2 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote.perl -rwxr-xr-x 6.0 KB
git-repack.sh -rwxr-xr-x 2.6 KB
git-request-pull.sh -rwxr-xr-x 847 bytes
git-reset.sh -rwxr-xr-x 2.3 KB
git-resolve.sh -rwxr-xr-x 2.7 KB
git-revert.sh -rwxr-xr-x 4.3 KB
git-send-email.perl -rwxr-xr-x 15.5 KB
git-sh-setup.sh -rwxr-xr-x 1.7 KB
git-svn.perl -rwxr-xr-x 80.4 KB
git-svnimport.perl -rwxr-xr-x 24.7 KB
git-tag.sh -rwxr-xr-x 3.0 KB
git-verify-tag.sh -rwxr-xr-x 741 bytes
git.c -rw-r--r-- 9.9 KB
git.spec.in -rw-r--r-- 7.0 KB
gitk -rwxr-xr-x 170.5 KB
grep.c -rw-r--r-- 12.8 KB
grep.h -rw-r--r-- 1.6 KB
hash-object.c -rw-r--r-- 1.8 KB
help.c -rw-r--r-- 4.8 KB
http-fetch.c -rw-r--r-- 26.1 KB
http-push.c -rw-r--r-- 66.3 KB
http.c -rw-r--r-- 11.3 KB
http.h -rw-r--r-- 2.5 KB
ident.c -rw-r--r-- 5.5 KB
imap-send.c -rw-r--r-- 28.5 KB
index-pack.c -rw-r--r-- 24.7 KB
interpolate.c -rw-r--r-- 2.0 KB
interpolate.h -rw-r--r-- 583 bytes
list-objects.c -rw-r--r-- 3.3 KB
list-objects.h -rw-r--r-- 382 bytes
local-fetch.c -rw-r--r-- 6.1 KB
lockfile.c -rw-r--r-- 1.5 KB
log-tree.c -rw-r--r-- 8.9 KB
log-tree.h -rw-r--r-- 386 bytes
merge-base.c -rw-r--r-- 1.1 KB
merge-file.c -rw-r--r-- 2.3 KB
merge-index.c -rw-r--r-- 2.7 KB
merge-recursive.c -rw-r--r-- 34.5 KB
merge-tree.c -rw-r--r-- 7.8 KB
mktag.c -rw-r--r-- 3.9 KB
mktree.c -rw-r--r-- 3.1 KB
object-refs.c -rw-r--r-- 3.0 KB
object.c -rw-r--r-- 5.4 KB
object.h -rw-r--r-- 2.4 KB
pack-check.c -rw-r--r-- 4.1 KB
pack-redundant.c -rw-r--r-- 14.3 KB
pack.h -rw-r--r-- 1.6 KB
pager.c -rw-r--r-- 974 bytes
patch-delta.c -rw-r--r-- 2.2 KB
patch-id.c -rw-r--r-- 1.6 KB
path-list.c -rw-r--r-- 2.2 KB
path-list.h -rw-r--r-- 603 bytes
path.c -rw-r--r-- 6.1 KB
peek-remote.c -rw-r--r-- 1.4 KB
pkt-line.c -rw-r--r-- 2.5 KB
pkt-line.h -rw-r--r-- 348 bytes
quote.c -rw-r--r-- 7.6 KB
quote.h -rw-r--r-- 2.0 KB
reachable.c -rw-r--r-- 4.8 KB
reachable.h -rw-r--r-- 127 bytes
read-cache.c -rw-r--r-- 24.9 KB
receive-pack.c -rw-r--r-- 10.9 KB
reflog-walk.c -rw-r--r-- 6.2 KB
reflog-walk.h -rw-r--r-- 379 bytes
refs.c -rw-r--r-- 28.3 KB
refs.h -rw-r--r-- 2.1 KB
revision.c -rw-r--r-- 31.2 KB
revision.h -rw-r--r-- 3.1 KB
rsh.c -rw-r--r-- 1.7 KB
rsh.h -rw-r--r-- 159 bytes
run-command.c -rw-r--r-- 1.8 KB
run-command.h -rw-r--r-- 594 bytes
send-pack.c -rw-r--r-- 9.6 KB
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 6.7 KB
sha1_file.c -rw-r--r-- 49.7 KB
sha1_name.c -rw-r--r-- 13.2 KB
shallow.c -rw-r--r-- 2.3 KB
shell.c -rw-r--r-- 1.1 KB
show-index.c -rw-r--r-- 594 bytes
sideband.c -rw-r--r-- 1.9 KB
sideband.h -rw-r--r-- 335 bytes
ssh-fetch.c -rw-r--r-- 3.6 KB
ssh-pull.c -rw-r--r-- 154 bytes
ssh-push.c -rw-r--r-- 155 bytes
ssh-upload.c -rw-r--r-- 2.8 KB
strbuf.c -rw-r--r-- 768 bytes
strbuf.h -rw-r--r-- 216 bytes
tag.c -rw-r--r-- 2.6 KB
tag.h -rw-r--r-- 471 bytes
tar.h -rw-r--r-- 644 bytes
test-date.c -rw-r--r-- 378 bytes
test-delta.c -rw-r--r-- 1.7 KB
test-sha1.c -rw-r--r-- 815 bytes
test-sha1.sh -rwxr-xr-x 1.9 KB
trace.c -rw-r--r-- 3.9 KB
tree-diff.c -rw-r--r-- 6.1 KB
tree-walk.c -rw-r--r-- 4.4 KB
tree-walk.h -rw-r--r-- 863 bytes
tree.c -rw-r--r-- 5.0 KB
tree.h -rw-r--r-- 860 bytes
unpack-file.c -rw-r--r-- 820 bytes
unpack-trees.c -rw-r--r-- 18.2 KB
unpack-trees.h -rw-r--r-- 890 bytes
update-server-info.c -rw-r--r-- 457 bytes
upload-pack.c -rw-r--r-- 16.1 KB
usage.c -rw-r--r-- 1.9 KB
utf8.c -rw-r--r-- 9.5 KB
utf8.h -rw-r--r-- 389 bytes
var.c -rw-r--r-- 1.3 KB
write_or_die.c -rw-r--r-- 1.3 KB
wt-status.c -rw-r--r-- 9.0 KB
wt-status.h -rw-r--r-- 566 bytes
xdiff-interface.c -rw-r--r-- 2.6 KB
xdiff-interface.h -rw-r--r-- 500 bytes

README

back to top