old_contents: """utilities for checking submodule status"""
  
  #-----------------------------------------------------------------------------
  #  Copyright (C) 2013  The IPython Development Team
  #
  #  Distributed under the terms of the BSD License.  The full license is in
  #  the file COPYING, distributed as part of this software.
  #-----------------------------------------------------------------------------
  
  #-----------------------------------------------------------------------------
  # Imports
  #-----------------------------------------------------------------------------
  
  import os
  import subprocess
  import sys
  
  #-----------------------------------------------------------------------------
  # Globals
  #-----------------------------------------------------------------------------
  
  pjoin = os.path.join
  
  #-----------------------------------------------------------------------------
  # Code
  #-----------------------------------------------------------------------------
  
  def ipython_parent():
      """return IPython's parent (i.e. root if run from git)"""
      from IPython.utils.path import get_ipython_package_dir
      return os.path.abspath(os.path.dirname(get_ipython_package_dir()))
  
  def ipython_submodules(root):
      """return IPython submodules relative to root"""
      return [
          pjoin(root, 'IPython', 'frontend', 'html', 'notebook', 'static', 'components'),
      ]
  
  def is_repo(d):
      """is d a git repo?"""
      return os.path.exists(pjoin(d, '.git'))
  
  def check_submodule_status(root=None):
      """check submodule status
  
      Has three return values:
  
      'missing' - submodules are absent
      'unclean' - submodules have unstaged changes
      'clean' - all submodules are up to date
      """
  
      if hasattr(sys, "frozen"):
        # frozen via py2exe or similar, don't bother
        return 'clean'
  
      if not root:
          root = ipython_parent()
  
      submodules = ipython_submodules(root)
  
      for submodule in submodules:
          if not os.path.exists(submodule):
              return 'missing'
  
      if not is_repo(root):
          # not in git, assume clean
          return 'clean'
  
      # check with git submodule status
      proc = subprocess.Popen('git submodule status',
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE,
                              shell=True,
                              cwd=root,
      )
      status, _ = proc.communicate()
      status = status.decode("ascii")
  
      for line in status.splitlines():
          if status.startswith('-'):
              return 'missing'
          elif status.startswith('+'):
              return 'unclean'
  
      return 'clean'
  
  def update_submodules(repo_dir):
      """update submodules in a repo"""
      subprocess.Popen("git submodule init", cwd=repo_dir, shell=True)
      subprocess.Popen("git submodule update", cwd=repo_dir, shell=True)
  
  
new_contents: """utilities for checking submodule status"""
  
  #-----------------------------------------------------------------------------
  #  Copyright (C) 2013  The IPython Development Team
  #
  #  Distributed under the terms of the BSD License.  The full license is in
  #  the file COPYING, distributed as part of this software.
  #-----------------------------------------------------------------------------
  
  #-----------------------------------------------------------------------------
  # Imports
  #-----------------------------------------------------------------------------
  
  import os
  import subprocess
  import sys
  
  #-----------------------------------------------------------------------------
  # Globals
  #-----------------------------------------------------------------------------
  
  pjoin = os.path.join
  
  #-----------------------------------------------------------------------------
  # Code
  #-----------------------------------------------------------------------------
  
  def ipython_parent():
      """return IPython's parent (i.e. root if run from git)"""
      from IPython.utils.path import get_ipython_package_dir
      return os.path.abspath(os.path.dirname(get_ipython_package_dir()))
  
  def ipython_submodules(root):
      """return IPython submodules relative to root"""
      return [
          pjoin(root, 'IPython', 'frontend', 'html', 'notebook', 'static', 'components'),
      ]
  
  def is_repo(d):
      """is d a git repo?"""
      return os.path.exists(pjoin(d, '.git'))
  
  def check_submodule_status(root=None):
      """check submodule status
  
      Has three return values:
  
      'missing' - submodules are absent
      'unclean' - submodules have unstaged changes
      'clean' - all submodules are up to date
      """
  
      if hasattr(sys, "frozen"):
        # frozen via py2exe or similar, don't bother
        return 'clean'
  
      if not root:
          root = ipython_parent()
  
      submodules = ipython_submodules(root)
  
      for submodule in submodules:
          if not os.path.exists(submodule):
              return 'missing'
  
      if not is_repo(root):
          # not in git, assume clean
          return 'clean'
  
      # check with git submodule status
      proc = subprocess.Popen('git submodule status',
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE,
                              shell=True,
                              cwd=root,
      )
      status, _ = proc.communicate()
      status = status.decode("ascii")
  
      for line in status.splitlines():
          if status.startswith('-'):
              return 'missing'
          elif status.startswith('+'):
              return 'unclean'
  
      return 'clean'
  
  def update_submodules(repo_dir):
      """update submodules in a repo"""
      subprocess.check_call("git submodule init", cwd=repo_dir, shell=True)
      subprocess.check_call("git submodule update --recursive", cwd=repo_dir, shell=True)
  
  
subject: use check_call in update_submodules