summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorelyang0214 <73754957+elyang0214@users.noreply.github.com>2023-04-02 11:06:13 -0400
committerGitHub <noreply@github.com>2023-04-02 11:06:13 -0400
commitfbd665a41720b22ac7521a5aa05c3a28f5331b75 (patch)
treeeaa1639382a7eade0dcd368c674528bd4dd31748
parent6e1d1a5c31dca2be2d4f9e9cb67f33c9261dee4f (diff)
parent1f290f532fd932ccfe7e71a882b0f173ca232d50 (diff)
Merge branch 'beetbox:master' into master
-rw-r--r--beets/importer.py13
-rw-r--r--docs/changelog.rst2
2 files changed, 15 insertions, 0 deletions
diff --git a/beets/importer.py b/beets/importer.py
index feebadc09..96d1f17df 100644
--- a/beets/importer.py
+++ b/beets/importer.py
@@ -1122,6 +1122,19 @@ class ArchiveImportTask(SentinelImportTask):
archive = handler_class(util.py3_path(self.toppath), mode='r')
try:
archive.extractall(extract_to)
+
+ # Adjust the files' mtimes to match the information from the
+ # archive. Inspired by: https://stackoverflow.com/q/9813243
+ for f in archive.infolist():
+ # The date_time will need to adjusted otherwise
+ # the item will have the current date_time of extraction.
+ # The (0, 0, -1) is added to date_time because the
+ # function time.mktime expects a 9-element tuple.
+ # The -1 indicates that the DST flag is unknown.
+ date_time = time.mktime(f.date_time + (0, 0, -1))
+ fullpath = os.path.join(extract_to, f.filename)
+ os.utime(fullpath, (date_time, date_time))
+
finally:
archive.close()
self.extracted = True
diff --git a/docs/changelog.rst b/docs/changelog.rst
index d2f9e4c6e..355fc887d 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -54,6 +54,8 @@ New features:
* :ref:`import-options`: Add support for re-running the importer on paths in
log files that were created with the ``-l`` (or ``--logfile``) argument.
:bug:`4379` :bug:`4387`
+* Preserve mtimes from archives
+ :bug:`4392`
* Add :ref:`%sunique{} <sunique>` template to disambiguate between singletons.
:bug:`4438`
* Add a new ``import.ignored_alias_types`` config option to allow for