Index: owners.py |
diff --git a/owners.py b/owners.py |
index d3028a593462177d881456d357f478273c63c831..18c42b8f519a62df53e3dcfa14bb6d722921ee70 100644 |
--- a/owners.py |
+++ b/owners.py |
@@ -178,20 +178,20 @@ class Database(object): |
current_owners = set() |
dirname = current_dir |
while dirname in self.owners_for: |
- for owner in self.owners_for[dirname]: |
- current_owners.add(owner) |
+ current_owners |= self.owners_for[dirname] |
if self._stop_looking(dirname): |
break |
+ prev_parent = dirname |
dirname = self.os_path.dirname(dirname) |
+ if prev_parent == dirname: |
+ break |
# Map each directory to a list of its owners. |
dir_owners[current_dir] = current_owners |
# Add the directory to the list of each owner. |
for owner in current_owners: |
- if not owner in owned_dirs: |
- owned_dirs[owner] = set() |
- owned_dirs[owner].add(current_dir) |
+ owned_dirs.setdefault(owner, set()).add(current_dir) |
final_owners = set() |
while dirs: |
@@ -205,6 +205,7 @@ class Database(object): |
owner_count[owner] = count |
if count >= max_count: |
max_owner = owner |
+ max_count = count |
# If no more directories have OWNERS, we're done. |
if not max_owner: |
@@ -215,7 +216,6 @@ class Database(object): |
# Remove all directories owned by the current owner from the remaining |
# list. |
for dirname in owned_dirs[max_owner]: |
- if dirname in dirs: |
- dirs.remove(dirname) |
+ dirs.discard(dirname) |
return final_owners |