code: def require_clean_submodules(repo_dir, argv):
      """Check on git submodules before distutils can do anything
  
      Since distutils cannot be trusted to update the tree
      after everything has been set in motion,
      this is not a distutils command.
      """
      # Only do this if we are in the git source repository.
      if not is_repo(repo_dir):
          return
  
      # don't do anything if nothing is actually supposed to happen
      for do_nothing in (
          "-h",
          "--help",
          "--help-commands",
          "clean",
          "submodule",
          "buildjs",
      ):
          if do_nothing in argv:
              return
  
      status = check_submodule_status(repo_dir)
  
      if status == "missing":
          print("checking out submodules for the first time")
          update_submodules(repo_dir)
      elif status == "unclean":
          print(
              "\n".join(
                  [
                      "Cannot build / install mpld3 with unclean submodules",
                      "Please update submodules with",
                      "    python setup.py submodule",
                      "or commit any submodule changes you have made.",
                  ]
              )
          )
          sys.exit(1)
  
      sync_submodules(repo_dir)
  
imports: import os
  import subprocess
  import sys
  import warnings
  import shutil
label_desc: Use image node_id 7 for calling a global function with example usage: require_clean_submodules(repo_dir, argv) without return types