static void OnExtensionChanged(object s, ExtensionNodeEventArgs args)
        {
            VersionControlSystem vcs;

            try {
                vcs = (VersionControlSystem)args.ExtensionObject;
            } catch (Exception e) {
                LoggingService.LogError("Failed to initialize VersionControlSystem type.", e);
                return;
            }

            if (args.Change == ExtensionChange.Add)
            {
                handlers.Add(vcs);
                try {
                    // Include the repository type in the serialization context, so repositories
                    // of this type can be deserialized from the configuration file.
                    Repository r = vcs.CreateRepositoryInstance();
                    r.AddRef();
                    dataContext.IncludeType(r.GetType());
                    r.Unref();
                } catch (Exception e) {
                    LoggingService.LogError("Error while adding version control system.", e);
                }
            }
            else
            {
                handlers.Remove(vcs);
            }
        }
示例#2
0
        static void OnExtensionChanged(object s, ExtensionNodeEventArgs args)
        {
            VersionControlSystem vcs;

            try {
                vcs = (VersionControlSystem)args.ExtensionObject;
            } catch (Exception e) {
                LoggingService.LogError("Failed to initialize VersionControlSystem type.", e);
                return;
            }

            if (args.Change == ExtensionChange.Add)
            {
                IComparer <VersionControlSystem> compare = new CompareVersionControlSystem();

                int search = handlers.BinarySearch(vcs, compare);

                if (search < 0)
                {
                    handlers.Insert(~search, vcs);
                }
                else
                {
                    LoggingService.LogError("Adding new version control system {0} failed, the name {1} is already reserved.", vcs.GetType().Name, vcs.Name);
                    return;
                }
                try {
                    // Include the repository type in the serialization context, so repositories
                    // of this type can be deserialized from the configuration file.
                    Repository r = vcs.CreateRepositoryInstance();
                    r.AddRef();
                    dataContext.IncludeType(r.GetType());
                    r.Unref();
                } catch (Exception e) {
                    LoggingService.LogError("Error while adding version control system.", e);
                }
            }
            else
            {
                handlers.Remove(vcs);
            }
        }