@@ -662,26 +662,25 @@ def is_dirty(self, index=True, working_tree=True, untracked_files=False):
662
662
return True
663
663
# END untracked files
664
664
return False
665
-
665
+
666
666
@property
667
667
def untracked_files (self ):
668
668
# 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
+
671
675
untracked_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 ):
674
678
continue
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 )
685
684
return untracked_files
686
685
687
686
def blame (self ,rev ,file ):