From 5d4a9c2374049ed45b43d09781c086d5674f48cf Mon Sep 17 00:00:00 2001 From: Maximiliano Curia Date: Tue, 6 May 2014 12:11:11 +0200 Subject: [PATCH] Fix for untracked_files no longer detected #138 --- git/db/cmd/base.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/git/db/cmd/base.py b/git/db/cmd/base.py index 09847b43c..96320a8af 100644 --- a/git/db/cmd/base.py +++ b/git/db/cmd/base.py @@ -662,26 +662,25 @@ def is_dirty(self, index=True, working_tree=True, untracked_files=False): return True # END untracked files return False - + @property def untracked_files(self): # make sure we get all files, no only untracked directores - proc = self.git.status(untracked_files=True, as_process=True) - stream = iter(proc.stdout) + proc = self.git.status(porcelain=True, + untracked_files=True, + as_process=True) + # Untracked files preffix in porcelain mode + prefix = "?? " + untracked_files = list() - for line in stream: - if not line.startswith("# Untracked files:"): + for line in proc.stdout: + if not line.startswith(prefix): continue - # skip two lines - stream.next() - stream.next() - - for untracked_info in stream: - if not untracked_info.startswith("#\t"): - break - untracked_files.append(untracked_info.replace("#\t", "").rstrip()) - # END for each utracked info line - # END for each line + filename = line[len(prefix):].rstrip('\n') + # Special characters are escaped + if filename[0] == filename[-1] == '"': + filename = filename[1:-1].decode('string_escape') + untracked_files.append(filename) return untracked_files def blame(self, rev, file):