Devin Lehmacher <[email protected]> writes:
> + If your home directory is on a network-mounted filesystem, you
> + may need to change this to a local filesystem. You must specify
> + an absolute path.
Nicely explained.
If a socket cannot be created in "~/.git-credential-cache", existing
users would have created a symbolic link that points at a local
directory. With XDG_CACHE_HOME mechanism, they would just set the
variable to directly point at a local directory and there is no need
for symlink trick, on the other hand.
Which points us back to the observation I made in my review on the
previous step.
> +static char *get_socket_path(void)
> +{
> + char *old_credential_dir, *socket;
> + old_credential_dir = expand_user_path("~/.git-credential-cache");
> + if (old_credential_dir && directory_exists(old_credential_dir))
> + socket = expand_user_path("~/.git-credential-cache/socket");
> + else
> + socket = xdg_cache_home("credential/socket");
> + free(old_credential_dir);
> + return socket;
> +}
As we do not want to use the dir.c::directory_exists(), which is
meant to be used for working tree files, we can do something like
this instead:
static char *get_socket_path(void)
{
struct stat st;
char *path;
path = expand_user_path("~/.git-credential-cache");
if (path && !stat(path, &st) && S_ISDIR(st.st_mode))) {
free(path);
path = expand_user_path("~/.git-credential-cache/socket");
} else {
path = xdg_cache_home("credential/socket");
}
return path;
}
The duplication of "~/.git-credential-cache" bothers me somewhat and
perhaps people can suggest better ways to get rid of the dup.
Other than that, makes sense to me.
Thanks.