https://github.com/git/git
Revision 5723fe7e3cbbefae78bfb79c46b7716eef76fe52 authored by Linus Torvalds on 14 June 2008, 17:50:12 UTC, committed by Junio C Hamano on 14 June 2008, 21:39:22 UTC
Instead of creating new temporary objects in the top-level git object directory, create them in the same directory they will finally end up in anyway. This avoids making the final atomic "rename to stable name" operation be a cross-directory event, which makes it a lot easier for various filesystems. Several filesystems do things like change the inode number when moving files across directories (or refuse to do it entirely). In particular, it can also cause problems for NFS implementations that change the filehandle of a file when it moves to a different directory, like the old user-space NFS server did, and like the Linux knfsd still does if you don't export your filesystems with 'no_subtree_check' or if you export a filesystem that doesn't have stable inode numbers across renames). This change also obviously implies creating the object fan-out subdirectory at tempfile creation time, rather than at the final move_temp_to_file() time. Which actually accounts for most of the size of the patch. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 9adefee
Tip revision: 5723fe7e3cbbefae78bfb79c46b7716eef76fe52 authored by Linus Torvalds on 14 June 2008, 17:50:12 UTC
Avoid cross-directory renames and linking on object creation
Avoid cross-directory renames and linking on object creation
Tip revision: 5723fe7
File | Mode | Size |
---|---|---|
Documentation | ||
arm | ||
compat | ||
contrib | ||
git-gui | ||
gitk-git | ||
gitweb | ||
mozilla-sha1 | ||
perl | ||
ppc | ||
t | ||
templates | ||
xdiff | ||
.gitattributes | -rw-r--r-- | 51 bytes |
.gitignore | -rw-r--r-- | 2.3 KB |
.mailmap | -rw-r--r-- | 2.1 KB |
COPYING | -rw-r--r-- | 18.3 KB |
GIT-VERSION-GEN | -rwxr-xr-x | 703 bytes |
INSTALL | -rw-r--r-- | 4.9 KB |
Makefile | -rw-r--r-- | 39.4 KB |
README | -rw-r--r-- | 2.1 KB |
RelNotes | l--------- | 32 bytes |
alias.c | -rw-r--r-- | 439 bytes |
alloc.c | -rw-r--r-- | 1.7 KB |
archive-tar.c | -rw-r--r-- | 7.6 KB |
archive-zip.c | -rw-r--r-- | 9.1 KB |
archive.c | -rw-r--r-- | 2.0 KB |
archive.h | -rw-r--r-- | 1.3 KB |
attr.c | -rw-r--r-- | 14.7 KB |
attr.h | -rw-r--r-- | 816 bytes |
base85.c | -rw-r--r-- | 2.9 KB |
blob.c | -rw-r--r-- | 1.1 KB |
blob.h | -rw-r--r-- | 311 bytes |
branch.c | -rw-r--r-- | 4.1 KB |
branch.h | -rw-r--r-- | 809 bytes |
builtin-add.c | -rw-r--r-- | 7.1 KB |
builtin-annotate.c | -rw-r--r-- | 446 bytes |
builtin-apply.c | -rw-r--r-- | 77.3 KB |
builtin-archive.c | -rw-r--r-- | 5.7 KB |
builtin-blame.c | -rw-r--r-- | 61.4 KB |
builtin-branch.c | -rw-r--r-- | 13.1 KB |
builtin-bundle.c | -rw-r--r-- | 1.7 KB |
builtin-cat-file.c | -rw-r--r-- | 5.6 KB |
builtin-check-attr.c | -rw-r--r-- | 1.4 KB |
builtin-check-ref-format.c | -rw-r--r-- | 282 bytes |
builtin-checkout-index.c | -rw-r--r-- | 7.5 KB |
builtin-checkout.c | -rw-r--r-- | 15.1 KB |
builtin-clean.c | -rw-r--r-- | 4.2 KB |
builtin-clone.c | -rw-r--r-- | 13.7 KB |
builtin-commit-tree.c | -rw-r--r-- | 3.3 KB |
builtin-commit.c | -rw-r--r-- | 27.3 KB |
builtin-config.c | -rw-r--r-- | 10.7 KB |
builtin-count-objects.c | -rw-r--r-- | 2.9 KB |
builtin-describe.c | -rw-r--r-- | 8.9 KB |
builtin-diff-files.c | -rw-r--r-- | 1.6 KB |
builtin-diff-index.c | -rw-r--r-- | 1.1 KB |
builtin-diff-tree.c | -rw-r--r-- | 3.2 KB |
builtin-diff.c | -rw-r--r-- | 9.9 KB |
builtin-fast-export.c | -rw-r--r-- | 10.1 KB |
builtin-fetch--tool.c | -rw-r--r-- | 12.7 KB |
builtin-fetch-pack.c | -rw-r--r-- | 18.7 KB |
builtin-fetch.c | -rw-r--r-- | 16.9 KB |
builtin-fmt-merge-msg.c | -rw-r--r-- | 8.0 KB |
builtin-for-each-ref.c | -rw-r--r-- | 21.1 KB |
builtin-fsck.c | -rw-r--r-- | 15.0 KB |
builtin-gc.c | -rw-r--r-- | 6.6 KB |
builtin-grep.c | -rw-r--r-- | 18.3 KB |
builtin-http-fetch.c | -rw-r--r-- | 2.1 KB |
builtin-init-db.c | -rw-r--r-- | 11.8 KB |
builtin-log.c | -rw-r--r-- | 29.3 KB |
builtin-ls-files.c | -rw-r--r-- | 14.6 KB |
builtin-ls-remote.c | -rw-r--r-- | 2.4 KB |
builtin-ls-tree.c | -rw-r--r-- | 4.4 KB |
builtin-mailinfo.c | -rw-r--r-- | 20.3 KB |
builtin-mailsplit.c | -rw-r--r-- | 6.4 KB |
builtin-merge-base.c | -rw-r--r-- | 1.2 KB |
builtin-merge-file.c | -rw-r--r-- | 1.7 KB |
builtin-merge-ours.c | -rw-r--r-- | 751 bytes |
builtin-merge-recursive.c | -rw-r--r-- | 36.8 KB |
builtin-mv.c | -rw-r--r-- | 7.2 KB |
builtin-name-rev.c | -rw-r--r-- | 7.0 KB |
builtin-pack-objects.c | -rw-r--r-- | 56.7 KB |
builtin-pack-refs.c | -rw-r--r-- | 3.4 KB |
builtin-prune-packed.c | -rw-r--r-- | 1.9 KB |
builtin-prune.c | -rw-r--r-- | 3.4 KB |
builtin-push.c | -rw-r--r-- | 3.6 KB |
builtin-read-tree.c | -rw-r--r-- | 6.2 KB |
builtin-reflog.c | -rw-r--r-- | 13.3 KB |
builtin-remote.c | -rw-r--r-- | 17.0 KB |
builtin-rerere.c | -rw-r--r-- | 10.3 KB |
builtin-reset.c | -rw-r--r-- | 7.0 KB |
builtin-rev-list.c | -rw-r--r-- | 16.4 KB |
builtin-rev-parse.c | -rw-r--r-- | 12.7 KB |
builtin-revert.c | -rw-r--r-- | 11.2 KB |
builtin-rm.c | -rw-r--r-- | 6.3 KB |
builtin-send-pack.c | -rw-r--r-- | 15.1 KB |
builtin-shortlog.c | -rw-r--r-- | 7.3 KB |
builtin-show-branch.c | -rw-r--r-- | 21.2 KB |
builtin-show-ref.c | -rw-r--r-- | 5.9 KB |
builtin-stripspace.c | -rw-r--r-- | 1.9 KB |
builtin-symbolic-ref.c | -rw-r--r-- | 1.2 KB |
builtin-tag.c | -rw-r--r-- | 10.8 KB |
builtin-tar-tree.c | -rw-r--r-- | 2.1 KB |
builtin-unpack-objects.c | -rw-r--r-- | 12.7 KB |
builtin-update-index.c | -rw-r--r-- | 19.0 KB |
builtin-update-ref.c | -rw-r--r-- | 1.4 KB |
builtin-upload-archive.c | -rw-r--r-- | 4.1 KB |
builtin-verify-pack.c | -rw-r--r-- | 1.7 KB |
builtin-verify-tag.c | -rw-r--r-- | 2.5 KB |
builtin-write-tree.c | -rw-r--r-- | 1.2 KB |
builtin.h | -rw-r--r-- | 6.7 KB |
bundle.c | -rw-r--r-- | 9.3 KB |
bundle.h | -rw-r--r-- | 627 bytes |
cache-tree.c | -rw-r--r-- | 13.4 KB |
cache-tree.h | -rw-r--r-- | 1.1 KB |
cache.h | -rw-r--r-- | 28.5 KB |
check-builtins.sh | -rwxr-xr-x | 588 bytes |
check-racy.c | -rw-r--r-- | 538 bytes |
color.c | -rw-r--r-- | 3.7 KB |
color.h | -rw-r--r-- | 667 bytes |
combine-diff.c | -rw-r--r-- | 26.4 KB |
command-list.txt | -rw-r--r-- | 7.5 KB |
commit.c | -rw-r--r-- | 14.7 KB |
commit.h | -rw-r--r-- | 4.2 KB |
config.c | -rw-r--r-- | 25.7 KB |
config.mak.in | -rw-r--r-- | 1.2 KB |
configure.ac | -rw-r--r-- | 16.2 KB |
connect.c | -rw-r--r-- | 13.5 KB |
convert.c | -rw-r--r-- | 14.0 KB |
copy.c | -rw-r--r-- | 1.1 KB |
csum-file.c | -rw-r--r-- | 2.4 KB |
csum-file.h | -rw-r--r-- | 714 bytes |
ctype.c | -rw-r--r-- | 889 bytes |
daemon.c | -rw-r--r-- | 26.9 KB |
date.c | -rw-r--r-- | 18.5 KB |
decorate.c | -rw-r--r-- | 1.8 KB |
decorate.h | -rw-r--r-- | 382 bytes |
delta.h | -rw-r--r-- | 3.4 KB |
diff-delta.c | -rw-r--r-- | 15.3 KB |
diff-lib.c | -rw-r--r-- | 13.0 KB |
diff-no-index.c | -rw-r--r-- | 5.8 KB |
diff.c | -rw-r--r-- | 87.0 KB |
diff.h | -rw-r--r-- | 8.4 KB |
diffcore-break.c | -rw-r--r-- | 8.7 KB |
diffcore-delta.c | -rw-r--r-- | 5.3 KB |
diffcore-order.c | -rw-r--r-- | 2.2 KB |
diffcore-pickaxe.c | -rw-r--r-- | 3.3 KB |
diffcore-rename.c | -rw-r--r-- | 16.6 KB |
diffcore.h | -rw-r--r-- | 4.0 KB |
dir.c | -rw-r--r-- | 19.9 KB |
dir.h | -rw-r--r-- | 2.2 KB |
dump-cache-tree.c | -rw-r--r-- | 1.5 KB |
entry.c | -rw-r--r-- | 5.8 KB |
environment.c | -rw-r--r-- | 4.4 KB |
exec_cmd.c | -rw-r--r-- | 2.2 KB |
exec_cmd.h | -rw-r--r-- | 329 bytes |
fast-import.c | -rw-r--r-- | 62.0 KB |
fetch-pack.h | -rw-r--r-- | 460 bytes |
fixup-builtins | -rwxr-xr-x | 326 bytes |
fsck.c | -rw-r--r-- | 8.1 KB |
fsck.h | -rw-r--r-- | 1022 bytes |
generate-cmdlist.sh | -rwxr-xr-x | 442 bytes |
git-add--interactive.perl | -rwxr-xr-x | 23.0 KB |
git-am.sh | -rwxr-xr-x | 11.8 KB |
git-archimport.perl | -rwxr-xr-x | 36.0 KB |
git-bisect.sh | -rwxr-xr-x | 11.3 KB |
git-compat-util.h | -rw-r--r-- | 10.9 KB |
git-cvsexportcommit.perl | -rwxr-xr-x | 11.0 KB |
git-cvsimport.perl | -rwxr-xr-x | 26.3 KB |
git-cvsserver.perl | -rwxr-xr-x | 112.9 KB |
git-filter-branch.sh | -rwxr-xr-x | 10.3 KB |
git-instaweb.sh | -rwxr-xr-x | 6.4 KB |
git-lost-found.sh | -rwxr-xr-x | 563 bytes |
git-merge-octopus.sh | -rwxr-xr-x | 2.4 KB |
git-merge-one-file.sh | -rwxr-xr-x | 3.4 KB |
git-merge-resolve.sh | -rwxr-xr-x | 954 bytes |
git-merge-stupid.sh | -rwxr-xr-x | 1.4 KB |
git-merge.sh | -rwxr-xr-x | 12.3 KB |
git-mergetool.sh | -rwxr-xr-x | 9.7 KB |
git-parse-remote.sh | -rwxr-xr-x | 5.8 KB |
git-pull.sh | -rwxr-xr-x | 5.0 KB |
git-quiltimport.sh | -rwxr-xr-x | 3.2 KB |
git-rebase--interactive.sh | -rwxr-xr-x | 12.8 KB |
git-rebase.sh | -rwxr-xr-x | 10.5 KB |
git-relink.perl | -rwxr-xr-x | 4.0 KB |
git-repack.sh | -rwxr-xr-x | 3.4 KB |
git-request-pull.sh | -rwxr-xr-x | 1.3 KB |
git-send-email.perl | -rwxr-xr-x | 25.6 KB |
git-sh-setup.sh | -rwxr-xr-x | 3.1 KB |
git-stash.sh | -rwxr-xr-x | 5.8 KB |
git-submodule.sh | -rwxr-xr-x | 12.8 KB |
git-svn.perl | -rwxr-xr-x | 137.7 KB |
git-web--browse.sh | -rwxr-xr-x | 3.6 KB |
git.c | -rw-r--r-- | 12.9 KB |
git.spec.in | -rw-r--r-- | 9.0 KB |
graph.c | -rw-r--r-- | 28.0 KB |
graph.h | -rw-r--r-- | 4.1 KB |
grep.c | -rw-r--r-- | 12.7 KB |
grep.h | -rw-r--r-- | 1.6 KB |
hash-object.c | -rw-r--r-- | 3.2 KB |
hash.c | -rw-r--r-- | 2.5 KB |
hash.h | -rw-r--r-- | 1.1 KB |
help.c | -rw-r--r-- | 15.5 KB |
http-push.c | -rw-r--r-- | 64.0 KB |
http-walker.c | -rw-r--r-- | 23.7 KB |
http.c | -rw-r--r-- | 14.4 KB |
http.h | -rw-r--r-- | 2.7 KB |
ident.c | -rw-r--r-- | 5.9 KB |
imap-send.c | -rw-r--r-- | 28.5 KB |
index-pack.c | -rw-r--r-- | 24.2 KB |
interpolate.c | -rw-r--r-- | 2.1 KB |
interpolate.h | -rw-r--r-- | 601 bytes |
list-objects.c | -rw-r--r-- | 4.7 KB |
list-objects.h | -rw-r--r-- | 382 bytes |
ll-merge.c | -rw-r--r-- | 8.7 KB |
ll-merge.h | -rw-r--r-- | 304 bytes |
lockfile.c | -rw-r--r-- | 5.4 KB |
log-tree.c | -rw-r--r-- | 12.0 KB |
log-tree.h | -rw-r--r-- | 585 bytes |
mailmap.c | -rw-r--r-- | 2.2 KB |
mailmap.h | -rw-r--r-- | 213 bytes |
match-trees.c | -rw-r--r-- | 7.1 KB |
merge-file.c | -rw-r--r-- | 2.4 KB |
merge-index.c | -rw-r--r-- | 2.4 KB |
merge-recursive.h | -rw-r--r-- | 443 bytes |
merge-tree.c | -rw-r--r-- | 8.0 KB |
mktag.c | -rw-r--r-- | 5.1 KB |
mktree.c | -rw-r--r-- | 3.0 KB |
name-hash.c | -rw-r--r-- | 2.5 KB |
object.c | -rw-r--r-- | 5.6 KB |
object.h | -rw-r--r-- | 2.1 KB |
pack-check.c | -rw-r--r-- | 5.2 KB |
pack-redundant.c | -rw-r--r-- | 14.9 KB |
pack-revindex.c | -rw-r--r-- | 3.7 KB |
pack-revindex.h | -rw-r--r-- | 225 bytes |
pack-write.c | -rw-r--r-- | 5.4 KB |
pack.h | -rw-r--r-- | 2.0 KB |
pager.c | -rw-r--r-- | 1.4 KB |
parse-options.c | -rw-r--r-- | 10.1 KB |
parse-options.h | -rw-r--r-- | 4.1 KB |
patch-delta.c | -rw-r--r-- | 2.2 KB |
patch-id.c | -rw-r--r-- | 1.6 KB |
patch-ids.c | -rw-r--r-- | 4.7 KB |
patch-ids.h | -rw-r--r-- | 490 bytes |
path-list.c | -rw-r--r-- | 3.0 KB |
path-list.h | -rw-r--r-- | 898 bytes |
path.c | -rw-r--r-- | 8.5 KB |
pkt-line.c | -rw-r--r-- | 2.4 KB |
pkt-line.h | -rw-r--r-- | 348 bytes |
pretty.c | -rw-r--r-- | 20.0 KB |
progress.c | -rw-r--r-- | 6.3 KB |
progress.h | -rw-r--r-- | 504 bytes |
quote.c | -rw-r--r-- | 9.6 KB |
quote.h | -rw-r--r-- | 2.2 KB |
reachable.c | -rw-r--r-- | 5.6 KB |
reachable.h | -rw-r--r-- | 127 bytes |
read-cache.c | -rw-r--r-- | 35.4 KB |
receive-pack.c | -rw-r--r-- | 12.1 KB |
reflog-walk.c | -rw-r--r-- | 6.7 KB |
reflog-walk.h | -rw-r--r-- | 383 bytes |
refs.c | -rw-r--r-- | 36.5 KB |
refs.h | -rw-r--r-- | 3.2 KB |
remote.c | -rw-r--r-- | 28.5 KB |
remote.h | -rw-r--r-- | 3.0 KB |
revision.c | -rw-r--r-- | 42.1 KB |
revision.h | -rw-r--r-- | 3.5 KB |
run-command.c | -rw-r--r-- | 4.8 KB |
run-command.h | -rw-r--r-- | 2.6 KB |
send-pack.h | -rw-r--r-- | 338 bytes |
server-info.c | -rw-r--r-- | 5.2 KB |
setup.c | -rw-r--r-- | 13.3 KB |
sha1-lookup.c | -rw-r--r-- | 5.2 KB |
sha1-lookup.h | -rw-r--r-- | 220 bytes |
sha1_file.c | -rw-r--r-- | 58.8 KB |
sha1_name.c | -rw-r--r-- | 16.5 KB |
shallow.c | -rw-r--r-- | 2.3 KB |
shell.c | -rw-r--r-- | 1.5 KB |
shortlog.h | -rw-r--r-- | 426 bytes |
show-index.c | -rw-r--r-- | 2.1 KB |
sideband.c | -rw-r--r-- | 3.0 KB |
sideband.h | -rw-r--r-- | 335 bytes |
strbuf.c | -rw-r--r-- | 4.8 KB |
strbuf.h | -rw-r--r-- | 4.2 KB |
symlinks.c | -rw-r--r-- | 1.3 KB |
tag.c | -rw-r--r-- | 2.7 KB |
tag.h | -rw-r--r-- | 471 bytes |
tar.h | -rw-r--r-- | 644 bytes |
test-absolute-path.c | -rw-r--r-- | 147 bytes |
test-chmtime.c | -rw-r--r-- | 1.2 KB |
test-date.c | -rw-r--r-- | 378 bytes |
test-delta.c | -rw-r--r-- | 1.8 KB |
test-genrandom.c | -rw-r--r-- | 731 bytes |
test-match-trees.c | -rw-r--r-- | 588 bytes |
test-parse-options.c | -rw-r--r-- | 1.1 KB |
test-sha1.c | -rw-r--r-- | 815 bytes |
test-sha1.sh | -rwxr-xr-x | 1.9 KB |
thread-utils.c | -rw-r--r-- | 1.0 KB |
thread-utils.h | -rw-r--r-- | 109 bytes |
trace.c | -rw-r--r-- | 3.5 KB |
transport.c | -rw-r--r-- | 19.8 KB |
transport.h | -rw-r--r-- | 2.2 KB |
tree-diff.c | -rw-r--r-- | 11.1 KB |
tree-walk.c | -rw-r--r-- | 5.3 KB |
tree-walk.h | -rw-r--r-- | 1.7 KB |
tree.c | -rw-r--r-- | 6.0 KB |
tree.h | -rw-r--r-- | 860 bytes |
unpack-file.c | -rw-r--r-- | 778 bytes |
unpack-trees.c | -rw-r--r-- | 24.2 KB |
unpack-trees.h | -rw-r--r-- | 1.3 KB |
update-server-info.c | -rw-r--r-- | 457 bytes |
upload-pack.c | -rw-r--r-- | 15.5 KB |
usage.c | -rw-r--r-- | 2.0 KB |
utf8.c | -rw-r--r-- | 11.1 KB |
utf8.h | -rw-r--r-- | 541 bytes |
var.c | -rw-r--r-- | 1.4 KB |
walker.c | -rw-r--r-- | 7.2 KB |
walker.h | -rw-r--r-- | 1.1 KB |
write_or_die.c | -rw-r--r-- | 2.4 KB |
ws.c | -rw-r--r-- | 7.2 KB |
wt-status.c | -rw-r--r-- | 10.7 KB |
wt-status.h | -rw-r--r-- | 756 bytes |
xdiff-interface.c | -rw-r--r-- | 5.3 KB |
xdiff-interface.h | -rw-r--r-- | 742 bytes |
Computing file changes ...