зеркало из https://github.com/microsoft/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 <pasky@suse.cz> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Родитель
5c283eb13c
Коммит
33b650308c
|
@ -790,7 +790,6 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
|
||||||
err = close(output_fd);
|
err = close(output_fd);
|
||||||
if (err)
|
if (err)
|
||||||
die("error while closing pack file: %s", strerror(errno));
|
die("error while closing pack file: %s", strerror(errno));
|
||||||
chmod(curr_pack_name, 0444);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keep_msg) {
|
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))
|
if (move_temp_to_file(curr_pack_name, final_pack_name))
|
||||||
die("cannot store pack file");
|
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 != curr_index_name) {
|
||||||
if (!final_index_name) {
|
if (!final_index_name) {
|
||||||
snprintf(name, sizeof(name), "%s/pack/pack-%s.idx",
|
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))
|
if (move_temp_to_file(curr_index_name, final_index_name))
|
||||||
die("cannot store index file");
|
die("cannot store index file");
|
||||||
}
|
}
|
||||||
|
chmod(final_index_name, 0444);
|
||||||
|
|
||||||
if (!from_stdin) {
|
if (!from_stdin) {
|
||||||
printf("%s\n", sha1_to_hex(sha1));
|
printf("%s\n", sha1_to_hex(sha1));
|
||||||
|
|
Загрузка…
Ссылка в новой задаче