public CommonLogic(GitModule module) { Requires.NotNull(module, nameof(module)); Module = module; var repoDistGlobalSettings = RepoDistSettings.CreateGlobal(false); var repoDistPulledSettings = RepoDistSettings.CreateDistributed(module, false); var repoDistLocalSettings = RepoDistSettings.CreateLocal(module, false); var repoDistEffectiveSettings = new RepoDistSettings( new RepoDistSettings(repoDistGlobalSettings, repoDistPulledSettings.SettingsCache, SettingLevel.Distributed), repoDistLocalSettings.SettingsCache, SettingLevel.Effective); var configFileGlobalSettings = ConfigFileSettings.CreateGlobal(false); var configFileLocalSettings = ConfigFileSettings.CreateLocal(module, false); var configFileEffectiveSettings = new ConfigFileSettings( configFileGlobalSettings, configFileLocalSettings.SettingsCache, SettingLevel.Effective); RepoDistSettingsSet = new RepoDistSettingsSet( repoDistEffectiveSettings, repoDistLocalSettings, repoDistPulledSettings, repoDistGlobalSettings); ConfigFileSettingsSet = new ConfigFileSettingsSet( configFileEffectiveSettings, configFileLocalSettings, configFileGlobalSettings); }
public IEnumerable <ExternalLink> Parse(GitRevision revision, RepoDistSettings settings) { var definitions = _effectiveLinkDefinitionsProvider.Get(settings); return(definitions.Where(definition => definition.Enabled) .SelectMany(definition => _externalLinkRevisionParser.Parse(revision, definition))); }
public CommonLogic(GitModule aModule) { Module = aModule; if (aModule != null) { var repoDistGlobalSettings = RepoDistSettings.CreateGlobal(false); var repoDistPulledSettings = RepoDistSettings.CreateDistributed(Module, false); var repoDistLocalSettings = RepoDistSettings.CreateLocal(Module, false); var repoDistEffectiveSettings = new RepoDistSettings( new RepoDistSettings(repoDistGlobalSettings, repoDistPulledSettings.SettingsCache), repoDistLocalSettings.SettingsCache); var configFileGlobalSettings = ConfigFileSettings.CreateGlobal(false); var configFileLocalSettings = ConfigFileSettings.CreateLocal(Module, false); var configFileEffectiveSettings = new ConfigFileSettings(configFileGlobalSettings, configFileLocalSettings.SettingsCache); RepoDistSettingsSet = new RepoDistSettingsSet( repoDistEffectiveSettings, repoDistLocalSettings, repoDistPulledSettings, repoDistGlobalSettings); ConfigFileSettingsSet = new ConfigFileSettingsSet( configFileEffectiveSettings, configFileLocalSettings, configFileGlobalSettings); } }
public void Remove_should_save_definition_to_lowest_settings() { _parser = new GitExtLinksParser(_repoLocal); var definition = new GitExtLinkDef { Name = "test", SearchPattern = "pattern" }; _parser.AddLinkDef(definition); _parser.SaveToSettings(); _repoLocal.SettingsCache.Save(); _repoDistributed.SettingsCache.Save(); _userRoaming.SettingsCache.Save(); var settings = new RepoDistSettings(null, new GitExtSettingsCache(_level3)); var parser = new GitExtLinksParser(settings); parser.EffectiveLinkDefs.Count.Should().Be(2); var item = parser.EffectiveLinkDefs.Last(); item.Name.Should().Be(definition.Name); item.SearchPattern.Should().Be(definition.SearchPattern); }
/// <summary> /// Loads external link definitions from the settings. /// </summary> public IReadOnlyList <ExternalLinkDefinition> Load(RepoDistSettings settings) { var cachedSettings = new RepoDistSettings(null, settings.SettingsCache, settings.SettingLevel); var xml = cachedSettings.GetString(SettingName, null); return(LoadFromXmlString(xml)); }
/// <summary> /// Saves the provided external link definitions to the settings. /// </summary> public void Save(RepoDistSettings settings, IReadOnlyList <ExternalLinkDefinition> definitions) { try { string xml; if (definitions.Count == 0) { xml = null; } else { foreach (var definition in definitions) { definition.RemoveEmptyFormats(); } var sw = new StringWriter(); var serializer = new XmlSerializer(typeof(List <ExternalLinkDefinition>)); var ns = new XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); serializer.Serialize(sw, definitions.OrderBy(x => x.Name).ToList(), ns); xml = sw.ToString(); } var cachedSettings = new RepoDistSettings(null, settings.SettingsCache, settings.SettingLevel); cachedSettings.SetString(SettingName, xml); } catch (Exception e) { Debug.WriteLine(e); } }
static AppSettings() { ApplicationDataPath = new Lazy <string>(() => { if (IsPortable()) { return(GetGitExtensionsDirectory()); } else { //Make applicationdatapath version independent return(Application.UserAppDataPath.Replace(Application.ProductVersion, string.Empty)); } } ); _SettingsContainer = new RepoDistSettings(null, GitExtSettingsCache.FromCache(SettingsFilePath)); GitLog = new CommandLogger(); if (!File.Exists(SettingsFilePath)) { ImportFromRegistry(); } }
public void Should_return_default_value(PropertyInfo property, object value, object defaultValue, bool isSetting) { // Arrange object root = null; if (isSetting) { root = property.GetValue(null); property = property.PropertyType .GetProperty(nameof(ISetting <string> .Value)); } var filePath = Path.GetTempFileName(); File.WriteAllText(filePath, SettingsFileContent); var container = new RepoDistSettings(null, GitExtSettingsCache.Create(filePath), SettingLevel.Unknown); object storedValue = null; // Act AppSettings.UsingContainer(container, () => { storedValue = property.GetValue(root); }); // Assert Assert.That(storedValue, Is.EqualTo(defaultValue)); }
public CommonLogic([CanBeNull] VsrModule module) { Module = module; if (module != null) { var repoDistGlobalSettings = RepoDistSettings.CreateGlobal(false); var repoDistPulledSettings = RepoDistSettings.CreateDistributed(Module, false); var repoDistLocalSettings = RepoDistSettings.CreateLocal(Module, false); var repoDistEffectiveSettings = new RepoDistSettings( new RepoDistSettings(repoDistGlobalSettings, repoDistPulledSettings.SettingsCache, SettingLevel.Distributed), repoDistLocalSettings.SettingsCache, SettingLevel.Effective); var configFileGlobalSettings = ConfigFileSettings.CreateGlobal(false); var configFileLocalSettings = ConfigFileSettings.CreateLocal(Module, false); var configFileEffectiveSettings = new ConfigFileSettings( configFileGlobalSettings, configFileLocalSettings.SettingsCache, SettingLevel.Effective); RepoDistSettingsSet = new RepoDistSettingsSet( repoDistEffectiveSettings, repoDistLocalSettings, repoDistPulledSettings, repoDistGlobalSettings); ConfigFileSettingsSet = new ConfigFileSettingsSet( configFileEffectiveSettings, configFileLocalSettings, configFileGlobalSettings); } }
/// <summary> /// Saves the provided external link definitions to the settings. /// </summary> public void Save(RepoDistSettings settings, IList <ExternalLinkDefinition> definitions) { try { string xml; if (definitions.Count == 0) { xml = null; } else { definitions.ForEach(linkDef => linkDef.RemoveEmptyFormats()); var sw = new StringWriter(); var serializer = new XmlSerializer(typeof(List <ExternalLinkDefinition>)); serializer.Serialize(sw, definitions); xml = sw.ToString(); } var cachedSettings = new RepoDistSettings(null, settings.SettingsCache); cachedSettings.SetString(SettingName, xml); } catch (Exception e) { Debug.WriteLine(e); } }
private void SetCurrentSettings(RepoDistSettings settings) { if (CurrentSettings != null) SaveSettings(); CurrentSettings = settings; LoadSettings(); }
public ExternalLinksManager(RepoDistSettings settings) { _cachedSettings = new RepoDistSettings(null, settings.SettingsCache); _definitions = _externalLinksStorage.Load(_cachedSettings).ToList(); if (settings.LowerPriority != null) { _lowerPriority = new ExternalLinksManager(settings.LowerPriority); } }
public GitExtLinksParser(RepoDistSettings aSettings) { Settings = new RepoDistSettings(null, aSettings.SettingsCache); LoadFromSettings(); if (aSettings.LowerPriority == null) LowerPriority = null; else LowerPriority = new GitExtLinksParser(aSettings.LowerPriority); }
public RepoDistSettingsSet( RepoDistSettings aEffectiveSettings, RepoDistSettings aLocalSettings, RepoDistSettings aPulledSettings, RepoDistSettings aGlobalSettings) { EffectiveSettings = aEffectiveSettings; LocalSettings = aLocalSettings; RepoDistSettings = aPulledSettings; GlobalSettings = aGlobalSettings; }
public RepoDistSettingsSet( RepoDistSettings effectiveSettings, RepoDistSettings localSettings, RepoDistSettings pulledSettings, RepoDistSettings globalSettings) { EffectiveSettings = effectiveSettings; LocalSettings = localSettings; RepoDistSettings = pulledSettings; GlobalSettings = globalSettings; }
private void SetCurrentSettings(RepoDistSettings settings) { if (CurrentSettings is not null) { SaveSettings(); } CurrentSettings = settings; LoadSettings(); }
public GitExtLinksParser(RepoDistSettings aSettings) { Settings = new RepoDistSettings(null, aSettings.SettingsCache); LoadFromSettings(); if (aSettings.LowerPriority == null) { LowerPriority = null; } else { LowerPriority = new GitExtLinksParser(aSettings.LowerPriority); } }
public void Can_load_settings(string fileName, int expected) { var content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.{fileName}.settings.xml"); using var testHelper = new GitModuleTestHelper(); var settingsFile = testHelper.CreateRepoFile(".git", "GitExtensions.settings", content); using var settingsCache = new GitExtSettingsCache(settingsFile); var settings = new RepoDistSettings(null, settingsCache, SettingLevel.Unknown); var definitions = _externalLinksStorage.Load(settings); definitions.Count.Should().Be(expected); }
public void Setup() { _testHelper = new GitModuleTestHelper(); var content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level1_GitExtensions.settings.xml"); _level1 = _testHelper.CreateRepoFile(".git", "GitExtensions.settings", content); content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level2_GitExtensions.settings.xml"); _level2 = _testHelper.CreateFile(_testHelper.TemporaryPath + "/RoamingProfile", "GitExtensions.settings", content); content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level3_GitExtensions.settings.xml"); _level3 = _testHelper.CreateRepoFile("GitExtensions.settings", content); _userRoaming = new RepoDistSettings(null, new GitExtSettingsCache(_level3)); _repoDistributed = new RepoDistSettings(_userRoaming, new GitExtSettingsCache(_level2)); _repoLocal = new RepoDistSettings(_repoDistributed, new GitExtSettingsCache(_level1)); }
public void Setup() { _testHelper = new GitModuleTestHelper(); var content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level3_roaming_GitExtensions.settings.xml"); _userRoamingConfigFilePath = _testHelper.CreateFile(_testHelper.TemporaryPath + "/RoamingProfile", "GitExtensions.settings", content); content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level2_repodist_GitExtensions.settings.xml"); _repoDistributedConfigFilePath = _testHelper.CreateRepoFile("GitExtensions.settings", content); content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level1_repogit_GitExtensions.settings.xml"); _repoLocalConfigFilePath = _testHelper.CreateRepoFile(".git", "GitExtensions.settings", content); _userRoaming = new RepoDistSettings(null, new GitExtSettingsCache(_userRoamingConfigFilePath), SettingLevel.Global); _repoDistributed = new RepoDistSettings(_userRoaming, new GitExtSettingsCache(_repoDistributedConfigFilePath), SettingLevel.Distributed); _repoLocal = new RepoDistSettings(_repoDistributed, new GitExtSettingsCache(_repoLocalConfigFilePath), SettingLevel.Local); _effective = new RepoDistSettings(_repoLocal, new GitExtSettingsCache(null), SettingLevel.Effective); }
/// <summary> /// Loads all persisted external link definitions across all setting layers. /// </summary> public IReadOnlyList <ExternalLinkDefinition> Get(RepoDistSettings settings) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } var cachedSettings = new RepoDistSettings(null, settings.SettingsCache); IEnumerable <ExternalLinkDefinition> effective = _externalLinksLoader.Load(cachedSettings); if (settings.LowerPriority != null) { var lowerPriorityLoader = new ConfiguredLinkDefinitionsProvider(_externalLinksLoader); effective = effective.Union(lowerPriorityLoader.Get(settings.LowerPriority)); } return(effective.ToList()); }
public static void UsingContainer(RepoDistSettings aSettingsContainer, Action action) { SettingsContainer.LockedAction(() => { var oldSC = SettingsContainer; try { _SettingsContainer = aSettingsContainer; action(); } finally { _SettingsContainer = oldSC; //refresh settings if needed SettingsContainer.GetString(string.Empty, null); } } ); }
public void Setup() { _testHelper = new GitModuleTestHelper(); var content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level1_repogit_GitExtensions.settings.xml"); _level1 = _testHelper.CreateRepoFile(".git", "GitExtensions.settings", content); content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level2_repodist_GitExtensions.settings.xml"); _level2 = _testHelper.CreateFile(_testHelper.TemporaryPath + "/RoamingProfile", "GitExtensions.settings", content); content = EmbeddedResourceLoader.Load(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MockData.level3_roaming_GitExtensions.settings.xml"); _level3 = _testHelper.CreateRepoFile("GitExtensions.settings", content); _userRoaming = new RepoDistSettings(null, new GitExtSettingsCache(_level3)); _repoDistributed = new RepoDistSettings(_userRoaming, new GitExtSettingsCache(_level2)); _repoLocal = new RepoDistSettings(_repoDistributed, new GitExtSettingsCache(_level1)); _externalLinksStorage = Substitute.For <IExternalLinksStorage>(); _provider = new ConfiguredLinkDefinitionsProvider(_externalLinksStorage); }
/// <summary> /// Loads all persisted external link definitions across all setting layers. /// </summary> public IReadOnlyList <ExternalLinkDefinition> Get(RepoDistSettings settings) { if (settings is null) { throw new ArgumentNullException(nameof(settings)); } var cachedSettings = new RepoDistSettings(null, settings.SettingsCache, SettingLevel.Unknown); IEnumerable <ExternalLinkDefinition>?effective = _externalLinksStorage.Load(cachedSettings); Assumes.NotNull(effective); if (settings.LowerPriority is not null) { var lowerPriorityLoader = new ConfiguredLinkDefinitionsProvider(_externalLinksStorage); effective = effective.Union(lowerPriorityLoader.Get(settings.LowerPriority)); } return(effective.ToList()); }
public void SetUp() { _executable = new MockExecutable(); // Work around: When running unittest, Application.UserAppDataPath always points to // %APPDATA%Roaming\Microsoft Corporation\Microsoft.TestHost.x86 // We need to correct it to %APPDATA%\GitExtensions\GitExtensions for v3 at least var userAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var settingPath = Path.Combine(userAppDataPath, "GitExtensions\\GitExtensions\\GitExtensions.settings"); var settingContainer = new RepoDistSettings(null, GitExtSettingsCache.FromCache(settingPath), SettingLevel.Unknown); _appPath = Path.Combine(settingContainer.GetString("gitbindir", ""), "git.exe"); // Execute process in GitExtension working directory, so that git will return success exit-code // git always return non-zero exit code when run git reset outside of git repository // NUnit working directory always default to MS test host var workingDir = Path.GetDirectoryName(Assembly.GetAssembly(typeof(ExecutableExtensionsTests)).Location); _gitExecutable = new Executable(_appPath, workingDir); }
protected override void Init(ISettingsPageHost aPageHost) { base.Init(aPageHost); CurrentSettings = RepoDistSettingsSet.EffectiveSettings; }
/// <summary> /// Loads external link definitions from the settings. /// </summary> public IReadOnlyList<ExternalLinkDefinition>? Load(RepoDistSettings settings) { var xml = settings.GetString(SettingName, null); return LoadFromXmlString(xml); }
protected override void Init(ISettingsPageHost pageHost) { base.Init(pageHost); CurrentSettings = RepoDistSettingsSet.EffectiveSettings; }