docs: def _uninstall(action='remove', name=None, pkgs=None, **kwargs):
      '''
      remove and purge do identical things but with different apt-get commands,
      this function performs the common logic.
      '''
      try:
          pkg_params = __salt__['pkg_resource.parse_targets'](name, pkgs)[0]
      except MinionError as exc:
          raise CommandExecutionError(exc)
  
      old = list_pkgs()
      old_removed = list_pkgs(removed=True)
      targets = [x for x in pkg_params if x in old]
      if action == 'purge':
          targets.extend([x for x in pkg_params if x in old_removed])
      if not targets:
          return {}
      cmd = ['apt-get', '-q', '-y', action]
      cmd.extend(targets)
      env = _parse_env(kwargs.get('env'))
      env.update(DPKG_ENV_VARS.copy())
      out = _call_apt(cmd, env=env)
      if out['retcode'] != 0 and out['stderr']:
          errors = [out['stderr']]
      else:
          errors = []
  
      __context__.pop('pkg.list_pkgs', None)
      new = list_pkgs()
      new_removed = list_pkgs(removed=True)
  
      changes = salt.utils.data.compare_dicts(old, new)
      if action == 'purge':
          ret = {
              'removed': salt.utils.data.compare_dicts(old_removed, new_removed),
              'installed': changes
          }
      else:
          ret = changes
  
      if errors:
          raise CommandExecutionError(
              'Problem encountered removing package(s)',
              info={'errors': errors, 'changes': ret}
          )
  
      return ret