borg icon indicating copy to clipboard operation
borg copied to clipboard

windows: birthtime and ctime

Open ThomasWaldmann opened this issue 8 months ago • 2 comments

From: https://docs.python.org/3.12/library/os.html

""" Changed in version 3.12: st_birthtime[_ns] is now available on Windows. """

""" Changed in version 3.12: The st_ctime attribute of a stat result is deprecated on Windows. The file creation time is properly available as st_birthtime, and in the future st_ctime may be changed to return zero or the metadata change time, if available. """

""" Changed in version 3.12: st_ctime_ns is deprecated on Windows. Use st_birthtime_ns for the file creation time. In the future, st_ctime will contain the time of the most recent metadata change, as for other platforms. """

""" Changed in version 3.12: On Windows, st_ctime is deprecated. Eventually, it will contain the last metadata change time, for consistency with other platforms, but for now still contains creation time. Use st_birthtime for the creation time. """

These are nice consistency changes with the goal of making windows timestamp semantics closer to posix OSes like linux.

ThomasWaldmann avatar Apr 09 '25 12:04 ThomasWaldmann

I couldn't find any Windows-specific handling for timestamp restoration, even though Borg always stores ctime and birthtime where available. Am I missing something here?

songxiaocheng avatar Apr 15 '25 03:04 songxiaocheng

Looks like restore_attrs only deals with mtime/atime on windows right now.

Guess for now, we only want to add archiving birthtime on windows:

If st has birthtime_ns attribute, we use that (should work for py312+).

Otherwise we fall back to ctime_ns (which should have the birthtime for older pythons).

When the day comes and they release a python that has "change time" available in ctime_ns, we can also add archiving ctime.

ThomasWaldmann avatar Apr 15 '25 11:04 ThomasWaldmann