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 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894
|
======================
pytagsfs Release Notes
======================
.. contents::
pytagsfs 0.9.2 2009-12-27
=========================
* Fixed pytagsfs manpage references to format string variables "number",
"NUMBER". The correct variable names are "tracknumber", "TRACKNUMBER".
Thanks to Sebastian Pipping for the report.
(Forest Bond)
pytagsfs 0.9.2rc2 2009-12-06
============================
* Added missing encode calls in SourceTree methods isreadable, issymlink,
lstat, and utime.
(Forest Bond)
* Fixed bad assumption in tests.blackbox that a subprocess failed if it
produced output on stderr.
(Forest Bond)
* Added dependencies for running test suite to README.
(Forest Bond)
pytagsfs 0.9.2rc1 2009-12-05
============================
* Fixed AttributeError on getattr due to missing Stat attributes and
interaction with python-fuse bugs. The presence of this issue is dependent
on python-fuse version, but the implemented fix should be compatible with
many. The exception would likely occur on the filesystem operation following
the getattr call due to python-fuse bugs.
This bug could lead to data corruption if files are opened for writing, but
problems would likely be seen before that point.
(Forest Bond)
* Fixed AttributeError on open due to missing FileInfo attribute (a bug in
python-fuse). The exception would likely occur on the filesystem operation
following the open call due to python-fuse bugs.
This bug could lead to data corruption if files are opened for writing, but
problems would likely be seen before that point.
(Forest Bond)
* Fixed unmatched increment/decrement count for frozen paths. This would
manifest itself as follows:
- KeyErrors may be seen in the log.
- Writes may fail in situations where multiple processes are attempting to
write to the same file concurrently.
- A virtual path may persist after a file is modified such that the path
should change.
This could possibly lead to data corruption if the a virtual file is opened
for writing by more than one process simultaneously. In that case,
inconsistent data is likely in the absence of this bug.
(Forest Bond)
* util/profile: Added benchmark read_all_concurrent.
(Forest Bond)
* ``TestLinesMetaStore`` was modified to support a data section. All bytes
after the last newline character in the file are treated as arbitrary data.
(Forest Bond)
* util/profile: Files are now created with a data section of arbitrary size
that can be specified with command-line options --blocksize, --nblocks.
These default to 1024 and 200, respectively.
(Forest Bond)
* Implemented the beginnings of a token-style locking mechanism (this doesn't
appear to be widely used -- maybe I invented it). At present, this
effectively implements a global lock such that most pytagsfs code need not be
thread safe, but will evolve to allow limited multithreading through
judicious token releases around blocking I/O. This resolves serious
deadlocks resulting from locking calls scattered throughout pytagsfs code.
It is possible that these deadlocks could have resulted in data corruption
since the filesystem could have deadlocked with files opened for writing,
but only in situations where the filesystem was being accessed concurrently,
in which case a deadlock is likely before the user has a chance to open a
file for writing.
(Forest Bond)
* Removed a variety of locks that were rendered useless by the introduction of
token-style locking.
(Forest Bond)
* Extended token-style locking with the addition of tokens that protect
specific data structures. This improves performance by exchanging the global
token for a secondary one around code sections that would cause a thread to
block on I/O.
(Forest Bond)
* Debug logging of filesystem operations no longer includes method arguments
or return values that are too large to justify logging them. This improves
performance with debug logging enabled.
(Forest Bond)
* Introduced FUSE option max_readahead=0. This has no impact on OS X because
MacFUSE-specific option noreadahead was already being used.
Since the underlying source files can change at any time, no in-kernel
caching can be permitted. Otherwise, reads may return old data. This makes
read performance worse by a factor of about two on my machine (but
correctness is more important than performance by a factor of greater than
two ;).
The previous behavior could lead to data inconsistencies if a virtual file
and its corresponding real file were being written to simultaneously.
However, data inconsistencies would occur under those circumstances even in
the absence of this issue.
(Forest Bond)
* Symlinks in the source tree are now completely ignored. Previously, they
were represented as virtual symlinks but readlink calls would fail. In the
future, we'd like to follow symlinks and handle them correctly.
(Forest Bond)
* Fixed AttributeError when a file is opened for writing twice after being
either opened for reading and subsequently truncated or truncated and
subsequently opened for reading. The second attempt to open the file for
writing would fail. This bug could not cause data corruption.
(Forest Bond)
pytagsfs 0.9.1 2009-10-18
=========================
* Removed spurious log messages about late events from inotifyx source tree
monitor. IN_IGNORED messages are always "late".
(Forest Bond)
* Support format string short key "%c" as an alias for "%{composer}". Patch
by Michael Helmling.
(Forest Bond)
* Fixed DeprecationWarning: object.__init__() takes no parameters in
pytypes.py.
(Forest Bond)
* Fixed usage of deprecated os.popen2 in ``tests.blackbox`` that actually
caused deadlocks during testing on some systems.
(Forest Bond)
pytagsfs 0.9.1rc1 2009-04-26
============================
* Note: pyinotify has been dropped in favor of inotifyx, so this change is
no longer relevant. I'll leave it for its historical value.
Updated pyinotify source tree monitor to be compatible with new 0.8.6
pyinotify release. This is getting ugly. Thanks to Ritesh Raj Sarraf for
the report and patch. Fixes #364586.
(Forest Bond)
* Dropped pyinotify in favor of inotifyx. Fixes #364586 better.
Linux users should install inotifyx, available from
http://www.alittletooquiet.net/software/inotifyx/ .
(Forest Bond)
pytagsfs 0.9.0 2009-03-05
=========================
* Fixed test failures due to bad assumptions about source filesystems,
environment variables. Thanks to "Tomtom". Fixes #312999.
(Forest Bond)
pytagsfs 0.9.0rc1 2009-01-26
============================
* Note: The ctypes-based bindings mentioned here were replaced with
``pytagsfs.fuselib``, a new FUSE layer based on the previous python-fuse
bindings. This entry has been left for historical value. See further
entries below.
Moved to new FUSE library bindings based on fuse.py by Giorgos Verigakis. A
modified version of this module now ships with pytagsfs as
``pytagsfs.fuse``. The previous dependency on external Python FUSE bindings
no longer exists, however, the ctypes module is required and is an external
dependency with Python 2.4. Python 2.5 includes the ctypes module in the
standard library.
(Forest Bond)
* Fixed incorrect mtime, atime for files whose timestamps were updated while
they were opened for writing. Previously, timestamps from the .pytagsfs.
file would be copied to the new source file after the file was closed.
(Forest Bond)
* Fixed incorrect st_ino, st_dev from fgetattr. Previously, values for the
underlying source file were returned directly. Now, these are adjusted
properly.
(Forest Bond)
* Implemented a new approach to source tree writes:
- Files can be opened for writing multiple times. Management of concurrent
writes is pushed off to the source tree filesystem(s).
- Writes to the mount tree are immediately reflected. Thus, both writers
and readers get the same view of the pytagsfs mount. This allows us to
disable FUSE option direct_io.
- Writing to a virtual file does not cause that virtual path to disappear
until after the file has been closed. If opened for writing multiple
times concurrently, the virtual path continues to exist until all writers
have closed the file. New virtual paths may appear while the file is
still opened for writing since writes affect source files immediately.
- Truncating a virtal file does not affect the source file until the
virtual file is opened for writing. Truncating a virtual file that is
already opened for writing affects the source file immediately.
(Forest Bond)
* mmap is now fully supported and write support is now enabled by default on
all platforms. This can be done because FUSE option direct_io is no longer
used.
(Forest Bond)
* Dropped option --force-write-support. This option is no longer necessary
since write support is enabled by default on all systems.
(Forest Bond)
* Fixed traceback on invalid mount option.
(Forest Bond)
* Fixed util/profile to only read portion of log written while running
benchmarks. This problem was masked when direct_io was in use due to
fewer log entries caused by larger reads.
(Forest Bond)
* Fixed spurious logging of tracebacks due to normal filesystem errors.
(Forest Bond)
* Logging is now performed in the FUSE bindings layer (pytagsfs.fuse) instead
of using decorators in the filesystem layer (pytagsfs.fs). This improves
performance and simplifies the code a bit.
(Forest Bond)
* Reduced performance impact of logging calls that do not actually produce an
log output due to current verbosity settings by passing values for
interpolation to the logging layer instead of pre-interpolating log
messages.
(Forest Bond)
* Fixed KeyError tracebacks (only visible with -o debug) on release of .log.
(Forest Bond)
* Added mail extension, a minor extension to pytagsfs to permit tagging of
mail messages in Maildir format. This is currently invoked via new
executable ``pymailtagsfs``, but this may change in the future. For
instance invocation may at some point be via ``pytagsfs -o extension=mail``.
Tags are stored in e-mail messages using header ``X-Pytagsfs-Tag``.
(Forest Bond)
* Fixed handling of ``X-Pytagsfs-Tag`` header contents to be compliant with
RFC 2822 (MIME encoded-word syntax).
(Forest Bond)
* Fixed pymailtagsfs mailbox accesses to correctly lock mailboxes while
modifying messages.
(Forest Bond)
* Fixed failing tests in ``tests.fs`` due to filesystem API change (argv
is no longer passed to the initializer).
(Forest Bond)
* Fixed poor error handling when trying to build manpages on a system missing
the docbook XSL stylesheets. Thanks to "lunch". Fixes #307950.
(Forest Bond)
* Modified setup.py to not install pymailtagsfs, as it is considered
experimental. Users wishing to experiment with it can create a symlink
"pymailtagsfs" to existing script "pytagsfs".
(Forest Bond)
* Fixed bad truncation behavior on Mac OSX (and possibly other systems, too),
due to incorrect calls to libc's truncate (via ctypes). Correctly casting
the length argument seems to fix this problem.
(Forest Bond)
* util/profile handles badly formatted log lines by reporting them to stderr.
This problem can be triggered if the log file overflows, resulting in read
discontinuity.
(Forest Bond)
* Fixed util/profile to not read the virtual log file while profiling.
Naturally, doing so massively inflates profiling numbers, and also causes
the log file to overflow.
(Forest Bond)
* Fixed -o profile to correctly report filesystem method names. This was
broken in the transition from python-fuse to the ctypes-based fuse.py
binding. All methods were being profile with name "wrapper".
(Forest Bond)
* Replaced ctypes-based FUSE bindings with a compatibility layer,
``pytagsfs.fuselib``, on top of the standard python-fuse bindings. The
decision to move away from ctypes was made to avoid platform compatibility
issues with types defined in system header files (which ctypes has no access
to). The new compatibility layer provides a simpler API for filesystems
(like those implemented in ``pytagsfs.fs``) similar to that provided by
the ctypes-based bindings.
(Forest Bond)
* Implemented statfs. This probably used to work, because Darwin appears to
depend on it being implemented for all operations. It's not clear to me
why it would've worked in the past, but a complete implemention is now
provided.
(Forest Bond)
* Improved speed and reliability of blackbox tests by using sleep_until instead
of sleep.
(Forest Bond)
* Fixed -s (broken with introduction of ``pytagsfs.fuselib``).
(Forest Bond)
pytagsfs 0.8.0 2008-10-21
=========================
* Fixed out-of-date documentation of command-line options in pytags manual
page.
(Forest Bond)
* Fixed broken pytagsfs option -s.
(Forest Bond)
pytagsfs 0.8.0rc1 2008-10-09
============================
* Fixed hard-coded path to docbook stylesheet for building manpages in
setup.py. Thanks to Zong Sharo. Fixes #258362.
(Forest Bond)
* Fixed rather serious bug that would have prevented pytagsfs mounts from
working correctly when the mount point directory depth was smaller than
the virtual path directory depth (as defined by the format string).
(Forest Bond)
* Re-work ``PathStore`` interface:
- ``create_directory`` was renamed to ``add_directory``, and it is no
longer an optional method for sub-classes to implement.
- ``remove_file`` and ``remove_directory`` have been replaced with a single
method, ``remove``.
- ``rename_file`` and ``rename_directory`` have been replaced with a single
method, ``rename``.
- Method ``get_real_subpaths`` was added (actually it was added previously,
but the addition wasn't mentioned here).
Most users won't care about these changes.
(Forest Bond)
* Renames to paths containing too many levels of directories now fail with
EINVAL.
(Forest Bond)
* Re-implemented ``pytagsfs.subspat`` and re-worked ``pytagsfs.sourcetreerep``
to use the new API. Fixes #259928.
(Forest Bond)
* Added ``PathStore`` meta-data methods: ``get_meta_data``, ``set_meta_data``,
``unset_meta_data``. These are currently being used by
``SourceTreeRepresentation`` to store per-path ``Splitter`` objects.
(Forest Bond)
* Fixed some errors with getattr (stat):
- Instead of returning zero for atime, ctime, and mtime for empty
directories, return times as for the source tree root directory.
- st_dev was being read from the source tree root for empty directories, or
the source file for virtual files, but now is always set to zero. This
is probably most correct given that our filesystem is virtual and those
parameters are consequently meaningless.
(Forest Bond)
* Fixed a bug in utime, which previously assumed that its argument was always
a file end point. The new implementation updates the times on the source
tree root if the argument is an empty directory, or updates all contained
end points if the argument is a non-empty directory.
(Forest Bond)
* Files with tags containing slashes are not represented in the virtual
directory tree. Log messages should indicate when this is the case.
Change your tags if you want to see them. Fixes #267650.
(Forest Bond)
* PathStore implementations can now expect all paths to be specified as
unicode strings (previously, ASCII byte strings were allowed).
(Forest Bond)
* Tags with multiple values are now supported. Files with multiple tag
values will appear under multiple directories. Renames are supported.
(Forest Bond)
* pytags command-line options have changed:
- Option --pattern was renamed to --format to be consistent with pytagsfs
itself.
- Option --add was added.
- The order of options is now important. --format must be specified first,
if at all. --set, --add, and --remove are then process in order, with
each option affecting tags as it is processed.
(Forest Bond)
* Tags that mutagen does not treat as lists or tuples are ignored. I'm
currently aware of some mp4 tags that are like this (cpil, pgap, pcst,
tmpo). Other mp4 tags were already being handled specially to translate
to mp4-specific representations (tracknumber/trkn).
(Forest Bond)
* Renamed test module "integration" to "blackbox".
(Forest Bond)
* Simplified many blackbox tests, and removed some that primarily tested
functionality at a layer that is now being thoroughly unit tested.
(Forest Bond)
* Removed filesystem implementation of access method. We use -o
default_permissions, anyway, so this method was probably not even being
called (and would return incorrect results for directories if it was).
(Forest Bond)
* Fixed buggy handling of mutagen track number tag leading to an attempt to
convert a list to an integer rather than converting each list member to
an integer.
(Forest Bond)
* Renamed long version of mutagen substitution pattern "N" from "NUMBER" to
"TRACKNUMBER" in order to be consistent with pair "n", "tracknumber".
(Forest Bond)
* Added mount option "-o nocache", which disables caching of stat results and
other virtual path properties.
(Forest Bond)
* Added mount option "-o profile". This turns on some additional profiling
output in the log file.
(Forest Bond)
* Implemented util/profile, a utility that can analyze profiling information
in the log, as well as run standardized benchmarks.
(Forest Bond)
* In order to support benchmarking, a new meta store implementation was added:
``TestLinesMetaStore``. This meta store implementation should not be used
with real data files, as it has the potential to destory file data via
renames. It is for testing and benchmarking only.
(Forest Bond)
* Added mount option "-o metastores", which allows the user to specify which
meta store implementation(s) to use. This option is currently undocumented,
and was primarily introduced to support standardized benchmarking. In the
future, though, it will likely be useful for mounting directories containing
non-media source files using alternative tag formats.
(Forest Bond)
pytagsfs 0.7.1 2008-07-24
=========================
* Fix filesystem dying with removal of last sub-directory of the root
directory. PyTypesPathStore was undefining the root directory with the
removal of its last sub-directory.
(Forest Bond)
* Fix out-of-order handling of events for multiple paths when using
DeferredPyInotifySourceTreeMonitor, DeferredGaminSourceTreeMonitor, or
DeferredKqueueSourceTreeMonitor. This bug might have caused the mount tree
to become out-of-sync with the source tree under some circumstances.
(Forest Bond)
* Fix duplicate directory removal events from GaminSourceTreeMonitor and
DeferredGaminSourceTreeMonitor. This bug may have caused slight performance
and/or source tree/mount tree synchronization issues.
(Forest Bond)
* setup.py test command now accepts command-line option --print-only. If
specified, test identifiers for tests that would have been run are printed
rather than being run.
(Forest Bond)
* Only call ``locale.getpreferredencoding`` once prior to thread
initialization, since this function is not thread-safe on some platforms.
(Forest Bond)
* Fixed a bug where renaming a directory in the source tree and subsequently
modifying tags on files contained by that directory resulted in "phantom"
files and directories under the mount point. These files appear in
directory listings but no longer correspond to any existing source files.
Reading from them gives "No such file or directory" errors.
(Forest Bond)
* Fixed "No such file or directory" errors for ``getattr`` calls on virtual
directories whose sub-trees contain files corresponding with source files
that no longer exist. Under normal operating conditions, this would be the
rare outcome of a race condition.
(Forest Bond)
* Fixed mishandling of nested directory removals by KqueueSourceTreeMonitor
and DeferredKqueueSourceTreeMonitor (the default source tree monitor on
Mac OSX and other BSDs).
(Forest Bond)
pytagsfs 0.7.0 2008-06-03
=========================
* Documentation updates.
(Forest Bond)
pytagsfs 0.7.0rc1 2008-05-19
============================
* Fix setup.py not installing sub-package specialfile. This bug was
unreleased.
(Forest Bond)
* Handle conditional expressions in format strings better with respect to
renames. Previously, renaming files such that a path component matches the
alternate content of a conditional expression resulted in that alternate
content being set as a tag value. Now, the tag is removed, instead. For
example, with format string '/%?%g%:Unknown Genre%?/%a/%t.%e', moving a file
into directory "Unknown Genre" will unset the genre tag for that file,
rather than setting the genre to "Unknown Genre".
(Forest Bond)
* Long keys are now supported in format strings. For instance, "%{artist}" is
equivalent to "%a". This can also be used to access arbitrary tags that have
no short key version (like "%{composer}").
(Forest Bond)
* Created an experimental implementation of KqueueSourceTreeMonitor with the
ultimate goal of achieving full Mac OSX compatibility. More work must be
done before such support is complete.
(Forest Bond)
* Fixed Python 2.4 incompatibilities in test/integration.py.
(Forest Bond)
* Fixed broken kqueue support when not run in foreground mode (via -f/-d).
(Forest Bond)
* Fixed breakage in test/integration.py that would prevent test mounts from
being un-mounted correctly.
(Forest Bond)
* Fixed bad handling of boolean tag values.
(Forest Bond)
* Fixed incorrect handling of mount options uid, gid.
(Forest Bond)
* Set fstype to source directory path, subtype to "pytagsfs". Previously,
fstype was set to "pytagsfs". The new arrangement is more semantically
correct.
(Forest Bond)
* Fix kqueue handling of file replacements.
(Forest Bond)
* Fixed MacFUSE caching issues by passing mount option "nolocalcaches".
(Forest Bond)
* Fix renames on mounts with format string key redundancy (mounts that have
the same tag appear more than once in the format string).
(Forest Bond)
* Detect platform and inform user about potential mmap problems, if they
exist. Require --force-write-support if appropriate.
(Forest Bond)
* Provide -o ro on Linux, -o rdonly on OSX and other BSD's. Provide -r on all
systems.
(Forest Bond)
* Correctly handle errors from FUSE main function. Thanks to Y Giridhar
Appaji Nag for submitting a patch.
(Forest Bond)
* Correctly handle moves of directories containing (directly or via sub-trees)
both empty directories as well as virtual files.
(Forest Bond)
* Try to handle MP4 keys in a useful way by translating from keys to those
used more commonly by other formats. The keys seem to mostly have been
defined by iTunes, and are not well documented (nor are they very sane).
Variations in the field may cause problems here, but the iTunes-created
files that I have here appear to be handled correctly.
(Forest Bond)
* Integrate tests into setup.py. Tests can now be run with
``./setup.py test``.
(Forest Bond)
* Import the locale module from sclapp, rather than importing it directly.
This fixes some Unicode issues on Darwin. sclapp version 0.5.2 is now
required.
(Forest Bond)
* Provide ``--tests`` option to setup.py test sub-command to enable specific
tests to be run, rather than always running the entire test suite.
(Forest Bond)
* Implement substitution parameter %{NUMBER}, a synonym for %N.
(Forest Bond)
pytagsfs version 0.6.0 2008-04-04
=================================
* Pretty-up log format a bit:
- Include time stamps.
- Use prettier description of function for "Entering x" and "Leaving x"
messages.
(Forest Bond)
* Rewrote command-line option parsing. Options are now handled completely
independently from the underlying FUSE library. The following options are
no longer supported:
- -o default_permissions
- -o fsname
- -o large_read
- -o max_read
- -o hard_remove
- -o use_ino
- -o readdir_ino
- -o direct_io
- -o kernel_cache
- -o umask
- -o entry_timeout
- -o negative_timeout
- -o attr_timeout
In general, the options for which support was removed are now considered
implementation details, as they should have been previously.
(Forest Bond)
* Fix incompatibility with python-fuse 0.2 by returning fuse.Stat instances
instead of os.stat_result instances from getattr, fgetattr. This issue did
not exist with python-fuse 0.2pre3. Previously, users of 0.2 would see
EINVAL from stat calls. Reported by Chris Pickel, Jeremy Jones.
(Forest Bond)
pytagsfs 0.6.0rc2 2008-03-26
============================
* Improve performance for readdir by changing post-processing list of entries
in PyTypesPathStore.get_entries_for_directory to use new function last_unique
instead of unique. Thanks to Chris Pickel.
(Forest Bond)
* Improve performance for readdir when debug logging is turned on by decorating
FileSystemMappingToRealFiles.readdir with @logged instead of
@verbosely_logged.
(Forest Bond)
* Cache directory entries. This provides a significant performance
improvement for readdir calls after the first.
(Forest Bond)
pytagsfs 0.6.0rc1 2008-03-24
============================
* Keep order of directory entries the same across renames, collisions, etc.
Implementation happens to improve performance for source tree file updates,
as well.
(Forest Bond)
* Support simple renames of files under mount point. Renaming virtual files
and directories causes the meta-data of the underlying source files to be
updated appropriately. Files can be moved from one directory to another, or
files and directories can be renamed.
(Forest Bond)
* Fix bug preventing stat results from actually being cached. This likely had
impact on performance of directory listings.
(Forest Bond)
* Fix TypeError from readdir due to poor handling in VirtualLogFile.
(Forest Bond)
* Fix cache not pruned due to rename.
(Forest Bond)
* Directory permissions now taken from source tree root directory (previously
arbitrary).
(Forest Bond)
* Fix broken directory mtime, ctime, atime.
(Forest Bond)
* Fix partial stat cache invalidation when full path branch should be
invalidated. This would cause directory mtime, ctime, atime to not be
updated when it should.
(Forest Bond)
* Fix partial stat cache pruning in response to source file updates.
(Forest Bond)
* Support mkdir, rmdir.
(Forest Bond)
* Fix bad handling of updates to previously unrepresentable source files.
(Forest Bond)
* Fix rmdir not completely removing the target directory. While the directory
was no longer returned by readdir on parent, stat still indicated its
presence.
(Forest Bond)
pytagsfs 0.5.0 2008-03-08
=========================
* pytagsfs is now compatible with Python 2.4.
(Forest Bond)
pytagsfs 0.5.0rc2 2008-03-07
============================
* Initial scanning of files was taking place after filesystem process detached
from the user's shell. This causes the initial population delay to be
observed when the filesystem is first accessed, leading to confusion as to
whether the filesystem had hung. Now, the files are scanned before the
process detaches.
(Forest Bond)
* Fixed log spamming after each open of log file (".log").
(Forest Bond)
pytagsfs 0.5.0rc1 2008-03-06
============================
* Added option -o verbosity=VERBOSITY; VERBOSITY should be one of debug, info,
warning, error, critical. -d/-o debug overrides this, and forces verbosity
to debug.
(Forest Bond)
* With -d/-o debug, log to both .log and stderr. Otherwise, log to .log only.
(Forest Bond)
* Limit size of in-memory log file (.log) to 1MB.
(Forest Bond)
* Allow size of in-memory log file to be overridden via -o logsize.
(Forest Bond)
* Fixed bug preventing addition of tags to previously untagged mp3 files.
(Forest Bond)
* Improved inotify performance for case where source files are updated
numerous times between event processing calls;
DeferredInotifySourceTreeMonitor.
(Forest Bond)
* Improved performance by only processing add, remove, and update events for
sources files after initialization (post populate) and prior to getattr
calls.
(Forest Bond)
* Fix bug causing reads on a recently truncated fd to return the removed
content by using direct_io = True for ReadWriteFile's.
(Forest Bond)
* Fix bug (sort of) where getattr calls for a file currently open for writing
return the size of the file before being opened. Now, we defer to fgetattr
on the open file object. This would cause, for instance, mutagen to badly
truncate OGG files.
(Forest Bond)
* Fix broken setup.py that forgets to install sub-packages.
(Forest Bond)
* Fix missing import log_traceback in pytagsfs.sourcetree.
(Forest Bond)
* Fix handling of transient conflicts. Previously, when two or more source
files map to the same file name under the mount point, and one of those
source files was either removed or modified such that it mapped to a
different path, the mount path became a "dead" file, with zero links. Now,
that path will become reassociated with the next source file candidate.
(Forest Bond)
* Fix pytags, pytagsfs always exiting with zero status, despite errors.
(Forest Bond)
* Log to stderr when option -f/-o foreground is specified.
(Forest Bond)
* Introduced fallback mechanism for source tree change monitoring backends.
Source tree monitors are tried in the following order: pyinotify, gamin,
dummy.
- pyinotify only works on Linux, but is faster than gamin.
- gamin possibly works on other Unix-like systems (like the BSD's).
- The dummy backend doesn't actually do anything, so changes to the source
tree are not reflected in the mount tree.
Non-Linux users should report success or failure with the gamin backend.
(Forest Bond)
pytagsfs 0.3.0 2008-01-17
=========================
* Added BUGS.
(Forest Bond)
* A virtual log file (".log") is created under the moint point. The contents
of this file are stored in memory. In the event of a (detected) bug,
tracebacks and other critical debugging data will be accessible by reading
this file.
(Forest Bond)
* If a file is truncated (directly, without being opened), the effects of this
are not immediately visible. Reads will continue to return the file contents
prior to truncation. However, if the file is opened in write-only or
read-write mode, the truncation will be apparent to the opener. Once the
file is closed, reads will return the new content. This makes it possible to
successfully re-tag files in such a way that the file path changes.
(Forest Bond)
* Write support is now considered reliable.
(Forest Bond)
* Removed support for the following filesystem functions, which were either
incorrect or irrelevant given currently supported features:
- readlink
- mknod
- mkdir
- unlink
- symlink
- rename
- link
(Forest Bond)
* Fixed incorrect stat results due to out of date cache values. This also
corrects issue where writes would not show up in mounted tree.
(Forest Bond)
* Drastic performance improvement via stat() result caching.
(Forest Bond)
* Fixed bug in setup.py causing version information to be excluded from
generated .egg file.
(Forest Bond)
pytagsfs 0.2.0 2007-12-15
=========================
* Added NEWS file; sorry for the previous absence.
(Forest Bond)
* [NEWS file not present]
pytagsfs 0.1.0 2007-12-06
=========================
* [NEWS file not present]
|