def _proc_renew(self, path): text = 'Updating Homebrew database' print_info(text, self._file, redirect=self._qflag) argv = [path, 'update'] if self._force: argv.append('--force') if self._merge: argv.append('--merge') if self._quiet: argv.append('--quiet') if self._verbose: argv.append('--verbose') print_scpt(' '.join(argv), self._file, redirect=self._qflag) run(argv, self._file, redirect=self._qflag)
def _proc_update(self, path): text = f'Upgrading outdated {self.desc[1]}' print_info(text, self._file, redirect=self._qflag) argv = [path, 'cask', 'upgrade'] if self._quiet: argv.append('--quiet') if self._verbose: argv.append('--verbose') if self._greedy: argv.append('--greedy') argv.extend(self._update_opts) temp = copy.copy(argv) if self._exhaust: temp.append('--exhaust') args = ' '.join(temp) argv.append('') askpass = f'SUDO_ASKPASS={self._askpass!r}' for package in self._var__temp_pkgs: argv[-1] = package print_scpt(f'{args} {package}', self._file, redirect=self._qflag) if run(argv, self._file, shell=True, timeout=self._timeout, redirect=self._qflag, verbose=self._vflag, prefix=askpass): self._fail.append(package) else: self._pkgs.append(package) del self._var__temp_pkgs
def _proc_reinstall(self, path): text = f'Reinstalling specified {self.desc[1]}' print_info(text, self._file, redirect=self._qflag) argv = [path, 'cask', 'reinstall'] if self._force: argv.append('--force') if self._quiet: argv.append('--quiet') if self._verbose: argv.append('--verbose') argv.extend(self._reinstall_opts) argv.append('') askpass = f'SUDO_ASKPASS={self._askpass!r}' for package in self._var__temp_pkgs: argv[-1] = package print_scpt(' '.join(argv), self._file, redirect=self._qflag) if run(argv, self._file, shell=True, timeout=self._timeout, redirect=self._qflag, verbose=self._vflag, prefix=askpass): self._fail.append(package) else: self._pkgs.append(package) del self._var__temp_pkgs
def _proc_update(self, path): text = f'Upgrading outdated {self.desc[1]}' print_info(text, self._file, redirect=self._qflag) argv = [path, 'upgrade'] argv.extend(self._update_opts) if self._yes: argv.append('--no-confirm') if self._verbose: argv.append('--verbose') if self._quiet: argv.append('--quiet') argv.append('--no-list') argv.append('--no-json') argv.append('') for package in self._var__temp_pkgs: argv[-1] = package print_scpt(argv, self._file, redirect=self._qflag) if run(argv, self._file, timeout=self._timeout, redirect=self._qflag, verbose=self._vflag): self._fail.append(package) else: self._pkgs.append(package) del self._var__temp_pkgs
def _proc_postinstall(self, path): text = f'Postinstalling specified {self.desc[1]}' print_info(text, self._file, redirect=self._qflag) argv = [path, 'postinstall'] if self._quiet: argv.append('--quiet') if self._verbose: argv.append('--verbose') argv.extend(self._postinstall_opts) argv.append('') for package in self._var__temp_pkgs: argv[-1] = package print_scpt(' '.join(argv), self._file, redirect=self._qflag) if run(argv, self._file, timeout=self._timeout, redirect=self._qflag, verbose=self._vflag): self._fail.append(package) else: self._pkgs.append(package) del self._var__temp_pkgs
def _proc_fixmissing(self, path): text = f'Checking broken {self.desc[0]} dependencies' print_info(text, self._file, redirect=self._qflag) def _proc_check(): argv = [path, 'missing', f'--hide={",".join(self._ignore)!r}'] args = ' '.join(argv) print_scpt(args, self._file, redirect=self._vflag) with open(self._file, 'a') as file: file.write(f'Script started on {date()}\n') file.write(f'command: {args!r}\n') _deps_pkgs = list() try: # brew missing exits with a non-zero status if any formulae are missing dependencies proc = subprocess.run(argv, stdout=subprocess.PIPE, stderr=make_stderr(self._vflag)) except subprocess.SubprocessError: print_text(traceback.format_exc(), self._file, redirect=self._vflag) else: context = proc.stdout.decode() print_text(context, self._file, redirect=self._vflag) for line in filter(None, context.strip().splitlines()): _deps_pkgs.extend(line.split()[1:]) finally: with open(self._file, 'a') as file: file.write(f'Script done on {date()}\n') return set(_deps_pkgs) def _proc_confirm(): pkgs = f'{reset}, {bold}'.join(_deps_pkgs) text = f'macdaily-{self.cmd}: {yellow}brew{reset}: found broken dependencies: {bold}{pkgs}{reset}' print_term(text, self._file, redirect=self._qflag) if self._yes or self._quiet: return True while True: ans = get_input( self._confirm, 'Would you like to reinstall?', prefix= f'Found broken dependencies: {", ".join(_deps_pkgs)}.\n\n', suffix=f' ({green}y{reset}/{red}N{reset}) ') if re.match(r'[yY]', ans): return True if re.match(r'[nN]', ans): return False print('Invalid input.', file=sys.stderr) _deps_pkgs = _proc_check() - self._ignore if not _deps_pkgs: text = f'macdaily-{self.cmd}: {green}brew{reset}: no broken dependencies' print_term(text, self._file, redirect=self._qflag) return text = f'Fixing broken {self.desc[0]} dependencies' print_info(text, self._file, redirect=self._qflag) if _proc_confirm(): argv = [path, 'reinstall'] if self._quiet: argv.append('--quiet') if self._verbose: argv.append('--verbose') argv.append('') _done_pkgs = set() while _deps_pkgs: for package in _deps_pkgs: argv[-1] = package print_scpt(' '.join(argv), self._file, redirect=self._qflag) if not run(argv, self._file, redirect=self._qflag, timeout=self._timeout, verbose=self._vflag): with contextlib.suppress(ValueError): self._pkgs.remove(package) _done_pkgs |= _deps_pkgs _deps_pkgs = _proc_check() - _done_pkgs - self._ignore text = f'macdaily-{self.cmd}: {green}brew{reset}: all broken dependencies fixed' else: text = f'macdaily-{self.cmd}: {red}brew{reset}: all broken dependencies remain' print_term(text, self._file, redirect=self._qflag)
def _proc_uninstall(self, path): text = f'Uninstalling specified {self.desc[1]}' print_info(text, self._file, redirect=self._qflag) def _proc_dependency(package): _deps_pkgs = [package] if self._ignore_deps: return _deps_pkgs text = f'Searching dependencies of {self.desc[0]} {under}{package}{reset}' print_info(text, self._file, redirect=self._vflag) argv = [path, 'deps', '--installed', '-n'] if self._include_build: argv.append('--include-build') if self._include_optional: argv.append('--include-optional') if self._include_test: argv.append('--include-test') if self._skip_recommended: argv.append('--skip-recommended') if self._include_requirements: argv.append('--include-requirements') argv.append(package) args = ' '.join(argv) print_scpt(args, self._file, redirect=self._vflag) with open(self._file, 'a') as file: file.write(f'Script started on {date()}\n') file.write(f'command: {args!r}\n') try: proc = subprocess.check_output(argv, stderr=make_stderr(self._vflag)) except subprocess.CalledProcessError: print_text(traceback.format_exc(), self._file, redirect=self._vflag) else: context = proc.decode() _deps_pkgs.extend(reversed(context.strip().split())) print_text(context, self._file, redirect=self._vflag) finally: with open(self._file, 'a') as file: file.write(f'Script done on {date()}\n') return _deps_pkgs argv = [path, 'uninstall'] if self._force: argv.append('--force') if self._quiet: argv.append('--quiet') if self._verbose: argv.append('--verbose') if self._dry_run: argv.append('--dry-run') argv.extend(self._uninstall_opts) temp = copy.copy(argv) if self._ignore_deps: temp.append('--ignore-dependencies') args = ' '.join(temp) argv.append('--ignore-dependencies') argv.append('') _done_pkgs = list() for item in self._var__temp_pkgs: if item in _done_pkgs: continue for package in _proc_dependency(item): if package in self._ignore: continue if package in _done_pkgs: continue _done_pkgs.append(package) argv[-1] = package print_scpt(f'{args} {package}', self._file, redirect=self._qflag) if self._dry_run: continue if run(argv, self._file, timeout=self._timeout, redirect=self._qflag, verbose=self._vflag): self._fail.append(package) else: self._pkgs.append(package) del self._var__temp_pkgs