From: Petr Baudis Date: Fri, 3 Oct 2008 10:20:43 +0000 (+0200) Subject: Do not rename read-only files during a push X-Git-Tag: v1.6.1-rc1~140^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=33b650308c9be52180c6556b17cb9fc1fba3adf4;p=git.git Do not rename read-only files during a push Win32 does not allow renaming read-only files (at least on a Samba share), making push into a local directory to fail. Thus, defer the chmod() call in index-pack.c:final() only after move_temp_to_file() was called. Signed-off-by: Petr Baudis Signed-off-by: Shawn O. Pearce --- diff --git a/index-pack.c b/index-pack.c index d3a4d31b4..aec11cb94 100644 --- a/index-pack.c +++ b/index-pack.c @@ -790,7 +790,6 @@ static void final(const char *final_pack_name, const char *curr_pack_name, err = close(output_fd); if (err) die("error while closing pack file: %s", strerror(errno)); - chmod(curr_pack_name, 0444); } if (keep_msg) { @@ -824,8 +823,9 @@ static void final(const char *final_pack_name, const char *curr_pack_name, if (move_temp_to_file(curr_pack_name, final_pack_name)) die("cannot store pack file"); } + if (from_stdin) + chmod(final_pack_name, 0444); - chmod(curr_index_name, 0444); if (final_index_name != curr_index_name) { if (!final_index_name) { snprintf(name, sizeof(name), "%s/pack/pack-%s.idx", @@ -835,6 +835,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name, if (move_temp_to_file(curr_index_name, final_index_name)) die("cannot store index file"); } + chmod(final_index_name, 0444); if (!from_stdin) { printf("%s\n", sha1_to_hex(sha1));