1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
|
===========
Changelog
===========
.. currentmodule:: llfuse
**WARNING**: Python-LLFUSE is no longer actively developed.
Release 1.5.0 (2023-08-08)
==========================
- Note: this is first pyfuse3 release supporting the Cython 3.0.0 release.
- Cythonized using Cython 3.0.0 release.
- Drop Python 3.5, 3.6, 3.7 support, see #69.
Minimum requirement is Python 3.8 now.
- Get rid of PyEval_InitThreads, #55.
- CI: also test on python 3.12 / cython 3.0 release
- Tell Cython that callbacks may raise exceptions, #90.
- Misc. CI, testing, build related fixes/improvements.
Release 1.4.4 (2023-05-21)
==========================
- CI: use the matrix for cy/py combinations, support and test on Cython 3 beta
- cy3: cdef void* f(void* d) noexcept with gil, #78
- cy3: cdef nogil -> noexcept nogil
- tests: use shutil.which() instead of which(1) executable
- tests/examples: fix tmpfs: backport fix from pyfuse3
- tests/examples: fix lltest: add statfs implementation, remove -l from umount
Release 1.4.3 (2023-05-09)
==========================
* cythonize with Cython 0.29.34 (brings python 3.12 support)
* also test on python 3.12-dev
* add a minimal pyproject.toml, #70
* fix basedir in setup.py (malfunctioned with pip install -e .)
* tests: fix integer overflow on 32-bit architectures
Release 1.4.2 (2022-05-31)
==========================
* cythonize with Cython 0.29.30 (brings python 3.11 support)
* also test on python 3.10 and 3.11-dev
* remove "nonempty" default mount option, seems unsupported now.
Release 1.4.1 (2021-01-31)
==========================
* timestamp rounding tests: avoid y2038 issue in test
Release 1.4.0 (2021-01-24)
==========================
* Remove py2 and py3<3.5 support, minimum requirement is Python 3.5 now.
If you are stuck on Python 2.x or < 3.5, use llfuse<1.4.0.
* setup.py: return rc=2 in error cases, fixes #52.
implements same behaviour as pyfuse3 for these cases.
* Use EACCES instead of EPERM for file permission errors, fixes #36.
* Fix long-standing rounding error in file date handling when the nanosecond
part of file dates were > 999999500, fixes #38.
* Docs: add link to pyfuse3 porting hints ticket
* Testing:
- Add Power support (ppc64le) to travis CI.
- Move CI to GitHub Actions, except ppc64le.
- Test fixes for pytest 6.
Release 1.3.8 (2020-10-10)
==========================
* fix compilation on FreeBSD, #28
* export DEVELOPER_MODE=1 can be used to opt in (default is 0), #22
* twine-based pypi-uploading, Qubes OS support for GPG signing,
see util/sdist-sign and pypi-upload
Release 1.3.7 (2020-10-04)
==========================
* Rebuild with Cython 0.29.21 for Python 3.9 compatibility.
Release 1.3.6 (2019-02-14)
==========================
* No change upload.
* Python-LLFUSE is no longer actively maintained. Unless you are stuck
with Python 2.x or libfuse 2.x, we recommended to use the pyfuse3
module instead.
Release 1.3.5 (2018-08-30)
==========================
* Add ``handle_signals`` option to ``llfuse.main``
* Several fixes to ``examples/passthroughfs.py``
* Now compatible with Python 3.7
Release 1.3.4 (2018-04-29)
==========================
* No-change rebuild with Cython 0.28.2.
Release 1.3.3 (2018-03-31)
==========================
* Dropped pytest-catchlog dependency and add support for Pytest 3.3.0.
* Minor bugfixes.
Release 1.3.2 (2017-11-13)
==========================
* Minor bugfixes.
Release 1.3.1 (2017-09-22)
==========================
* The main loop now terminates properly again when terminated
by a signal.
Release 1.3 (2017-09-15)
========================
* The `StatvfsData` class now has an `!~StatvfsData.f_namemax`
attribute.
* `EntryAttributes` and `StatvfsData` instances can now be pickled and
copied. Other llfuse classes now raise an exception when the do not
support pickling/copying.
Release 1.2 (2017-01-22)
========================
* The *attr* argument of the `~Operations.setattr` handler now
contains valid values only for the attributes that are to be set.
Previously, the documentation assorted that other attributes would
be set to the original (unchanged) values. However, that was
actually never the case.
Release 1.1.1 (2016-07-27)
==========================
* Fixed the description of the `~Operations.lookup` handler (should
return zero if there is no such entry, not a negative value).
* Fixed the description of the `EntryAttributes` structure
(descriptions of `~EntryAttributes.attr_timeout` and
`~EntryAttributes.entry_timeout` were switched).
Release 1.1 (2016-05-23)
========================
* Added support for nanosecond resolution time-stamps in GNU/kFreeBSD.
* Fixed another set of build issues on FreeBSD.
Release 1.0 (2016-03-08)
========================
**Note:** The 1.0 version number does not imply any special
stability or an API freeze. It's a consequence of switching to
semantic versioning, where backwards incompatible changes will
always result in increased major version.
* Fixed an overflow when accessing the ``*st_xtime_ns`` attributes of
the `~llfuse.EntryAttributes` class from Python on 32-bit systems.
* POTENTIAL COMPATIBILITY BREAK: The `~Operations.destroy` handler is now
called with the global lock acquired.
Release 0.43 (2016-02-23)
=========================
* Fixed build-failure under OS-X.
* Fixed some build failures under FreeBSD (hopefully all of them, but
no testers were available before the release).
* The *workers* parameter to `llfuse.main` may now be `None`.
Release 0.42.1 (2016-02-01)
===========================
* Include HTML documentation.
Release 0.42 (2016-01-30)
=========================
* The documentation has been clarified and extended - please take a
look even if you're already familiar with Python-LLFUSE.
* Extended coverage of unit tests.
* Fixed a compile error under OS-X.
* Added `notify_store` function.
* Added `get_sup_groups` function.
* The `~Operations.read` handler may now return arbitrary objects that
as long as they implement the buffer protocol.
* Implemented a *forget_multi* handler (used behind the scenes).
* Many classes were rewritten in Cython for improved performance.
* Python thread-specific data is now initialized only once rather
than every time a handler is called.
* SIGINT (Ctrl-C) now properly terminates `llfuse.main` also when
running with multiple workers.
* The return value of `llfuse.main` now indicates if the loop was
terminated due to an unmount request or due to a signal.
BACKWARDS INCOMPATIBLE CHANGES:
* Ducktyping the `EntryAttributes` class is no longer allowed,
`Operations` methods must return instances of this class (rather
than any object that provides the necessary attributes).
* The `!st_Xtime` attributes of the `EntryAttributes` have been
dropped in favor of the `!st_Xtime_ns` attributes.
* The `setattr` method now always receives a completely filled
`EntryAttributes` instance. To determine which attributes should
be changed, a new *fields* argument has been introduced.
* The `~Operations.setattr` method now also receives an *fh*
parameter.
* The `llfuse.main` function now has a *workers* parameter, and
the *single* parameter was dropped.
* Almost all request handlers now receive a `RequestContext`
instance in an additional parameter.
Release 0.41.1 (2015-08-22)
===========================
* Added some files in :file:`test/` that were missing in the 0.41
tarball. Tests now support the ``--installed`` option, produce
prettier output, and check for error messages printed to stderr or
stdout.
* Python-LLFUSE can now also be built on NetBSD.
* Added support for FUSE_SET_ATTR_ATIME_NOW and
FUSE_SET_ATTR_MTIME_NOW setattr flags. Previously, these would be
silently ignored.
* Fixed an AssertionError in :file:`examples/passthroughfs.py`
Release 0.41 (2015-08-20)
=========================
* Fixed a syntax error in contrib/tmpfs.py
* Introduced an `!llfuse.__version__` attribute.
* Added more reasonable default values for `llfuse.EntryAttributes`.
* Added new minimal example, :file:`examples/lltest.py`.
* Added unit tests.
* Added an example for a pass-through file system,
:file:`examples/passthroughfs.py`.
Release 0.40 (2013-11-26)
=========================
* Re-raising an exception from a request handler now works
correctly under Python 3. Problems were caused by a Cython bug,
but llfuse now works around the issue.
* File atime, ctime and mtime can now also be represented as
nanosecond integer values for increased resolution. Thanks to
nagy.attila@gmail.com for the initial patch.
* Python-llfuse no longer includes the setuptools/distribute
bootstrap script. This module thus has to be installed manually
if not already present on the system.
* Duck-typing of the Operations instance is now supported.
* Python-llfuse no longer requires a re-compilation of the
Cython code (setup.py build_cython step) when compiling for MacOS
or FreeBSD.
* Extended attributes are now properly supported under FreeBSD.
Release 0.39 (2013-05-11)
=========================
* When running under Python 3.x, several functions now work with
string objects rather than byte objects:
- llfuse.init(): the *mountpoint* argument, and the elements of
the *fuse_opts* argument are expected to be of type str.
- llfuse.listdir(): the *path* argument is expected to be of
type str, and the values returned by the iterator will be of
type str as well.
- llfuse.getxattr(), llfuse.setxattr(): the *path* and *name*
arguments are expected to be of type str.
When necessary, values will be converted to the file system
encoding using the surrogatescape handler as described in PEP 383
(http://www.python.org/dev/peps/pep-0383/)
* Renamed get_off_t_bytes() and get_ino_t_bytes() to
get_off_t_bits() and get_ino_t_bits() and documented them.
Release 0.38 (2013-01-05)
=========================
* Various small bugfixes.
Release 0.37.1 (2011-12-10)
===========================
* Fixed a segfault-causing race condition in Lock.acquire() and
Lock.yield().
Release 0.37 (2011-12-05)
=========================
* Explicitly call fuse_chan_destroy() in llfuse.close(), so
that the mountpoint becomes inaccessible right away, even
while the process is still running.
* Added get_ino_t_bytes() and get_off_t_bytes() that return
the number of bytes used for representing inode numbers
and file offsets.
* The yield_() method of the global lock now takes an additional
*count* argument that can be used to yield the lock more than
once.
* Changed implementation of global lock. The global lock is
no longer a mutex, but a boolean variable protected by a mutex,
and changes are tracked with a condition object. This allows
lock.yield() to work properly: if there are other threads waiting
for the lock, they are guaranteed to run. If there are no other
threads waiting for the lock, execution of the active thread
continues immediately.
The previous implementation using sched_yield() was mostly
broken: threads trying to acquire the global lock were calling
pthread_mutex_lock, so they got removed from the kernels
runqueue. However, calls to sched_yield() would just put the
active thread into the expired runqueue, and calls to
pthread_mutex_unlock apparently do not synchronously move the
threads waiting for the lock back to a runqueue. Therefore, most
of the time the active thread would be the only thread in any
runqueue and thus continue to run.
* The Operations.forget() method now receives a list of
(inode, nlookup) tuples rather than just one such tuple.
* invalidate_entry() and invalidate_inode() no longer work
synchronously. Instead, the message is put in a queue and send by
a background thread.
* The acquire() method of the global lock now has an optional
*timeout* parameter.
* The create() request handler now receives the open flags
as an additional parameter.
Release 0.36 (2011-09-20)
=========================
* Don't send SIGHUP if exception is encountered in destroy()
handler (since at that point, main loop has already terminated
and signal handling been reset).
* Fix a problem with request handler exceptions being re-raised
not only in llfuse.main(), but also in llfuse.close() when
running single threaded.
Release 0.35 (2011-09-14)
=========================
* Explicitly initialize Python thread support. Previously, calling
llfuse.main() resulted in a crash if no Python threads were used
before the call.
* Removed handle_exc() method. If request handle raise an exception,
the main loop now terminates and the exception is re-raised and
passed to the caller of llfuse.main().
* llfuse.close() can now leave the mountpoint in an inaccessible
state to signal a shutdown due to an internal file system
error.
* The destroy() request handler is now called without the
global lock acquired. This makes sense, because it's not called
as part of the main loop but by llfuse.close().
Release 0.34 (2011-08-10)
=========================
* Explicitly cast S_* constants to mode_t to prevent compiler
warnings on FreeBSD.
* Fixed initialization error under Python 3.
Release 0.33 (2011-07-03)
=========================
* Various small bugfixes.
Release 0.32 (2011-06-04)
=========================
* Fixed unlink() bug in contrib/example.py
* Include :file:`src/*.pxi` files in release tarball. Were
accidentally omitted in previous version.
* Moved debian/ directory into separate repository.
Release 0.31 (2011-05-12)
=========================
* Use long for storing nanoseconds in file [amc]times, not int.
Release 0.30 (2011-03-08)
=========================
* Fixed compile errors with Python 3.0 and 3.1.
* Fixed error handling, errno is now read correctly.
* Documentation is now shipped in tarball rather than generated
during installation.
Release 0.29 (2010-12-30)
=========================
* Initial release
|