@@ -2676,13 +2676,24 @@ static int copy_msg(char *buf, const char *msg)
int log_ref_setup(const char *refname, char *logfile, int bufsize)
{
int logfd, oflags = O_APPEND | O_WRONLY;
+ const char *p = NULL;
- git_snpath(logfile, bufsize, "logs/%s", refname);
+ /*
+ * reflog of repos/XXX/HEAD is repos/XXX/logs/HEAD, not
+ * refs/repos/XXX/HEAD
+ */
+ if (!strncmp(refname, "repos/", 6) &&
+ (p = strchr(refname + 6, '/')) != 0)
+ git_snpath(logfile, bufsize, "%.*s/logs/%s",
+ (int)(p - refname), refname, p + 1);
+ else
+ git_snpath(logfile, bufsize, "logs/%s", refname);
if (log_all_ref_updates &&
(!prefixcmp(refname, "refs/heads/") ||
!prefixcmp(refname, "refs/remotes/") ||
!prefixcmp(refname, "refs/notes/") ||
- !strcmp(refname, "HEAD"))) {
+ !strcmp(refname, "HEAD") ||
+ (p && !strcmp(p + 1, "HEAD")))) {
if (safe_create_leading_directories(logfile) < 0)
return error("unable to create directory for %s",
logfile);