class_docstr: File-based Code Driver handles source control management for the project with files
      
class_docstr_tok: ["File-based","Code","Driver","handles","source","control","management","for","the","project","with","files"]
docstr: Return list of tracked files relative to the root directory
  
  This will look through all of the files and will exclude any datmo directories
  (.datmo) and any paths included in .datmoignore
  TODO: add general list of directories to ignore here (should be passed in by higher level code)
  
  Returns
  -------
  list
      list of filepaths relative to the the root of the repo
docstr_tok: ["Return","list","of","tracked","files","relative","to","the","root","directory","This","will","look","through","all","of","the","files","and","will","exclude","any","datmo","directories","(",".datmo",")","and","any","paths","included","in",".datmoignore","TODO",":","add","general","list","of","directories","to","ignore","here","(","should","be","passed","in","by","higher","level","code",")","Returns","--","--","--","-","list","list","of","filepaths","relative","to","the","the","root","of","the","repo"]
code: def _get_tracked_files(self):
      """Return list of tracked files relative to the root directory
  
      This will look through all of the files and will exclude any datmo directories
      (.datmo) and any paths included in .datmoignore
      TODO: add general list of directories to ignore here (should be passed in by higher level code)
  
      Returns
      -------
      list
          list of filepaths relative to the the root of the repo
      """
      all_files = set(list_all_filepaths(self.root))
  
      # Ignore the .datmo/ folder and all contents within it
      spec = pathspec.PathSpec.from_lines(
          "gitwildmatch", [self._datmo_directory_name]
      )
      dot_datmo_files = set(spec.match_tree(self.root))
  
      # Ignore the .git/ folder and all contents within it
      spec = pathspec.PathSpec.from_lines("gitwildmatch", [".git"])
      dot_git_files = set(spec.match_tree(self.root))
  
      # Load ignored files from .datmoignore file if exi
      datmoignore_files = {".datmoignore"}
      if os.path.isfile(os.path.join(self.root, ".datmoignore")):
          with open(self._datmo_ignore_filepath, "r") as f:
              spec = pathspec.PathSpec.from_lines("gitignore", f)
              datmoignore_files.update(set(spec.match_tree(self.root)))
      return list(
          all_files
          - dot_datmo_files
          - dot_git_files
          - datmoignore_files
      )
  
imports: import os
  import shutil
  import errno
  import pathspec
  import tempfile
  import hashlib
  import checksumdir
  from datmo.core.util.misc_functions import list_all_filepaths
  from datmo.core.util.i18n import get
  from datmo.core.util.exceptions import PathDoesNotExist, FileIOError, UnstagedChanges, CodeNotInitialized, CommitDoesNotExist
  from datmo.core.controller.code.driver import CodeDriver
label_desc: Use image node_id 4 for calling the FileCodeDriver obj's underlying member method code with example usage: obj._get_tracked_files() and returns: list