Re: [PATCH v2 16/21] read-cache: unlink old sharedindex files
- From
Christian Couder <christian.couder@gmail.com>
- Date
- Dec 26, 2016, 09:54 UTC
- Message-ID
- <CAP8UFD2hE5nLXKpSEPaS_1XYqQw+Wn=nMT4paV+FtGFrHzHsFw@mail.gmail.com>
- In-Reply-To
- <20161219115812.GD24125@ash>
On Mon, Dec 19, 2016 at 12:58 PM, Duy Nguyen <pclouds@gmail.com> wrote:
Show 23 quoted lines
> On Sat, Dec 17, 2016 at 03:55:42PM +0100, Christian Couder wrote:
>> +static int clean_shared_index_files(const char *current_hex)
>> +{
>> + struct dirent *de;
>> + DIR *dir = opendir(get_git_dir());
>> +
>> + if (!dir)
>> + return error_errno(_("unable to open git dir: %s"), get_git_dir());
>> +
>> + while ((de = readdir(dir)) != NULL) {
>> + const char *sha1_hex;
>> + if (!skip_prefix(de->d_name, "sharedindex.", &sha1_hex))
>> + continue;
>> + if (!strcmp(sha1_hex, current_hex))
>
> fspathcmp since we're dealing fs paths?
>
> In theory we should be ok using strcmp, even on Windows because case
> is preserved, I think. It's only a problem when we write path 'abc'
> down and read 'ABC' back.
>
> Oh well.. your call because if you go with fspathcmp, skip_prefix can't
> be used either. A lot more changes for a very rare case.I'd rather keep using skip_prefix() and strcmp().
I could find no place in the code where fspathcmp() is used to compare dir entries, but a few where other *cmp() functions are used:
$ git grep '>d_name' | grep cmp builtin/repack.c: if (strncmp(e->d_name, buf.buf + dirlen, prefixlen)) dir.c: if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git")) sha1_name.c: if (memcmp(de->d_name, ds->hex_pfx + 2, ds->len - 2))
and also a few where skip_prefix() is used:
$ git grep -n '>d_name' | grep prefix builtin/repack.c:60: if (strncmp(e->d_name, buf.buf + dirlen, prefixlen)) help.c:147: if (!skip_prefix(de->d_name, prefix, &ent))
so I think it is ok to use skip_prefix() and strcmp().
Show 5 quoted lines
>> + continue; >> + if (can_delete_shared_index(sha1_hex) > 0 && > > Probably shorter to pass full d->name here so you don't have to do > another git_path() in can_delete_
Yeah, you are right, I will do that.