public void AreFilesIdentical() { MockFileOS fileOs = new MockFileOS(); string junk1 = fileOs.MakeFile("bla", Encoding.Default); string junk2 = fileOs.MakeFile("bla", Encoding.Default); string junk3 = fileOs.MakeFile("alb", Encoding.Default); FileUtils.Manager.SetFileAdapter(fileOs); try { Assert.IsTrue(FileUtils.AreFilesIdentical(junk1, junk2)); Assert.IsFalse(FileUtils.AreFilesIdentical(junk1, junk3)); } finally { FileUtils.Manager.Reset(); } }
/// <summary> /// Check for changed (or missing) files in the Extensions subdirectory (as /// compared to the corresponding "Available Plugins" subdirectory). /// </summary> /// <param name="paths"></param> /// <param name="pluginBaseDir"></param> /// <param name="extensionBaseDir"></param> private void UpdateExtensionFilesIfNeeded(StringCollection paths, string pluginBaseDir, string extensionBaseDir) { if (paths.Count == 0) { return; } List <string> obsoletePaths = new List <string>(); foreach (string extensionPath in paths) { string pluginPathname = Path.Combine(pluginBaseDir, extensionPath); pluginPathname = pluginPathname.Replace("Extensions", "Available Plugins"); if (File.Exists(pluginPathname)) { string extensionPathname = Path.Combine(extensionBaseDir, extensionPath); Debug.Assert(File.Exists(extensionPathname)); if (!FileUtils.AreFilesIdentical(pluginPathname, extensionPathname)) { string extensionDir = Path.GetDirectoryName(extensionPathname); Directory.Delete(extensionDir, true); Directory.CreateDirectory(extensionDir); File.Copy(pluginPathname, extensionPathname); File.SetAttributes(extensionPathname, FileAttributes.Normal); // plug-ins usually have localization strings-XX.xml files. foreach (string pluginFile in Directory.GetFiles(Path.GetDirectoryName(pluginPathname), "strings-*.xml")) { string extensionFile = Path.Combine(extensionDir, Path.GetFileName(pluginFile)); File.Copy(pluginFile, extensionFile); File.SetAttributes(extensionFile, FileAttributes.Normal); } } } else { obsoletePaths.Add(extensionPath); } } foreach (string badPath in obsoletePaths) { paths.Remove(badPath); } }