summaryrefslogtreecommitdiff
path: root/fetch-pack.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-06-14 10:50:12 -0700
committerJunio C Hamano <gitster@pobox.com>2008-06-14 14:39:22 -0700
commit5723fe7e3cbbefae78bfb79c46b7716eef76fe52 (patch)
tree1d3eb8d8bbba8e7ce9a800c4820dee0e4e9e45b4 /fetch-pack.h
parent9adefee5b5811c57c30cf81804127b59b235538a (diff)
downloadgit-5723fe7e3cbbefae78bfb79c46b7716eef76fe52.tar.gz
Avoid cross-directory renames and linking on object creation
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>
Diffstat (limited to 'fetch-pack.h')
0 files changed, 0 insertions, 0 deletions