Avoid "." path in InotifyEventDriverWatchers.

The vibe-core tests broke because a "/./" path segment slipped into the resulting paths.
This commit is contained in:
Sönke Ludwig 2017-11-22 17:07:49 +01:00
parent faf4bbcdc1
commit a9ae496fb4
3 changed files with 11 additions and 6 deletions

View file

@ -41,7 +41,7 @@ final class InotifyEventDriverWatchers(Events : EventDriverEvents) : EventDriver
m_watches[ret] = WatchState(null, path, recursive); m_watches[ret] = WatchState(null, path, recursive);
addWatch(ret, path, "."); addWatch(ret, path, "");
if (recursive) { if (recursive) {
try { try {
auto base_segements = path.pathSplitter.walkLength; auto base_segements = path.pathSplitter.walkLength;
@ -138,7 +138,7 @@ final class InotifyEventDriverWatchers(Events : EventDriverEvents) : EventDriver
auto subdir = w.watcherPaths[ev.wd]; auto subdir = w.watcherPaths[ev.wd];
if (w.recursive && ev.mask & (IN_CREATE|IN_MOVED_TO) && ev.mask & IN_ISDIR) { if (w.recursive && ev.mask & (IN_CREATE|IN_MOVED_TO) && ev.mask & IN_ISDIR) {
addWatch(id, w.basePath, subdir == "." ? name.idup : buildPath(subdir, name)); addWatch(id, w.basePath, subdir == "" ? name.idup : buildPath(subdir, name));
} }
ch.baseDirectory = m_watches[id].basePath; ch.baseDirectory = m_watches[id].basePath;

View file

@ -160,5 +160,7 @@ print("test %s RENAME %s %s", from, to, expect_change);
FileChange fchange(FileChangeKind kind, string name, bool is_dir) FileChange fchange(FileChangeKind kind, string name, bool is_dir)
{ {
return FileChange(kind, testDir, dirName(name), baseName(name), is_dir); auto dn = dirName(name);
if (dn == ".") dn = "";
return FileChange(kind, testDir, dn, baseName(name), is_dir);
} }

View file

@ -27,17 +27,20 @@ void main()
default: assert(false); default: assert(false);
case 0: case 0:
assert(change.kind == FileChangeKind.added); assert(change.kind == FileChangeKind.added);
assert(change.directory == "."); assert(change.baseDirectory == ".");
assert(change.directory == "");
assert(change.name == testFilename); assert(change.name == testFilename);
break; break;
case 1: case 1:
assert(change.kind == FileChangeKind.modified); assert(change.kind == FileChangeKind.modified);
assert(change.directory == "."); assert(change.baseDirectory == ".");
assert(change.directory == "");
assert(change.name == testFilename); assert(change.name == testFilename);
break; break;
case 2: case 2:
assert(change.kind == FileChangeKind.removed); assert(change.kind == FileChangeKind.removed);
assert(change.directory == "."); assert(change.baseDirectory == ".");
assert(change.directory == "");
assert(change.name == testFilename); assert(change.name == testFilename);
eventDriver.watchers.releaseRef(id); eventDriver.watchers.releaseRef(id);
s_done = true; s_done = true;