Skip to content

Commit dfce1e6

Browse files
author
Andrew
committed
added unsupported file change support
1 parent 1f461f2 commit dfce1e6

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

GitCommander/Changes.cs

+34-21
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public static bool RevertAllChanges()
9191
}
9292

9393
private delegate bool AddState(string type, FileStates stateType);
94-
private static void ParseFileState(string line, ref int mode, List<FileState> states)
94+
private static bool ParseFileState(string line, ref int mode, List<FileState> states)
9595
{
9696
var addState = new AddState(delegate(string type, FileStates stateType)
9797
{
@@ -127,52 +127,52 @@ private static void ParseFileState(string line, ref int mode, List<FileState> st
127127
// gather normal files
128128
switch (line)
129129
{
130-
case "Changes to be committed:": mode = 0; return;
131-
case "Changes not staged for commit:": mode = 1; return;
132-
case "Unmerged paths:": mode = 2; return;
133-
case "Untracked files:": mode = 3; return;
130+
case "Changes to be committed:": mode = 0; return true;
131+
case "Changes not staged for commit:": mode = 1; return true;
132+
case "Unmerged paths:": mode = 2; return true;
133+
case "Untracked files:": mode = 3; return true;
134134
}
135135

136+
bool pass = false;
136137
if (mode == 0)
137138
{
138-
bool pass = addState("\tnew file:", FileStates.NewInIndex);
139+
pass = addState("\tnew file:", FileStates.NewInIndex);
139140
if (!pass) pass = addState("\tmodified:", FileStates.ModifiedInIndex);
140141
if (!pass) pass = addState("\tdeleted:", FileStates.DeletedFromIndex);
141142
if (!pass) pass = addState("\trenamed:", FileStates.RenamedInIndex);
142-
// TODO: check for valid unhanled types
143-
//if (!pass)
144-
//{
145-
// var match = Regex.Match(line, @"\t(.*):");
146-
// if (match.Success)
147-
// {
148-
149-
// return false;
150-
// }
151-
//}
152143
}
153144
else if (mode == 1)
154145
{
155-
bool pass = addState("\tmodified:", FileStates.ModifiedInWorkdir);
146+
pass = addState("\tmodified:", FileStates.ModifiedInWorkdir);
156147
if (!pass) pass = addState("\tdeleted:", FileStates.DeletedFromWorkdir);
157148
if (!pass) pass = addState("\trenamed:", FileStates.RenamedInWorkdir);
158149
}
159150
else if (mode == 2)
160151
{
161-
addState("\tboth modified:", FileStates.Conflicted);
152+
pass = addState("\tboth modified:", FileStates.Conflicted);
162153
}
163154
else if (mode == 3)
164155
{
165-
addState("\t", FileStates.NewInWorkdir);
156+
pass = addState("\t", FileStates.NewInWorkdir);
166157
}
158+
159+
if (!pass)
160+
{
161+
var match = Regex.Match(line, @"\t(.*):");
162+
if (match.Success) return false;
163+
}
164+
165+
return true;
167166
}
168167

169168
public static bool GetFileState(string filename, out FileState fileState)
170169
{
171170
var states = new List<FileState>();
172171
int mode = -1;
172+
bool failedToParse = false;
173173
var stdCallback = new StdCallbackMethod(delegate(string line)
174174
{
175-
ParseFileState(line, ref mode, states);
175+
if (!ParseFileState(line, ref mode, states)) failedToParse = true;
176176
});
177177

178178
var result = Tools.RunExe("git", string.Format("status -u \"{0}\"", filename), stdCallback:stdCallback);
@@ -183,6 +183,12 @@ public static bool GetFileState(string filename, out FileState fileState)
183183
fileState = null;
184184
return false;
185185
}
186+
187+
if (failedToParse)
188+
{
189+
fileState = null;
190+
return false;
191+
}
186192

187193
if (states.Count != 0)
188194
{
@@ -200,9 +206,10 @@ public static bool GetFileStates(out FileState[] fileStates)
200206
{
201207
var states = new List<FileState>();
202208
int mode = -1;
209+
bool failedToParse = false;
203210
var stdCallback = new StdCallbackMethod(delegate(string line)
204211
{
205-
ParseFileState(line, ref mode, states);
212+
if (!ParseFileState(line, ref mode, states))failedToParse = true;
206213
});
207214

208215
var result = Tools.RunExe("git", "status -u", stdCallback:stdCallback);
@@ -214,6 +221,12 @@ public static bool GetFileStates(out FileState[] fileStates)
214221
return false;
215222
}
216223

224+
if (failedToParse)
225+
{
226+
fileStates = null;
227+
return false;
228+
}
229+
217230
fileStates = states.ToArray();
218231
return true;
219232
}

0 commit comments

Comments
 (0)