Remove one of our out of proc analyzers.

--- src/Workspaces/Remote/ServiceHub/Services/ProjectTelemetry/ApiUsageIncrementalAnalyzerProvider.cs
+++ src/Workspaces/Remote/ServiceHub/Services/ProjectTelemetry/ApiUsageIncrementalAnalyzerProvider.cs
@@ -1,230 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#nullable disable
-
-using System;
-using System.Collections.Generic;
-using System.Composition;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Operations;
-using Microsoft.CodeAnalysis.Options;
-using Microsoft.CodeAnalysis.SolutionCrawler;
-using Microsoft.CodeAnalysis.Telemetry;
-using Microsoft.VisualStudio.Telemetry;
-
-namespace Microsoft.CodeAnalysis.Remote.Telemetry
-{
-    /// <summary>
-    /// Creates an <see cref="IIncrementalAnalyzer"/> that collects Api usage information from metadata references
-    /// in current solution.
-    /// </summary>
-    [ExportIncrementalAnalyzerProvider(nameof(ApiUsageIncrementalAnalyzerProvider), new[] { WorkspaceKind.RemoteWorkspace }), Shared]
-    internal sealed class ApiUsageIncrementalAnalyzerProvider : IIncrementalAnalyzerProvider
-    {
-        [ImportingConstructor]
-        [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
-        public ApiUsageIncrementalAnalyzerProvider()
-        {
-        }
-
-        public IIncrementalAnalyzer CreateIncrementalAnalyzer(Workspace workspace)
-        {
-#if DEBUG
-            return new Analyzer(workspace.Services);
-#else
-            return null;
-#endif
-        }
-
-        private sealed class Analyzer : IIncrementalAnalyzer
-        {
-            private readonly HostWorkspaceServices _services;
-
-            // maximum number of symbols to report per project.
-            private const int Max = 2000;
-
-            private readonly HashSet<ProjectId> _reported = new HashSet<ProjectId>();
-
-            public Analyzer(HostWorkspaceServices services)
-            {
-                _services = services;
-            }
-
-            public Task RemoveProjectAsync(ProjectId projectId, CancellationToken cancellationToken)
-            {
-                lock (_reported)
-                {
-                    _reported.Remove(projectId);
-                }
-
-                return Task.CompletedTask;
-            }
-
-            public async Task AnalyzeProjectAsync(Project project, bool semanticsChanged, InvocationReasons reasons, CancellationToken cancellationToken)
-            {
-                var telemetryService = _services.GetRequiredService<IWorkspaceTelemetryService>();
-                if (!telemetryService.HasActiveSession)
-                {
-                    return;
-                }
-
-                lock (_reported)
-                {
-                    // to make sure that we don't report while solution load, we do this heuristic.
-                    // if the reason we are called is due to "document being added" to project, we wait for next analyze call.
-                    // also, we only report usage information per project once.
-                    // this telemetry will only let us know which API ever used, this doesn't care how often/many times an API
-                    // used. and this data is approximation not precise information. and we don't care much on how many times
-                    // APIs used in the same solution. we are rather more interested in number of solutions or users APIs are used.
-                    if (reasons.Contains(PredefinedInvocationReasons.DocumentAdded) ||
-                        !_reported.Add(project.Id))
-                    {
-                        return;
-                    }
-                }
-
-                // if this project has cross language p2p references, then pass in solution, otherwise, don't give in
-                // solution since checking whether symbol is cross language symbol or not is expansive and
-                // we know that population of solution with both C# and VB are very tiny.
-                // so no reason to pay the cost for common cases.
-                var crossLanguageSolutionOpt =
-                    project.ProjectReferences.Any(p => project.Solution.GetProject(p.ProjectId)?.Language != project.Language) ? project.Solution : null;
-
-                var metadataSymbolUsed = new HashSet<ISymbol>(SymbolEqualityComparer.Default);
-                foreach (var document in project.Documents)
-                {
-                    var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
-                    var model = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);
-
-                    foreach (var operation in GetOperations(model, cancellationToken))
-                    {
-                        cancellationToken.ThrowIfCancellationRequested();
-
-                        if (metadataSymbolUsed.Count > Max)
-                        {
-                            // collect data up to max per project
-                            break;
-                        }
-
-                        // this only gather reference and method call symbols but not type being used.
-                        // if we want all types from metadata used, we need to add more cases
-                        // which will make things more expansive.
-                        CollectApisUsed(operation, crossLanguageSolutionOpt, metadataSymbolUsed, cancellationToken);
-                    }
-                }
-
-                var solutionSessionId = project.Solution.State.SolutionAttributes.TelemetryId;
-                var projectGuid = project.State.ProjectInfo.Attributes.TelemetryId;
-
-                telemetryService.ReportApiUsage(metadataSymbolUsed, solutionSessionId, projectGuid);
-
-                return;
-
-                // local functions
-                static void CollectApisUsed(
-                    IOperation operation, Solution solutionOpt, HashSet<ISymbol> metadataSymbolUsed, CancellationToken cancellationToken)
-                {
-                    switch (operation)
-                    {
-                        case IMemberReferenceOperation memberOperation:
-                            AddIfMetadataSymbol(solutionOpt, memberOperation.Member, metadataSymbolUsed, cancellationToken);
-                            break;
-                        case IInvocationOperation invocationOperation:
-                            AddIfMetadataSymbol(solutionOpt, invocationOperation.TargetMethod, metadataSymbolUsed, cancellationToken);
-                            break;
-                        case IObjectCreationOperation objectCreation:
-                            AddIfMetadataSymbol(solutionOpt, objectCreation.Constructor, metadataSymbolUsed, cancellationToken);
-                            break;
-                    }
-                }
-
-                static void AddIfMetadataSymbol(
-                    Solution solutionOpt, ISymbol symbol, HashSet<ISymbol> metadataSymbolUsed, CancellationToken cancellationToken)
-                {
-                    // get symbol as it is defined in metadata
-                    symbol = symbol.OriginalDefinition;
-
-                    if (metadataSymbolUsed.Contains(symbol))
-                    {
-                        return;
-                    }
-
-                    if (symbol.Locations.All(l => l.Kind == LocationKind.MetadataFile) &&
-                        solutionOpt?.GetProject(symbol.ContainingAssembly, cancellationToken) == null)
-                    {
-                        metadataSymbolUsed.Add(symbol);
-                    }
-                }
-
-                static IEnumerable<IOperation> GetOperations(SemanticModel model, CancellationToken cancellationToken)
-                {
-                    // root is already there
-                    var root = model.SyntaxTree.GetRoot(cancellationToken);
-
-                    // go through all nodes until we find first node that has IOperation
-                    foreach (var rootOperation in root.DescendantNodes(n => model.GetOperation(n, cancellationToken) == null)
-                                                     .Select(n => model.GetOperation(n, cancellationToken))
-                                                     .Where(o => o != null))
-                    {
-                        foreach (var operation in rootOperation.DescendantsAndSelf())
-                        {
-                            yield return operation;
-                        }
-                    }
-                }
-            }
-
-            public Task AnalyzeSyntaxAsync(Document document, InvocationReasons reasons, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task DocumentOpenAsync(Document document, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task DocumentCloseAsync(Document document, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task DocumentResetAsync(Document document, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task ActiveDocumentSwitchedAsync(TextDocument document, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task AnalyzeDocumentAsync(Document document, SyntaxNode bodyOpt, InvocationReasons reasons, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task NewSolutionSnapshotAsync(Solution solution, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task RemoveDocumentAsync(DocumentId documentId, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task NonSourceDocumentOpenAsync(TextDocument textDocument, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task NonSourceDocumentCloseAsync(TextDocument textDocument, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task NonSourceDocumentResetAsync(TextDocument textDocument, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public Task AnalyzeNonSourceDocumentAsync(TextDocument textDocument, InvocationReasons reasons, CancellationToken cancellationToken)
-                => Task.CompletedTask;
-
-            public int Priority => 1;
-
-            public void LogAnalyzerCountSummary()
-            {
-            }
-
-            public void Shutdown()
-            {
-            }
-        }
-    }
-}


Fix header table of contents size.

Fix header table of contents size.

--- VictorBush.Ego.NefsLib/Source/Header/NefsHeaderIntroToc.cs
+++ VictorBush.Ego.NefsLib/Source/Header/NefsHeaderIntroToc.cs
@@ -17,7 +17,7 @@
         /// <summary>
         /// The size of this section.
         /// </summary>
-        public const uint Size = 0x7F;
+        public const uint Size = 0x80;

         /// <summary>Unknown, maybe constant (01 00 00 01).</summary>
         [FileData]


typos

typos

--- TddSample/TddSample.Tests/3/ListTests.cs
+++ TddSample/TddSample.Tests/3/ListTests.cs
@@ -41,10 +41,10 @@

             // there should be on unit test for each concept; not for each method!

-            // tests should be trustworthy, maintanable and readable!
+            // tests should be trustworthy, maintainable and readable!
             // if there are not then something is wrong with the tests or the code under test

-            // anit-patterns: http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/
+            // anti-patterns: http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/
         }
     }
 }


Fix using directive

Fix using directive

--- AbpODataDemo-Core-vNext/aspnet-core/src/AbpODataDemo.Web.Host/Startup/AbpODataDemoWebHostModule.cs
+++ AbpODataDemo-Core-vNext/aspnet-core/src/AbpODataDemo.Web.Host/Startup/AbpODataDemoWebHostModule.cs
@@ -4,7 +4,7 @@
 using Abp.Modules;
 using Abp.Reflection.Extensions;
 using AbpODataDemo.Configuration;
-using AbpODataDemo.ResultWrapping;
+using AbpODataDemo.Web.Host.ResultWrapping;

 namespace AbpODataDemo.Web.Host.Startup
 {


Add return check for cases where the observer isn't relevant

Such as non-HoloLens devices or cases where a headset isn't present

--- Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealitySpatialMeshObserver.cs
+++ Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealitySpatialMeshObserver.cs
@@ -9,6 +9,7 @@
 using UnityEngine.EventSystems;

 #if UNITY_WSA
+using UnityEngine.XR;
 using UnityEngine.XR.WSA;
 #endif // UNITY_WSA

@@ -684,6 +685,9 @@
                 return;
             }

+            // If we aren't using a HoloLens or there isn't an XR device present, return.
+            if (observer == null || HolographicSettings.IsDisplayOpaque || !XRSettings.isDeviceActive) { return; }
+
             // The observer's origin is in world space, we need it in the camera's parent's space
             // to set the volume. The MixedRealityPlayspace provides that space that the camera/head moves around in.
             Vector3 observerOriginPlayspace = MixedRealityPlayspace.InverseTransformPoint(ObserverOrigin);


update expected for alphabetization

update expected for alphabetization

--- Tests/SensorEvents/SerializationTests.cs
+++ Tests/SensorEvents/SerializationTests.cs
@@ -61,7 +61,7 @@

             DateTime time = new DateTime(2015, 1, 26, 17, 0, 0, DateTimeKind.Utc);

-            string expected = @"{""transmission_id"":12345678,""meter_id"":""Pole1"",""session_id"":123,""transmission_time"":""2015-01-26T17:00:00Z"",""event_time"":""2015-01-26T17:00:00Z"",""event_type"":""SE""}";
+            string expected = @"{""event_time"":""2015-01-26T17:00:00Z"",""event_type"":""SE"",""meter_id"":""Pole1"",""session_id"":123,""transmission_id"":12345678,""transmission_time"":""2015-01-26T17:00:00Z""}";

             var viewModel = new SensorEventGET {
                 TransmissionId = 12345678,


DNN-7053: Incorrect AffiliateID sent in email notification

--- Website/DesktopModules/Admin/Vendors/EditAffiliate.ascx.cs
+++ Website/DesktopModules/Admin/Vendors/EditAffiliate.ascx.cs
@@ -197,7 +197,7 @@
                     var custom = new ArrayList
                                      {
                                          objVendor.VendorName,
-                                         Globals.GetPortalDomainName(PortalSettings.PortalAlias.HTTPAlias, Request, true) + "/" + Globals.glbDefaultPage + "?AffiliateId=" + VendorId
+                                         Globals.GetPortalDomainName(PortalSettings.PortalAlias.HTTPAlias, Request, true) + "/" + Globals.glbDefaultPage + "?AffiliateId=" + AffiliateId
                                      };
                     var errorMsg = Mail.SendMail(PortalSettings.Email,
                                                     objVendor.Email,


Formatting

Formatting

--- Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealitySpatialMeshObserver.cs
+++ Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealitySpatialMeshObserver.cs
@@ -5,7 +5,6 @@
 using Microsoft.MixedReality.Toolkit.Utilities;
 using Microsoft.MixedReality.Toolkit.Windows.Utilities;
 using System.Collections.Generic;
-using System.Globalization;
 using UnityEngine;
 using UnityEngine.EventSystems;

@@ -23,12 +22,12 @@
         typeof(IMixedRealitySpatialAwarenessSystem),
         SupportedPlatforms.WindowsUniversal,
         "Windows Mixed Reality Spatial Mesh Observer",
-        "Profiles/DefaultMixedRealitySpatialAwarenessMeshObserverProfile.asset",
+        "Profiles/DefaultMixedRealitySpatialAwarenessMeshObserverProfile.asset",
         "MixedRealityToolkit.SDK")]
     [HelpURL("https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/SpatialAwareness/SpatialAwarenessGettingStarted.html")]
-    public class WindowsMixedRealitySpatialMeshObserver :
-        BaseSpatialObserver,
-        IMixedRealitySpatialAwarenessMeshObserver,
+    public class WindowsMixedRealitySpatialMeshObserver :
+        BaseSpatialObserver,
+        IMixedRealitySpatialAwarenessMeshObserver,
         IMixedRealityCapabilityCheck
     {
         /// <summary>
@@ -254,7 +253,7 @@
         {
             int triangleDensity = 0;

-            switch(levelOfDetail)
+            switch (levelOfDetail)
             {
                 case SpatialAwarenessMeshLevelOfDetail.Coarse:
                     triangleDensity = 0;
@@ -361,7 +360,7 @@
                 Debug.LogWarning("The Windows Mixed Reality spatial observer is currently running.");
                 return;
             }
-
+
             // We want the first update immediately.
             lastUpdated = 0;

@@ -561,9 +560,9 @@
             if (spareMeshObject == null)
             {
                 newMesh = SpatialAwarenessMeshObject.Create(
-                    null,
-                    MeshPhysicsLayer,
-                    meshName,
+                    null,
+                    MeshPhysicsLayer,
+                    meshName,
                     surfaceId.handle,
                     ObservedObjectParent);

@@ -691,7 +690,7 @@
             Quaternion observerRotationPlayspace = Quaternion.Inverse(MixedRealityPlayspace.Rotation) * ObserverRotation;

             // Update the observer
-            switch(ObserverVolumeType)
+            switch (ObserverVolumeType)
             {
                 case VolumeType.AxisAlignedCube:
                     observer.SetVolumeAsAxisAlignedBox(observerOriginPlayspace, ObservationExtents);


CA-297086: Rephrase log messages; Use a different constructor for HttpClient

--- XenModel/Actions/HealthCheck/XenServerHealthCheckUpload.cs
+++ XenModel/Actions/HealthCheck/XenServerHealthCheckUpload.cs
@@ -75,7 +75,7 @@
                 UseProxy = proxy != null
             };

-            httpClient = new HttpClient(handler);
+            httpClient = new HttpClient(handler, true);
             httpClient.DefaultRequestHeaders.Add("Authorization", "BT " + uploadToken);
         }

@@ -105,10 +105,9 @@

                             // Get the upload uuid
                             var res = (Dictionary<string, object>) serializer.DeserializeObject(respString);
-                            if (res.ContainsKey("id"))
-                                return (string) res["id"];
+                            return res.ContainsKey("id") ? (string) res["id"] : "";
                         }
-                        log.ErrorFormat("Exception while initiating a new CIS upload. The exception was: {0} ({1})", response.StatusCode, response.ReasonPhrase);
+                        log.ErrorFormat("Failed to initiate a CIS upload. POST request returned {0} ({1})", response.StatusCode, response.ReasonPhrase);
                     }
                 }
             }
@@ -153,7 +152,7 @@
                             log.InfoFormat("The status of chunk upload: {0}", res.ContainsKey("status") ? res["status"] : "");
                             return true;
                         }
-                        log.ErrorFormat("Failed to upload the chunk. The exception was: {0} ({1})", response.StatusCode, response.ReasonPhrase);
+                        log.ErrorFormat("Failed to upload the chunk. POST request returned {0} ({1})", response.StatusCode, response.ReasonPhrase);
                     }
                 }

@@ -177,12 +176,12 @@
             string uploadUuid = InitiateUpload(Path.GetFileName(fileName), size, caseNumber, cancel);
             if (string.IsNullOrEmpty(uploadUuid))
             {
-                log.ErrorFormat("Cannot fetch the upload UUID from CIS server");
+                log.ErrorFormat("Could not fetch the upload UUID from the CIS server");
                 return "";
             }

             // Start to upload zip file.
-            log.InfoFormat("Upload server returned Upload ID: {0}", uploadUuid);
+            log.InfoFormat("Upload server returned Upload UUID: {0}", uploadUuid);
             using (var source = File.Open(fileName, FileMode.Open))
             {
                 long offset = 0;


CA-286291: Missing copyright.

CA-286291: Missing copyright.

Signed-off-by: Konstantina Chremmou <a7d1f757a659045fb6db8c1e3849a1c8ad00b97a@citrix.com>

--- XenModel/Actions/WLB/WlbRetrieveVmRecommendationsAction.cs
+++ XenModel/Actions/WLB/WlbRetrieveVmRecommendationsAction.cs
@@ -1,4 +1,35 @@
-using System;
+/* Copyright (c) Citrix Systems, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer.
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
+ *     materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+using System;
 using System.Collections.Generic;
 using XenAdmin.Core;
 using XenAdmin.Network;


Fixed counter to go over 60 seconds

Fixed counter to go over 60 seconds

--- TimeAttack/TimeAttack/MainWindow.xaml.cs
+++ TimeAttack/TimeAttack/MainWindow.xaml.cs
@@ -46,7 +46,7 @@
         private string _player1String;
         public string Player1String
         {
-            get => _player1String;
+            get { return _player1String; }
             set
             {
                 _player1String = value;
@@ -58,7 +58,9 @@

         public string Player2String
         {
-            get => player2string;
+            get {
+                return this.player2string;
+                }
             set
             {
                 player2string = value;
@@ -96,11 +98,11 @@
                                 System.Threading.Thread.Sleep(25);
                                 if (_player1Tag)
                                 {
-                                    Player1String = $"{_timeAttack.Elapsed.Seconds}";
+                                    Player1String = $"{_timeAttack.Elapsed.TotalSeconds:N0}";
                                 }
                                 if (_player2Tag)
                                 {
-                                    Player2String = $"{_timeAttack.Elapsed.Seconds}";
+                                    Player2String = $"{_timeAttack.Elapsed.TotalSeconds:N0}";
                                 }
                             }
                             _timeAttack.Stop();


- Adding Unban method to Twitch chat client

--- Twitch/Twitch.Base/Clients/ChatClient.cs
+++ Twitch/Twitch.Base/Clients/ChatClient.cs
@@ -385,6 +385,32 @@
             Validator.ValidateVariable(broadcaster, "broadcaster");
             Validator.ValidateVariable(user, "user");
             await this.Send(string.Format("PRIVMSG #{0} :.ban {1}", broadcaster.name, user.name));
+        }
+
+        /// <summary>
+        /// Bans the specified user in specified broadcaster's channel.
+        /// </summary>
+        /// <param name="broadcaster">The broadcaster's channel</param>
+        /// <param name="user">The user to ban</param>
+        /// <returns>An awaitable Task</returns>
+        public async Task UnbanUser(NewAPI.Users.UserModel broadcaster, NewAPI.Users.UserModel user)
+        {
+            Validator.ValidateVariable(broadcaster, "broadcaster");
+            Validator.ValidateVariable(user, "user");
+            await this.Send(string.Format("PRIVMSG #{0} :.unban {1}", broadcaster.login, user.login));
+        }
+
+        /// <summary>
+        /// Bans the specified user in specified broadcaster's channel.
+        /// </summary>
+        /// <param name="broadcaster">The broadcaster's channel</param>
+        /// <param name="user">The user to ban</param>
+        /// <returns>An awaitable Task</returns>
+        public async Task UnbanUser(V5.Users.UserModel broadcaster, V5.Users.UserModel user)
+        {
+            Validator.ValidateVariable(broadcaster, "broadcaster");
+            Validator.ValidateVariable(user, "user");
+            await this.Send(string.Format("PRIVMSG #{0} :.unban {1}", broadcaster.name, user.name));
         }

         /// <summary>


Fixed the unit tests for the bots

Fixed the unit tests for the bots

--- UnitTests/Net/Proxy/Socks5ClientTests.cs
+++ UnitTests/Net/Proxy/Socks5ClientTests.cs
@@ -352,7 +352,7 @@
 					socket = socks.Connect (host, 80, 10 * 1000);
 					socket.Disconnect (false);
 				} catch (ProxyProtocolException ex) {
-					Assert.AreEqual ($"Failed to connect to {host}:80: Host unreachable.", ex.Message);
+					Assert.IsTrue (ex.Message.StartsWith ($"Failed to connect to {host}:80: ", StringComparison.Ordinal), ex.Message);
 					Assert.Inconclusive (ex.Message);
 				} catch (TimeoutException) {
 					Assert.Inconclusive ("Timed out.");
@@ -382,7 +382,7 @@
 					socket = await socks.ConnectAsync (host, 80, 10 * 1000);
 					socket.Disconnect (false);
 				} catch (ProxyProtocolException ex) {
-					Assert.AreEqual ($"Failed to connect to {host}:80: Host unreachable.", ex.Message);
+					Assert.IsTrue (ex.Message.StartsWith ($"Failed to connect to {host}:80: ", StringComparison.Ordinal), ex.Message);
 					Assert.Inconclusive (ex.Message);
 				} catch (TimeoutException) {
 					Assert.Inconclusive ("Timed out.");


version bump

version bump

--- WDMRC.Console/Properties/AssemblyInfo.cs
+++ WDMRC.Console/Properties/AssemblyInfo.cs
@@ -31,8 +31,8 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.5.67.0")]
-[assembly: AssemblyFileVersion("1.5.67.0")]
+[assembly: AssemblyVersion("1.5.68.0")]
+[assembly: AssemblyFileVersion("1.5.68.0")]

 [assembly: log4net.Config.XmlConfigurator(Watch = true)]


fixed equals operator

fixed equals operator

--- Watch/Assets/Scripts/Watch/WatchTuple.cs
+++ Watch/Assets/Scripts/Watch/WatchTuple.cs
@@ -39,8 +39,8 @@
 	public override int GetHashCode ()
 	{
 		int hash = 17;
-		hash = hash * 23 + (_item1 == default(T1) ? 0 : item1.GetHashCode ());
-		hash = hash * 23 + (_item2 == default(T2) ? 0 : item2.GetHashCode ());
+		hash = hash * 23 + (_item1 == null ? 0 : item1.GetHashCode ());
+		hash = hash * 23 + (_item2 == null ? 0 : item2.GetHashCode ());
 		return hash;
 	}

@@ -66,9 +66,9 @@
 		if (object.ReferenceEquals (a, null)) {
 			return object.ReferenceEquals (b, null);
 		}
-		if (a.item1 == default(T1) && b.item1 != default(T1))
+		if (a.item1 == null && b.item1 != null)
 			return false;
-		if (a.item2 == default(T2) && b.item2 != default(T2))
+		if (a.item2 == null && b.item2 != null)
 			return false;
 		return a.item1.Equals (b.item1) && a.item2.Equals (b.item2);
 	}


Network: C# 6.0 compatible.

Network: C# 6.0 compatible.

--- WzComparerR2.Network/RingBufferStream.cs
+++ WzComparerR2.Network/RingBufferStream.cs
@@ -22,18 +22,30 @@
         private readonly LinkedList<byte[]> buffer;
         private const int BlockSize = 4096;

-        public override bool CanRead => !this.isDisposed;
-
-        public override bool CanSeek => !this.isDisposed;
-
-        public override bool CanWrite => !this.isDisposed;
-
-        public override long Length => endIndex - startIndex;
+        public override bool CanRead
+        {
+            get { return !this.isDisposed; }
+        }
+
+        public override bool CanSeek
+        {
+            get { return !this.isDisposed; }
+        }
+
+        public override bool CanWrite
+        {
+            get { return !this.isDisposed; }
+        }
+
+        public override long Length
+        {
+            get { return endIndex - startIndex; }
+        }

         public override long Position
         {
-            get => readIndex - startIndex;
-            set => this.Seek(value, SeekOrigin.Begin);
+            get { return readIndex - startIndex; }
+            set { this.Seek(value, SeekOrigin.Begin); }
         }

         public override void Flush()


update for next release

update for next release

update for next release

--- src/ADAL.Common/CommonAssemblyInfo.cs
+++ src/ADAL.Common/CommonAssemblyInfo.cs
@@ -37,7 +37,7 @@
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyMetadata("Serviceable", "True")]

-[assembly: AssemblyFileVersion("3.13.6.0")]
+[assembly: AssemblyFileVersion("3.13.8.0")]

 // On official build, attribute AssemblyInformationalVersionAttribute is added as well
 // with its value equal to the hash of the last commit to the git branch.


small logout button

small logout button

--- src/Admin/Views/Shared/_Layout.cshtml
+++ src/Admin/Views/Shared/_Layout.cshtml
@@ -54,12 +54,12 @@
                 @if(SignInManager.IsSignedIn(User))
                 {
                     <form asp-controller="Login" asp-action="Logout" method="post">
-                        <button type="submit" class="btn btn-secondary">Log Out</button>
+                        <button type="submit" class="btn btn-sm btn-secondary">Log Out</button>
                     </form>
                 }
                 else
                 {
-                    Log In
+                    Log In
                 }


Improved patching algorithm (now it redownloads content if diff size is bigger than content size)

--- src/Assets/Scripts/Patcher/Patcher.cs
+++ src/Assets/Scripts/Patcher/Patcher.cs
@@ -119,6 +119,43 @@
             }
         }

+        bool ShouldDownloadContent(int currentVersion, int commonVersion)
+        {
+            if (currentVersion < commonVersion ||
+                !CheckVersionConsistency(commonVersion))
+            {
+                LogInfo("Local version is corrupted. Redownloading content.");
+                return true;
+            }
+
+            if (commonVersion < currentVersion)
+            {
+                // Calculate sum of diff size and compare it to the content size
+
+                long contentSize = _apiConnection.GetAppVersionContentSummary(_configuration.AppSecret, currentVersion).Size;
+
+                long sumDiffSize = 0;
+
+                for (int v = commonVersion + 1; v <= currentVersion; v++)
+                {
+                    sumDiffSize += _apiConnection.GetAppVersionDiffSummary(_configuration.AppSecret, v).Size;
+
+                    if (sumDiffSize >= contentSize)
+                    {
+                        LogInfo("Diff size is bigger than content size. Redownloading content.");
+                        return true;
+                    }
+                }
+            }
+
+            return false;
+        }
+
+        bool ShouldDownloadDiff(int currentVersion, int commonVersion)
+        {
+            return currentVersion < commonVersion;
+        }
+
         private void Patch(AsyncCancellationToken cancellationToken)
         {
             var progressTracker = new ProgressTracker();
@@ -150,7 +187,7 @@

             LogInfo("Comparing common local version with current version.");

-            if (commonVersion == null || currentVersion < commonVersion.Value || !CheckVersionConsistency(commonVersion.Value))
+            if (commonVersion == null || ShouldDownloadContent(currentVersion, commonVersion.Value))
             {
                 LogInfo("Local application doesn't exist or files are corrupted.");

@@ -160,7 +197,7 @@
                 LogInfo("Downloading content of current version.");
                 DownloadVersionContent(currentVersion, progressTracker, cancellationToken);
             }
-            else if (commonVersion.Value < currentVersion)
+            else if (ShouldDownloadDiff(currentVersion, commonVersion.Value))
             {
                 LogInfo("Patching local application.");
                 while (currentVersion > commonVersion.Value)


Use IsInterpolating value in another test

--- osu.Framework.Tests/Clocks/InterpolatingClockTest.cs
+++ osu.Framework.Tests/Clocks/InterpolatingClockTest.cs
@@ -45,7 +45,7 @@
                 lastValue = interpolating.CurrentTime;
             }

-            int interpolatingCount = 0;
+            int interpolatedCount = 0;

             // test with test clock elapsing
             lastValue = interpolating.CurrentTime;
@@ -58,14 +58,14 @@
                 Assert.GreaterOrEqual(interpolating.CurrentTime, lastValue, "Interpolating should not jump against rate.");
                 Assert.LessOrEqual(Math.Abs(interpolating.CurrentTime - source.CurrentTime), interpolating.AllowableErrorMilliseconds, "Interpolating should be within allowance.");

-                if (interpolating.CurrentTime != source.CurrentTime)
-                    interpolatingCount++;
+                if (interpolating.IsInterpolating)
+                    interpolatedCount++;

                 Thread.Sleep((int)(interpolating.AllowableErrorMilliseconds / 2));
                 lastValue = interpolating.CurrentTime;
             }

-            Assert.Greater(interpolatingCount, 10);
+            Assert.Greater(interpolatedCount, 10);
         }

         [Test]


Scroll only if the ScrollContainer is hovered

--- osu.Framework/Graphics/Containers/ScrollContainer.cs
+++ osu.Framework/Graphics/Containers/ScrollContainer.cs
@@ -3,12 +3,12 @@

 using System;
 using System.Diagnostics;
+using osu.Framework.Graphics.Shapes;
 using osu.Framework.Input;
+using osu.Framework.Input.Bindings;
 using osu.Framework.MathUtils;
 using OpenTK;
 using OpenTK.Graphics;
-using osu.Framework.Graphics.Shapes;
-using osu.Framework.Input.Bindings;
 using OpenTK.Input;

 namespace osu.Framework.Graphics.Containers
@@ -19,7 +19,8 @@
         /// Creates a scroll container.
         /// </summary>
         /// <param name="scrollDirection">The direction in which should be scrolled. Can be vertical or horizontal. Default is vertical.</param>
-        public ScrollContainer(Direction scrollDirection = Direction.Vertical) : base(scrollDirection)
+        public ScrollContainer(Direction scrollDirection = Direction.Vertical)
+            : base(scrollDirection)
         {
         }
     }
@@ -253,11 +254,11 @@
             switch (args.Key)
             {
                 case Key.PageUp:
-                    if (!IsDragging)
+                    if (IsHovered && !IsDragging)
                         ScrollTo(target - displayableContent);
                     return true;
                 case Key.PageDown:
-                    if (!IsDragging)
+                    if (IsHovered && !IsDragging)
                         ScrollTo(target + displayableContent);
                     return true;
                 default:


Make `ScheduledDelegateWithData` internal

--- osu.Framework/Threading/ScheduledDelegateWithData.cs
+++ osu.Framework/Threading/ScheduledDelegateWithData.cs
@@ -5,7 +5,7 @@

 namespace osu.Framework.Threading
 {
-    public class ScheduledDelegateWithData<T> : ScheduledDelegate
+    internal class ScheduledDelegateWithData<T> : ScheduledDelegate
     {
         public new readonly Action<T> Task;


Move to const and add some xmldoc for future visitors

--- osu.Game.Rulesets.Osu/Edit/DrawableOsuEditRuleset.cs
+++ osu.Game.Rulesets.Osu/Edit/DrawableOsuEditRuleset.cs
@@ -16,6 +16,12 @@
 {
     public class DrawableOsuEditRuleset : DrawableOsuRuleset
     {
+        /// <summary>
+        /// Hit objects are intentionally made to fade out at a constant slower rate than in gameplay.
+        /// This allows a mapper to gain better historical context and use recent hitobjects as reference / snap points.
+        /// </summary>
+        private const double editor_hit_object_fade_out_extension = 500;
+
         public DrawableOsuEditRuleset(Ruleset ruleset, IWorkingBeatmap beatmap, IReadOnlyList<Mod> mods)
             : base(ruleset, beatmap, mods)
         {
@@ -35,7 +41,7 @@
                         return;

                     using (hitObject.BeginAbsoluteSequence(existing.StartTime))
-                        hitObject.FadeOut(500).Expire();
+                        hitObject.FadeOut(editor_hit_object_fade_out_extension).Expire();
                     break;
             }
         }


Fix crash on visual esting `TestSceneChatOverlay` due to null user

--- osu.Game.Tests/Visual/Online/TestSceneChatOverlay.cs
+++ osu.Game.Tests/Visual/Online/TestSceneChatOverlay.cs
@@ -39,7 +39,8 @@
         private TestChatOverlay chatOverlay;
         private ChannelManager channelManager;

-        private APIUser testUser;
+        private readonly APIUser testUser = new APIUser { Username = "test user", Id = 5071479 };
+
         private Channel[] testChannels;

         private Channel testChannel1 => testChannels[0];
@@ -51,7 +52,6 @@
         [SetUp]
         public void SetUp() => Schedule(() =>
         {
-            testUser = new APIUser { Username = "test user", Id = 5071479 };
             testChannels = Enumerable.Range(1, 10).Select(createPublicChannel).ToArray();

             Child = new DependencyProvidingContainer


Fix test

Fix test

--- osu.Game.Tests/Visual/TestCaseGameplayMenuOverlay.cs
+++ osu.Game.Tests/Visual/TestCaseGameplayMenuOverlay.cs
@@ -7,8 +7,10 @@
 using System.Linq;
 using osuTK.Input;
 using osu.Framework.Allocation;
+using osu.Framework.Graphics;
 using osu.Framework.Graphics.Containers;
 using osu.Framework.Logging;
+using osu.Game.Input.Bindings;
 using osu.Game.Screens.Play;
 using osuTK;

@@ -22,21 +24,29 @@
         private FailOverlay failOverlay;
         private PauseOverlay pauseOverlay;

+        private GlobalActionContainer globalActionContainer;
+
         [BackgroundDependencyLoader]
-        private void load()
-        {
-            Add(pauseOverlay = new PauseOverlay
-            {
-                OnResume = () => Logger.Log(@"Resume"),
-                OnRetry = () => Logger.Log(@"Retry"),
-                OnQuit = () => Logger.Log(@"Quit"),
-            });
-
-            Add(failOverlay = new FailOverlay
-            {
-                OnRetry = () => Logger.Log(@"Retry"),
-                OnQuit = () => Logger.Log(@"Quit"),
-            });
+        private void load(OsuGameBase game)
+        {
+            Child = globalActionContainer = new GlobalActionContainer(game)
+            {
+                Children = new Drawable[]
+                {
+                    pauseOverlay = new PauseOverlay
+                    {
+                        OnResume = () => Logger.Log(@"Resume"),
+                        OnRetry = () => Logger.Log(@"Retry"),
+                        OnQuit = () => Logger.Log(@"Quit"),
+                    },
+                    failOverlay = new FailOverlay
+
+                    {
+                        OnRetry = () => Logger.Log(@"Retry"),
+                        OnQuit = () => Logger.Log(@"Quit"),
+                    }
+                }
+            };

             var retryCount = 0;

@@ -79,12 +89,6 @@
             AddAssert("Overlay state is reset", () => !failOverlay.Buttons.Any(b => b.Selected.Value));
         }

-        private void press(Key key)
-        {
-            InputManager.PressKey(key);
-            InputManager.ReleaseKey(key);
-        }
-
         /// <summary>
         /// Tests that pressing enter after an overlay shows doesn't trigger an event because a selection hasn't occurred.
         /// </summary>
@@ -92,7 +96,7 @@
         {
             AddStep("Show overlay", () => pauseOverlay.Show());

-            AddStep("Press enter", () => press(Key.Enter));
+            AddStep("Press select", () => press(GlobalAction.Select));
             AddAssert("Overlay still open", () => pauseOverlay.State == Visibility.Visible);

             AddStep("Hide overlay", () => pauseOverlay.Hide());
@@ -270,5 +274,17 @@
             });
             AddAssert("Overlay is closed", () => pauseOverlay.State == Visibility.Hidden);
         }
+
+        private void press(Key key)
+        {
+            InputManager.PressKey(key);
+            InputManager.ReleaseKey(key);
+        }
+
+        private void press(GlobalAction action)
+        {
+            globalActionContainer.TriggerPressed(action);
+            globalActionContainer.TriggerReleased(action);
+        }
     }
 }


Add GINA support in CredProviderManager (untested).

--- pGina/src/Shared/Registration/CredProviderManager.cs
+++ pGina/src/Shared/Registration/CredProviderManager.cs
@@ -93,44 +93,94 @@
     public class GinaCredProviderManager : CredProviderManager
     {

+        private static readonly string GINA_KEY = @"Software\Microsoft\Windows NT\CurrentVersion\Winlogon";
+        private ILog m_logger = LogManager.GetLogger("GinaCredProviderManager");
+
+        public GinaCredProviderManager()
+        {
+            this.CpInfo.ShortName = "pGinaGINA";
+        }
+
         public override void Install()
         {
+            FileInfo dll = null;
+            if (Abstractions.Windows.OsInfo.Is64Bit())
+            {
+                dll = DllUtils.Find64BitDll(this.CpInfo.Path, this.CpInfo.ShortName);
+            }
+            else
+            {
+                dll = DllUtils.Find32BitDll(this.CpInfo.Path, this.CpInfo.ShortName);
+            }
+            if (dll != null)
+            {
+                using (RegistryKey key = Registry.LocalMachine.OpenSubKey(GINA_KEY, true))
+                {
+                    if (key != null)
+                    {
+                        m_logger.DebugFormat("{0} {1} => {2}", key.ToString(), "GinaDLL",
+                            dll.FullName);
+                        key.SetValue("GinaDLL", dll.FullName);
+                    }
+                }
+            }
+            else
+            {
+                throw new Exception("GINA DLL not found in " + CpInfo.Path);
+            }
+        }
+
+        public override void Uninstall()
+        {
+            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(GINA_KEY, true))
+            {
+                if (key != null)
+                {
+                    m_logger.DebugFormat("Deleting GinaDLL value in {0}", key.ToString());
+                    key.DeleteValue("GinaDLL", false);
+                }
+            }
+        }
+
+        public override void Disable()
+        {
             throw new NotImplementedException();
         }

-        public override void Uninstall()
+        public override void Enable()
         {
             throw new NotImplementedException();
         }

-        public override void Disable()
+        public override bool Registered()
+        {
+            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(GINA_KEY))
+            {
+                if (key != null)
+                {
+                    object value = key.GetValue("GinaDLL");
+                    return value != null;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+        }
+
+        public override bool Registered6432()
+        {
+            throw new Exception("Not used for GINA");
+        }
+
+        public override bool Enabled()
         {
             throw new NotImplementedException();
         }

-        public override void Enable()
-        {
-            throw new NotImplementedException();
-        }
-
-        public override bool Registered()
-        {
-            throw new NotImplementedException();
-        }
-
-        public override bool Registered6432()
-        {
-            throw new NotImplementedException();
-        }
-
-        public override bool Enabled()
-        {
-            throw new NotImplementedException();
-        }
-
         public override bool Enabled6432()
         {
-            throw new NotImplementedException();
+            throw new Exception("Not used for GINA");
         }
     }


(GH-1727) Corrected documentation for XmlPeek alias

--- src/Cake.Common/Xml/XmlPeekAliases.cs
+++ src/Cake.Common/Xml/XmlPeekAliases.cs
@@ -50,7 +50,7 @@
         /// <![CDATA[
         /// <?xml version="1.0" encoding="UTF-8"?>
         /// <pastery xmlns = "http://cakebuild.net/pastery" >
-        ///     < cake price="1.62" />
+        ///     <cake price="1.62" />
         /// </pastery>
         /// ]]>
         /// </code>
@@ -63,7 +63,7 @@
         /// string unknown = XmlPeek("./pastery.xml", "/pastery:pastery/pastery:cake/@recipe",
         ///     new XmlPeekSettings {
         ///         Namespaces = new Dictionary<string, string> {{ "pastery", "http://cakebuild.net/pastery" }},
-        ///         SuppressWarnings = true
+        ///         SuppressWarning = true
         ///     });
         /// </code>
         /// </example>


Testing VS github fix

Testing VS github fix

--- Core/ModuleInfo.cs
+++ Core/ModuleInfo.cs
@@ -6,6 +6,10 @@

 namespace RMUD
 {
+    /// <summary>
+    /// Define in modules to A) Identify the assembly as a module and B) Tell the engine what namespace
+    /// to load from.
+    /// </summary>
     public class ModuleInfo
     {
         public String BaseNameSpace = "Don't load me.";


replace DefaultDictionary in place

replace DefaultDictionary in place

--- src/ConsoleMenu/MenuItemCollection.cs
+++ src/ConsoleMenu/MenuItemCollection.cs
@@ -12,7 +12,8 @@
 	/// </summary>
 	public class MenuItemCollection : IEnumerable<CMenuItem>
 	{
-		private readonly DefaultDictionary<string, CMenuItem> _Menu = new DefaultDictionary<string, CMenuItem> ();
+		private Dictionary<string, CMenuItem> _Menu = new Dictionary<string, CMenuItem> ();
+		private CMenuItem _Default = null;

 		private StringComparison _StringComparison;

@@ -30,7 +31,7 @@
 			set
 			{
 				_StringComparison = value;
-				_Menu.SetComparer (value.GetCorrespondingComparer ());
+				_Menu = new Dictionary<string, CMenuItem> (_Menu, value.GetCorrespondingComparer ());
 			}
 		}

@@ -62,11 +63,21 @@
 		{
 			get
 			{
-				return _Menu.TryGetValue (key);
+				if (key == null) {
+					return _Default;
+				}
+				CMenuItem it;
+				_Menu.TryGetValue (key, out it);
+				return it;
 			}
 			set
 			{
-				_Menu[key] = value;
+				if (key == null) {
+					_Default = value;
+				}
+				else {
+					_Menu[key] = value;
+				}
 			}
 		}

@@ -82,7 +93,15 @@
 				throw new ArgumentNullException ("it");
 			}

-			_Menu.Add (it.Selector, it);
+			if (it.Selector != null) {
+				_Menu.Add (it.Selector, it);
+				return;
+			}
+
+			if (_Default != null) {
+				throw new ArgumentException ("The default item was already set.", "it");
+			}
+			_Default = it;
 		}

 		/// <summary>
@@ -120,9 +139,15 @@
 			return it;
 		}

+		/// <summary>
+		/// Returns the commands equal, or starting with, the specified cmd.
+		///
+		/// Does not return the default menu item.
+		/// </summary>
 		private CMenuItem[] GetCommands (string cmd, StringComparison comparison)
 		{
-			var mi = _Menu.TryGetValue (cmd);
+			CMenuItem mi;
+			_Menu.TryGetValue (cmd, out mi);
 			if (mi != null) {
 				return new[] { mi };
 			}
@@ -182,7 +207,7 @@
 				return null;
 			}

-			var def = _Menu[null];
+			var def = this[null];
 			if (def != null) {
 				cmd = null;
 				args = original;
@@ -236,6 +261,13 @@
 			return GetEnumerator ();
 		}

+		/// <summary>
+		/// Returns a dictionary containing all contained menu items and their corresponding abbreviation.
+		///
+		/// The abbreviations will be updated if commands are added, changed or removed.
+		///
+		/// The default menu item will not be returned.
+		/// </summary>
 		public IDictionary<string, string> CommandAbbreviations ()
 		{
 			var dict = new Dictionary<string, string> ();


Fixed issue #366. Stupid bug. Regex being case sensitive.

--- D2MPClient/D2MP.cs
+++ D2MPClient/D2MP.cs
@@ -872,18 +872,17 @@
             string config = File.ReadAllText(Path.Combine(steamDir, @"config\loginusers.vdf"));

             MatchCollection idMatches = Regex.Matches(config, "\"\\d{17}\"");
-            MatchCollection timestampMatches = Regex.Matches(config, "(?m)(?<=\"Timestamp\".{2}).*$");
+            MatchCollection timestampMatches = Regex.Matches(config, "(?m)(?<=\"Timestamp\".{2}).*$", RegexOptions.IgnoreCase);

             if (idMatches.Count > 0)
             {
-                foreach (Match match in idMatches)
+                for (int i = 0; i < idMatches.Count; i++)
                 {
                     try
                     {
-                        string steamid = match.Value.Trim(' ', '"');
-                        int index = idMatches.Cast<Match>().TakeWhile(x => x != match).Count();
-                        string timestamp = timestampMatches[index].Value;
-                        int iTimestamp = Convert.ToInt32(timestamp.Trim(' ', '"'));
+                        string steamid = idMatches[i].Value.Trim(' ', '"');
+                        string timestamp = timestampMatches[i].Value.Trim(' ', '"');
+                        int iTimestamp = Convert.ToInt32(timestamp);
                         D2MP.log.Debug(String.Format("Steam ID detected: {0} with timestamp: {1}", steamid, iTimestamp));
                         usersDict.Add(iTimestamp, steamid);
                     }


Update AnalysisWorkflow.cs

Update AnalysisWorkflow.cs

--- src/Core/Analysis/AnalysisWorkflow.cs
+++ src/Core/Analysis/AnalysisWorkflow.cs
@@ -232,45 +232,17 @@
                                 {
                                     foreach (var breakingChange in changesToThisType.ChangesWithSeverity(Severity.PotentiallyBreakingChange))
                                     {
-                                        //    // find an existing category...
-                                        //    Category category =
-                                        //        result.BreakingChanges.Categories.FirstOrDefault(c =>
-                                        //            c.Name == breakingChange.Category.Name);
-
-                                        //    if (category == null)
-                                        //    {
-                                        //        // take the category from the current list of breaking changes.
-                                        //        category = new Category
-                                        //        {
-                                        //            Name = breakingChange.Category.Name,
-                                        //            Description = breakingChange.Category.Description,
-                                        //            Priority = breakingChange.Category.Priority,
-                                        //            Headings = new string[] { "Changes", "Type", "Assembly" },
-                                        //            Severity = breakingChange.Category.Severity
-                                        //        };
-                                        //    }
-
                                         var copiedChange = new IdentifiedChange
                                         {
-
-                                            //Category = category,
-                                            //Description = breakingChange.Description,
                                             Descriptor = breakingChange.Descriptor,
-                                            //Inspector = breakingChange.Inspector,
-                                            //Level = breakingChange.Level,
                                             Severity = breakingChange.Severity,
-                                            Priority = breakingChange.Priority
-                                            //AssemblyName = breakingChange.AssemblyName,
-                                            //TypeName = breakingChange.TypeName
+                                            Priority = breakingChange.Priority,
+                                            AssemblyName = breakingChange.AssemblyName,
+                                            TypeName = breakingChange.TypeName
                                         };

-                                        //    // TODO: copy each one and change it
-                                        //    // order by assembly and then by type name
                                         result.BreakingChanges.Add(copiedChange);
                                     }
-
-                                    //breakingChangesToAssembly += breakingChangesToType;
-                                    //changesToThisType.SummaryBlocks.Add("Potential Breaking Changes", breakingChangesToType.ToString());
                                 }
                             }

@@ -299,12 +271,8 @@
                                 {
                                     LinkText = commonAssemblyPair.First.Name,
                                     LinkUrl = commonAssemblyPair.First.Name,
-                                    Identifier = commonAssemblyPair.Second.Identifier//,
-                                    //ColumnNames = new string[] { "Assembly" }
+                                    Identifier = commonAssemblyPair.Second.Identifier
                                 }));
-
-                            if (breakingChangesToAssembly > 0)
-                                changesToThisAssembly.SummaryBlocks.Add("Potential Breaking Changes", breakingChangesToAssembly.ToString());
                         }
                     }
                     catch (BadImageFormatException)
@@ -334,21 +302,18 @@
                     iai.Inspect(result);
                 }

-                result.BreakingChanges.Name = "Potential Breaking Changes";
+                result.BreakingChanges.Name = "Breaking Changes";
                 result.BreakingChanges.SummaryBlocks.Add("Changes", result.BreakingChanges.Changes.Count.ToString());
-                // add breaking changes to the summary list...
-                // fill in missing details...
+                result.BreakingChanges.CopyMetaFrom(result.Summary);

                 result.Summary.Add(new IdentifiedChange(
-                    WellKnownChangePriorities.ChangedAssemblies,
-                    Severity.NonBreaking,
-                   // result.BreakingChanges.Name,
+                    WellKnownChangePriorities.BreakingChanges,
+                    Severity.BreakingChange,
                     new DocumentLink
                     {
                         LinkText = result.BreakingChanges.Name,
                         LinkUrl = result.BreakingChanges.Name,
-                        Identifier = result.BreakingChanges.Identifier//,
-                        //ColumnNames = new string[] { "Assembly" }
+                        Identifier = result.BreakingChanges.Identifier
                     }));
             }
             finally


Changed == to >= for maximum package cache count comparison.

--- src/Core/Repositories/MachineCache.cs
+++ src/Core/Repositories/MachineCache.cs
@@ -31,7 +31,7 @@
         public override void AddPackage(IPackage package) {
             // If we exceed the package count then clear the cache
             var files = GetPackageFiles().ToList();
-            if (files.Count == MaxPackages) {
+            if (files.Count >= MaxPackages) {
                 Clear(files);
             }


forcefully stop the stress test threads

forcefully stop the stress test threads

--- test/Novell.Directory.Ldap.NETStandard.StressTests/MultiThreadTest.cs
+++ test/Novell.Directory.Ldap.NETStandard.StressTests/MultiThreadTest.cs
@@ -52,10 +52,18 @@
             {
                 threadData.ShouldStop = true;
             }
-
+            Thread.Sleep(TimeSpan.FromSeconds(60));
             foreach (var thread in threads)
             {
-                thread.Join();
+                thread.Join(TimeSpan.FromSeconds(1));
+            }
+
+            foreach (var thread in threads)
+            {
+                if (thread.IsAlive)
+                {
+                    thread.Abort();
+                }
             }

             _logger.LogInformation("Exiting monitoring thread");
@@ -120,7 +128,7 @@
             public ThreadRunner(TimeSpan testingThreadReportingPeriod, ILogger<ThreadRunner> logger)
             {
                 _testingThreadReportingPeriod = testingThreadReportingPeriod;
-                _logger = logger;
+                _logger = logger;
                 Count = 0;
                 ShouldStop = false;
                 LastPingDate = DateTime.Now;
@@ -148,33 +156,44 @@
                     }
                     catch (Exception ex)
                     {
-                        _logger.LogError("Error in runner thread - {0}", ex);
-                        if (ex is TargetInvocationException && ex.InnerException != null)
-                        {
-                            ex = ex.InnerException;
-                        }
-                        lock (Exceptions)
-                        {
-                            Exceptions.Add(new ExceptionInfo
-                            {
-                                Ex = ex,
-                                ThreadId = Thread.CurrentThread.ManagedThreadId
-                            });
-                        }
+                        ReportException(ex);
                     }

                     i++;
-                    if (stopWatch.Elapsed > _testingThreadReportingPeriod)
-                    {
-                        stopWatch.Stop();
-                        lock (this)
-                        {
-                            Count = i;
-                            LastPingDate = DateTime.Now;
-                        }
-
-                        stopWatch.Restart();
+                    ReportAliveness(stopWatch, i);
+                }
+            }
+
+            private void ReportAliveness(Stopwatch stopWatch, int i)
+            {
+                if (stopWatch.Elapsed > _testingThreadReportingPeriod)
+                {
+                    stopWatch.Stop();
+                    lock (this)
+                    {
+                        Count = i;
+                        LastPingDate = DateTime.Now;
                     }
+
+                    stopWatch.Restart();
+                }
+            }
+
+            private void ReportException(Exception ex)
+            {
+                _logger.LogError("Error in runner thread - {0}", ex);
+                if (ex is TargetInvocationException && ex.InnerException != null)
+                {
+                    ex = ex.InnerException;
+                }
+
+                lock (Exceptions)
+                {
+                    Exceptions.Add(new ExceptionInfo
+                    {
+                        Ex = ex,
+                        ThreadId = Thread.CurrentThread.ManagedThreadId
+                    });
                 }
             }
         }


Add missing ComparisonBuilder methods to CompareSyntax

--- src/DeepEqual/Syntax/CompareSyntax.cs
+++ src/DeepEqual/Syntax/CompareSyntax.cs
@@ -36,6 +36,24 @@
 			return this;
 		}

+		public CompareSyntax<TActual, TExpected> SkipDefault<T>()
+		{
+			Builder.SkipDefault<T>();
+			return this;
+		}
+
+		public CompareSyntax<TActual, TExpected> WithCustomComparison(IComparison comparison)
+		{
+			Builder.WithCustomComparison(comparison);
+			return this;
+		}
+
+		public CompareSyntax<TActual, TExpected> IgnoreUnmatchedProperties()
+		{
+			Builder.IgnoreUnmatchedProperties();
+			return this;
+		}
+
 		[Pure]
 		public bool Compare()
 		{


Added verbose logging warning to xml comments

--- source/FFImageLoading.Common/Config/Configuration.cs
+++ source/FFImageLoading.Common/Config/Configuration.cs
@@ -162,18 +162,21 @@

         /// <summary>
         /// Enables / disables verbose performance logging.
+        /// WARNING! It will downgrade image loading performance, disable it for release builds!
         /// </summary>
         /// <value>The verbose performance logging.</value>
         public bool VerbosePerformanceLogging { get; set; }

         /// <summary>
         /// Enables / disables verbose memory cache logging.
+        /// WARNING! It will downgrade image loading performance, disable it for release builds!
         /// </summary>
         /// <value>The verbose memory cache logging.</value>
         public bool VerboseMemoryCacheLogging { get; set; }

         /// <summary>
         /// Enables / disables verbose image loading cancelled logging.
+        /// WARNING! It will downgrade image loading performance, disable it for release builds!
         /// </summary>
         /// <value>The verbose image loading cancelled logging.</value>
         public bool VerboseLoadingCancelledLogging { get; set; }


correcting mistake

correcting mistake

--- source/FlowplaneExtensions/App_Start/WebApiConfig.cs
+++ source/FlowplaneExtensions/App_Start/WebApiConfig.cs
@@ -33,13 +33,13 @@
             );

             config.Routes.MapHttpRoute(
-                name: "Api_Process",
+                name: "Api_ProcessWS",
                 routeTemplate: "api/process/getworkspaces",
                 defaults: new { controller = "Api_Process" }
             );

             config.Routes.MapHttpRoute(
-                name: "Api_Process",
+                name: "Api_ProcessGP",
                 routeTemplate: "api/process/getprojects",
                 defaults: new { controller = "Api_Process" }
             );


Crash if theme doesn't implement grouping on Grid view

--- source/Playnite.DesktopApp/Controls/GridViewPanel.cs
+++ source/Playnite.DesktopApp/Controls/GridViewPanel.cs
@@ -116,9 +116,12 @@
                 using (ItemContainerGenerator.StartAt(startPosition, GeneratorDirection.Forward, true))
                 {
                     var child = (UIElement)ItemContainerGenerator.GenerateNext();
-                    AddInternalChild(child);
-                    ItemContainerGenerator.PrepareItemContainer(child);
-                    child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
+                    if (child != null)
+                    {
+                        AddInternalChild(child);
+                        ItemContainerGenerator.PrepareItemContainer(child);
+                        child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
+                    }
                 }
             }


Remove API text from capture pane's title

--- renderdocui/Windows/Dialogs/LiveCapture.cs
+++ renderdocui/Windows/Dialogs/LiveCapture.cs
@@ -170,13 +170,13 @@
                         if (m_Connection.PID == 0)
                         {
                             connectionStatus.Text = String.Format("Connection established to {0} ({1})", m_Connection.Target, api);
-                            SetText(String.Format("{0} ({1})", m_Connection.Target, api));
+                            SetText(String.Format("{0}", m_Connection.Target));
                         }
                         else
                         {
                             connectionStatus.Text = String.Format("Connection established to {0} [PID {1}] ({2})",
                                      m_Connection.Target, m_Connection.PID, api);
-                            SetText(String.Format("{0} [PID {1}] ({2})", m_Connection.Target, m_Connection.PID, api));
+                            SetText(String.Format("{0} [PID {1}]", m_Connection.Target, m_Connection.PID));
                         }
                         connectionIcon.Image = global::renderdocui.Properties.Resources.connect;
                     });
@@ -231,8 +231,17 @@
                     {
                         this.BeginInvoke((MethodInvoker)delegate
                         {
-                            connectionStatus.Text = String.Format("Connection established to {0} ({1})", m_Connection.Target, m_Connection.API);
-                            SetText(String.Format("{0} ({1})", m_Connection.Target, m_Connection.API));
+                            if (m_Connection.PID == 0)
+                            {
+                                connectionStatus.Text = String.Format("Connection established to {0} ({1})", m_Connection.Target, m_Connection.API);
+                                SetText(String.Format("{0}", m_Connection.Target));
+                            }
+                            else
+                            {
+                                connectionStatus.Text = String.Format("Connection established to {0} [PID {1}] ({2})",
+                                         m_Connection.Target, m_Connection.PID, m_Connection.API);
+                                SetText(String.Format("{0} [PID {1}]", m_Connection.Target, m_Connection.PID));
+                            }
                             connectionIcon.Image = global::renderdocui.Properties.Resources.connect;
                         });


Add attributes to IsExternalInit in the Compiler

--- src/DotVVM.Compiler/IsExternalInit.cs
+++ src/DotVVM.Compiler/IsExternalInit.cs
@@ -1,7 +1,12 @@
 #if !NET5_0_OR_GREATER
+
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;

 namespace System.Runtime.CompilerServices
 {
+    [DebuggerNonUserCode]
+    [ExcludeFromCodeCoverage]
     internal static class IsExternalInit {}
 }


Now loading and connecting to Cassandra and legacy inv.

--- InventoryAPI.cs
+++ InventoryAPI.cs
@@ -18,14 +18,25 @@

         private UUID _Id;

-        private IInventoryStorage _storage;
-
         private InventoryStorage _cassandraStorage;
         private CassandraMigrationProviderSelector _selector;
         private LegacyMysqlInventoryStorage _legacy;

+        private IInventoryStorage _storage; // per-user specific storage reference
+
         public InventoryAPI()
         {
+            try
+            {
+                _cassandraStorage = new InventoryStorage(_cluster);
+                _legacy = new LegacyMysqlInventoryStorage(_connstring);
+                _selector = new CassandraMigrationProviderSelector(true, _connstring, _cassandraStorage, _legacy);
+                m_log.InfoFormat("Cassandra support on '{0}' enabled and ready.", _cluster);
+            }
+            catch (Exception e)
+            {
+                m_log.ErrorFormat("Unable to connect to cassandra cluster: {0}", e);
+            }
         }

         public void AddRoutes(APIRouter router)


fix minor issues

fix minor issues

--- src/Firehose.Web/Authors/ThomasLee.cs
+++ src/Firehose.Web/Authors/ThomasLee.cs
@@ -7,18 +7,18 @@

 namespace Firehose.Web.Authors
 {
-    public class ThomasLEe : IAmAMicrosoftMVP
+    public class ThomasLee : IAmAMicrosoftMVP
     {
         public string FirstName => "Thomas";
         public string LastName => "Lee";
         public string ShortBioOrTagLine => "Just this guy, living in the UK. Grateful Dead fan, and long time PowerShell Fan. MVP 17 times";
         public string StateOrRegion => "Berkshire, UI";
-        public string EmailAddress => 'DoctorDNS@Gmail.Com;
+        public string EmailAddress =>  "DoctorDNS@Gmail.Com";
         public string TwitterHandle => "DoctorDNS";
         public string GravatarHash => "9fac677a9811ddc033b9ec883606031d";
         public string GitHubHandle => "DoctorDNS";
         public GeoPosition Position => new GeoPosition(51.5566737,-0.6941204);
-        public Uri WebSite => new Uri("https://tfl09.blogspot.com.com");
+        public Uri WebSite => new Uri("https://tfl09.blogspot.com");
         public IEnumerable<Uri> FeedUris
         {
             get { yield return new Uri("https://tfl09.blogspot.com/feeds/posts/default/"); }


Add condition for checking disableplanetxamarin keywork and to Prohibit publishing to on planetxamarin (#282)

* Change RSS Feed URI for show Vulcan's Gravatar photo

* Add condition for checking disableplanetxamarin keywork and to Prohibit publishing to on planetxamarin

* Update VulcanLee.cs

--- src/Firehose.Web/Authors/VulcanLee.cs
+++ src/Firehose.Web/Authors/VulcanLee.cs
@@ -15,7 +15,7 @@
         public string EmailAddress => "vulcan.lee@gmail.com";
         public string ShortBioOrTagLine => "Vulcan Lee is a Microsoft MVP who develops Xamarin at Doggy Ltd";
         public string GravatarHash => "f5de84ba365a15a05748624c07e70075";
-        public Uri WebSite => new Uri("https://mylabtw.blogspot.tw/");
+        public Uri WebSite => new Uri("https://mylabtw.blogspot.com/");

         public IEnumerable<Uri> FeedUris
         {
@@ -24,9 +24,17 @@

         public string GitHubHandle => "vulcanlee";

-        public bool Filter(SyndicationItem item) =>
-            item.Title.Text.ToLowerInvariant().Contains("xamarin") ||
-            item.Categories.Any(category => category.Name.ToLowerInvariant().Contains("xamarin"));
+        public bool Filter(SyndicationItem item)
+        {
+            // if my blog has keyword, disableplanetxamarin, Prohibit publishing to on planetxamarin
+            if (item.Title.Text.ToLowerInvariant().Contains("disableplanetxamarin") ||
+                item.Categories.Any(c => c.Name.ToLowerInvariant().Equals("disableplanetxamarin")))
+                return false;
+
+            return item.Title.Text.ToLowerInvariant().Contains("xamarin") ||
+                item.Categories.Any(category => category.Name.ToLowerInvariant().Contains("xamarin"));
+        }
+
         public GeoPosition Position => new GeoPosition(25.043847, 121.525645);
     }
-}+}


Warnings shouldn't throw exceptions anymore now

--- src/Flame.Ecs/ExpressionConverters.cs
+++ src/Flame.Ecs/ExpressionConverters.cs
@@ -887,7 +887,7 @@
                     NodeHelpers.HighlightEven(
                         "the '", "as", "' operator cannot be applied to an operand of pointer type '",
                         Scope.Function.Global.TypeNamer.Convert(ty), "'."),
-                    NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                    NodeHelpers.ToSourceLocation(Node.Range)));
                 return new AsInstanceExpression(op, ty);
             }
             else if (ty.GetIsStaticType())
@@ -900,7 +900,7 @@
                         "the second operand of an '", "as",
                         "' operator cannot be '", "static", "' type '",
                         Scope.Function.Global.TypeNamer.Convert(ty), "'."),
-                    NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                    NodeHelpers.ToSourceLocation(Node.Range)));
                 return new AsInstanceExpression(op, ty);
             }
             else if (!ty.GetIsReferenceType())
@@ -915,7 +915,7 @@
                             "the '", "as", "' operator cannot be used with non-reference type parameter '",
                             Scope.Function.Global.TypeNamer.Convert(ty), "'. Consider adding '",
                             "class", "' or a reference type constraint."),
-                        NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                        NodeHelpers.ToSourceLocation(Node.Range)));
                 }
                 else
                 {
@@ -924,7 +924,7 @@
                         NodeHelpers.HighlightEven(
                             "the '", "as", "' operator cannot be used with non-nullable value type '",
                             Scope.Function.Global.TypeNamer.Convert(ty), "'."),
-                        NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                        NodeHelpers.ToSourceLocation(Node.Range)));
                 }
                 return new AsInstanceExpression(op, ty);
             }
@@ -950,7 +950,7 @@
                         "there is no legal conversion from type '",
                         Scope.Function.Global.TypeNamer.Convert(op.Type), "' to type '",
                         Scope.Function.Global.TypeNamer.Convert(ty), "'."),
-                    NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                    NodeHelpers.ToSourceLocation(Node.Range)));
                 return new AsInstanceExpression(op, ty);
             }

@@ -973,7 +973,7 @@
                                     NodeHelpers.HighlightEven(
                                         "'", "as", "' operator always evaluates to '",
                                         "null", "' here. "))),
-                            NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                            NodeHelpers.ToSourceLocation(Node.Range)));
                     }
                 }
                 else if (EcsWarnings.RedundantAsWarning.UseWarning(Scope.Log.Options))
@@ -984,7 +984,7 @@
                             NodeHelpers.HighlightEven(
                                 "this '", "as", "' is redundant, " +
                                 "and can be replaced by a cast. "))),
-                        NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                        NodeHelpers.ToSourceLocation(Node.Range)));
                 }
             }

@@ -1012,7 +1012,7 @@
                         "the second operand of an '", "is",
                         "' operator cannot be '", "static", "' type '",
                         Scope.Function.Global.TypeNamer.Convert(ty), "'."),
-                    NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                    NodeHelpers.ToSourceLocation(Node.Range)));
                 return result;
             }
             var opType = op.Type;
@@ -1024,7 +1024,7 @@
                     NodeHelpers.HighlightEven(
                         "the '", "is", "' operator cannot be applied to an operand of pointer type '",
                         (Scope.Function.Global.TypeNamer.Convert(opType.GetIsPointer() ? opType : ty)), "'."),
-                    NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                    NodeHelpers.ToSourceLocation(Node.Range)));
                 return result;
             }

@@ -1045,7 +1045,7 @@
                                 NodeHelpers.HighlightEven(
                                     "'", "is", "' operator always evaluates to '",
                                     lit, "' here. "))),
-                        NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                        NodeHelpers.ToSourceLocation(Node.Range)));
                 }
             }
             else if (opType.Is(ty))
@@ -1059,7 +1059,7 @@
                             NodeHelpers.HighlightEven(
                                 "the '", "is", "' operator is equivalent to a null check here. " +
                                 "Replacing '", "is", "' by an explicit null check may be clearer. "))),
-                        NodeHelpers.ToSourceLocation(Node.Target.Range)));
+                        NodeHelpers.ToSourceLocation(Node.Range)));
                 }
             }


 * Fixed a huge bug in the ByteArrayValueReader.ReadBytes

git-svn-id: e2945e6dc2723cb01f425b5a7c3c201ce5019a89@919 080cfd25-d5d9-4c59-82ea-70d02a200d8b

--- src/Gablarski/ByteArrayValueReader.cs
+++ src/Gablarski/ByteArrayValueReader.cs
@@ -87,6 +87,7 @@

 			byte[] value = new byte[len];
 			Array.Copy (this.array, this.position, value, 0, len);
+			this.position += len;

 			return value;
 		}


Format registration a bit better

Format registration a bit better

--- src/Glimpse.Common/GlimpseServices.cs
+++ src/Glimpse.Common/GlimpseServices.cs
@@ -4,6 +4,8 @@
 using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
 using System.Collections.Generic;
+using System;
+using System.Reflection;

 namespace Glimpse
 {
@@ -35,7 +37,10 @@
             //
             // JSON.Net.
             //
-            yield return describe.Singleton<JsonSerializer>(x => new JsonSerializer { ContractResolver = new CamelCasePropertyNamesContractResolver() });
+            yield return describe.Singleton<JsonSerializer>(x => new JsonSerializer
+                {
+                    ContractResolver = new CamelCasePropertyNamesContractResolver()
+                });
         }
     }
 }


Fixed a case where accessing a property could throw an exception.

The property returns -1 now instead.

By the way: 200 commits, wow.

--- DemoInfo/Events.cs
+++ DemoInfo/Events.cs
@@ -149,7 +149,7 @@

 		public int ReserveAmmo {
 			get {
-				return Owner.AmmoLeft [AmmoType];
+				return (Owner != null || AmmoType == -1) ? Owner.AmmoLeft [AmmoType] : -1;
 			}
 		}


Update Broker.cs

Update Broker.cs

--- src/Hprose.RPC.Plugins/Push/Broker.cs
+++ src/Hprose.RPC.Plugins/Push/Broker.cs
@@ -200,7 +200,7 @@
                     }
                 }
             }
-            catch (Exception) {}
+            catch (Exception) { }
             return false;
         }
         public IDictionary<string, bool> Multicast(object data, string topic, IEnumerable<string> ids, string from = "") {
@@ -271,8 +271,9 @@
             return idlist;
         }
         protected async Task<object> Handler(string name, object[] args, Context context, NextInvokeHandler next) {
+            var serviceContext = context as ServiceContext;
             var from = "";
-            if (((context as ServiceContext).RequestHeaders).TryGetValue("id", out var id)) {
+            if (serviceContext.RequestHeaders.TryGetValue("id", out var id)) {
                 from = id.ToString();
             }
             switch (name) {
@@ -284,9 +285,7 @@
                     args[2] = from;
                     break;
             }
-            IProducer producer = new Producer(this, from);
-            context["producer"] = producer;
-            return await next(name, args, context).ConfigureAwait(false);
+            return await next(name, args, new BrokerContext(new Producer(this, from), serviceContext)).ConfigureAwait(false);
         }
         private class Producer : IProducer {
             private readonly Broker Broker;


Cleans up target string

Cleans up target string

--- src/HtmlLabel/Shared/UriExtensions.cs
+++ src/HtmlLabel/Shared/UriExtensions.cs
@@ -107,7 +107,7 @@

         private static string Target(this Uri uri)
         {
-            return Uri.UnescapeDataString(uri.AbsoluteUri.Substring(uri.Scheme.Length + 1).Split('?')[0]);
+            return Uri.UnescapeDataString(uri.AbsoluteUri.Substring(uri.Scheme.Length + 1).Split('?')[0].Replace("/", ""));
         }

         private static bool MatchSchema(this Uri uri, string schema)


* store the qapp instance

* store the qapp instance

svn path=/trunk/KDE/kdebindings/csharp/; revision=889030

--- qyoto/examples/qdbus/complexpingpong/complexping.cs
+++ qyoto/examples/qdbus/complexpingpong/complexping.cs
@@ -71,7 +71,7 @@
     }

     public static int Main(string[] args) {
-        new QCoreApplication(args);
+        QCoreApplication app = new QCoreApplication(args);

         if (!QDBusConnection.SessionBus().IsConnected()) {
             Console.Error.WriteLine("Cannot connect to the D-BUS session bus.\n" +


Lucene.Net.Core.Document.Field: Added some missing constructor documentation

--- src/Lucene.Net.Core/Document/Field.cs
+++ src/Lucene.Net.Core/Document/Field.cs
@@ -871,56 +871,128 @@
             return ft;
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a field by specifying its name, value and how it will
+        /// be saved in the index. Term vectors will not be stored in the index.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="value">The string to process</param>
+        /// <param name="store">Whether <paramref name="value"/> should be stored in the index</param>
+        /// <param name="index">Whether the field should be indexed, and if so, if it should
+        /// be tokenized before indexing</param>
+        /// <exception cref="ArgumentNullException">if <paramref name="name"/> or <paramref name="value"/> is <c>null</c></exception>
+        /// <exception cref="ArgumentException">if the field is neither stored nor indexed</exception>
         [Obsolete("Use StringField, TextField instead.")]
         public Field(string name, string value, Store store, Index index)
             : this(name, value, TranslateFieldType(store, index, TermVector.NO))
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a field by specifying its name, value and how it will
+        /// be saved in the index.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="value">The string to process</param>
+        /// <param name="store">Whether <paramref name="value"/> should be stored in the index</param>
+        /// <param name="index">Whether the field should be indexed, and if so, if it should
+        /// be tokenized before indexing</param>
+        /// <param name="termVector">Whether term vector should be stored</param>
+        /// <exception cref="ArgumentNullException">if <paramref name="name"/> or <paramref name="value"/> is <c>null</c></exception>
+        /// <exception cref="ArgumentException">in any of the following situations:
+        /// <list type="bullet">
+        ///     <item>the field is neither stored nor indexed</item>
+        ///     <item>the field is not indexed but termVector is <see cref="TermVector.YES"/></item>
+        /// </list>
+        /// </exception>
         [Obsolete("Use StringField, TextField instead.")]
         public Field(string name, string value, Store store, Index index, TermVector termVector)
             : this(name, value, TranslateFieldType(store, index, termVector))
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a tokenized and indexed field that is not stored. Term vectors will
+        /// not be stored.  The <see cref="TextReader"/> is read only when the <see cref="Document"/> is added to the index,
+        /// i.e. you may not close the <see cref="TextReader"/> until <see cref="IndexWriter.AddDocument(System.Collections.Generic.IEnumerable{IIndexableField})"/>
+        /// has been called.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="reader">The reader with the content</param>
+        /// <exception cref="ArgumentNullException">if <paramref name="name"/> or <paramref name="reader"/> is <c>null</c></exception>
         [Obsolete("Use TextField instead.")]
         public Field(string name, TextReader reader)
             : this(name, reader, TermVector.NO)
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a tokenized and indexed field that is not stored, optionally with
+        /// storing term vectors.  The <see cref="TextReader"/> is read only when the <see cref="Document"/> is added to the index,
+        /// i.e. you may not close the <see cref="TextReader"/> until <see cref="IndexWriter.AddDocument(System.Collections.Generic.IEnumerable{IIndexableField})"/>
+        /// has been called.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="reader">The reader with the content</param>
+        /// <param name="termVector">Whether term vector should be stored</param>
+        /// <exception cref="ArgumentNullException">if <paramref name="name"/> or <paramref name="reader"/> is <c>null</c></exception>
         [Obsolete("Use TextField instead.")]
         public Field(string name, TextReader reader, TermVector termVector)
             : this(name, reader, TranslateFieldType(Store.NO, Index.ANALYZED, termVector))
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a tokenized and indexed field that is not stored. Term vectors will
+        /// not be stored. This is useful for pre-analyzed fields.
+        /// The <see cref="TokenStream"/> is read only when the <see cref="Document"/> is added to the index,
+        /// i.e. you may not close the <see cref="TokenStream"/> until <see cref="IndexWriter.AddDocument(System.Collections.Generic.IEnumerable{IIndexableField})"/>
+        /// has been called.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="tokenStream">The <see cref="TokenStream"/> with the content</param>
+        /// <exception cref="ArgumentNullException">if <paramref name="name"/> or <paramref name="tokenStream"/> is <c>null</c></exception>
         [Obsolete("Use TextField instead.")]
         public Field(string name, TokenStream tokenStream)
             : this(name, tokenStream, TermVector.NO)
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a tokenized and indexed field that is not stored, optionally with
+        /// storing term vectors.  This is useful for pre-analyzed fields.
+        /// The <see cref="TokenStream"/> is read only when the <see cref="Document"/> is added to the index,
+        /// i.e. you may not close the <see cref="TokenStream"/> until <see cref="IndexWriter.AddDocument(System.Collections.Generic.IEnumerable{IIndexableField})"/>
+        /// has been called.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="tokenStream">The <see cref="TokenStream"/> with the content</param>
+        /// <param name="termVector">Whether term vector should be stored</param>
+        /// <exception cref="ArgumentNullException">if <paramref name="name"/> or <paramref name="tokenStream"/> is <c>null</c></exception>
         [Obsolete("Use TextField instead.")]
         public Field(string name, TokenStream tokenStream, TermVector termVector)
             : this(name, tokenStream, TranslateFieldType(Store.NO, Index.ANALYZED, termVector))
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a stored field with binary value. Optionally the value may be compressed.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="value">The binary value</param>
         [Obsolete("Use StoredField instead.")]
         public Field(string name, byte[] value)
             : this(name, value, TranslateFieldType(Store.YES, Index.NO, TermVector.NO))
         {
         }

-        // LUCENENET TODO: Documentation
+        /// <summary>
+        /// Create a stored field with binary value. Optionally the value may be compressed.
+        /// </summary>
+        /// <param name="name">The name of the field</param>
+        /// <param name="value">The binary value</param>
+        /// <param name="offset">Starting offset in value where this <see cref="Field"/>'s bytes are</param>
+        /// <param name="length">Number of bytes to use for this <see cref="Field"/>, starting at offset</param>
         [Obsolete("Use StoredField instead.")]
         public Field(string name, byte[] value, int offset, int length)
             : this(name, value, offset, length, TranslateFieldType(Store.YES, Index.NO, TermVector.NO))


StringLiteral#ToStringメソッドをLiteralクラスに移動

--- src/Lury/Compiling/Element/Literal.cs
+++ src/Lury/Compiling/Element/Literal.cs
@@ -39,6 +39,11 @@
         {
             this.Value = value;
         }
+
+        public override string ToString()
+        {
+            return this.Value.ToString();
+        }
     }

     class StringLiteral : Literal<string>
@@ -46,11 +51,6 @@
         public StringLiteral(string value, char marker)
             : base(ConvertToInternalString(value, marker))
         {
-        }
-
-        public override string ToString()
-        {
-            return this.Value;
         }

         private static string ConvertToInternalString(string value, char marker)


link-targets

link-targets

--- music-taste-based-radio-discovery/music-taste-based-radio-discovery/Views/Artist/MostPlayed.cshtml
+++ music-taste-based-radio-discovery/music-taste-based-radio-discovery/Views/Artist/MostPlayed.cshtml
@@ -14,7 +14,7 @@
                         {
                             if (!string.IsNullOrWhiteSpace(channel.Image))
                             {
-
+

                             }


Implement EntityWorld.GetEntity(ID)

Implement EntityWorld.GetEntity(ID)

--- ECS/EntityWorld.cs
+++ ECS/EntityWorld.cs
@@ -35,6 +35,12 @@
             var e = new Entity(nextFreeID++);
             entities[e.UniqueID] = e;
             return e;
+        }
+
+        // Returns an entity. Will throw if an invalid ID is passed.
+        public Entity GetEntity(long ID)
+        {
+            return entities[ID];
         }

         // Register a system with the entity world.


fix HFTRunner.cs on windows

fix HFTRunner.cs on windows

--- Extra/HFTRunner.cs
+++ Extra/HFTRunner.cs
@@ -82,16 +82,20 @@
             #elif UNITY_EDITOR_WIN
                 // See if we can find HappyFunTimes
                 // Use registry!!!
+                bool ask = false;
                 if (System.String.IsNullOrEmpty(exePath) || !File.Exists(exePath)) {
+                    ask = true;
                     object loc = LocalRegistryGetKey(
                         "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Greggman HappyFunTimes",
                         "InstallLocation");
-                    if (loc != null) {
+                    if (loc != null && !System.String.IsNullOrEmpty((string)loc)) {
                         exePath = System.IO.Path.Combine(StripQuotes((string)loc), "node.exe");
-                        if (!File.Exists(exePath)) {
-                            AskAboutHappyFunTimesApp();
-                        }
+                        ask = !File.Exists(exePath);
                     }
+                }
+                if (ask) {
+                    AskAboutHappyFunTimesApp();
+                    return;
                 }
                 string nodePath;
                 string startPath;
@@ -156,7 +160,7 @@

         void Install()
         {
-            Application.OpenURL("http://superhappyfuntimes.net/install");
+            Application.OpenURL("http://docs.happyfuntimes.net/docs/unity/install.html");
             Application.Quit();
         }


[packages,Installer] Fixing formatting

[packages,Installer] Fixing formatting

--- packages/Installer/bam/Scripts/Installer.cs
+++ packages/Installer/bam/Scripts/Installer.cs
@@ -65,7 +65,8 @@
             this.Paths.Add(module, key);
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }
@@ -105,7 +106,9 @@
             }
         }

-        protected override void GetExecutionPolicy(string mode)
+        protected override void
+        GetExecutionPolicy(
+            string mode)
         {
             // do nothing
         }
@@ -119,7 +122,9 @@
     public sealed class InnoSetupCompiler :
         Bam.Core.PreBuiltTool
     {
-        public override Bam.Core.Settings CreateDefaultSettings<T>(T module)
+        public override Bam.Core.Settings
+        CreateDefaultSettings<T>(
+            T module)
         {
             return new InnoSetupCompilerSettings();
         }
@@ -178,7 +183,8 @@
             this.ScriptModule.AddPath(dependent, key);
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }
@@ -240,7 +246,8 @@
             this.Paths.Add(module, key);
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }
@@ -277,7 +284,9 @@
             }
         }

-        protected override void GetExecutionPolicy(string mode)
+        protected override void
+        GetExecutionPolicy(
+            string mode)
         {
             // do nothing
         }
@@ -291,7 +300,9 @@
     public sealed class NSISCompiler :
         Bam.Core.PreBuiltTool
     {
-        public override Bam.Core.Settings CreateDefaultSettings<T>(T module)
+        public override Bam.Core.Settings
+        CreateDefaultSettings<T>(
+            T module)
         {
             return new NSISCompilerSettings();
         }
@@ -350,7 +361,8 @@
             this.ScriptModule.AddPath(dependent, key);
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }
@@ -412,7 +424,8 @@
             this.Paths.Add(module, key);
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }
@@ -462,7 +475,9 @@
             }
         }

-        protected override void GetExecutionPolicy(string mode)
+        protected override void
+        GetExecutionPolicy(
+            string mode)
         {
             // do nothing
         }
@@ -476,7 +491,9 @@
     public sealed class TarCompiler :
         Bam.Core.PreBuiltTool
     {
-        public override Bam.Core.Settings CreateDefaultSettings<T>(T module)
+        public override Bam.Core.Settings
+        CreateDefaultSettings<T>(
+            T module)
         {
             return new TarSettings();
         }
@@ -540,7 +557,8 @@
             this.InputFiles.AddPath(dependent, key);
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }
@@ -575,7 +593,9 @@
     public sealed class DiskImageCompiler :
         Bam.Core.PreBuiltTool
     {
-        public override Bam.Core.Settings CreateDefaultSettings<T>(T module)
+        public override Bam.Core.Settings
+        CreateDefaultSettings<T>(
+            T module)
         {
             return new TarSettings();
         }
@@ -626,7 +646,8 @@
             this.SourceFolderPath = dependent.GeneratedPaths[key];
         }

-        public override void Evaluate()
+        public override void
+        Evaluate()
         {
             // do nothing
         }


Adapted code to use the new AbstractConfiguration class.

--- src/base/common/configuration/NohrosConfiguration.cs
+++ src/base/common/configuration/NohrosConfiguration.cs
@@ -13,14 +13,14 @@
 namespace Nohros.Configuration
 {
   /// <summary>
-  /// A basic implementation of the <see cref="IConfiguration"/> used to
+  /// A basic implementation of the <see cref="AbstractConfiguration"/> used to
   /// parse the configuration files that follows the nohros schema.
   /// </summary>
   /// <remarks>
   /// The nohros shcema is defined by the
   /// http://nohros.com/schemas/nohros/nohros.xsd file.
   /// </remarks>
-  public class NohrosConfiguration : IConfiguration
+  public class NohrosConfiguration : AbstractConfiguration
   {
     #region configuration consts
     // configuration nodes names
@@ -282,13 +282,13 @@
       }

       // parse the common node
-      XmlNode node = IConfiguration.SelectNode(root_node, kCommonNodeName);
+      XmlNode node = AbstractConfiguration.SelectNode(root_node, kCommonNodeName);
       if (node != null) {
         CommonNode common_node = new CommonNode(Location);
         common_node.Parse(node, Nodes);

         // parse the web node
-        node = IConfiguration.SelectNode(root_node, kWebNodeName);
+        node = AbstractConfiguration.SelectNode(root_node, kWebNodeName);
         if (node != null) {
           WebNode web_node = new WebNode();
           web_node.Parse(node, Nodes);


Костыли в свойства свечей

Костыли в свойства свечей

--- project/OsEngine/Entity/Candle.cs
+++ project/OsEngine/Entity/Candle.cs
@@ -238,6 +238,10 @@
         {
             get
             {
+                if (Close <= 0m || Open <= 0m)
+                {
+                    return 0m;
+                }
                 if (IsUp)
                 {
                     return (Close - Open) / Open * 100m;
@@ -269,6 +273,10 @@
         {
             get
             {
+                if (Center == 0m)
+                {
+                    return 0m;
+                }
                 return (High - Center) / Center * 100m;
             }
         }


Use enums for LaunchType

Use enums for LaunchType

--- source/Cosmos.VS.DebugEngine/AD7.Impl/AD7Process.cs
+++ source/Cosmos.VS.DebugEngine/AD7.Impl/AD7Process.cs
@@ -309,13 +309,11 @@
             string xPortType = xParts[0].ToLower();
             string xPortParam = xParts[1].ToLower();

-            var xLaunch = mDebugInfo[BuildPropertyNames.LaunchString];
-
             OutputText("Starting debug connector.");
             switch (xPortType)
             {
                 case "pipe:":
-                    if (xLaunch == "HyperV")
+                    if (mLaunch == LaunchType.HyperV || mLaunch == LaunchType.Qemu)
                     {
                         mDbgConnector = new DebugConnectorPipeClient(xPortParam);
                     }
@@ -325,7 +323,7 @@
                     }
                     break;
                 case "serial:":
-                    if (xLaunch == "IntelEdison")
+                    if (mLaunch == LaunchType.IntelEdison)
                     {
                         mDbgConnector = new DebugConnectorEdison(xPortParam, Path.ChangeExtension(mDebugInfo["ISOFile"], ".bin"));
                     }
@@ -336,7 +334,6 @@
                     break;
                 default:
                     throw new Exception("No debug connector found for port type '" + xPortType + "'");
-
             }
             mDbgConnector.SetConnectionHandler(DebugConnectorConnected);
             mDbgConnector.CmdBreak += new Action<uint>(DbgCmdBreak);


Fix incorrect exception being thrown

Fix incorrect exception being thrown

--- osu.Framework/Screens/IScreen.cs
+++ osu.Framework/Screens/IScreen.cs
@@ -101,8 +101,11 @@

         internal void Exit(IScreen source)
         {
+            if (screens.All(d => d.Screen != source))
+                throw new Screen.ScreenNotCurrentException(nameof(Exit));
+
             if (source != screens.First().Screen)
-                throw new Screen.ScreenNotCurrentException(nameof(Exit));
+                throw new Screen.ScreenHasChildException(nameof(Exit), $"Use {nameof(ScreenExtensions.MakeCurrent)} instead.");

             exitFrom(source);
         }