git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/RFR&A] Do not rename read-only files during a push

From
Shawn O. Pearce <spearce@spearce.org>
Date
Oct 19, 2008, 17:02 UTC
Message-ID
<20081019170237.GB14786@spearce.org>
In-Reply-To
<7v63np83mw.fsf@gitster.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> wrote:
> This is on the "merged to 'master' soon" list, but has a small amend by me
> (namely, chmod of final pack is done only when we are writing the final
> pack, i.e. reading from stdin) to fix breakages observed in tests.  It
> would be nice to get a final Ack before moving it to 'master'.
Looks fine to me.
 
Show 47 quoted lines
> From: Petr Baudis <pasky@suse.cz>
> 
> 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>
> ---
>  index-pack.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/index-pack.c b/index-pack.c
> index d3a4d31..aec11cb 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));
> -- 
> 1.6.0.2.767.g8f0e
> 
-- 
Shawn.
Previous: Junio C HamanoNext: Johannes Sixt
Message 2 of 3 in “Do not rename read-only files during a push”
  1. Do not rename read-only files during a pushJunio C Hamano, Oct 19, 2008
  2. Shawn O. PearceOct 19, 2008
  3. Johannes SixtOct 19, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.