I've been playing with a pluggable filesystem class that works with instances of Filesystem.Base, and have noticed that parts of Filesystem.Tar behave differently from Filesystem.System. In particular, paths expressed by Filesystem.Tar always seem to be full rather than the relative paths returned by Filesystem.System. That seems improper to me, especially if one expects Filesystem.Base()->get_dir() to behave in a manner similar to get_dir().
For example:
object f = Filesystem.Tar("foo.tar"); f->get_dir();
(1) Result: ({ /* 2 elements */ "/Session.pmod", "/Tools.pmod" })
f = f->cd("Session.pmod"); // note that the object is perfectly content to deal with relative paths f->get_dir();
(3) Result: ({ /* 2 elements */ "/Session.pmod/RAMSessionStorage.pike", "/Session.pmod/SQLiteSessionStorage.pike", })
I've got a fix that seems to resolve this, but wanted to check that it's actually a bug (it seems as though it must be, as it would be hard for filesystem objects to be interchangeable if they behave differently in this way).
Bill
pike-devel@lists.lysator.liu.se