Re: [PATCH] unpack-trees: do not abort when overwriting an existing file with the same content

2013-01-20 Thread Duy Nguyen
On Mon, Jan 21, 2013 at 1:35 AM, Junio C Hamano  wrote:
> Nguyễn Thái Ngọc Duy   writes:
>
>> + /*
>> +  * If it has the same content that we are going to write down,
>
> write down???

hmm.. "overwrite" then.

>> +  * there's no point in complaining. We still overwrite it in the
>> +  * end though. Permission is not checked so it may be lost.
>> +  */
>
> That is a regression, isn't it?  Is it too cumbersome to avoid
> losing the permission bits by stopping in that case?

I'm not sure how to deal with this case. (Lack of) Executable bit can
be easily restored (unlike file content) if we give the user the list
of changed files. On the other hand, not everybody runs git with a
huge scrollback buffer and warnings can be lost. I guess abort is a
safe choice.
-- 
Duy
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] unpack-trees: do not abort when overwriting an existing file with the same content

2013-01-20 Thread Junio C Hamano
Nguyễn Thái Ngọc Duy   writes:

> + /*
> +  * If it has the same content that we are going to write down,

write down???

> +  * there's no point in complaining. We still overwrite it in the
> +  * end though. Permission is not checked so it may be lost.
> +  */

That is a regression, isn't it?  Is it too cumbersome to avoid
losing the permission bits by stopping in that case?

> + if (ce &&
> + S_ISREG(st->st_mode) && S_ISREG(ce->ce_mode) &&
> + st->st_size < 1024 * 1024 && /* should be configurable */
> + sha1_object_info(ce->sha1, &ce_size) == OBJ_BLOB &&
> + ce_size == st->st_size) {
> + void *buffer = NULL;
> + unsigned long size;
> + enum object_type type;
> + struct strbuf sb = STRBUF_INIT;
> + int matched =
> + strbuf_read_file(&sb, ce->name, ce_size) == ce_size &&
> + (buffer = read_sha1_file(ce->sha1, &type, &size)) != 
> NULL &&
> + type == OBJ_BLOB &&
> + size == ce_size &&
> + !memcmp(buffer, sb.buf, size);
> + free(buffer);
> + strbuf_release(&sb);
> + if (matched)
> + return 0;
> + }
> +
>   return o->gently ? -1 :
>   add_rejected_path(o, error_type, name);
>  }
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html