summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaximiliano Curia <maxy@gnuservers.com.ar>2014-05-06 12:11:11 +0200
committerMaximiliano Curia <maxy@gnuservers.com.ar>2014-05-06 12:11:11 +0200
commit5d4a9c2374049ed45b43d09781c086d5674f48cf (patch)
tree6e03f51a3560a9338bb8097543d651ccd24f3f4e
parent2976561e6c369b40f7e0a36016b26cd560db6ad4 (diff)
downloadgitpython-5d4a9c2374049ed45b43d09781c086d5674f48cf.tar.gz
Fix for untracked_files no longer detected #138
-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):