Esempio n. 1
0
        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)));
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
            }
        }
        /// <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);
            }
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 12
0
        private void SetCurrentSettings(RepoDistSettings settings)
        {
            if (CurrentSettings != null)
                SaveSettings();

            CurrentSettings = settings;

            LoadSettings();
        }
Esempio n. 13
0
        public ExternalLinksManager(RepoDistSettings settings)
        {
            _cachedSettings = new RepoDistSettings(null, settings.SettingsCache);
            _definitions    = _externalLinksStorage.Load(_cachedSettings).ToList();

            if (settings.LowerPriority != null)
            {
                _lowerPriority = new ExternalLinksManager(settings.LowerPriority);
            }
        }
Esempio n. 14
0
        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();
        }
Esempio n. 18
0
 public RepoDistSettingsSet(
     RepoDistSettings aEffectiveSettings,
     RepoDistSettings aLocalSettings,
     RepoDistSettings aPulledSettings,
     RepoDistSettings aGlobalSettings)
 {
     EffectiveSettings = aEffectiveSettings;
     LocalSettings     = aLocalSettings;
     RepoDistSettings  = aPulledSettings;
     GlobalSettings    = aGlobalSettings;
 }
Esempio n. 19
0
        public GitExtLinksParser(RepoDistSettings aSettings)
        {
            Settings = new RepoDistSettings(null, aSettings.SettingsCache);
            LoadFromSettings();

            if (aSettings.LowerPriority == null)
            {
                LowerPriority = null;
            }
            else
            {
                LowerPriority = new GitExtLinksParser(aSettings.LowerPriority);
            }
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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());
        }
Esempio n. 24
0
 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);
        }
Esempio n. 26
0
        /// <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());
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        protected override void Init(ISettingsPageHost aPageHost)
        {
            base.Init(aPageHost);

            CurrentSettings = RepoDistSettingsSet.EffectiveSettings;
        }
Esempio n. 29
0
 /// <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;
        }