fix(watcher_hub) isHidden checks the length of the watchPath before getting subString of keyPath

This commit is contained in:
Xiang Li 2014-02-06 11:09:47 -05:00
parent 1b5f9eb013
commit c844fccf2a
2 changed files with 14 additions and 0 deletions

View File

@ -161,6 +161,11 @@ func (wh *watcherHub) clone() *watcherHub {
// isHidden checks to see if key path is considered hidden to watch path i.e. the
// last element is hidden or it's within a hidden directory
func isHidden(watchPath, keyPath string) bool {
// When deleting a directory, watchPath might be deeper than the actual keyPath
// For example, when deleting /foo we also need to notify watchers on /foo/bar.
if len(watchPath) > len(keyPath) {
return false
}
// if watch path is just a "/", after path will start without "/"
// add a "/" to deal with the special case when watchPath is "/"
afterPath := path.Clean("/" + keyPath[len(watchPath):])

View File

@ -40,4 +40,13 @@ func TestIsHidden(t *testing.T) {
if !hidden {
t.Fatalf("%v should be hidden to %v\n", key, watch)
}
// watch at "/_foo/foo"
// key is "/_foo"
watch = "_foo/foo"
key = "/_foo/"
hidden = isHidden(watch, key)
if hidden {
t.Fatalf("%v should not be hidden to %v\n", key, watch)
}
}