Re: [PATCH] unpack-trees: do not abort when overwriting an existing file with the same content
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 20, 2013, 18:35 UTC
- Message-ID
- <7va9s3n1my.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1358594648-26851-1-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> 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?
Show 24 quoted lines
> + 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);
> }