From bd59ec23d2e58b96f6f076e50560a4ba2273e429 Mon Sep 17 00:00:00 2001 From: Alan McGovern Date: Thu, 19 Jan 2012 18:00:09 +0000 Subject: [Git] Resolve issues getting the status of a single file I am unsure whether this is a bug in jgit or simply a result of it not supporting git submodules yet, but it incorrectly includes submodule directories when calculating the status of a single file. Fixes bug --- .../RepositoryStatus.cs | 37 ++++++++++++++-------- 1 file changed, 24 insertions(+), 13 deletions(-) (limited to 'main/src/addins/VersionControl/MonoDevelop.VersionControl.Git') diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/RepositoryStatus.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/RepositoryStatus.cs index 4aada9f2a3..b7aa17835d 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/RepositoryStatus.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/RepositoryStatus.cs @@ -184,28 +184,39 @@ namespace MonoDevelop.VersionControl.Git void UpdateSingleFiles (List singleFiles) { + // NGIT HACK: We verify that all the files listed in the result of + // the GitStatus call are actually in the list of files we're interested + // in. This is because NGit cannot properly filter the git tree and + // incorrectly includes extra directories. See bug # var status = new SpecificStatus (Repository, singleFiles).Call (); - + foreach (var v in status.GetAdded ()) - Added.Add (v); - + if (singleFiles.Contains (v)) + Added.Add (v); + foreach (var v in status.GetChanged ()) - Modified.Add (v); - + if (singleFiles.Contains (v)) + Modified.Add (v); + foreach (var v in status.GetConflicting ()) - MergeConflict.Add (v); - + if (singleFiles.Contains (v)) + MergeConflict.Add (v); + foreach (var v in status.GetMissing ()) - Missing.Add (v); - + if (singleFiles.Contains (v)) + Missing.Add (v); + foreach (var v in status.GetModified ()) - Modified.Add (v); - + if (singleFiles.Contains (v)) + Modified.Add (v); + foreach (var v in status.GetRemoved ()) - Removed.Add (v); + if (singleFiles.Contains (v)) + Removed.Add (v); foreach (var v in status.GetUntracked ()) - Untracked.Add (v); + if (singleFiles.Contains (v)) + Untracked.Add (v); } /// -- cgit v1.2.3