summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--load-git.c9
-rw-r--r--save-git.c3
2 files changed, 7 insertions, 5 deletions
diff --git a/load-git.c b/load-git.c
index 08eef085d..6a054e887 100644
--- a/load-git.c
+++ b/load-git.c
@@ -1129,7 +1129,8 @@ static int dive_trip_directory(const char *root, const char *name)
}
/*
- * Dive directory, name is [[yyyy-]mm-]nn-ddd-hh:mm:ss[~hex],
+ * Dive directory, name is [[yyyy-]mm-]nn-ddd-hh:mm:ss[~hex] in older git repositories
+ * but [[yyyy-]mm-]nn-ddd-hh=mm=ss[~hex] in newer repos as ':' is an illegal character for Windows files
* and 'timeoff' points to what should be the time part of
* the name (the first digit of the hour).
*
@@ -1156,8 +1157,8 @@ static int dive_directory(const char *root, const char *name, int timeoff)
if (mday_off < 0)
return GIT_WALK_SKIP;
- /* Get the time of day */
- if (sscanf(name+timeoff, "%d:%d:%d", &h, &m, &s) != 3)
+ /* Get the time of day -- parse both time formats so we can read old repos when not on Windows */
+ if (sscanf(name+timeoff, "%d:%d:%d", &h, &m, &s) != 3 && sscanf(name+timeoff, "%d=%d=%d", &h, &m, &s) != 3)
return GIT_WALK_SKIP;
if (!validate_time(h, m, s))
return GIT_WALK_SKIP;
@@ -1307,7 +1308,7 @@ static int walk_tree_directory(const char *root, const git_tree_entry *entry)
* We know the len is at least 3, because we had at least
* two digits and a dash
*/
- if (name[len-3] == ':')
+ if (name[len-3] == ':' || name[len-3] == '=')
return dive_directory(root, name, len-8);
if (digits != 2)
diff --git a/save-git.c b/save-git.c
index 7c564e533..e13847125 100644
--- a/save-git.c
+++ b/save-git.c
@@ -549,7 +549,8 @@ static void create_dive_name(struct dive *dive, struct membuffer *name, struct t
if (tm.tm_mon != dirtm->tm_mon)
put_format(name, "%02u-", tm.tm_mon+1);
- put_format(name, "%02u-%s-%02u:%02u:%02u",
+ /* a colon is an illegal char in a file name on Windows - use an '=' instead */
+ put_format(name, "%02u-%s-%02u=%02u=%02u",
tm.tm_mday, weekday[tm.tm_wday],
tm.tm_hour, tm.tm_min, tm.tm_sec);
}