@@ -662,26 +662,25 @@ def is_dirty(self, index=True, working_tree=True, untracked_files=False):
662662return True
663663# END untracked files
664664return False
665-
665+
666666@property
667667def untracked_files (self ):
668668# make sure we get all files, no only untracked directores
669- proc = self .git .status (untracked_files = True ,as_process = True )
670- stream = iter (proc .stdout )
669+ proc = self .git .status (porcelain = True ,
670+ untracked_files = True ,
671+ as_process = True )
672+ # Untracked files preffix in porcelain mode
673+ prefix = "?? "
674+
671675untracked_files = list ()
672- for line in stream :
673- if not line .startswith ("# Untracked files:" ):
676+ for line in proc . stdout :
677+ if not line .startswith (prefix ):
674678continue
675- # skip two lines
676- stream .next ()
677- stream .next ()
678-
679- for untracked_info in stream :
680- if not untracked_info .startswith ("#\t " ):
681- break
682- untracked_files .append (untracked_info .replace ("#\t " ,"" ).rstrip ())
683- # END for each utracked info line
684- # END for each line
679+ filename = line [len (prefix ):].rstrip ('\n ' )
680+ # Special characters are escaped
681+ if filename [0 ]== filename [- 1 ]== '"' :
682+ filename = filename [1 :- 1 ].decode ('string_escape' )
683+ untracked_files .append (filename )
685684return untracked_files
686685
687686def blame (self ,rev ,file ):