Re: [BUG?] How to make a shared/restricted repo?
- From
Johannes Sixt <j.sixt@viscovery.net>
- Date
- Mar 26, 2009, 08:41 UTC
- Message-ID
- <49CB3FA0.8030408@viscovery.net>
- In-Reply-To
- <200903260929.58321.johan@herland.net>
Johan Herland schrieb:
Show 39 quoted lines
> For the two cases index-pack.c, the chmod(foo, 0444) happens AFTER the
> corresponding call to move_temp_to_file(xyzzy, foo). The chmod() in
> adjust_shared_perms() would thus be overridden by the chmod(foo, 0444),
> which is not what we want. In both cases, I think the chmod(foo, 0444)
> can safely be moved up above the call to move_temp_to_file(). Something
> like this (although I'm not sure about the semantics of 'from_stdin'):
>
> diff --git a/index-pack.c b/index-pack.c
> index 7546822..d289b6a 100644
> --- a/index-pack.c
> +++ b/index-pack.c
> @@ -815,6 +815,8 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
> }
> }
>
> + if (from_stdin)
> + chmod(final_pack_name, 0444);
> if (final_pack_name != curr_pack_name) {
> if (!final_pack_name) {
> snprintf(name, sizeof(name), "%s/pack/pack-%s.pack",
> @@ -824,9 +826,8 @@ 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(final_index_name, 0444);
> if (final_index_name != curr_index_name) {
> if (!final_index_name) {
> snprintf(name, sizeof(name), "%s/pack/pack-%s.idx",
> @@ -836,7 +837,6 @@ 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));You certainly meant to use the curr_*_name variants in the chmod lines, no? This effectively undoes 33b65030, but that is not so good: On Windows we cannot rename read-only files.
-- Hannes