class_docstr: TODO: Reimplement functions with robust library: https://github.com/gitpython-developers/GitPython
  
  This CodeDriver manages source control management for the project using git
class_docstr_tok: ["TODO",":","Reimplement","functions","with","robust","library",":","https",":","\/\/github.com\/gitpython-developers\/GitPython","This","CodeDriver","manages","source","control","management","for","the","project","using","git"]
docstr: Checks if there exists any unstaged changes for code
  
  Raises
  ------
  UnstagedChanges
      error if not there exists unstaged changes in environment
  
  GitExecutionError
      error if there exists any error while using git
docstr_tok: ["Checks","if","there","exists","any","unstaged","changes","for","code","Raises","--","--","--","UnstagedChanges","error","if","not","there","exists","unstaged","changes","in","environment","GitExecutionError","error","if","there","exists","any","error","while","using","git"]
code: def check_unstaged_changes(self):
      """Checks if there exists any unstaged changes for code
  
      Raises
      ------
      UnstagedChanges
          error if not there exists unstaged changes in environment
  
      GitExecutionError
          error if there exists any error while using git
  
      """
      try:
          process = subprocess.Popen(
              [self.execpath, "status"],
              cwd=self.filepath,
              stdout=subprocess.PIPE,
              stderr=subprocess.PIPE,
          )
          stdout, stderr = process.communicate()
          if process.returncode > 0:
              raise GitExecutionError(
                  __(
                      "error",
                      "controller.code.driver.git.status",
                      str(stderr),
                  )
              )
          stdout = stdout.decode().strip()
          if "clean" not in stdout:
              raise UnstagedChanges()
      except subprocess.CalledProcessError as e:
          raise GitExecutionError(
              __("error", "controller.code.driver.git.status", str(e))
          )
      return False
  
imports: import os
  import shutil
  import subprocess
  import semver
  from io import open
  from giturlparse import parse
  from datmo.core.util.i18n import get
  from datmo.core.util.exceptions import PathDoesNotExist, GitUrlArgumentError, GitExecutionError, FileIOError, CommitDoesNotExist, CommitFailed, DatmoFolderInWorkTree, UnstagedChanges
  from datmo.core.controller.code.driver import CodeDriver
  from datmo.config import Config
label_desc: Use image node_id 18 for calling the GitCodeDriver obj's underlying member method code with example usage: obj.check_unstaged_changes() and returns: False