Use the editor icon for data type trees (#7373)

--- src/Umbraco.Web/Trees/DataTypeTreeController.cs
+++ src/Umbraco.Web/Trees/DataTypeTreeController.cs
@@ -60,19 +60,20 @@
             //System ListView nodes
             var systemListViewDataTypeIds = GetNonDeletableSystemListViewDataTypeIds();

+            var children = Services.EntityService.GetChildren(intId.Result, UmbracoObjectTypes.DataType).ToArray();
+            var dataTypes = Services.DataTypeService.GetAll(children.Select(c => c.Id).ToArray()).ToDictionary(dt => dt.Id);
+
             nodes.AddRange(
-                Services.EntityService.GetChildren(intId.Result, UmbracoObjectTypes.DataType)
+                children
                     .OrderBy(entity => entity.Name)
                     .Select(dt =>
                     {
-                        var node = CreateTreeNode(dt.Id.ToInvariantString(), id, queryStrings, dt.Name, Constants.Icons.DataType, false);
+                        var dataType = dataTypes[dt.Id];
+                        var node = CreateTreeNode(dt.Id.ToInvariantString(), id, queryStrings, dt.Name, dataType.Editor.Icon, false);
                         node.Path = dt.Path;
-                        if (systemListViewDataTypeIds.Contains(dt.Id))
-                        {
-                            node.Icon = Constants.Icons.ListView;
-                        }
                         return node;
-                    }));
+                    })
+            );

             return nodes;
         }


Asset relation URL fix and API access methods marked as internal.

--- src/XOMNI.SDK.Private/ApiAccess/Asset/Assets.cs
+++ src/XOMNI.SDK.Private/ApiAccess/Asset/Assets.cs
@@ -26,16 +26,16 @@
             get { return "/private/storage/assets/{0}/relations"; }
         }

-        public Task<AssetRelations> GetAssetRelationsAsync(int assetId, ApiBasicCredential credential)
+        internal Task<AssetRelations> GetAssetRelationsAsync(int assetId, ApiBasicCredential credential)
         {
             return HttpProvider.GetAsync<AssetRelations>(GenerateUrl(String.Format(AssetRelationBaseUrl, assetId)), credential);
         }

-        public Task DeleteAssetAsync(int assetId, bool force, ApiBasicCredential credential)
+        internal Task DeleteAssetAsync(int assetId, bool force, ApiBasicCredential credential)
         {
             Dictionary<string, string> additionalParameters = new Dictionary<string, string>();
             additionalParameters.Add("force", force.ToString());
-            return HttpProvider.DeleteAsync(GenerateUrl(String.Format(AssetRelationBaseUrl, assetId), additionalParameters), credential);
+            return HttpProvider.DeleteAsync(GenerateUrl(String.Format(SingleOperationBaseUrl, assetId), additionalParameters), credential);
         }
     }
 }


fixed generate_id for nodes not rooted at document

--- src/Xcst.Compiler/CodeGeneration/generate_id.cs
+++ src/Xcst.Compiler/CodeGeneration/generate_id.cs
@@ -23,6 +23,7 @@

 using System.Collections.Generic;
 using System.Globalization;
+using System.Linq;
 using System.Text;
 using System.Xml.Linq;

@@ -36,7 +37,7 @@
          'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6'
       };

-      readonly List<XDocument>
+      readonly List<XContainer>
       _documents = new();

       string
@@ -51,7 +52,8 @@
          int
          doc_index(XObject node) {

-            var doc = node.Parent?.Document;
+            var doc = node.Document as XContainer
+               ?? (node as XElement ?? node.Parent).AncestorsAndSelf().Last();

             if (doc is null) {
                return 0;


Ignore .apt files defined inside MOD SDK folder

--- src/OpenSage.Game.Tests/Data/Apt/AptFileTest.cs
+++ src/OpenSage.Game.Tests/Data/Apt/AptFileTest.cs
@@ -19,6 +19,11 @@
         {
             InstalledFilesTestData.ReadFiles(".apt", _output, entry =>
             {
+                if (entry.FilePath.Contains("MOD SDK"))
+                {
+                    return;
+                }
+
                 var aptFile = AptFile.FromFileSystemEntry(entry);

                 Assert.NotNull(aptFile);


Reorder members within Json, for top-down readability.

--- src/Parsley.Tests/IntegrationTests/Json/Json.cs
+++ src/Parsley.Tests/IntegrationTests/Json/Json.cs
@@ -7,31 +7,12 @@

 public class Json
 {
-    record JsonToken(string Kind, object? Value, int Index);
-
-    static readonly Parser<JsonToken, object?> Value;
-
-    static readonly Parser<char, Void> Whitespace = Skip(IsWhiteSpace);
-
-    static Json()
-    {
-        var True = Token("true");
-        var False = Token("false");
-        var Null = Token("null");
-        var Number = Token("number");
-        var String = Token("string");
-
-        Value = Recursive(() => Choice(True, False, Null, Number, String, Dictionary, Array));
-    }
-
     public static bool TryParse(
         ReadOnlySpan<char> input,
         [NotNullWhen(true)] out object? value,
         [NotNullWhen(false)] out ParseError? error)
     {
-        var tokenizer = Tokenize;
-
-        if (tokenizer.TryParse(input, out var tokens, out error))
+        if (Tokenize.TryParse(input, out var tokens, out error))
         {
             if (Value.TryParse(tokens.ToArray(), out value, out error))
                 return true;
@@ -42,6 +23,10 @@
         value = null;
         return false;
     }
+
+    record JsonToken(string Kind, object? Value, int Index);
+
+    static readonly Parser<char, Void> Whitespace = Skip(IsWhiteSpace);

     static Parser<char, IReadOnlyList<JsonToken>> Tokenize =>
         from leading in Whitespace
@@ -63,6 +48,16 @@
                 from trailing in Whitespace
                 select token)
         select tokens;
+
+    static readonly Parser<JsonToken, object?> Value =
+        Recursive(() => Choice(
+            Token("true"),
+            Token("false"),
+            Token("null"),
+            Token("number"),
+            Token("string"),
+            Dictionary,
+            Array));

     static Parser<char, JsonToken> Literal(string literal, object? value) =>
         from index in Index<char>()


fix counting for query parameter on logs

--- src/Services/Logging.API/Services/LogService.cs
+++ src/Services/Logging.API/Services/LogService.cs
@@ -37,10 +37,13 @@

         public int GetNumberOfLogsPerScriptInstance(int id, LogLevel[] logLevel, string text)
         {
+            text = text == null ? "" : text;
+            string query = "SELECT COUNT(*) FROM Log ";
+            query += getLogsPerScriptInstanceWhereQuery(id, logLevel);
             using (var db = Connection)
             {
                 db.Open();
-                return db.Query<int>($"SELECT COUNT(*) FROM Log WHERE ScriptInstanceId = {id}").ToArray()[0];
+                return db.Query<int>(query, new { text = text }).ToArray()[0];
             }
         }


Mark string indexer as intrinsic to make it recognized by optimizations (#1384)

--- src/System.Private.CoreLib/src/System/String.cs
+++ src/System.Private.CoreLib/src/System/String.cs
@@ -1031,6 +1031,7 @@
         {
             [NonVersionable]
 #if CORERT
+            [Intrinsic]
             get
             {
                 if ((uint)index >= _stringLength)


Reports controller link

Reports controller link

--- src/TeamStore.DevUI/Views/Shared/_Layout.cshtml
+++ src/TeamStore.DevUI/Views/Shared/_Layout.cshtml
@@ -44,7 +44,7 @@

Home

Projects

-
Reports

+
Reports

                 @await Html.PartialAsync("_LoginPartial")


bump version

bump version

--- src/TypeShape.CSharp/Properties/AssemblyInfo.cs
+++ src/TypeShape.CSharp/Properties/AssemblyInfo.cs
@@ -1,36 +1,17 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
+// <auto-generated/>
+using System.Reflection;

-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("TypeShape.CSharp")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("TypeShape.CSharp")]
-[assembly: AssemblyCopyright("Copyright ©  2017")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("2ac53438-f8df-44ed-a0bf-8ceb84a7bf18")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// 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.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyTitleAttribute("TypeShape.CSharp")]
+[assembly: AssemblyProductAttribute("TypeShape")]
+[assembly: AssemblyDescriptionAttribute("Practical Generic Programming in F#")]
+[assembly: AssemblyVersionAttribute("2.17")]
+[assembly: AssemblyFileVersionAttribute("2.17")]
+namespace System {
+    internal static class AssemblyVersionInformation {
+        internal const System.String AssemblyTitle = "TypeShape.CSharp";
+        internal const System.String AssemblyProduct = "TypeShape";
+        internal const System.String AssemblyDescription = "Practical Generic Programming in F#";
+        internal const System.String AssemblyVersion = "2.17";
+        internal const System.String AssemblyFileVersion = "2.17";
+    }
+}


Add download of EA extract files

Add download of EA extract files

--- src/hfm/StarSchema.cs
+++ src/hfm/StarSchema.cs
@@ -1,5 +1,6 @@
 using System;
 using System.IO;
+using System.Text;

 using log4net;
 using HSVSESSIONLib;
@@ -206,11 +207,16 @@
         [Command("Extracts HFM data to a flat file",
                  Since = "11.1.1")]
         public void ExtractDataToFlatFile(
-                [Parameter("The file name prefix")]
-                string filePrefix,
+                [Parameter("The path to the extract file to be created")]
+                string extractFile,
                 [Parameter("Include file header containing extract details",
                            DefaultValue = false)]
                 bool includeHeader,
+                [Parameter("Flag specifying whether extract file should be decompressed; " +
+                           "extracts are generated in GZip (.gz) format, so compressed files " +
+                           "are faster to create and smaller in size",
+                           DefaultValue = true)]
+                bool decompress,
                 [Parameter("Whether to include dynamic accounts",
                            DefaultValue = false)]
                 bool includeDynamicAccts,
@@ -230,9 +236,10 @@
                            "if omitted, no log file is created.", DefaultValue = null)]
                 string logFile,
                 ExtractSpecification slice,
-                IOutput output)
-        {
-            int taskId = DoEAExtract("", filePrefix, (SS_PUSH_OPTIONS)EPushType.Create,
+                IOutput output,
+                Client client)
+        {
+            int taskId = DoEAExtract("", "EA_FILE", (SS_PUSH_OPTIONS)EPushType.Create,
                             (EA_EXTRACT_TYPE_FLAGS)(includeHeader ? EFileExtractType.FlatFile :
                                                                     EFileExtractType.FlatFileNoHeader),
                             includeDynamicAccts, includeCalculatedData, includeDerivedData,
@@ -245,10 +252,16 @@
                     () => Session.SystemInfo.HsvSystemInfo.GetRunningTaskLogFilePathName(taskId, out path));
             _log.DebugFormat("Path: {0}", path);

-            // Returns a string such as the following:
-            // C:\Oracle\Middleware\;EPMSystem11R1\logs\hfm\IFRST_20121126_235543_7024.log;user_projects\epmsystem1\products\FinancialManagement\Server Working Folder\EPM-11-1-2-2_WorkingData_IFRS\IFRST_20121126_235543_7024.dat.gz
-
-            // TODO: Download the extract file
+            // Returns a string containing 3 parts, separated by semi-colons:
+            // - the root directory where Oracle middleware is installed
+            // - the path relative to that root where the log file is located
+            // - the path relative to that root where the data file is located
+            var parts = path.Split(';');
+            var serverFile = Path.Combine(parts[0], parts[2]);
+
+            // Download the extract file
+            var ft = Session.Server.FileTransfer;
+            ft.RetrieveFile(serverFile, extractFile, decompress, output);
         }

@@ -340,7 +353,7 @@
             Session.Security.CheckPermissionFor(ETask.ExtendedAnalytics);

             // Perform the EA extract
-            _log.InfoFormat("Extracting data to {0}", slice);
+            _log.InfoFormat("Extracting data for {0}", slice);
             try {
                 if(HFM.HasVariableCustoms) {
                     HFM.Try(() => HsvStarSchemaACM.CreateStarSchemaExtDim(dsn, prefix, pushType,
@@ -401,7 +414,7 @@
                         case EEATaskStatus.Cancelled:
                             break;
                         default:
-                            _log.InfoFormat("Extract Status: {0} complete", taskStatus);
+                            _log.InfoFormat("Extract Status: {0} complete", lastTaskStatus);
                             output.Operation = taskStatus.ToString();
                             break;
                     }


Added ITwitchClient interface to TwitchClientAuthenticated to expose ITwitchClient base (unauth) methods

--- TwitchDotNet/Clients/TwitchClientAuthenticated.cs
+++ TwitchDotNet/Clients/TwitchClientAuthenticated.cs
@@ -16,7 +16,7 @@
     /// Authenticated TwitchClient
     /// Provides an interface for an authenticated session to retrieve data from Twitch API's (where authentication is required)
     /// </summary>
-    public class TwitchClientAuthenticated : TwitchClient, ITwitchClientAuthenticated {
+    public class TwitchClientAuthenticated : TwitchClient, ITwitchClientAuthenticated, ITwitchClient {

         /// <summary>
         /// Initialise HttpClient for authenticated requests


Add assert array and list are similar methods

--- UnitTestUsefullFunctions/UnitTestFunctionsMath.cs
+++ UnitTestUsefullFunctions/UnitTestFunctionsMath.cs
@@ -1,5 +1,6 @@
 using FonctionsUtiles.Fred.Csharp;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
 using System.Collections.Generic;

 namespace UnitTestUsefullFunctions
@@ -1727,7 +1728,7 @@
       int[] source = { 34, 25, 19, 9, 7, 5, 3 };
       int[] expected = { 3, 5, 7, 9, 19, 25, 34 };
       int[] result = FunctionsMath.SortArray(source);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1736,7 +1737,7 @@
       int[] source = { 9, 8, 7, 6, 5, 3 };
       int[] expected = { 3, 5, 6, 7, 8, 9 };
       int[] result = FunctionsMath.SortArray(source);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1745,7 +1746,7 @@
       int[] source = { 3, 5, 6, 7, 8, 9 };
       int[] expected = { 3, 5, 6, 7, 8, 9 };
       int[] result = FunctionsMath.SortArray(source);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1754,7 +1755,7 @@
       int[] source = { 3 };
       int[] expected = { 3 };
       int[] result = FunctionsMath.SortArray(source);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1764,7 +1765,7 @@
       int[] source2 = { 3 };
       int[] expected = { 3 };
       int[] result = FunctionsMath.IntersectionOfArrays(source1, source2);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1774,7 +1775,7 @@
       int[] source2 = { 3, 4 };
       int[] expected = { 3 };
       int[] result = FunctionsMath.IntersectionOfArrays(source1, source2);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1784,7 +1785,7 @@
       int[] source2 = { 1, 4 };
       int[] expected = { };
       int[] result = FunctionsMath.IntersectionOfArrays(source1, source2);
-      AssertListAreEqualed(result, expected);
+      AssertArrayAreEqualed(result, expected);
     }

     [TestMethod]
@@ -1815,7 +1816,7 @@
       AssertListAreEqualed(result, expected);
     }

-    private void AssertListAreEqualed(int[] source, int[] target)
+    private void AssertArrayAreEqualed(int[] source, int[] target)
     {
       Assert.AreEqual(source.Length, target.Length);
       for (int i = 0; i < source.Length; i++)
@@ -1832,5 +1833,31 @@
         Assert.AreEqual(source[i], target[i]);
       }
     }
+
+    private void AssertListAreSimilar(List<string> source, List<string> target)
+    {
+      Assert.AreEqual(source.Count, target.Count);
+      var sortedSource = source;
+      sortedSource.Sort();
+      var sortedTarget = target;
+      sortedTarget.Sort();
+      for (int i = 0; i < sortedSource.Count; i++)
+      {
+        Assert.AreEqual(sortedSource[i], sortedTarget[i]);
+      }
+    }
+
+    private void AssertArrayAreSimilar(int[] source, int[] target)
+    {
+      Assert.AreEqual(source.Length, target.Length);
+      var sortedSource = source;
+      Array.Sort(sortedSource);
+      var sortedTarget = target;
+      Array.Sort(sortedTarget);
+      for (int i = 0; i < sortedSource.Length; i++)
+      {
+        Assert.AreEqual(sortedSource[i], sortedTarget[i]);
+      }
+    }
   }
 }


Add unit test

Add unit test

--- UnitTestUsefullFunctions/UnitTestFunctionsMath.cs
+++ UnitTestUsefullFunctions/UnitTestFunctionsMath.cs
@@ -1942,6 +1942,15 @@
     }

     [TestMethod]
+    public void TestMethod_GetDivisorsSorted_value_15()
+    {
+      const int source = 15;
+      List<int> expected = new List<int> { 1, 3, 5, 15 };
+      List<int> result = FunctionsMath.GetDivisorsSorted(source);
+      AssertAreEqualList(result, expected);
+    }
+
+    [TestMethod]
     public void TestMethod_GetDivisorsSorted_value_50()
     {
       const int source = 50;


More generic valid code.

More generic valid code.

--- ValidCode/DependencyProperties/GenericNullable.cs
+++ ValidCode/DependencyProperties/GenericNullable.cs
@@ -21,8 +21,15 @@
             set => this.SetValue(ValueProperty, value);
         }

+        public static void UpdateStatic(GenericNullable<T> control, T value)
+        {
+            control.SetCurrentValue(GenericNullable<T>.ValueProperty, value);
+            control.SetCurrentValue(ValueProperty, value);
+        }
+
         public void Update(T value)
         {
+            this.SetCurrentValue(GenericNullable<T>.ValueProperty, value);
             this.SetCurrentValue(ValueProperty, value);
         }


THRIFT-5252 Make CreateHttpClientHandler() method virtual
Client: netstd
Patch: Jens Geyer

This closes #2201

--- lib/netstd/Thrift/Transport/Client/THttpTransport.cs
+++ lib/netstd/Thrift/Transport/Client/THttpTransport.cs
@@ -168,7 +168,7 @@
         /// A client handler with deflate and gZip compression-decompression algorithms and any client
         /// certificates passed in via <c>certificates</c>.
         /// </returns>
-        public static HttpClientHandler CreateHttpClientHandler(X509Certificate[] certificates = null)
+        public virtual HttpClientHandler CreateHttpClientHandler(X509Certificate[] certificates = null)
         {
             var handler = new HttpClientHandler();
             if (certificates != null)


If a record has been deleted, exit quickly

After deleting a LexEntry instance, we shouldn't try to set its fields,
so in that situation we just return quickly from LfLexEntryToFdoLexEntry.

--- src/LfMerge/Actions/UpdateFdoFromMongoDbAction.cs
+++ src/LfMerge/Actions/UpdateFdoFromMongoDbAction.cs
@@ -162,8 +162,9 @@
 				if (fdoEntry.CanDelete)
 					fdoEntry.Delete();
 				else
-					// TODO: Figure out how to handle this situation
-					Console.WriteLine("Problem: need to delete an FDO entry, but its CanDelete flag is false.");
+					// TODO: Log this properly
+					Console.WriteLine("Problem: need to delete FDO entry {0}, but its CanDelete flag is false.", fdoEntry.Guid);
+				return null; // Don't set fields on a deleted entry
 			}
 			string entryNameForDebugging = String.Join(", ", lfEntry.Lexeme.Values.Select(x => (x.Value == null) ? "" : x.Value));
 			Console.WriteLine("Checking entry {0} ({1}) in lexicon", guid, entryNameForDebugging);
@@ -388,7 +389,6 @@
 			// fdoSense.PublishIn = lfSense.SensePublishIn; // TODO: More complex than that. Handle it correctly.
 			SetMultiStringFrom(fdoSense.Restrictions, lfSense.SenseRestrictions);
 			fdoSense.SenseTypeRA = new PossibilityListConverter(cache.LanguageProject.LexDbOA.SenseTypesOA).GetByName(lfSense.SenseType);
-
 			SetMultiStringFrom(fdoSense.SocioLinguisticsNote, lfSense.SociolinguisticsNote);
 			fdoSense.Source = BestStringFromMultiText(lfSense.Source);
 			// fdoSense.StatusRA = new PossibilityListConverter(cache.LanguageProject.StatusOA).GetByName(lfSense.Status); // TODO: Nope, more complex.


Lucene.Net.TestFramework.Index.RandomCodec: Added [IgnoreCodec] attribute because in Lucene the test environment doesn't use RandomCodec as the default for Lucene46

--- src/Lucene.Net.TestFramework/Index/RandomCodec.cs
+++ src/Lucene.Net.TestFramework/Index/RandomCodec.cs
@@ -1,3 +1,4 @@
+using Lucene.Net.Codecs;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using System;
@@ -64,6 +65,7 @@
     /// documents in different orders and the test will still be deterministic
     /// and reproducable.
     /// </summary>
+    [IgnoreCodec] // LUCENENET specific - we don't want this codec to replace Lucene46Codec during testing - some of these codecs are read-only
     public class RandomCodec : Lucene46Codec
     {
         /// <summary>


Use buffer num config for splitter input port if greater than 3 or recommended value.

--- src/MMALSharp/Components/MMALSplitterComponent.cs
+++ src/MMALSharp/Components/MMALSplitterComponent.cs
@@ -36,7 +36,7 @@
         /// <inheritdoc />
         public override IDownstreamComponent ConfigureInputPort(IMMALPortConfig config, IPort copyPort, IInputCaptureHandler handler)
         {
-            var bufferNum = Math.Max(this.Inputs[0].BufferNumRecommended, 3);
+            var bufferNum = Math.Max(Math.Max(this.Inputs[0].BufferNumRecommended, 3), config.BufferNum);

             config = new MMALPortConfig(config.EncodingType, config.PixelFormat, config.Width, config.Height, config.Framerate,
                                         config.Quality, config.Bitrate, config.ZeroCopy, config.Timeout, bufferNum, config.BufferSize, config.Crop,
@@ -50,7 +50,7 @@
         /// <inheritdoc />
         public override IDownstreamComponent ConfigureInputPort(IMMALPortConfig config, IInputCaptureHandler handler)
         {
-            var bufferNum = Math.Max(this.Inputs[0].BufferNumRecommended, 3);
+            var bufferNum = Math.Max(Math.Max(this.Inputs[0].BufferNumRecommended, 3), config.BufferNum);

             config = new MMALPortConfig(config.EncodingType, config.PixelFormat, config.Width, config.Height, config.Framerate,
                                         config.Quality, config.Bitrate, config.ZeroCopy, config.Timeout, bufferNum, config.BufferSize, config.Crop,


Update next node in binding chain on error.

Fixes #831 and makes `Pushing_Null_To_RootObservable_Updates_Leaf_Node`
test pass.

--- src/Markup/Avalonia.Markup/Data/ExpressionNode.cs
+++ src/Markup/Avalonia.Markup/Data/ExpressionNode.cs
@@ -131,20 +131,14 @@
             }
             else
             {
-                if (notification.Error != null)
+                if (Next != null)
                 {
-                    _observer.OnNext(notification);
+                    Next.Target = new WeakReference(notification.Value);
                 }
-                else if (notification.HasValue)
+
+                if (Next == null || notification.Error != null)
                 {
-                    if (Next != null)
-                    {
-                        Next.Target = new WeakReference(notification.Value);
-                    }
-                    else
-                    {
-                        _observer.OnNext(value);
-                    }
+                    _observer.OnNext(value);
                 }
             }
         }


Fixing corrupted global suppressions file

--- src/Microsoft.Azure.WebJobs/GlobalSuppressions.cs
+++ src/Microsoft.Azure.WebJobs/GlobalSuppressions.cs
@@ -1,21 +1,9 @@
-// This file is used by Code Analysis to maintain SuppressMessage
+// Copyright (c) .NET Foundation. All rights reserved.

-// attributes that are applied to this project.
-
-// Project-level suppressions either have no target or are given
-
-// a specific target and scoped to a namespace, type, member, etc.
-
-//
-
-// To add a suppression to this file, right-click the message in the
-
-// Code Analysis results, point to "Suppress Message", and click
-
-// "In Suppression File".
-
-// You do not need to add suppressions to this file manually.
+// Licensed under the MIT License. See License.txt in the project root for license information.

-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments", Scope = "type", Target = "Microsoft.Azure.WebJobs.TimeoutAttribute")]+[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments", Scope = "type", Target = "Microsoft.Azure.WebJobs.TimeoutAttribute")]
+
+


Fix mistake with string.Contains

Fix mistake with string.Contains

For some reason I thought there was a Contains overload for
StringComparison.  I was mistaken.

--- src/Microsoft.Diagnostics.Runtime/Desktop/heap.cs
+++ src/Microsoft.Diagnostics.Runtime/Desktop/heap.cs
@@ -998,12 +998,12 @@
                 if (_mscorlib == null)
                 {
                     string moduleName = Runtime.ClrInfo.Flavor == ClrFlavor.CoreCLR
-                        ? "System.Private.CoreLib"
+                        ? "system.private.corelib"
                         : "mscorlib";

                     foreach (ClrModule module in DesktopRuntime.Modules)
                     {
-                        if (module.Name.Contains(moduleName, StringComparison.OrdinalIgnoreCase))
+                        if (module.Name.ToLowerInvariant().Contains(moduleName))
                         {
                             _mscorlib = module;
                             break;


Helper method to allow the copying of another set of settings.

svn path=/trunk/bitsharp/; revision=82954

--- src/MonoTorrent/Client/Settings/EngineSettings.cs
+++ src/MonoTorrent/Client/Settings/EngineSettings.cs
@@ -252,6 +252,19 @@
                                       this.allowLegacyConnections);
         }

+        public void CopyFrom(EngineSettings other)
+        {
+            this.allowLegacyConnections = other.allowLegacyConnections;
+            this.globalMaxConnections = other.globalMaxConnections;
+            this.globalMaxDownloadSpeed = other.globalMaxDownloadSpeed;
+            this.globalMaxHalfOpenConnections = other.globalMaxHalfOpenConnections;
+            this.globalMaxUploadSpeed = other.globalMaxUploadSpeed;
+            this.haveSupressionEnabled = other.haveSupressionEnabled;
+            this.listenPort = other.listenPort;
+            this.minEncryptionLevel = other.minEncryptionLevel;
+            this.savePath = other.savePath;
+        }
+
         public override bool Equals(object obj)
         {
             EngineSettings settings = obj as EngineSettings;


Code style: Remove 'this.' from member access.

--- src/MySqlConnector/MySqlClient/MySqlBulkLoader.cs
+++ src/MySqlConnector/MySqlClient/MySqlBulkLoader.cs
@@ -39,19 +39,19 @@

         public MySqlBulkLoader(MySqlConnection connection)
         {
-            this.Connection = connection;
-            this.Local = true;
-            this.FieldTerminator = defaultFieldTerminator;
-            this.LineTerminator = defaultLineTerminator;
-            this.FieldQuotationCharacter = '\0';
-            this.ConflictOption = MySqlBulkLoaderConflictOption.None;
-            this.Columns = new List<string>();
-            this.Expressions = new List<string>();
+            Connection = connection;
+            Local = true;
+            FieldTerminator = defaultFieldTerminator;
+            LineTerminator = defaultLineTerminator;
+            FieldQuotationCharacter = '\0';
+            ConflictOption = MySqlBulkLoaderConflictOption.None;
+            Columns = new List<string>();
+            Expressions = new List<string>();
         }

         private string BuildSqlCommand()
         {
-            if (string.IsNullOrWhiteSpace(this.FileName) || string.IsNullOrWhiteSpace(this.TableName))
+            if (string.IsNullOrWhiteSpace(FileName) || string.IsNullOrWhiteSpace(TableName))
             {
                 //This is intentionally a different exception to what is thrown by the baseline client because
                 //the baseline does not handle null or empty FileName and TableName.
@@ -62,53 +62,53 @@
             }

             StringBuilder sqlCommandMain = new StringBuilder("LOAD DATA ");
-            if (this.Priority == MySqlBulkLoaderPriority.Low)
+            if (Priority == MySqlBulkLoaderPriority.Low)
             {
                 sqlCommandMain.Append("LOW_PRIORITY ");
             }
-            else if (this.Priority == MySqlBulkLoaderPriority.Concurrent)
+            else if (Priority == MySqlBulkLoaderPriority.Concurrent)
             {
                 sqlCommandMain.Append("CONCURRENT ");
             }
-            if (this.Local)
+            if (Local)
             {
                 sqlCommandMain.Append("LOCAL ");
             }
             sqlCommandMain.Append("INFILE ");
             if (System.IO.Path.DirectorySeparatorChar != '\\')
             {
-                sqlCommandMain.AppendFormat("'{0}' ", this.FileName);
+                sqlCommandMain.AppendFormat("'{0}' ", FileName);
             }
             else
             {
-                sqlCommandMain.AppendFormat("'{0}' ", this.FileName.Replace("\\", "\\\\"));
-            }
-            if (this.ConflictOption == MySqlBulkLoaderConflictOption.Ignore)
+                sqlCommandMain.AppendFormat("'{0}' ", FileName.Replace("\\", "\\\\"));
+            }
+            if (ConflictOption == MySqlBulkLoaderConflictOption.Ignore)
             {
                 sqlCommandMain.Append("IGNORE ");
             }
-            else if (this.ConflictOption == MySqlBulkLoaderConflictOption.Replace)
+            else if (ConflictOption == MySqlBulkLoaderConflictOption.Replace)
             {
                 sqlCommandMain.Append("REPLACE ");
             }
-            sqlCommandMain.AppendFormat("INTO TABLE {0} ", this.TableName);
-            if (this.CharacterSet != null)
-            {
-                sqlCommandMain.AppendFormat("CHARACTER SET {0} ", this.CharacterSet);
+            sqlCommandMain.AppendFormat("INTO TABLE {0} ", TableName);
+            if (CharacterSet != null)
+            {
+                sqlCommandMain.AppendFormat("CHARACTER SET {0} ", CharacterSet);
             }

             StringBuilder sqlCommandFragment = new StringBuilder(string.Empty);
-            if (this.FieldTerminator != defaultFieldTerminator)
-            {
-                sqlCommandFragment.AppendFormat("TERMINATED BY \'{0}\' ", this.FieldTerminator);
-            }
-            if (this.FieldQuotationCharacter != 0)
-            {
-                sqlCommandFragment.AppendFormat("{0} ENCLOSED BY \'{1}\' ", (this.FieldQuotationOptional ? "OPTIONALLY" : ""), this.FieldQuotationCharacter);
-            }
-            if (this.EscapeCharacter != defaultEscapeCharacter && this.EscapeCharacter != 0)
-            {
-                sqlCommandFragment.AppendFormat("ESCAPED BY \'{0}\' ", this.EscapeCharacter);
+            if (FieldTerminator != defaultFieldTerminator)
+            {
+                sqlCommandFragment.AppendFormat("TERMINATED BY \'{0}\' ", FieldTerminator);
+            }
+            if (FieldQuotationCharacter != 0)
+            {
+                sqlCommandFragment.AppendFormat("{0} ENCLOSED BY \'{1}\' ", (FieldQuotationOptional ? "OPTIONALLY" : ""), FieldQuotationCharacter);
+            }
+            if (EscapeCharacter != defaultEscapeCharacter && EscapeCharacter != 0)
+            {
+                sqlCommandFragment.AppendFormat("ESCAPED BY \'{0}\' ", EscapeCharacter);
             }
             if (sqlCommandFragment.Length > 0)
             {
@@ -116,40 +116,40 @@
             }

             sqlCommandFragment.Clear();
-            if (this.LinePrefix != null && this.LinePrefix.Length > 0)
-            {
-                sqlCommandFragment.AppendFormat("STARTING BY \'{0}\' ", this.LinePrefix);
-            }
-            if (this.LineTerminator != defaultLineTerminator)
-            {
-                sqlCommandFragment.AppendFormat("TERMINATED BY \'{0}\' ", this.LineTerminator);
+            if (LinePrefix != null && LinePrefix.Length > 0)
+            {
+                sqlCommandFragment.AppendFormat("STARTING BY \'{0}\' ", LinePrefix);
+            }
+            if (LineTerminator != defaultLineTerminator)
+            {
+                sqlCommandFragment.AppendFormat("TERMINATED BY \'{0}\' ", LineTerminator);
             }
             if (sqlCommandFragment.Length > 0)
             {
                 sqlCommandMain.AppendFormat("LINES {0}", sqlCommandFragment.ToString());
             }

-            if (this.NumberOfLinesToSkip > 0)
-            {
-                sqlCommandMain.AppendFormat("IGNORE {0} LINES ", this.NumberOfLinesToSkip);
-            }
-            if (this.Columns.Count > 0)
+            if (NumberOfLinesToSkip > 0)
+            {
+                sqlCommandMain.AppendFormat("IGNORE {0} LINES ", NumberOfLinesToSkip);
+            }
+            if (Columns.Count > 0)
             {
                 sqlCommandMain.Append("(");
-                sqlCommandMain.Append(this.Columns[0]);
-                for (int i = 1; i < this.Columns.Count; i++)
-                {
-                    sqlCommandMain.AppendFormat(",{0}", this.Columns[i]);
+                sqlCommandMain.Append(Columns[0]);
+                for (int i = 1; i < Columns.Count; i++)
+                {
+                    sqlCommandMain.AppendFormat(",{0}", Columns[i]);
                 }
                 sqlCommandMain.Append(") ");
             }
-            if (this.Expressions.Count > 0)
+            if (Expressions.Count > 0)
             {
                 sqlCommandMain.Append("SET ");
-                sqlCommandMain.Append(this.Expressions[0]);
-                for (int j = 1; j < this.Expressions.Count; j++)
-                {
-                    sqlCommandMain.AppendFormat(",{0}", this.Expressions[j]);
+                sqlCommandMain.Append(Expressions[0]);
+                for (int j = 1; j < Expressions.Count; j++)
+                {
+                    sqlCommandMain.AppendFormat(",{0}", Expressions[j]);
                 }
             }
             return sqlCommandMain.ToString();
@@ -165,31 +165,31 @@
         {
             int recordsAffected;
             bool closeConnection = false;
-            if (this.Connection == null)
+            if (Connection == null)
             {
                 throw new InvalidOperationException("Connection not set");
             }
-            if (this.Connection.State != ConnectionState.Open)
+            if (Connection.State != ConnectionState.Open)
             {
                 closeConnection = true;
-                this.Connection.Open();
-            }
-            if (string.IsNullOrWhiteSpace(this.FileName) && this.InfileStream != null)
-            {
-                if (!this.Local)
+                Connection.Open();
+            }
+            if (string.IsNullOrWhiteSpace(FileName) && InfileStream != null)
+            {
+                if (!Local)
                 {
                     throw new InvalidOperationException("Cannot use InfileStream when Local is not true.");
                 }
                 string streamKey = string.Format("{0}:{1}", LocalInfilePayload.InfileStreamPrefix, Guid.NewGuid());
-                InfileStreams.Add(streamKey, this.InfileStream);
-                this.FileName = streamKey;
+                InfileStreams.Add(streamKey, InfileStream);
+                FileName = streamKey;
             }
             try
             {
-                string commandString = this.BuildSqlCommand();
-                var cmd = new MySqlCommand(commandString, this.Connection)
-                {
-                    CommandTimeout = this.Timeout
+                string commandString = BuildSqlCommand();
+                var cmd = new MySqlCommand(commandString, Connection)
+                {
+                    CommandTimeout = Timeout
                 };
                 recordsAffected = await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
             }
@@ -197,7 +197,7 @@
             {
                 if (closeConnection)
                 {
-                    this.Connection.Close();
+                    Connection.Close();
                 }
             }
             return recordsAffected;


Added overloads accepting booleans for True()/False() to better support languages that do not implictly convert Nullable<bool> -> bool.

--- src/NUnitFramework/framework/Assert.Conditions.cs
+++ src/NUnitFramework/framework/Assert.Conditions.cs
@@ -47,6 +47,18 @@
         /// an <see cref="AssertionException"/>.
         /// </summary>
         /// <param name="condition">The evaluated condition</param>
+        /// <param name="message">The message to display in case of failure</param>
+        /// <param name="args">Array of objects to be used in formatting the message</param>
+        public static void True(bool condition, string message, params object[] args)
+        {
+           Assert.That(condition, Is.True, message, args);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is true. If the condition is false the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
         public static void True(bool? condition)
         {
             Assert.That(condition, Is.True ,null, null);
@@ -57,6 +69,16 @@
         /// an <see cref="AssertionException"/>.
         /// </summary>
         /// <param name="condition">The evaluated condition</param>
+        public static void True(bool condition)
+        {
+            Assert.That(condition, Is.True ,null, null);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is true. If the condition is false the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
         /// <param name="message">The message to display in case of failure</param>
         /// <param name="args">Array of objects to be used in formatting the message</param>
         public static void IsTrue(bool? condition, string message, params object[] args)
@@ -69,11 +91,33 @@
         /// an <see cref="AssertionException"/>.
         /// </summary>
         /// <param name="condition">The evaluated condition</param>
+        /// <param name="message">The message to display in case of failure</param>
+        /// <param name="args">Array of objects to be used in formatting the message</param>
+        public static void IsTrue(bool condition, string message, params object[] args)
+        {
+            Assert.That(condition, Is.True ,message, args);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is true. If the condition is false the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
         public static void IsTrue(bool? condition)
         {
             Assert.That(condition, Is.True ,null, null);
         }

+        /// <summary>
+        /// Asserts that a condition is true. If the condition is false the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
+        public static void IsTrue(bool condition)
+        {
+            Assert.That(condition, Is.True ,null, null);
+        }
+
         #endregion

         #region False
@@ -95,6 +139,18 @@
         /// an <see cref="AssertionException"/>.
         /// </summary>
         /// <param name="condition">The evaluated condition</param>
+        /// <param name="message">The message to display in case of failure</param>
+        /// <param name="args">Array of objects to be used in formatting the message</param>
+        public static void False(bool condition, string message, params object[] args)
+        {
+            Assert.That(condition, Is.False ,message, args);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is false. If the condition is true the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
         public static void False(bool? condition)
         {
             Assert.That(condition, Is.False ,null, null);
@@ -105,6 +161,16 @@
         /// an <see cref="AssertionException"/>.
         /// </summary>
         /// <param name="condition">The evaluated condition</param>
+        public static void False(bool condition)
+        {
+            Assert.That(condition, Is.False ,null, null);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is false. If the condition is true the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
         /// <param name="message">The message to display in case of failure</param>
         /// <param name="args">Array of objects to be used in formatting the message</param>
         public static void IsFalse(bool? condition, string message, params object[] args)
@@ -117,7 +183,29 @@
         /// an <see cref="AssertionException"/>.
         /// </summary>
         /// <param name="condition">The evaluated condition</param>
+        /// <param name="message">The message to display in case of failure</param>
+        /// <param name="args">Array of objects to be used in formatting the message</param>
+        public static void IsFalse(bool condition, string message, params object[] args)
+        {
+            Assert.That(condition, Is.False ,message, args);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is false. If the condition is true the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
         public static void IsFalse(bool? condition)
+        {
+            Assert.That(condition, Is.False ,null, null);
+        }
+
+        /// <summary>
+        /// Asserts that a condition is false. If the condition is true the method throws
+        /// an <see cref="AssertionException"/>.
+        /// </summary>
+        /// <param name="condition">The evaluated condition</param>
+        public static void IsFalse(bool condition)
         {
             Assert.That(condition, Is.False ,null, null);
         }


Swap out station logos on song history items generated on different devices.

--- src/Neptunium/Core/Media/History/SongHistorian.cs
+++ src/Neptunium/Core/Media/History/SongHistorian.cs
@@ -44,6 +44,15 @@

                         if (coll != null)
                         {
+                            foreach (SongHistoryItem item in coll)
+                            {
+                                //for song entries that came from another device, the metadata's station logo may point to the wrong file location. we're going to update it for this device.
+                                if (!File.Exists(item.Metadata.StationLogo.LocalPath.ToString()))
+                                {
+                                    item.Metadata.StationLogo = new Uri(NepApp.CacheManager.StationImageCacheFolder.Path + "\\" + item.Metadata.StationLogo.Segments.Last());
+                                }
+                            }
+
                             HistoryOfSongs.AddRange(coll);
                         }
                     }


Fixed hidden method instead of override

Fixed hidden method instead of override

--- src/Procon.Core/Remote/CommandServerController.cs
+++ src/Procon.Core/Remote/CommandServerController.cs
@@ -63,7 +63,7 @@
         /// Pokes the underlying listener, ensuring that all clients held in memory are still
         /// active and not disconnected.
         /// </summary>
-        public void Poke() {
+        public override void Poke() {
             // Method implemented here instead of calling the public method so we can do
             // additional work during a Poke in the future.


Add CLSCompliant attribute.

Add CLSCompliant attribute.

--- src/System.Data.SQLite/Properties/AssemblyInfo.cs
+++ src/System.Data.SQLite/Properties/AssemblyInfo.cs
@@ -1,4 +1,5 @@
-using System.Reflection;
+using System;
+using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;

@@ -12,3 +13,4 @@
 [assembly: ComVisible(false)]
 [assembly: InternalsVisibleTo("System.Data.SQLite.Tests")]
 [assembly: InternalsVisibleTo("SystemDataSQLiteTestsMonoTouch")]
+[assembly: CLSCompliant(true)]


WA09: WebAPI: PathContentSegment.IsCatchAll. Remove Linq over IList<T>.

WebAPI Async SelfHost is impacted by the overhead of Linq and foreach over List<T>. List<T> enumerators are 4.83% of allocations, and Linq helpers are 3.23% of exclusive time. These are reduced per request by this change.

--- src/System.Web.Http/Routing/PathContentSegment.cs
+++ src/System.Web.Http/Routing/PathContentSegment.cs
@@ -20,7 +20,19 @@
             get
             {
                 // TODO: Verify this is correct. Maybe add an assert.
-                return Subsegments.Any<PathSubsegment>(seg => (seg is PathParameterSubsegment) && ((PathParameterSubsegment)seg).IsCatchAll);
+                // Performance sensitive
+                // Caching count is faster for IList<T>
+                int subsegmentCount = Subsegments.Count;
+                for (int i = 0; i < subsegmentCount; i++)
+                {
+                    PathSubsegment seg = Subsegments[i];
+                    PathParameterSubsegment paramterSubSegment = seg as PathParameterSubsegment;
+                    if (paramterSubSegment != null && paramterSubSegment.IsCatchAll)
+                    {
+                        return true;
+                    }
+                }
+                return false;
             }
         }


[SERVER-173] Implement handling for skills.

--- hybrasyl/Objects/User.cs
+++ hybrasyl/Objects/User.cs
@@ -890,17 +890,7 @@
         {
             var castable = SkillBook[slot];

-            if(castable.Effects.Damage != null)
-            {
-                //byte radius = castable.Intents.Intent.Where(x => x.;
-                Direction playerFacing = this.Direction;
-                byte maxTargets = 0;
-                //this is an attack skill
-
-                //now lets define how we want to do the attack
-                //isclick should always be false for a skill (please correct me if I'm wrong)
-
-            }
+            Attack(castable);
         }

         public void SendVisibleItem(Item item)
@@ -1679,7 +1669,79 @@

         public override void Attack(Castable castObject)
         {
-            base.Attack(castObject);
+            var direction = this.Direction;
+            var damage = castObject.Effects.Damage;
+            if (damage != null)
+            {
+                var intents = castObject.Intents;
+                foreach (var intent in intents.Intent)
+                {
+                    //isclick should always be 0 for a skill.
+                    var targetAreas = new List<KeyValuePair<int, int>>();
+
+
+                    var possibleTargets = new List<VisibleObject>();
+                    possibleTargets.AddRange(Map.EntityTree.GetObjects(new Rectangle(this.X - intent.Radius, this.Y, (this.X + intent.Radius) - (this.X - intent.Radius), (this.Y + intent.Radius) - (this.Y - intent.Radius))).Where(obj => obj is Creature && obj != this && obj.GetType() != typeof(User)));
+                    possibleTargets.AddRange(Map.EntityTree.GetObjects(new Rectangle(this.X, this.Y - intent.Radius, (this.X + intent.Radius) - (this.X - intent.Radius), (this.Y + intent.Radius) - (this.Y - intent.Radius))).Where(obj => obj is Creature && obj != this && obj.GetType() != typeof(User)));
+
+                    List<Creature> actualTargets = new List<Creature>();
+                    if (intent.Maxtargets > 0)
+                    {
+                        actualTargets = possibleTargets.Take(intent.Maxtargets).OfType<Creature>().ToList();
+                    }
+                    else
+                    {
+                        actualTargets = possibleTargets.OfType<Creature>().ToList();
+                    }
+
+                    foreach (var target in actualTargets)
+                    {
+                        if (target != null)
+                        {
+
+                            Random rand = new Random();
+
+                            if (damage.Formula == null) //will need to be expanded. also will need to account for damage scripts
+                            {
+                                var simple = damage.Simple;
+                                var damageType = EnumUtil.ParseEnum<Enums.DamageType>(damage.Type.ToString(),
+                                    Enums.DamageType.Magical);
+                                var dmg = rand.Next(Convert.ToInt32(simple.Min), Convert.ToInt32(simple.Max));
+                                //these need to be set to integers as attributes. note to fix.
+                                target.Damage(dmg, OffensiveElement, damageType, this);
+                            }
+                            else
+                            {
+                                var formula = damage.Formula;
+                                var damageType = EnumUtil.ParseEnum<Enums.DamageType>(damage.Type.ToString(),
+                                    Enums.DamageType.Magical);
+                                FormulaParser parser = new FormulaParser(this, castObject, target);
+                                var dmg = parser.Eval(formula);
+                                if (dmg == 0) dmg = 1;
+                                target.Damage(dmg, OffensiveElement, damageType, this);
+                            }
+
+                        }
+                        else
+                        {
+                            //var formula = damage.Formula;
+                        }
+                    }
+                }
+
+                var animation = new ServerPacketStructures.PlayerAnimation() { Animation = (byte)castObject.Effects.Animations.OnCast.Motion.Id, Speed = (ushort)(castObject.Effects.Animations.OnCast.Motion.Speed / 5), UserId = this.Id };
+                var sound = new ServerPacketStructures.PlaySound() { Sound = (byte)castObject.Effects.Sound.Id };
+                Enqueue(animation.Packet());
+                Enqueue(sound.Packet());
+                SendAnimation(animation.Packet());
+                PlaySound(sound.Packet());
+
+                //this is an attack skill
+            }
+            else
+            {
+                //need to handle scripting
+            }
         }

         public void AssailAttack(Direction direction, Creature target = null)


minor logic change for checking if sort exists

--- src/Umbraco.Core/Models/PropertyTypeCollection.cs
+++ src/Umbraco.Core/Models/PropertyTypeCollection.cs
@@ -84,8 +84,8 @@
                     }
                 }

-                //check if the item's sort order is already in use
-                if (this.Select(x => x.SortOrder).Contains(item.SortOrder))
+                //check if the item's sort order is already in use
+                if (this.Any(x => x.SortOrder == item.SortOrder))
                 {
                     //make it the next iteration
                     item.SortOrder = this.Max(x => x.SortOrder) + 1;


Added default cachehelper to the relation repositories

--- src/Umbraco.Core/Persistence/RepositoryFactory.cs
+++ src/Umbraco.Core/Persistence/RepositoryFactory.cs
@@ -197,7 +197,7 @@
         {
             return new RelationRepository(
                 uow,
-                _noCache, //never cache
+                _cacheHelper,
                 _logger, _sqlSyntax,
                 CreateRelationTypeRepository(uow));
         }
@@ -206,7 +206,7 @@
         {
             return new RelationTypeRepository(
                 uow,
-                _noCache, //never cache
+                _cacheHelper,
                 _logger, _sqlSyntax);
         }


Minor UI update

Minor UI update

--- ApiControllerGenerator/MainDialog/MainDialog.cs
+++ ApiControllerGenerator/MainDialog/MainDialog.cs
@@ -700,7 +700,7 @@
                    }
                }

-               Send(p, 100, "---ACG process ended---");
+               Send(p, 100, " ---ACG process ended---");
            });
         }


Changed version number to 1.0.0

Changed version number to 1.0.0

--- src/VersionTasks/Properties/CommonAssemblyInfo.cs
+++ src/VersionTasks/Properties/CommonAssemblyInfo.cs
@@ -12,5 +12,5 @@
 [assembly: AssemblyConfiguration("Release")]
 #endif

-[assembly: AssemblyVersion("0.7.0.0")]
-[assembly: AssemblyFileVersion("0.7.0.0")]
+[assembly: AssemblyVersion("1.0.0")]
+[assembly: AssemblyFileVersion("1.0.0")]


Added more Log Box messages

Added more Log Box messages

--- ApiControllerGenerator/MainDialog/MainDialog.cs
+++ ApiControllerGenerator/MainDialog/MainDialog.cs
@@ -14,6 +14,7 @@
 using Microsoft.VisualStudio.ComponentModelHost;
 using Microsoft.VisualStudio.LanguageServices;
 using Microsoft.VisualStudio.Shell;
+using Microsoft.VisualStudio.Shell.Interop;

 namespace ApiControllerGenerator.MainDialog
 {
@@ -254,7 +255,7 @@
                                     if (addElement.GetAttribute("name").Equals(dbContext))
                                         LogBox.AppendLine(
                                             GetHour() +
-                                            " - API Web.config file already contains a 'connectionStrings' element named '" +
+                                            " - API Web.Config file already contains a 'connectionStrings' element named '" +
                                             dbContext + "'", Color.Orange);
                                     else
                                     {
@@ -281,7 +282,7 @@
                 }
                 catch (Exception)
                 {
-                    LogBox.AppendLine(GetHour() + " - Problems to import connection strings from '" + repositoryProjectName + "' to '" + apiProjectName + "' , make sure that Repository project contains App.config file with connectionStrings element", Color.Red);
+                    LogBox.AppendLine(GetHour() + " - Problems to import connection strings from '" + repositoryProjectName + "' to '" + apiProjectName + "' , make sure that Repository project contains App.Config file with 'connectionStrings' element", Color.Red);
                     ProgressBar.Value = 20;
                 }

@@ -388,16 +389,17 @@
                         LogBox.AppendLine(GetHour() + " - " + className + "Controller generated", Color.Green);
                     }
                     LogBox.AppendLine(GetHour() + " - All controllers generated successfully", Color.Green);
-
                     ProgressBar.Value = 60;
-                    LogBox.AppendLine(GetHour() + " - Workspace loaded", Color.Green);
-                    GetCurrentSolution(out solution);
-                    apiProject = solution.Projects.First(o => o.Name == apiProjectName);

                     //----------------------------------------------------------------------------------------------------------------
-                    // CREATE BOOTSTRAPPER FILE
+                    // CREATE BOOTSTRAPPER FILE AND REGYSTERTYPES
                     if (options["Unity"] && bootstrapper)
                     {
+                        LogBox.AppendLine(GetHour() + " - Trying to create Bootstrapper file");
+
+                        GetCurrentSolution(out solution);
+                        apiProject = solution.Projects.First(o => o.Name == apiProjectName);
+
                         var newFile = apiProject.AddDocument("Bootstrapper",
                             CodeSnippets.GetBootstrapper(classesNameList, dbContext),
                             new[] { apiProjectName, "App_Start" });
@@ -405,7 +407,8 @@

                         GetCurrentSolution(out solution);
                         apiProject = solution.Projects.First(o => o.Name == apiProjectName);
-
+                        LogBox.AppendLine(GetHour() + " - Bootstraper file created", Color.Green);
+                        LogBox.AppendLine(GetHour() + " - Added all registerType statements for each entity", Color.Green);
                         // adds "Bootstrapper.InitUnity(container);" line in unity config
                         var unityConfigDoc =
                             apiProject.Documents.First(
@@ -443,13 +446,15 @@
                         workspace.TryApplyChanges(doc.Project.Solution);

                         ProgressBar.Value = 70;
-                        LogBox.AppendLine(GetHour() + " - Workspace loaded", Color.Green);
                         GetCurrentSolution(out solution);
                         apiProject = solution.Projects.First(o => o.Name == apiProjectName);
-                    }
-
-
+                        LogBox.AppendLine(GetHour() + " - Added call to Bootstrapper in Web.Conf file", Color.Green);
+                    }
+
+                    //WEBAPI.CONFIG FILE
                     // adds unity init, json formatter and url mapping line in web config
+                    LogBox.AppendLine(GetHour() + " - Trying to add configuration statements on WebApiConfig.cs");
+
                     var webApiConfigDoc = apiProject.Documents.First(o => o.Folders.Contains("App_Start") && o.Name == "WebApiConfig.cs");
                     var webApitree = await webApiConfigDoc.GetSyntaxTreeAsync();

@@ -466,22 +471,24 @@
                         stmt += @"
             UnityConfig.RegisterComponents();
 ";
+                        LogBox.AppendLine(GetHour() + " - Added component register of Unity", Color.Green);
                     }
                     if (options["JSON"])
                     {
                         stmt += @"
-
             var json = config.Formatters.JsonFormatter;
             json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
             config.Formatters.Remove(config.Formatters.XmlFormatter);
 ";
+                        LogBox.AppendLine(GetHour() + " - Added JSON formatter", Color.Green);
                     }
                     if (options["CORS"])
                     {
                         stmt += @"
-            config.EnableCors();
+config.EnableCors();

 ";
+                        LogBox.AppendLine(GetHour() + " - Enabled CORS", Color.Green);
                     }

                     StatementSyntax syn2 = SyntaxFactory.ParseStatement(stmt);
@@ -525,7 +532,6 @@
                     var doc2 = webApiConfigDoc.WithSyntaxRoot(newRoot2);
                     workspace.TryApplyChanges(doc2.Project.Solution);
                     ProgressBar.Value = 100;
-                    LogBox.AppendLine(GetHour() + " - Workspace loaded", Color.Green);
                 }
                 else
                 {


Fixed crypto deserialization issue

Fixed crypto deserialization issue

--- src/WizBot/Modules/Searches/_Common/CryptoData.cs
+++ src/WizBot/Modules/Searches/_Common/CryptoData.cs
@@ -18,6 +18,7 @@

     // [JsonPropertyName("volume_change_24h")]
     // public double VolumeChange24h { get; set; }
+    //
     //
     // [JsonPropertyName("percent_change_1h")]
     // public double PercentChange1h { get; set; }


[FIX] Integer and Float Property overflow

--- ArenaBuilder/Assets/Scripts/Arena/Deployable.cs
+++ ArenaBuilder/Assets/Scripts/Arena/Deployable.cs
@@ -273,7 +273,12 @@
                     for (int i = 0, n = _integerGameProperties.Count; i < n; i++)
                     {
                         GUI.Label(new Rect(0, ((offset + i)*45), 150, 30), _integerGameProperties[i].PropertyName, MasterGUISkin.label);
-                        _integerPropertiesValues[i] = Convert.ToInt32(GUI.TextField(new Rect(160, ((offset + i)*45), 210, 30), _integerPropertiesValues[i].ToString(CultureInfo.InvariantCulture), MasterGUISkin.textField));
+
+                        int value;
+                        if (int.TryParse(GUI.TextField(new Rect(160, ((offset + i)*45), 210, 30), _integerPropertiesValues[i].ToString(CultureInfo.InvariantCulture), MasterGUISkin.textField), out value))
+                        {
+                            _integerPropertiesValues[i] = value;
+                        }
                     }
                     offset += _integerGameProperties.Count;
                 }
@@ -284,7 +289,12 @@
                     for (int i = 0, n = _floatGameProperties.Count; i < n; i++)
                     {
                         GUI.Label(new Rect(0, ((offset + i)*45), 150, 30), _floatGameProperties[i].PropertyName, MasterGUISkin.label);
-                        _floatPropertiesValues[i] = Convert.ToSingle(GUI.TextField(new Rect(160, ((offset + i)*45), 210, 30), _floatPropertiesValues[i].ToString(CultureInfo.InvariantCulture), MasterGUISkin.textField));
+
+                        float value;
+                        if (float.TryParse(GUI.TextField(new Rect(160, ((offset + i)*45), 210, 30), _floatPropertiesValues[i].ToString(CultureInfo.InvariantCulture), MasterGUISkin.textField), out value))
+                        {
+                            _floatPropertiesValues[i] = value;
+                        }
                     }
                     offset += _floatGameProperties.Count;
                 }


Change debug reset buttons to key up

Change debug reset buttons to key up

Prevents multiple restarts by holding key down

--- Assets/Scripts/Microgame/MicrogameController.cs
+++ Assets/Scripts/Microgame/MicrogameController.cs
@@ -249,14 +249,14 @@
 	{
 		if (StageController.instance == null)
 		{
-			if (Input.GetKeyDown(KeyCode.R))
+			if (Input.GetKeyUp(KeyCode.R))
 				SceneManager.LoadScene(gameObject.scene.buildIndex);
-			else if (Input.GetKey(KeyCode.F))
+			else if (Input.GetKeyUp(KeyCode.F))
 			{
 				preserveDebugSpeed = Mathf.Min(debugSettings.speed + 1, StageController.MAX_SPEED);
 				SceneManager.LoadScene(gameObject.scene.buildIndex);
 			}
-			else if (Input.GetKey(KeyCode.N))
+			else if (Input.GetKeyUp(KeyCode.N))
 			{
 				string sceneName = SceneManager.GetActiveScene().name;
 				char[] sceneChars = sceneName.ToCharArray();


Small change to kick build.

Small change to kick build.

--- AutoDI.Fody.Tests/ContainerDependenciesTests.cs
+++ AutoDI.Fody.Tests/ContainerDependenciesTests.cs
@@ -56,7 +56,7 @@

         private static void SomeLambda(Action<int> doStuff)
         {
-
+            if (doStuff == null) throw new ArgumentNullException(nameof(doStuff));
         }
     }


Fixed a couple of invalid mesh buffer accesses in MeshReduction.

--- BepuPhysics/CollisionDetection/MeshReduction.cs
+++ BepuPhysics/CollisionDetection/MeshReduction.cs
@@ -400,7 +400,7 @@
                 for (int i = 0; i < count; ++i)
                 {
                     var childIndex = children[i].ChildIndexB;
-                    testTriangles.AddUnsafely(childIndex, new TestTriangle(mesh->Triangles[childIndex], i));
+                    testTriangles.AddUnsafely(childIndex, new TestTriangle(triangles[i], i));
                 }
                 for (int i = 0; i < count; ++i)
                 {
@@ -421,11 +421,17 @@
                         for (int j = 0; j < enumerator.List.Count; ++j)
                         {
                             var triangleIndexInMesh = enumerator.List[j];
-                            if (!testTriangles.FindOrAllocateSlotUnsafely(triangleIndexInMesh, out var testTriangleIndex))
+                            if (!testTriangles.FindOrAllocateSlotUnsafely(triangleIndexInMesh, out var triangleIndex))
                             {
-                                testTriangles.Values[testTriangleIndex] = new TestTriangle(mesh->Triangles[triangleIndexInMesh], testTriangleIndex);
+                                //Note that this does not try to do a direct lookup of the triangle data in the Mesh's triangles buffer!
+                                //That's invalid for two reasons:
+                                //1) in the long term, the mesh type will be abstracted away, and we might be dealing with a type that doesn't have a Triangles buffer at all.
+                                //2) the Mesh applies a scale to the stored triangles! That's why we have the continuation triangles explicitly stored rather than just looking them all up in the mesh-
+                                //the convex-triangle tests that preceded this reduction had to have somewhere they could load the 'baked' triangle data from.
+                                mesh->GetLocalChild(triangleIndexInMesh, out var triangle);
+                                testTriangles.Values[triangleIndex] = new TestTriangle(triangle, triangleIndex);
                             }
-                            ref var targetTriangle = ref testTriangles.Values[testTriangleIndex];
+                            ref var targetTriangle = ref testTriangles.Values[triangleIndex];

                             if (ShouldBlockNormal(targetTriangle, meshSpaceContact, meshSpaceNormal))
                             {


Creating an object.

Creating an object.

--- BillTender/Budget/ViewModels/BudgetViewModel.cs
+++ BillTender/Budget/ViewModels/BudgetViewModel.cs
@@ -50,14 +50,18 @@
                     {
                         if (BillEdited != null)
                         {
-                            var bill = new Bill();
+                            var bill = ParseObject.Create<Bill>();
                             bill.NextDue = DateTime.Today;
                             BillEditedEventArgs args = new BillEditedEventArgs
                             {
                                 Bill = bill,
                                 Completed = delegate
                                 {
-                                    _bills.OnSet();
+                                    Perform(async delegate
+                                    {
+                                        await bill.SaveAsync();
+                                        _bills.OnSet();
+                                    });
                                 }
                             };
                             BillEdited(this, args);


Bump modeller version to 1.6.0

Bump modeller version to 1.6.0

--- Blueprint41.Modeller/Properties/AssemblyInfo.cs
+++ Blueprint41.Modeller/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 // 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.0.0")]
-[assembly: AssemblyFileVersion("1.5.0.0")]
+[assembly: AssemblyVersion("1.6.0.0")]
+[assembly: AssemblyFileVersion("1.6.0.0")]


Create DrawArrayCmd in GLBuffer's static method is not needed.

--- CSharpGL/GLObjects/GLBuffers/GLBuffer.Create.cs
+++ CSharpGL/GLObjects/GLBuffers/GLBuffer.Create.cs
@@ -29,22 +29,6 @@

             var buffer = new VertexBuffer(
                  buffers[0], config, length, byteLength, instanceDivisor, patchVertexes);
-
-            return buffer;
-        }
-
-        /// <summary>
-        /// Creates a <see cref="DrawArraysCmd"/> object.
-        /// </summary>
-        /// <param name="mode"></param>
-        /// <param name="firstVertex"></param>
-        /// <param name="vertexCount"></param>
-        /// <param name="primCount"></param>
-        /// <param name="frameCount"></param>
-        /// <returns></returns>
-        public static DrawArraysCmd Create(DrawMode mode, int firstVertex, int vertexCount, int primCount = 1, int frameCount = 1)
-        {
-            DrawArraysCmd buffer = new DrawArraysCmd(mode, firstVertex, vertexCount, primCount, frameCount);

             return buffer;
         }


Minor tweak for bool?

Minor tweak for bool?

--- Castle.DynamicLinqQueryBuilder/ColumnBuilder.cs
+++ Castle.DynamicLinqQueryBuilder/ColumnBuilder.cs
@@ -48,7 +48,7 @@
                 {
                     type = "string";
                 }
-                else if ((prop.PropertyType == typeof(bool)))
+                else if ((prop.PropertyType == typeof(bool)) || (prop.PropertyType == typeof(bool?)))
                 {
                     type = "boolean";
                 }


unity5.3以前版本无SceneAsset bug 修复。

unity5.3以前版本无SceneAsset bug 修复。

--- Client/Assets/Hugula/Core/Editor/BuildScript.cs
+++ Client/Assets/Hugula/Core/Editor/BuildScript.cs
@@ -378,6 +378,9 @@

         if (s.name.Contains(" ")) Debug.LogWarning(s.name + " contains space");
         Debug.Log(import.assetBundleName);
+
+		bool isScene = abPath.EndsWith (".unity");
+
         if (s is GameObject)
         {
             GameObject tar = s as GameObject;
@@ -390,11 +393,10 @@
 					EditorUtility.SetDirty(s);
 				}
 			}
-
-        }
-        else if (s is SceneAsset) //如果是场景需要添加引用计数脚本
+        }
+		else if (isScene) //如果是场景需要添加引用计数脚本
         {//UnityEngine.SceneAsset
-            SceneAsset sce = s as SceneAsset;
+			var sce = s;// as SceneAsset;
             Debug.Log(sce);
             AssetDatabase.OpenAsset(sce);
             GameObject gobj = GameObject.Find(sce.name);
@@ -415,6 +417,7 @@
                 }
             }
         }
+
     }

     /// <summary>


XML comment formatting for DictionaryAssertions

--- Code/Light.GuardClauses/DictionaryAssertions.cs
+++ Code/Light.GuardClauses/DictionaryAssertions.cs
@@ -8,14 +8,12 @@
 namespace Light.GuardClauses
 {
     /// <summary>
-    ///     The DictionaryAssertions class contains extension methods providing assertions for
-    ///     <see cref="Dictionary{TKey,TValue}" /> instances.
+    ///     The DictionaryAssertions class contains extension methods providing assertions for <see cref="IDictionary{TKey,TValue}" /> instances.
     /// </summary>
     public static class DictionaryAssertions
     {
         /// <summary>
-        ///     Ensures that <paramref name="parameter" /> is a key of the specified <paramref name="dictionary" />, or otherwise
-        ///     throws an <see cref="ArgumentOutOfRangeException" />.
+        ///     Ensures that <paramref name="parameter" /> is a key of the specified <paramref name="dictionary" />, or otherwise throws an <see cref="ArgumentOutOfRangeException" />.
         /// </summary>
         /// <typeparam name="TKey">The type of the keys of the dictionary.</typeparam>
         /// <typeparam name="TValue">The type of the values of the dictionary.</typeparam>
@@ -26,13 +24,11 @@
         ///     The message that will be injected into the <see cref="ArgumentOutOfRangeException" /> (optional).
         /// </param>
         /// <param name="exception">
-        ///     The exception that is thrown when the specified <paramref name="parameter" /> is no key of
-        ///     <paramref name="dictionary" /> (optional). Please note that <paramref name="message" /> and
-        ///     <paramref name="parameterName" /> are both ignored when you specify exception.
+        ///     The exception that is thrown when the specified <paramref name="parameter" /> is no key of <paramref name="dictionary" /> (optional).
+        ///     Please note that <paramref name="message" /> and <paramref name="parameterName" /> are both ignored when you specify exception.
         /// </param>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     Thrown when <paramref name="parameter" /> is no key of
-        ///     <paramref name="dictionary" /> and no <paramref name="exception" /> is specified.
+        ///     Thrown when <paramref name="parameter" /> is no key of <paramref name="dictionary" /> and no <paramref name="exception" /> is specified.
         /// </exception>
         /// <exception cref="ArgumentNullException">Thrown when <paramref name="dictionary" /> is null.</exception>
         [Conditional(Check.CompileAssertionsSymbol)]
@@ -47,8 +43,7 @@
         }

         /// <summary>
-        ///     Ensures that <paramref name="parameter" /> is not a key of the specified <paramref name="dictionary" />, or
-        ///     otherwise throws a <see cref="ArgumentOutOfRangeException" />.
+        ///     Ensures that <paramref name="parameter" /> is not a key of the specified <paramref name="dictionary" />, or otherwise throws a <see cref="ArgumentOutOfRangeException" />.
         /// </summary>
         /// <typeparam name="TKey">The type of the keys of the dictionary.</typeparam>
         /// <typeparam name="TValue">The type of the values of the dictionary.</typeparam>
@@ -57,13 +52,11 @@
         /// <param name="parameterName">The name of the parameter (optional).</param>
         /// <param name="message">The message that will be injected into the <see cref="ArgumentOutOfRangeException" /> (optional).</param>
         /// <param name="exception">
-        ///     The exception that is thrown when the specified <paramref name="parameter" /> is a key of
-        ///     <paramref name="dictionary" /> (optional). Please note that <paramref name="message" /> and
-        ///     <paramref name="parameterName" /> are both ignored when you specify exception.
+        ///     The exception that is thrown when the specified <paramref name="parameter" /> is a key of <paramref name="dictionary" /> (optional).
+        ///     Please note that <paramref name="message" /> and <paramref name="parameterName" /> are both ignored when you specify exception.
         /// </param>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     Thrown when <paramref name="parameter" /> is a key of
-        ///     <paramref name="dictionary" /> and no <paramref name="exception" /> is specified.
+        ///     Thrown when <paramref name="parameter" /> is a key of <paramref name="dictionary" /> and no <paramref name="exception" /> is specified.
         /// </exception>
         /// <exception cref="ArgumentNullException">Thrown when <paramref name="dictionary" /> is null.</exception>
         [Conditional(Check.CompileAssertionsSymbol)]
@@ -76,8 +69,7 @@
         }

         /// <summary>
-        ///     Ensures that the dictionary contains the specified <paramref name="key" />, or otherwise throws a
-        ///     <see cref="KeyNotFoundException" />.
+        ///     Ensures that the dictionary contains the specified <paramref name="key" />, or otherwise throws a <see cref="KeyNotFoundException" />.
         /// </summary>
         /// <typeparam name="TKey">The type of the keys of the dictionary.</typeparam>
         /// <typeparam name="TValue">The type of the values of the dictionary.</typeparam>
@@ -85,21 +77,17 @@
         /// <param name="key">The key that should be part of the Keys collection of <paramref name="parameter" />.</param>
         /// <param name="parameterName">The name of the parameter (optional).</param>
         /// <param name="message">
-        ///     The message that will be injected into the <see cref="KeyNotFoundException" /> or
-        ///     <see cref="ArgumentNullException" /> (optional).
+        ///     The message that will be injected into the <see cref="KeyNotFoundException" /> or <see cref="ArgumentNullException" /> (optional).
         /// </param>
         /// <param name="exception">
-        ///     The exception that is thrown when the specified <paramref name="parameter" /> has does not have
-        ///     the specified key (optional). Please note that <paramref name="message" /> and <paramref name="parameterName" />
-        ///     are both ignored when you specify exception.
+        ///     The exception that is thrown when the specified <paramref name="parameter" /> has does not have the specified key (optional).
+        ///     Please note that <paramref name="message" /> and <paramref name="parameterName" /> are both ignored when you specify exception.
         /// </param>
         /// <exception cref="KeyNotFoundException">
-        ///     Thrown when <paramref name="parameter" /> does not contain the specified
-        ///     <paramref name="key" /> and no <paramref name="exception" /> is specified.
+        ///     Thrown when <paramref name="parameter" /> does not contain the specified <paramref name="key" /> and no <paramref name="exception" /> is specified.
         /// </exception>
         /// <exception cref="ArgumentNullException">
-        ///     Thrown when <paramref name="parameter" /> is null and no
-        ///     <paramref name="exception" /> is specified.
+        ///     Thrown when <paramref name="parameter" /> is null and no <paramref name="exception" /> is specified.
         /// </exception>
         [Conditional(Check.CompileAssertionsSymbol)]
         public static void MustHaveKey<TKey, TValue>(this IDictionary<TKey, TValue> parameter, TKey key, string parameterName = null, string message = null, Exception exception = null)
@@ -111,8 +99,7 @@
         }

         /// <summary>
-        ///     Ensures that the dictionary does not contain the specified <paramref name="key" />, or otherwise throws a
-        ///     <see cref="DictionaryException" />.
+        ///     Ensures that the dictionary does not contain the specified <paramref name="key" />, or otherwise throws a <see cref="DictionaryException" />.
         /// </summary>
         /// <typeparam name="TKey">The type of the keys of the dictionary.</typeparam>
         /// <typeparam name="TValue">The type of the values of the dictionary.</typeparam>
@@ -120,21 +107,17 @@
         /// <param name="key">The key that must not be part of the dictionary.</param>
         /// <param name="parameterName">The name of the parameter (optional).</param>
         /// <param name="message">
-        ///     The message that will be injected into the <see cref="DictionaryException" /> or
-        ///     <see cref="ArgumentNullException" /> (optional).
+        ///     The message that will be injected into the <see cref="DictionaryException" /> or <see cref="ArgumentNullException" /> (optional).
         /// </param>
         /// <param name="exception">
-        ///     The exception that is thrown when the specified <paramref name="parameter" /> has contains the
-        ///     specified key (optional). Please note that <paramref name="message" /> and <paramref name="parameterName" /> are
-        ///     both ignored when you specify exception.
+        ///     The exception that is thrown when the specified <paramref name="parameter" /> has contains the specified key (optional).
+        ///     Please note that <paramref name="message" /> and <paramref name="parameterName" /> are both ignored when you specify exception.
         /// </param>
         /// <exception cref="DictionaryException">
-        ///     Thrown when <paramref name="parameter" /> contains <paramref name="key" /> and no
-        ///     <paramref name="exception" /> is specified.
+        ///     Thrown when <paramref name="parameter" /> contains <paramref name="key" /> and no <paramref name="exception" /> is specified.
         /// </exception>
         /// <exception cref="ArgumentNullException">
-        ///     Thrown when <paramref name="parameter" /> is null and no
-        ///     <paramref name="exception" /> is specified.
+        ///     Thrown when <paramref name="parameter" /> is null and no <paramref name="exception" /> is specified.
         /// </exception>
         [Conditional(Check.CompileAssertionsSymbol)]
         public static void MustNotHaveKey<TKey, TValue>(this IDictionary<TKey, TValue> parameter, TKey key, string parameterName = null, string message = null, Exception exception = null)


Add version info to the footer of the page

--- CodeConverterWebApp/Views/Shared/_Layout.cshtml
+++ CodeConverterWebApp/Views/Shared/_Layout.cshtml
@@ -1,10 +1,12 @@
-<!DOCTYPE html>
+@using System.Diagnostics
+@using System.Reflection
+<!DOCTYPE html>

     <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>@ViewData["Title"] - Code Converter by Refactoring Essentials</title>
-    <link rel="stylesheet" href="~/Content/bootstrap.min.css"/>
+    <link rel="stylesheet" href="~/Content/bootstrap.min.css" />
     <link rel="stylesheet" href="~/Content/site.css" />

@@ -30,14 +32,25 @@

         @RenderBody()

-
-
© 2015-@DateTime.Now.Year - Code Converter by Refactoring Essentials

-
-

+        @{
+            var versionInfo = HttpContext.Current.Cache["AssemblyVersionInformation"];
+            if (null == versionInfo)
+            {
+                Assembly assembly = Assembly.GetAssembly(typeof(RefactoringEssentials.Converter.CodeConverter));
+                FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);

-
-
+                versionInfo = fvi.FileVersion;
+                HttpContext.Current.Cache["AssemblyVersionInformation"] = versionInfo;
+            }
+
+
© 2015-@DateTime.Now.Year - Code Converter by Refactoring Essentials; Version @versionInfo

+
+        }
+

-    @RenderSection("scripts", required: false)
-
+
+
+
+        @RenderSection("scripts", required: false)
+


Refactor "userDefinedDic" to "userDefinedDictionary"

--- examples/IBM.Watson.Assistant.v2.Examples/ServiceExample.cs
+++ examples/IBM.Watson.Assistant.v2.Examples/ServiceExample.cs
@@ -112,10 +112,10 @@

             MessageContextSkills skills = new MessageContextSkills();
             MessageContextSkill skill = new MessageContextSkill();
-            Dictionary<string, object> userDefinedDic = new Dictionary<string, object>();
+            Dictionary<string, object> userDefinedDictionary = new Dictionary<string, object>();

-            userDefinedDic.Add("account_number", "123456");
-            skill.UserDefined = userDefinedDic;
+            userDefinedDictionary.Add("account_number", "123456");
+            skill.UserDefined = userDefinedDictionary;
             skills.Add("main skill", skill);

             var result = service.Message(


Form string changes

Form string changes

--- ColourDetector/ColourDetector/Form1.Designer.cs
+++ ColourDetector/ColourDetector/Form1.Designer.cs
@@ -209,18 +209,18 @@
             this.label9.AutoSize = true;
             this.label9.Location = new System.Drawing.Point(6, 16);
             this.label9.Name = "label9";
-            this.label9.Size = new System.Drawing.Size(55, 13);
+            this.label9.Size = new System.Drawing.Size(58, 13);
             this.label9.TabIndex = 18;
-            this.label9.Text = "Saturation";
+            this.label9.Text = "Saturation:";
             //
             // label10
             //
             this.label10.AutoSize = true;
             this.label10.Location = new System.Drawing.Point(6, 42);
             this.label10.Name = "label10";
-            this.label10.Size = new System.Drawing.Size(27, 13);
+            this.label10.Size = new System.Drawing.Size(30, 13);
             this.label10.TabIndex = 20;
-            this.label10.Text = "Hue";
+            this.label10.Text = "Hue:";
             //
             // textBox10
             //
@@ -234,9 +234,9 @@
             this.label11.AutoSize = true;
             this.label11.Location = new System.Drawing.Point(6, 68);
             this.label11.Name = "label11";
-            this.label11.Size = new System.Drawing.Size(56, 13);
+            this.label11.Size = new System.Drawing.Size(59, 13);
             this.label11.TabIndex = 22;
-            this.label11.Text = "Brightness";
+            this.label11.Text = "Brightness:";
             //
             // textBox11
             //


Add PivotConditions option

Add PivotConditions option

--- ComputerAlgebra/Extensions/SystemOfEquations.cs
+++ ComputerAlgebra/Extensions/SystemOfEquations.cs
@@ -118,7 +118,7 @@
         public void AddRange(IEnumerable<IEnumerable<KeyValuePair<Expression, Expression>>> Eqs) { equations.AddRange(Eqs.Select(i => new Equation(i))); }

         // Find the best pivot in column j.
-        private KeyValuePair<int, Real> PartialPivot(int i1, int i2, Expression j)
+        private KeyValuePair<int, Real> PartialPivot(int i1, int i2, Expression j, IEnumerable<Arrow> PivotConditions)
         {
             int row = -1;
             Real max = -1;
@@ -131,11 +131,16 @@
                     if (row == -1)
                         row = i;

-                    // Select the larger pivot if this is a constant.
-                    if (ij is Constant && Real.Abs((Real)ij) > max)
+                    // Select the larger pivot if this is a constant, using the PivotConditions.
+                    Expression ijc;
+                    if (ij is Constant || PivotConditions is null)
+                        ijc = ij;
+                    else
+                        ijc = ij.Evaluate(PivotConditions);
+                    if (ijc is Constant && Real.Abs((Real)ijc) > max)
                     {
                         row = i;
-                        max = Real.Abs((Real)ij);
+                        max = Real.Abs((Real)ijc);
                     }
                 }
             }
@@ -144,7 +149,7 @@
         }

         // Find the best pivot from all of the columns. This is important to avoid non-constant terms from blowing up the system.
-        private KeyValuePair<int, int> FullPivot(int i1, int i2, int j1, IList<Expression> Columns)
+        private KeyValuePair<int, int> FullPivot(int i1, int i2, int j1, IList<Expression> Columns, IEnumerable<Arrow> PivotConditions)
         {
             int row = -1;
             Real max = -2;
@@ -152,7 +157,7 @@
             int elims = i2 - i1 + 1;
             for (int j = j1; j < Columns.Count; ++j)
             {
-                KeyValuePair<int, Real> partial = PartialPivot(i1, i2, Columns[j]);
+                KeyValuePair<int, Real> partial = PartialPivot(i1, i2, Columns[j], PivotConditions);
                 if (partial.Key == -1)
                     continue;

@@ -175,12 +180,12 @@
         }

         // Find the best pivot using full or partial pivoting.
-        private KeyValuePair<int, int> Pivot(int i1, int i2, int j, IList<Expression> Columns, bool FullPivoting)
+        private KeyValuePair<int, int> Pivot(int i1, int i2, int j, IList<Expression> Columns, bool FullPivoting, IEnumerable<Arrow> PivotConditions)
         {
             if (FullPivoting)
-                return FullPivot(i1, i2, j, Columns);
+                return FullPivot(i1, i2, j, Columns, PivotConditions);
             else
-                return new KeyValuePair<int, int>(PartialPivot(i1, i2, Columns[j]).Key, j);
+                return new KeyValuePair<int, int>(PartialPivot(i1, i2, Columns[j], PivotConditions).Key, j);
         }

         // Swap rows i1 and i2.
@@ -216,13 +221,13 @@
             T[p] = 0;
         }

-        private void RowReduce(int i1, IList<Expression> Columns, bool FullPivoting)
+        private void RowReduce(int i1, IList<Expression> Columns, bool FullPivoting, IEnumerable<Arrow> PivotConditions)
         {
             List<Expression> elim = unknowns.Append(1).ToList();
             for (int i2 = equations.Count, _j = 0; _j < Columns.Count; ++_j)
             {
                 // Find the best pivot to use.
-                KeyValuePair<int, int> pivot = Pivot(i1, i2, _j, Columns, FullPivoting);
+                KeyValuePair<int, int> pivot = Pivot(i1, i2, _j, Columns, FullPivoting, PivotConditions);
                 if (pivot.Key != -1)
                 {
                     // Found a pivot, swap the rows and eliminate the remaining rows.
@@ -244,17 +249,28 @@
         /// <summary>
         /// Row reduce the system in terms of the given columns with partial pivoting.
         /// </summary>
-        /// <param name="Columns"></param>
-        public void RowReduce(IEnumerable<Expression> Columns) { RowReduce(0, Columns.AsList(), false); }
+        /// <param name="Columns">Columns to perform row reduction on.</param>
+        /// <param name="PivotConditions">Substitutions to use when considering an element as a pivot.</param>
+        public void RowReduce(IEnumerable<Expression> Columns, IEnumerable<Arrow> PivotConditions = null)
+        {
+            RowReduce(0, Columns.AsList(), false, PivotConditions);
+        }
+
         /// <summary>
         /// Row reduce the system in terms of the given columns with full pivoting. The Columns will be reordered according to a full pivot solution.
         /// </summary>
-        /// <param name="Columns"></param>
-        public void RowReduce(IList<Expression> Columns) { RowReduce(0, Columns, true); }
+        /// <param name="Columns">Columns to perform row reduction on.</param>
+        /// <param name="PivotConditions">Substitutions to use when considering an element as a pivot.</param>
+        public void RowReduce(IList<Expression> Columns, IEnumerable<Arrow> PivotConditions = null)
+        {
+            RowReduce(0, Columns, true, PivotConditions);
+        }
+
         /// <summary>
         /// Row reduce the system. The unknowns will be reorderd to reflect the full pivot solution.
         /// </summary>
-        public void RowReduce() { RowReduce(unknowns); }
+        /// <param name="PivotConditions">Substitutions to use when considering an element as a pivot.</param>
+        public void RowReduce(IEnumerable<Arrow> PivotConditions = null) { RowReduce(unknowns, PivotConditions); }

         private void BackSubstitute(IList<Expression> x)
         {


InMemoryMessageAdapterProvider. Skip failed adapters.

--- Configuration/InMemoryMessageAdapterProvider.cs
+++ Configuration/InMemoryMessageAdapterProvider.cs
@@ -27,7 +27,18 @@
 			CurrentAdapters = currentAdapters ?? throw new ArgumentNullException(nameof(currentAdapters));

 			var idGenerator = new IncrementalIdGenerator();
-			PossibleAdapters = GetAdapters().Select(t => t.CreateAdapter(idGenerator)).ToArray();
+			PossibleAdapters = GetAdapters().Select(t =>
+			{
+				try
+				{
+					return t.CreateAdapter(idGenerator);
+				}
+				catch (Exception ex)
+				{
+					ex.LogError();
+					return null;
+				}
+			}).Where(a => a != null).ToArray();
 		}

 		/// <inheritdoc />


Remove PilotComponent when someone stop piloting (#4922)

--- Content.Server/Shuttles/ShuttleConsoleSystem.cs
+++ Content.Server/Shuttles/ShuttleConsoleSystem.cs
@@ -8,6 +8,7 @@
 using Content.Shared.Shuttles;
 using Content.Shared.Tag;
 using Robust.Shared.GameObjects;
+using Robust.Shared.IoC;
 using Robust.Shared.Localization;
 using Robust.Shared.Utility;

@@ -15,6 +16,8 @@
 {
     internal sealed class ShuttleConsoleSystem : SharedShuttleConsoleSystem
     {
+        [Dependency] private readonly ActionBlockerSystem _blocker = default!;
+
         public override void Initialize()
         {
             base.Initialize();
@@ -28,14 +31,22 @@
         public override void Update(float frameTime)
         {
             base.Update(frameTime);
-            foreach (var comp in EntityManager.EntityQuery<PilotComponent>().ToArray())
+
+            var toRemove = new RemQueue<PilotComponent>();
+
+            foreach (var comp in EntityManager.EntityQuery<PilotComponent>())
             {
                 if (comp.Console == null) continue;

-                if (!Get<ActionBlockerSystem>().CanInteract(comp.Owner))
+                if (!_blocker.CanInteract(comp.Owner))
                 {
-                    RemovePilot(comp);
+                    toRemove.Add(comp);
                 }
+            }
+
+            foreach (var comp in toRemove)
+            {
+                RemovePilot(comp);
             }
         }

@@ -75,7 +86,7 @@
                 return;
             }

-            var pilotComponent = args.User.EnsureComponent<PilotComponent>();
+            var pilotComponent = EntityManager.EnsureComponent<PilotComponent>(args.User.Uid);

             if (!component.Enabled)
             {
@@ -111,7 +122,7 @@

         public void AddPilot(IEntity entity, ShuttleConsoleComponent component)
         {
-            if (!Get<ActionBlockerSystem>().CanInteract(entity) ||
+            if (!_blocker.CanInteract(entity) ||
                 !entity.TryGetComponent(out PilotComponent? pilotComponent) ||
                 component.SubscribedPilots.Contains(pilotComponent))
             {
@@ -146,10 +157,7 @@
             }

             pilotComponent.Owner.PopupMessage(Loc.GetString("shuttle-pilot-end"));
-            // TODO: RemoveComponent<T> is cooked and doesn't sync to client so this fucks up movement prediction.
-            // EntityManager.RemoveComponent<PilotComponent>(pilotComponent.Owner.Uid);
-            pilotComponent.Console = null;
-            pilotComponent.Dirty();
+            EntityManager.RemoveComponent<PilotComponent>(pilotComponent.Owner.Uid);
         }

         public void RemovePilot(IEntity entity)


K050 fixed. that wasn't an error. Signed-off-by: Joey Bronner <joeybronner@gmail.com>

K050 fixed. that wasn't an error.
Signed-off-by: Joey Bronner <f5c7874bb363af3bfb763ba835b2e95a9eea4880@gmail.com>

--- CsharpNunitKoans/K050_AboutControlStatements.cs
+++ CsharpNunitKoans/K050_AboutControlStatements.cs
@@ -14,7 +14,7 @@
 			if (true) {
 				b = true;
 			} else {
-				b = false;
+				b = false;
 			}

 			Assert.AreEqual (true, b, "To b or not to b -- that really is the answer...");


Remove hash code truncation

Remove hash code truncation

--- DataConverters3D/Object3D/Object3DExtensions.cs
+++ DataConverters3D/Object3D/Object3DExtensions.cs
@@ -225,7 +225,7 @@

 			Directory.CreateDirectory(Object3D.AssetsPath);

-			var assetFiles = new Dictionary<int, string>();
+			var assetFiles = new Dictionary<long, string>();

 			try
 			{
@@ -244,7 +244,7 @@
 					}

 					// Calculate the fast mesh hash
-					int hashCode = (int)item.Mesh.GetLongHashCode();
+					var hashCode = item.Mesh.GetLongHashCode();

 					// Index into dictionary using fast hash
 					if (!assetFiles.TryGetValue(hashCode, out string assetPath))


better errors

better errors

--- Migr8/Internals/DatabaseMigratorCore.cs
+++ Migr8/Internals/DatabaseMigratorCore.cs
@@ -145,7 +145,14 @@
             {
                 _writer.Verbose($"Executing statement: {sqlStatement}");

-                connection.ExecuteStatement(sqlStatement);
+                try
+                {
+                    connection.ExecuteStatement(sqlStatement);
+                }
+                catch (Exception exception)
+                {
+                    throw new MigrationException($"Error executing SQL statement: '{sqlStatement}'", exception);
+                }
             }

             _writer.Info($"Migration {id} executed");


Removed optional cancellation token

Removed optional cancellation token

--- src/FluentSpotifyApi.AuthorizationFlows/AuthorizationCode/Native/AuthenticationTicketProvider.cs
+++ src/FluentSpotifyApi.AuthorizationFlows/AuthorizationCode/Native/AuthenticationTicketProvider.cs
@@ -108,7 +108,7 @@
                 cancellationToken);
         }

-        public Task RestoreSessionAsync(CancellationToken cancellationToken = default(CancellationToken))
+        public Task RestoreSessionAsync(CancellationToken cancellationToken)
         {
             return this.semaphore.ExecuteAsync(
                 async innerCt =>
@@ -124,7 +124,7 @@
                 cancellationToken);
         }

-        public Task<SessionState> GetSessionStateAsync(CancellationToken cancellationToken = default(CancellationToken))
+        public Task<SessionState> GetSessionStateAsync(CancellationToken cancellationToken)
         {
             return this.semaphore.ExecuteAsync(
                 async innerCt =>


changed temp folder for attachmetn job.

changed temp folder for attachmetn job.

--- src/Jarvis.DocumentStore.Jobs/Jarvis.DocumentStore.Jobs.Attachments/AttachmentOutOfProcessJob.cs
+++ src/Jarvis.DocumentStore.Jobs/Jarvis.DocumentStore.Jobs.Attachments/AttachmentOutOfProcessJob.cs
@@ -29,7 +29,8 @@
                  workingFolder);

             var extension = Path.GetExtension(localFile);
-             var unzippingDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
+            var unzippingDirectory = Path.Combine(workingFolder, Guid.NewGuid().ToString());
+            if (!Directory.Exists(unzippingDirectory)) Directory.CreateDirectory(unzippingDirectory);
             if (extension == ".zip")
             {
                 //we can handle unzipping everything.
@@ -52,7 +53,6 @@
             if (extension == ".eml" || extension == ".msg")
             {
                 var reader = new Reader();
-                if (!Directory.Exists(unzippingDirectory)) Directory.CreateDirectory(unzippingDirectory);
                 reader.ExtractToFolder(localFile, unzippingDirectory);

                 foreach (string file in Directory.EnumerateFiles(unzippingDirectory, "*.*", SearchOption.AllDirectories))