@@ -563,7 +563,8 @@ def _set_alternates(self, alts):
563563alternates = property (_get_alternates ,_set_alternates ,
564564doc = "Retrieve a list of alternates paths or set a list paths to be used as alternates" )
565565
566- def is_dirty (self ,index = True ,working_tree = True ,untracked_files = False ):
566+ def is_dirty (self ,index = True ,working_tree = True ,untracked_files = False ,
567+ submodules = True ):
567568"""
568569 :return:
569570 ``True``, the repository is considered dirty. By default it will react
@@ -575,7 +576,9 @@ def is_dirty(self, index=True, working_tree=True, untracked_files=False):
575576return False
576577
577578# start from the one which is fastest to evaluate
578- default_args = ('--abbrev=40' ,'--full-index' ,'--raw' )
579+ default_args = ['--abbrev=40' ,'--full-index' ,'--raw' ]
580+ if not submodules :
581+ default_args .append ('--ignore-submodules' )
579582if index :
580583# diff index against HEAD
581584if isfile (self .index .path )and \
@@ -588,7 +591,7 @@ def is_dirty(self, index=True, working_tree=True, untracked_files=False):
588591return True
589592# END working tree handling
590593if untracked_files :
591- if len (self .untracked_files ):
594+ if len (self ._get_untracked_files ( ignore_submodules = not submodules ) ):
592595return True
593596# END untracked files
594597return False
@@ -604,10 +607,14 @@ def untracked_files(self):
604607
605608 :note:
606609 ignored files will not appear here, i.e. files mentioned in .gitignore"""
610+ return self ._get_untracked_files ()
611+
612+ def _get_untracked_files (self ,** kwargs ):
607613# make sure we get all files, no only untracked directores
608614proc = self .git .status (porcelain = True ,
609615untracked_files = True ,
610- as_process = True )
616+ as_process = True ,
617+ ** kwargs )
611618# Untracked files preffix in porcelain mode
612619prefix = "?? "
613620untracked_files = list ()