others_in_slot.append(dblink(self.cat, catsplit(cur_cpv)[1],
self.vartree.root, self.settings,
vartree=self.vartree))
- claimed_paths = set()
- for dblnk in others_in_slot:
- claimed_paths.update(dblnk.getcontents())
+ dest_root = normalize_path(self.vartree.root).rstrip(os.path.sep) + \
+ os.path.sep
+ dest_root_len = len(dest_root)
unmerge_orphans = "unmerge-orphans" in self.settings.features
obj = normalize_path(objkey)
file_data = pkgfiles[objkey]
file_type = file_data[0]
- if obj in claimed_paths:
- # A new instance of this package claims the file, so don't
- # unmerge it.
- writemsg_stdout("--- !owned %s %s\n" % \
- (pkgfiles[objkey][0], obj))
- continue
statobj = None
try:
statobj = os.stat(obj)
if lstatobj is None:
writemsg_stdout("--- !found %s %s\n" % (file_type, obj))
continue
+ if obj.startswith(dest_root):
+ relative_path = obj[dest_root_len:]
+ is_owned = False
+ for dblnk in others_in_slot:
+ if dblnk.isowner(relative_path, dest_root):
+ is_owned = True
+ break
+ if is_owned:
+ # A new instance of this package claims the file, so
+ # don't unmerge it.
+ writemsg_stdout("--- !owned %s %s\n" % \
+ (file_type, obj))
+ continue
# next line includes a tweak to protect modules from being unmerged,
# but we don't protect modules from being overwritten if they are
# upgraded. We effectively only want one half of the config protection