mirror of https://github.com/evilhero/mylar
304 lines
10 KiB
ReStructuredText
304 lines
10 KiB
ReStructuredText
|
|
||
|
rarfile history
|
||
|
===============
|
||
|
|
||
|
.. py:currentmodule:: rarfile
|
||
|
|
||
|
Version 3.1 (...)
|
||
|
-----------------
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* Accept `bytes` filenames in Python 3
|
||
|
(Nate Bogdanowicz)
|
||
|
|
||
|
* Use bug-compatible SHA1 for longer passwords (> 28 chars)
|
||
|
in RAR3 encrypted headers.
|
||
|
(Marko Kreen)
|
||
|
|
||
|
* Return true/false from _check_unrar_tool
|
||
|
(miigotu)
|
||
|
|
||
|
* Include all test files in archive
|
||
|
(Benedikt Morbach)
|
||
|
|
||
|
Version 3.0 (2016-12-27)
|
||
|
------------------------
|
||
|
|
||
|
New feature:
|
||
|
|
||
|
* Support RAR5 archive format. It is actually completely different
|
||
|
archive format from RAR3 one, only is uses same file extension
|
||
|
and tools are old one.
|
||
|
|
||
|
Except incompatibilies noted below, most of code should notice no change,
|
||
|
existing :class:`RarInfo` fields will continue using RAR3-compatible
|
||
|
values (eg. :attr:`RarInfo.host_os`). RAR5-specific values will use
|
||
|
new fields.
|
||
|
|
||
|
Incompatibilities between rarfile v2.x and 3.x:
|
||
|
|
||
|
* Default :data:`PATH_SEP` is now '/' instead '\\'.
|
||
|
|
||
|
* Removed :data:`NEED_COMMENTS` option, comments are always extracted.
|
||
|
|
||
|
* Removed :data:`UNICODE_COMMENTS` option, they are always decoded.
|
||
|
|
||
|
* Removed :data:`USE_DATETIME` option, :attr:`RarInfo.date_time` is always tuple,
|
||
|
:attr:`RarInfo.mtime`, :attr:`RarInfo.atime`, :attr:`RarInfo.ctime` and
|
||
|
:attr:`RarInfo.arctime` are always :class:`datetime.datetime` objects.
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* Fixed bug when calling rarfp.open() on a RarInfo structure.
|
||
|
|
||
|
Cleanups:
|
||
|
|
||
|
* Code refactor to allow 2 different file format parsers.
|
||
|
|
||
|
* Code cleanups to pass modern linters.
|
||
|
|
||
|
* New testing and linting setup based on Tox_.
|
||
|
|
||
|
* Use setuptools instead distutils for install.
|
||
|
|
||
|
.. _Tox: https://tox.readthedocs.io/en/latest/
|
||
|
|
||
|
Version 2.8 (2016-06-07)
|
||
|
------------------------
|
||
|
|
||
|
* Fix: support solid archives from in-memory file object.
|
||
|
Full archive will be written out to temp file.
|
||
|
[`#21 <https://github.com/markokr/rarfile/issues/21>`_]
|
||
|
|
||
|
* Fix: ask unrar stop switches scanning,
|
||
|
to handle archive names starting with "-".
|
||
|
(Alexander Shadchin)
|
||
|
[`#12 <https://github.com/markokr/rarfile/pull/12>`_]
|
||
|
|
||
|
* Fix: add missing _parse_error variable to RarFile object.
|
||
|
(Gregory Mazzola)
|
||
|
[`#20 <https://github.com/markokr/rarfile/pull/20>`_]
|
||
|
|
||
|
* Fix: return proper boolean from :meth:`RarInfo.needs_password`.
|
||
|
[`#22 <https://github.com/markokr/rarfile/issues/22>`_]
|
||
|
|
||
|
* Fix: do not insert non-string rarfile into exception string.
|
||
|
(Tim Muller)
|
||
|
[`#23 <https://github.com/markokr/rarfile/pull/23>`_]
|
||
|
|
||
|
* Fix: make :meth:`RarFile.extract` and :meth:`RarFile.testrar`
|
||
|
support in-memory archives.
|
||
|
|
||
|
* Use cryptography_ module as preferred crypto backend.
|
||
|
PyCrypto_ will be used as fallback.
|
||
|
|
||
|
* Cleanup: remove compat code for Python 2.4/2.5/2.6.
|
||
|
|
||
|
.. _cryptography: https://pypi.python.org/pypi/cryptography
|
||
|
.. _PyCrypto: https://pypi.python.org/pypi/pycrypto
|
||
|
|
||
|
Version 2.7 (2014-11-23)
|
||
|
------------------------
|
||
|
|
||
|
* Allow use of bsdtar_ as decompression backend. It sits
|
||
|
on top of libarchive_, which has support for reading RAR archives.
|
||
|
|
||
|
Limitations of ``libarchive`` RAR backend:
|
||
|
|
||
|
- Does not support solid archives.
|
||
|
- Does not support password-protected archives.
|
||
|
- Does not support "parsing filters" used for audio/image/executable data,
|
||
|
so few non-solid, non-encrypted archives also fail.
|
||
|
|
||
|
Now :mod:`rarfile` checks if ``unrar`` and if not then tries ``bsdtar``.
|
||
|
If that works, then keeps using it. If not then configuration
|
||
|
stays with ``unrar`` which will then appear in error messages.
|
||
|
|
||
|
.. _bsdtar: https://github.com/libarchive/libarchive/wiki/ManPageBsdtar1
|
||
|
.. _libarchive: http://www.libarchive.org/
|
||
|
|
||
|
* Both :class:`RarFile` and :func:`is_rarfile` now accept file-like
|
||
|
object. Eg. :class:`io.BytesIO`. Only requirement is that the object
|
||
|
must be seekable. This mirrors similar funtionality in zipfile.
|
||
|
|
||
|
Based on patch by Chase Zhang.
|
||
|
|
||
|
* Uniform error handling. :class:`RarFile` accepts ``errors="strict"``
|
||
|
argument.
|
||
|
|
||
|
Allow user to tune whether parsing and missing file errors will raise
|
||
|
exception. If error is not raised, the error string can be queried
|
||
|
with :meth:`RarFile.strerror` method.
|
||
|
|
||
|
Version 2.6 (2013-04-10)
|
||
|
------------------------
|
||
|
|
||
|
* Add context manager support for :class:`RarFile` class.
|
||
|
Both :class:`RarFile` and :class:`RarExtFile` support
|
||
|
:keyword:`with` statement now.
|
||
|
(Wentao Han)
|
||
|
* :meth:`RarFile.volumelist` method, returns filenames of archive volumes.
|
||
|
* Re-throw clearer error in case ``unrar`` is not found in ``PATH``.
|
||
|
* Sync new unrar4.x error code from ``rar.txt``.
|
||
|
* Use Sphinx for documentation, push docs to rtfd.org_
|
||
|
|
||
|
.. _rtfd.org: https://rarfile.readthedocs.org/
|
||
|
|
||
|
Version 2.5 (2012-01-19)
|
||
|
------------------------
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* :meth:`RarExtFile.read` and :meth:`RarExtFile.readinto` now do looping read
|
||
|
to work properly on short reads. Important for Python 3.2+ where read from pipe
|
||
|
can return short result even on blocking file descriptor.
|
||
|
* Proper error reporting in :meth:`RarFile.extract`, :meth:`RarFile.extractall`
|
||
|
and :meth:`RarFile.testrar`.
|
||
|
* :meth:`RarExtFile.read` from unrar pipe: prefer to return unrar error code,
|
||
|
if thats not available, do own error checks.
|
||
|
* Avoid string addition in :meth:`RarExtFile.read`, instead use always list+join to
|
||
|
merge multi-part reads.
|
||
|
* dumprar: dont re-encode byte strings (Python 2.x). This avoids
|
||
|
unneccessary failure when printing invalid unicode.
|
||
|
|
||
|
Version 2.4 (2011-11-05)
|
||
|
------------------------
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* :data:`USE_DATETIME`: survive bad values from RAR
|
||
|
* Fix bug in corrupt unicode filename handling
|
||
|
* dumprar: make unicode chars work with both pipe and console
|
||
|
|
||
|
Version 2.3 (2011-07-03)
|
||
|
------------------------
|
||
|
|
||
|
Features:
|
||
|
|
||
|
* Support .seek() method on file streams. (Kristian Larsson)
|
||
|
* Support .readinto() method on file streams. Optimized implementation
|
||
|
is available on Python 2.6+ where :class:`memoryview` is available.
|
||
|
* Support file comments - :attr:`RarInfo.comment` contains decompressed data if available.
|
||
|
* File objects returned by :meth:`RarFile.open()` are :class:`io.RawIOBase`-compatible.
|
||
|
They can further wrapped with :class:`io.BufferedReader` and :class:`io.TextIOWrapper`.
|
||
|
* Now .getinfo() uses dict lookup instead of sequential scan when
|
||
|
searching archive entry. This speeds up prococessing for archives that
|
||
|
have many entries.
|
||
|
* Option :data:`UNICODE_COMMENTS` to decode both archive and file comments to unicode.
|
||
|
It uses :data:`TRY_ENCODINGS` for list of encodings to try. If off, comments are
|
||
|
left as byte strings. Default: 0
|
||
|
* Option :data:`PATH_SEP` to change path separator. Default: ``r'\'``,
|
||
|
set ``rarfile.PATH_SEP='/'`` to be compatibe with zipfile.
|
||
|
* Option :data:`USE_DATETIME` to convert timestamps to datetime objects.
|
||
|
Default: 0, timestamps are tuples.
|
||
|
* Option :data:`TRY_ENCODINGS` to allow tuning attempted encoding list.
|
||
|
* Reorder :class:`RarInfo` fiels to better show zipfile-compatible fields.
|
||
|
* Standard regtests to make sure various features work
|
||
|
|
||
|
Compatibility:
|
||
|
|
||
|
* Drop :attr:`RarInfo.unicode_filename`, plain :attr:`RarInfo.filename` is already unicode since 2.0.
|
||
|
* .read(-1) reads now until EOF. Previously it returned empty buffer.
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* Make encrypted headers work with Python 3.x bytes() and with old 2.x 'sha' module.
|
||
|
* Simplify :class:`subprocess.Popen` usage when launching ``unrar``. Previously
|
||
|
it tried to optimize and work around OS/Python bugs, but this is not
|
||
|
maintainable.
|
||
|
* Use temp rar file hack on multi-volume archives too.
|
||
|
* Always .wait() on unrar, to avoid zombies
|
||
|
* Convert struct.error to BadRarFile
|
||
|
* Plug some fd leaks. Affected: Jython, PyPy.
|
||
|
* Broken archives are handled more robustly.
|
||
|
|
||
|
Version 2.2 (2010-08-19)
|
||
|
------------------------
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* Relaxed volume naming. Now it just calculates new volume name by finding number
|
||
|
in old one and increasing it, without any expectations what that number should be.
|
||
|
* Files with 4G of compressed data in one colume were handled wrong. Fix.
|
||
|
* DOS timestamp seconds need to be multiplied with 2.
|
||
|
* Correct EXTTIME parsing.
|
||
|
|
||
|
Cleanups:
|
||
|
|
||
|
* Compressed size is per-volume, sum them together, so that user sees complete
|
||
|
compressed size for files split over several volumes.
|
||
|
* dumprar: Show unknown bits.
|
||
|
* Use :class:`struct.Struct` to cache unpack formats.
|
||
|
* Support missing :data:`os.devnull`. (Python 2.3)
|
||
|
|
||
|
Version 2.1 (2010-07-31)
|
||
|
------------------------
|
||
|
|
||
|
Features:
|
||
|
|
||
|
* Minimal implmentation for :meth:`RarFile.extract`, :meth:`RarFile.extractall`, :meth:`RarFile.testrar`.
|
||
|
They are simple shortcuts to ``unrar`` invocation.
|
||
|
* Accept :class:`RarInfo` object where filename is expected.
|
||
|
* Include ``dumprar.py`` in .tgz. It can be used to visualize RAR structure
|
||
|
and test module.
|
||
|
* Support for encrypted file headers.
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* Don't read past ENDARC, there could be non-RAR data there.
|
||
|
* RAR 2.x: It does not write ENDARC, but our volume code expected it. Fix that.
|
||
|
* RAR 2.x: Support more than 200 old-style volumes.
|
||
|
|
||
|
Cleanups:
|
||
|
|
||
|
* Load comment only when requested.
|
||
|
* Cleanup of internal config variables. They should have now final names.
|
||
|
* :meth:`RarFile.open`: Add mode=r argument to match zipfile.
|
||
|
* Doc and comments cleanup, minimize duplication.
|
||
|
* Common wrappers for both compressed and uncompressed files,
|
||
|
now :meth:`RarFile.open` also does CRC-checking.
|
||
|
|
||
|
Version 2.0 (2010-04-29)
|
||
|
------------------------
|
||
|
|
||
|
Features:
|
||
|
|
||
|
* Python 3 support. Still works with 2.x.
|
||
|
* Parses extended time fields. (.mtime, .ctime, .atime)
|
||
|
* :meth:`RarFile.open` method. This makes possible to process large
|
||
|
entries that do not fit into memory.
|
||
|
* Supports password-protected archives.
|
||
|
* Supports archive comments.
|
||
|
|
||
|
Cleanups:
|
||
|
|
||
|
* Uses :mod:`subprocess` module to launch ``unrar``.
|
||
|
* .filename is always Unicode string, .unicode_filename is now deprecated.
|
||
|
* .CRC is unsigned again, as python3 crc32() is unsigned.
|
||
|
|
||
|
Version 1.1 (2008-08-31)
|
||
|
------------------------
|
||
|
|
||
|
Fixes:
|
||
|
|
||
|
* Replace :func:`os.tempnam` with :func:`tempfile.mkstemp`. (Jason Moiron)
|
||
|
* Fix infinite loop in _extract_hack on unexpected EOF
|
||
|
* :attr:`RarInfo.CRC` is now signed value to match crc32()
|
||
|
* :meth:`RarFile.read` now checks file crc
|
||
|
|
||
|
Cleanups:
|
||
|
|
||
|
* more docstrings
|
||
|
* throw proper exceptions (subclasses of :exc:`rarfile.Error`)
|
||
|
* RarInfo has fields pre-initialized, so they appear in help()
|
||
|
* rename RarInfo.data to RarInfo.header_data
|
||
|
* dont use "print" when header parsing fails
|
||
|
* use try/finally to delete temp rar
|
||
|
|
||
|
Version 1.0 (2005-08-08)
|
||
|
------------------------
|
||
|
|
||
|
* First release.
|
||
|
|