Be more careful with objects directory permissions on clone
authorMark Hills <mark@pogo.org.uk>
Mon, 5 May 2008 16:46:42 +0000 (17:46 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 7 May 2008 04:34:35 +0000 (21:34 -0700)
Honour the setgid and umask when re-creating the objects directory
at the destination.

cpio in copy-pass mode aims to copy file permissions which causes this
problem and cannot be disabled. Be explicit by copying the directory
structure first, honouring the permissions at the destination, then copy
the files with 0444 permissions. This also avoids bugs in some versions
of cpio.

Signed-off-by: Mark Hills <mark@pogo.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-clone.sh

index 8c7fc7f6317113fcef923dcc625fb94e13fb77a0..9d88d1ce60d9c34bd16976d403f210fb450940a5 100755 (executable)
@@ -334,7 +334,10 @@ yes)
                        fi
                fi &&
                cd "$repo" &&
-               find objects -depth -print | cpio $cpio_quiet_flag -pumd$l "$GIT_DIR/" || \
+               # Create dirs using umask and permissions and destination
+               find objects -type d -print | (cd "$GIT_DIR" && xargs mkdir -p) &&
+               # Copy existing 0444 permissions on content
+               find objects ! -type d -print | cpio $cpio_quiet_flag -pumd$l "$GIT_DIR/" || \
                        exit 1
        fi
        git-ls-remote "$repo" >"$GIT_DIR/CLONE_HEAD" || exit 1