@classmethod
  def change_calculator(cls, options, address_mapper, build_graph, scm=None, workspace=None):
    scm = scm or get_scm()
    if scm is None:
      raise TaskError('No SCM available.')
    workspace = workspace or ScmWorkspace(scm)

    return ChangeCalculator(scm,
                            workspace,
                            address_mapper,
                            build_graph,
                            options.include_dependees,
                            fast=options.fast,
                            changes_since=options.changes_since,
                            diffspec=options.diffspec,
                            # NB: exclude_target_regexp is a global scope option registered
                            # elsewhere
                            exclude_target_regexp=options.exclude_target_regexp)
dataset/ETHPy150Open pantsbuild/pants/src/python/pants/task/changed_file_task_mixin.py/ChangedFileTaskMixin.change_calculator/original