code: def test_rerun_chain(path=None):
      ds = Dataset(path).create()
      commits = []
  
      with swallow_outputs():
          ds.run(f"echo x$({cat_command} grows) > grows")
      ds.repo.tag("first-run", commit=DEFAULT_BRANCH)
  
      for _ in range(3):
          commits.append(ds.repo.get_hexsha(DEFAULT_BRANCH))
          ds.rerun()
          _, info = get_run_info(ds, last_commit_msg(ds.repo))
          eq_(info["chain"], commits)
  
      ds.rerun(revision="first-run")
      _, info = get_run_info(ds, last_commit_msg(ds.repo))
      eq_(info["chain"], commits[:1])
  
imports: import logging
  import os.path
  import sys
  from io import StringIO
  from os import remove
  import pytest
  from unittest.mock import patch
  from datalad.api import install, run
  from datalad.core.local.run import run_command
  from datalad.core.local.tests.test_run import last_commit_msg
  from datalad.distribution.dataset import Dataset
  from datalad.local.rerun import diff_revision, get_run_info, new_or_modified
  from datalad.support.exceptions import CommandError, IncompleteResultsError
  from datalad.support.gitrepo import GitRepo
  from datalad.tests.utils_pytest import DEFAULT_BRANCH, DEFAULT_REMOTE, SkipTest, assert_dict_equal, assert_false, assert_in, assert_in_results, assert_not_in, assert_not_in_results, assert_raises, assert_repo_status, assert_result_count, assert_status, create_tree, eq_, known_failure_windows, neq_, ok_, ok_exists, ok_file_has_content, ok_file_under_git, skip_if_adjusted_branch, slow, swallow_logs, swallow_outputs, with_tempfile, with_tree
  from datalad.utils import Path, chpwd, on_windows
label_desc: Use image node_id 4 for calling a global function with example usage: test_rerun_chain(path) without return types