fix: skip primary in uninstall
This commit is contained in:
14
brew.py
14
brew.py
@@ -1922,6 +1922,12 @@ class UninstallQueue:
|
|||||||
skipped = depTree.reverse.filterDifference(secondary, hidden)
|
skipped = depTree.reverse.filterDifference(secondary, hidden)
|
||||||
removed = rawUninstall.difference(skipped)
|
removed = rawUninstall.difference(skipped)
|
||||||
|
|
||||||
|
# skip dependencies which were installed by user on request
|
||||||
|
primary = set(x for x in removed if LocalPackage(x).primary)
|
||||||
|
primary = primary.difference(deletePkgs)
|
||||||
|
removed -= primary
|
||||||
|
skipped |= primary
|
||||||
|
|
||||||
# recursively ignore dependencies that rely on already ignored
|
# recursively ignore dependencies that rely on already ignored
|
||||||
while deps := depTree.reverse.filterIntersection(removed, skipped):
|
while deps := depTree.reverse.filterIntersection(removed, skipped):
|
||||||
skipped.update(deps)
|
skipped.update(deps)
|
||||||
@@ -1933,8 +1939,7 @@ class UninstallQueue:
|
|||||||
setWarnings(hidden)
|
setWarnings(hidden)
|
||||||
setUninstallQueue(sorted(removed))
|
setUninstallQueue(sorted(removed))
|
||||||
irrelevant = removed.union(hiddenPkgs)
|
irrelevant = removed.union(hiddenPkgs)
|
||||||
self.skips = {pkg: deps for pkg in skipped
|
self.skips = {pkg: getDeps(pkg) - irrelevant for pkg in skipped}
|
||||||
if (deps := getDeps(pkg) - irrelevant)}
|
|
||||||
|
|
||||||
def validateQueue(self) -> None:
|
def validateQueue(self) -> None:
|
||||||
''' Check for direct dependencies. If found, fail with exit code 1 '''
|
''' Check for direct dependencies. If found, fail with exit code 1 '''
|
||||||
@@ -1951,7 +1956,10 @@ class UninstallQueue:
|
|||||||
def printSkipped(self) -> None:
|
def printSkipped(self) -> None:
|
||||||
''' Print list of `skip X. used by: {deps}` '''
|
''' Print list of `skip X. used by: {deps}` '''
|
||||||
for pkg, deps in sorted(self.skips.items()):
|
for pkg, deps in sorted(self.skips.items()):
|
||||||
Log.warn(f'skip {pkg}. used by:', ', '.join(sorted(deps)))
|
if LocalPackage(pkg).primary:
|
||||||
|
Log.warn(f'skip {pkg}. (primary install)')
|
||||||
|
else:
|
||||||
|
Log.warn(f'skip {pkg}. used by:', ', '.join(sorted(deps)))
|
||||||
|
|
||||||
def uninstall(self, *, dryRun: bool) -> None:
|
def uninstall(self, *, dryRun: bool) -> None:
|
||||||
''' Remove symlinks and package directories (or pretend to do) '''
|
''' Remove symlinks and package directories (or pretend to do) '''
|
||||||
|
|||||||
Reference in New Issue
Block a user