summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--git/db/cmd/base.py29
1 files changed, 14 insertions, 15 deletions
diff --git a/git/db/cmd/base.py b/git/db/cmd/base.py
index 09847b43..96320a8a 100644
--- a/git/db/cmd/base.py
+++ b/git/db/cmd/base.py
@@ -662,26 +662,25 @@ class CmdHighLevelRepository(HighLevelRepository):
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):