@@ -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+ consider_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 consider_submodules :
581+ default_args .append ('--ignore-submodules' )
579582if index :
580583# diff index against HEAD
581584if isfile (self .index .path )and \
@@ -588,7 +591,10 @@ 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+ kwargs = {}
595+ if not consider_submodules :
596+ kwargs ['ignore_submodules' ]= True
597+ if len (self ._get_untracked_files (** kwargs )):
592598return True
593599# END untracked files
594600return False
@@ -604,10 +610,14 @@ def untracked_files(self):
604610
605611 :note:
606612 ignored files will not appear here, i.e. files mentioned in .gitignore"""
613+ return self ._get_untracked_files ()
614+
615+ def _get_untracked_files (self ,** kwargs ):
607616# make sure we get all files, no only untracked directores
608617proc = self .git .status (porcelain = True ,
609618untracked_files = True ,
610- as_process = True )
619+ as_process = True ,
620+ ** kwargs )
611621# Untracked files preffix in porcelain mode
612622prefix = "?? "
613623untracked_files = list ()