docs: def _command_change(self):
          """
          Returns True if the difference between the current and
          pending configs represents a change to the command.
          That comes down to these cases:
              -  No current config (startup case)
              -  No pending config (task deleted)
              -  Command changed (restart needed)
              -  Environment changed (restart needed)
      """
          log = self._params.get('log', self._discard)
          if self._config_running is None:
              log.debug("Task '%s' change - no previous config", self._name)
              return True
          for elem in set(list(self._config_running) + list(self._config_pending)):
              #  Ignore these elements as they don't affect the operation of a process
              #  that is already running
              #
              if elem in ['control', 'pidfile', 'onexit', 'requires', 'start_delay']:
                  continue
              if self._config_running.get(elem) != self._config_pending.get(elem):
                  log.debug("Task '%s' change - '%s' text change", self._name, elem)
                  return True
          new_context = self._context_build(pending=True)
          if self._context != new_context:
              if log.isEnabledFor(logging.DEBUG):
                  log.debug("Task '%s' change - context change", self._name)
                  for tag in set(list(self._context) + list(new_context)):
                      o = self._context.get(tag)
                      n = new_context.get(tag)
                      if o != n:
                          log.debug("    %s: %s -> %s", tag, o, n)
              return True
          log.debug("No changes in task '%s'", self._name)
          return False