https://github.com/git/git
Revision 1389d9ddaa68a4cbf5018d88f971b9bbb7aaa3c9 authored by Junio C Hamano on 06 January 2007, 10:16:19 UTC, committed by Junio C Hamano on 07 January 2007, 06:57:34 UTC
The logic in an earlier round to detect reflog entries that
point at a broken commit was not sufficient.  Just like we do
not trust presense of a commit during pack transfer (we trust
only our refs), we should not trust a commit's presense, even if
the tree of that commit is complete.

A repository that had reflog enabled on some of the refs that
was rewound and then run git-repack or git-prune from older
versions of git can have reflog entries that point at a commit
that still exist but lack commits (or trees and blobs needed for
that commit) between it and some commit that is reachable from
one of the refs.

This revamps the logic -- the definition of "broken commit"
becomes: a commit that is not reachable from any of the refs and
there is a missing object among the commit, tree, or blob
objects reachable from it that is not reachable from any of the
refs.  Entries in the reflog that refer to such a commit are
expired.

Since this computation involves traversing all the reachable
objects, i.e. it has the same cost as 'git prune', it is enabled
only when a new option --fix-stale.  Fortunately, once this is
run, we should not have to ever worry about missing objects,
because the current prune and pack-objects know about reflogs
and protect objects referred by them.

Unfortunately, this will be absolutely necessary to help people
migrate to the newer prune and repack.

Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent 9442147
History
Tip revision: 1389d9ddaa68a4cbf5018d88f971b9bbb7aaa3c9 authored by Junio C Hamano on 06 January 2007, 10:16:19 UTC
reflog expire --fix-stale
Tip revision: 1389d9d
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.4 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.2 KB
README -rw-r--r-- 24.7 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.3 KB
builtin-annotate.c -rw-r--r-- 444 bytes
builtin-apply.c -rw-r--r-- 65.9 KB
builtin-archive.c -rw-r--r-- 5.8 KB
builtin-blame.c -rw-r--r-- 46.7 KB
builtin-branch.c -rw-r--r-- 10.9 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-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.7 KB
builtin-log.c -rw-r--r-- 16.0 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.6 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-- 41.3 KB
builtin-pack-refs.c -rw-r--r-- 2.7 KB
builtin-prune-packed.c -rw-r--r-- 1.5 KB
builtin-prune.c -rw-r--r-- 1.9 KB
builtin-push.c -rw-r--r-- 7.1 KB
builtin-read-tree.c -rw-r--r-- 6.5 KB
builtin-reflog.c -rw-r--r-- 8.6 KB
builtin-repo-config.c -rw-r--r-- 5.4 KB
builtin-rerere.c -rw-r--r-- 9.9 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.4 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-- 19.2 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-- 728 bytes
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.6 KB
builtin-write-tree.c -rw-r--r-- 2.1 KB
builtin.h -rw-r--r-- 5.1 KB
cache-tree.c -rw-r--r-- 12.5 KB
cache-tree.h -rw-r--r-- 921 bytes
cache.h -rw-r--r-- 15.7 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-- 26.4 KB
commit.h -rw-r--r-- 3.6 KB
config.c -rw-r--r-- 17.6 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
describe.c -rw-r--r-- 3.7 KB
diff-delta.c -rw-r--r-- 13.8 KB
diff-lib.c -rw-r--r-- 8.7 KB
diff.c -rw-r--r-- 70.2 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.3 KB
exec_cmd.c -rw-r--r-- 2.8 KB
exec_cmd.h -rw-r--r-- 295 bytes
fetch-pack.c -rw-r--r-- 16.3 KB
fetch.c -rw-r--r-- 6.6 KB
fetch.h -rw-r--r-- 1.6 KB
fsck-objects.c -rw-r--r-- 14.0 KB
generate-cmdlist.sh -rwxr-xr-x 547 bytes
git-add--interactive.perl -rwxr-xr-x 15.9 KB
git-am.sh -rwxr-xr-x 10.9 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 5.4 KB
git-clean.sh -rwxr-xr-x 1.5 KB
git-clone.sh -rwxr-xr-x 9.9 KB
git-commit.sh -rwxr-xr-x 13.2 KB
git-compat-util.h -rw-r--r-- 4.9 KB
git-cvsexportcommit.perl -rwxr-xr-x 7.5 KB
git-cvsimport.perl -rwxr-xr-x 25.0 KB
git-cvsserver.perl -rwxr-xr-x 90.9 KB
git-fetch.sh -rwxr-xr-x 11.2 KB
git-gc.sh -rwxr-xr-x 265 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.2 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.5 KB
git-p4import.py -rw-r--r-- 10.5 KB
git-parse-remote.sh -rwxr-xr-x 6.2 KB
git-pull.sh -rwxr-xr-x 2.9 KB
git-quiltimport.sh -rwxr-xr-x 3.0 KB
git-rebase.sh -rwxr-xr-x 8.1 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-repack.sh -rwxr-xr-x 2.6 KB
git-request-pull.sh -rwxr-xr-x 847 bytes
git-rerere.perl -rwxr-xr-x 6.0 KB
git-reset.sh -rwxr-xr-x 2.2 KB
git-resolve.sh -rwxr-xr-x 2.7 KB
git-revert.sh -rwxr-xr-x 4.2 KB
git-send-email.perl -rwxr-xr-x 15.2 KB
git-sh-setup.sh -rwxr-xr-x 1.1 KB
git-svn.perl -rwxr-xr-x 80.1 KB
git-svnimport.perl -rwxr-xr-x 24.7 KB
git-tag.sh -rwxr-xr-x 2.9 KB
git-verify-tag.sh -rwxr-xr-x 741 bytes
git.c -rw-r--r-- 9.6 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.2 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.7 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-- 33.9 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.5 KB
pack-redundant.c -rw-r--r-- 14.3 KB
pack.h -rw-r--r-- 382 bytes
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.0 KB
peek-remote.c -rw-r--r-- 1.3 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.7 KB
refs.c -rw-r--r-- 26.8 KB
refs.h -rw-r--r-- 2.0 KB
revision.c -rw-r--r-- 30.8 KB
revision.h -rw-r--r-- 3.0 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.5 KB
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 6.1 KB
sha1_file.c -rw-r--r-- 44.4 KB
sha1_name.c -rw-r--r-- 12.7 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.3 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-- 812 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.0 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.2 KB
wt-status.c -rw-r--r-- 7.5 KB
wt-status.h -rw-r--r-- 451 bytes
xdiff-interface.c -rw-r--r-- 2.6 KB
xdiff-interface.h -rw-r--r-- 500 bytes

README

back to top