- pytagsfs 0.8.0rc1 2008-10-09
- pytagsfs 0.7.1 2008-07-24
- pytagsfs 0.7.0 2008-06-03
- pytagsfs 0.7.0rc1 2008-05-19
- pytagsfs version 0.6.0 2008-04-04
- pytagsfs 0.6.0rc2 2008-03-26
- pytagsfs 0.6.0rc1 2008-03-24
- pytagsfs 0.5.0 2008-03-08
- pytagsfs 0.5.0rc2 2008-03-07
- pytagsfs 0.5.0rc1 2008-03-06
- pytagsfs 0.3.0 2008-01-17
- pytagsfs 0.2.0 2007-12-15
- pytagsfs 0.1.0 2007-12-06
pytagsfs 0.8.0rc1 2008-10-09
Fixed hard-coded path to docbook stylesheet for building manpages in setup.py. Thanks to Zong Sharo. (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. (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. (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]
