diff --git a/.editorconfig b/.editorconfig
index 5a35b71ce6..29ad74b4d6 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -25,16 +25,22 @@ dotnet_naming_rule.private_members_with_underscore.severity = suggestion
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
+# dotnet_naming_symbols.private_fields.required_modifiers = abstract,async,readonly,static # all except const
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
+
+
+
+
+
# https://github.com/MicrosoftDocs/visualstudio-docs/blob/master/docs/ide/editorconfig-code-style-settings-reference.md
[*.cs]
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
-csharp_prefer_braces = false : none
+csharp_prefer_braces = false : none
-[*.{js,less}]
-trim_trailing_whitespace = false
+[*.{js,less}]
+trim_trailing_whitespace = false
diff --git a/.gitattributes b/.gitattributes
index a664be3a85..c8987ade67 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -13,7 +13,7 @@
*.png binary
*.gif binary
-*.cs text=auto diff=csharp
+*.cs text=auto diff=csharp
*.vb text=auto
*.c text=auto
*.cpp text=auto
@@ -41,9 +41,13 @@
*.fs text=auto
*.fsx text=auto
*.hs text=auto
+*.json text=auto
+*.xml text=auto
-*.csproj text=auto merge=union
-*.vbproj text=auto merge=union
-*.fsproj text=auto merge=union
-*.dbproj text=auto merge=union
-*.sln text=auto eol=crlf merge=union
+*.csproj text=auto merge=union
+*.vbproj text=auto merge=union
+*.fsproj text=auto merge=union
+*.dbproj text=auto merge=union
+*.sln text=auto eol=crlf merge=union
+
+*.gitattributes text=auto
diff --git a/.github/BUILD.md b/.github/BUILD.md
index c6e870f396..ad33872423 100644
--- a/.github/BUILD.md
+++ b/.github/BUILD.md
@@ -43,6 +43,8 @@ If you only see a build.bat-file, you're probably on the wrong branch. If you sw
You might run into [Powershell quirks](#powershell-quirks).
+If it runs without errors; Hooray! Now you can continue with [the next step](CONTRIBUTING.md#how-do-i-begin) and open the solution and build it.
+
### Build Infrastructure
The Umbraco Build infrastructure relies on a PowerShell object. The object can be retrieved with:
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index e009ee2294..0101ac9d16 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -28,7 +28,7 @@ This project and everyone participating in it, is governed by the [our Code of C
[Working with the code](#working-with-the-code)
* [Building Umbraco from source code](#building-umbraco-from-source-code)
* [Working with the source code](#working-with-the-source-code)
- * [Making changes after the PR was opened](#making-changes-after-the-pr-was-opened)
+ * [Making changes after the PR is open](#making-changes-after-the-pr-is-open)
* [Which branch should I target for my contributions?](#which-branch-should-i-target-for-my-contributions)
* [Keeping your Umbraco fork in sync with the main repository](#keeping-your-umbraco-fork-in-sync-with-the-main-repository)
@@ -60,12 +60,12 @@ Great question! The short version goes like this:

- * **Switch to the correct branch** - switch to the v8-dev branch
+ * **Switch to the correct branch** - switch to the `v8/contrib` branch
* **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](BUILD.md)
* **Change** - make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](#questions)
- * **Commit** - done? Yay! 🎉 **Important:** create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `12345`. When you have a branch, commit your changes. Don't commit to `v8/dev`, create a new branch first.
+ * **Commit** - done? Yay! 🎉 **Important:** create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `12345`. When you have a branch, commit your changes. Don't commit to `v8/contrib`, create a new branch first.
* **Push** - great, now you can push the changes up to your fork on GitHub
- * **Create pull request** - exciting! You're ready to show us your changes (or not quite ready, you just need some feedback to progress - you can now make use of GitHub's draft pull request status, detailed [here] (https://github.blog/2019-02-14-introducing-draft-pull-requests/)). GitHub has picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go.
+ * **Create pull request** - exciting! You're ready to show us your changes (or not quite ready, you just need some feedback to progress - you can now make use of GitHub's draft pull request status, detailed [here](https://github.blog/2019-02-14-introducing-draft-pull-requests/)). GitHub has picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go.

@@ -158,7 +158,7 @@ To find the general areas for something you're looking to fix or improve, have a
### Which branch should I target for my contributions?
-We like to use [Gitflow as much as possible](https://jeffkreeftmeijer.com/git-flow/), but don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to something, usually `v8/dev`. If you are working on v8, this is the branch you should be targetting. For v7 contributions, please target 'v7/dev'.
+We like to use [Gitflow as much as possible](https://jeffkreeftmeijer.com/git-flow/), but don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to something, usually `v8/contrib`. If you are working on v8, this is the branch you should be targetting. For v7 contributions, please target 'v7/dev'.
Please note: we are no longer accepting features for v7 but will continue to merge bug fixes as and when they arise.
@@ -184,10 +184,10 @@ Then when you want to get the changes from the main repository:
```
git fetch upstream
-git rebase upstream/v8/dev
+git rebase upstream/v8/contrib
```
-In this command we're syncing with the `v8/dev` branch, but you can of course choose another one if needed.
+In this command we're syncing with the `v8/contrib` branch, but you can of course choose another one if needed.
(More info on how this works: [http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated](http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated))
diff --git a/.github/README.md b/.github/README.md
index d6d978c3d6..467ca6e5e6 100644
--- a/.github/README.md
+++ b/.github/README.md
@@ -1,4 +1,4 @@
-# [Umbraco CMS](https://umbraco.com) · [](../LICENSE.md) [](https://umbraco.visualstudio.com/Umbraco%20Cms/_build?definitionId=75) [](CONTRIBUTING.md) [](https://twitter.com/intent/follow?screen_name=umbraco)
+# [Umbraco CMS](https://umbraco.com) · [](../LICENSE.md) [](https://umbraco.visualstudio.com/Umbraco%20Cms/_build?definitionId=75) [](CONTRIBUTING.md) [](https://twitter.com/intent/follow?screen_name=umbraco)
Umbraco is the friendliest, most flexible and fastest growing ASP.NET CMS, and used by more than 500,000 websites worldwide. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social.
diff --git a/.github/img/defaultbranch.png b/.github/img/defaultbranch.png
index f3a5b9efbc..3550b5c34c 100644
Binary files a/.github/img/defaultbranch.png and b/.github/img/defaultbranch.png differ
diff --git a/.gitignore b/.gitignore
index a0ff4d5b27..12ad3299ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,6 +55,7 @@ App_Data/TEMP/*
src/Umbraco.Web.UI/[Cc]ss/*
src/Umbraco.Web.UI/App_Code/*
src/Umbraco.Web.UI/App_Data/*
+src/Umbraco.Web.UI/data/*
src/Umbraco.Tests/App_Data/*
src/Umbraco.Web.UI/[Mm]edia/*
src/Umbraco.Web.UI/[Mm]aster[Pp]ages/*
diff --git a/NuGet.Config b/NuGet.Config
index 7d786702f4..64425091dc 100644
--- a/NuGet.Config
+++ b/NuGet.Config
@@ -7,6 +7,6 @@
-->
-
+
diff --git a/build/NuSpecs/UmbracoCms.Web.nuspec b/build/NuSpecs/UmbracoCms.Web.nuspec
index 658d2f0672..7199f414b1 100644
--- a/build/NuSpecs/UmbracoCms.Web.nuspec
+++ b/build/NuSpecs/UmbracoCms.Web.nuspec
@@ -27,8 +27,7 @@
-
-
+
diff --git a/build/NuSpecs/tools/serilog.config.install.xdt b/build/NuSpecs/tools/serilog.config.install.xdt
index e0df2985c7..b4a10b7bc2 100644
--- a/build/NuSpecs/tools/serilog.config.install.xdt
+++ b/build/NuSpecs/tools/serilog.config.install.xdt
@@ -2,7 +2,7 @@
>
-
+
diff --git a/build/build-bootstrap.ps1 b/build/build-bootstrap.ps1
index 71a25bfd7e..82c789ff22 100644
--- a/build/build-bootstrap.ps1
+++ b/build/build-bootstrap.ps1
@@ -22,6 +22,8 @@
# get NuGet
$cache = 4
$nuget = "$scriptTemp\nuget.exe"
+ # ensure the correct NuGet-source is used. This one is used by Umbraco
+ $nugetsourceUmbraco = "https://www.myget.org/F/umbracocore/api/v3/index.json"
if (-not $local)
{
$source = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
@@ -61,7 +63,7 @@
# get the build system
if (-not $local)
{
- $params = "-OutputDirectory", $scriptTemp, "-Verbosity", "quiet", "-PreRelease"
+ $params = "-OutputDirectory", $scriptTemp, "-Verbosity", "quiet", "-PreRelease", "-Source", $nugetsourceUmbraco
&$nuget install Umbraco.Build @params
if (-not $?) { throw "Failed to download Umbraco.Build." }
}
diff --git a/build/build.ps1 b/build/build.ps1
index ea07e4516f..6e124d1508 100644
--- a/build/build.ps1
+++ b/build/build.ps1
@@ -375,11 +375,14 @@
})
+ $nugetsourceUmbraco = "https://api.nuget.org/v3/index.json"
+
$ubuild.DefineMethod("RestoreNuGet",
{
Write-Host "Restore NuGet"
Write-Host "Logging to $($this.BuildTemp)\nuget.restore.log"
- &$this.BuildEnv.NuGet restore "$($this.SolutionRoot)\src\Umbraco.sln" > "$($this.BuildTemp)\nuget.restore.log"
+ $params = "-Source", $nugetsourceUmbraco
+ &$this.BuildEnv.NuGet restore "$($this.SolutionRoot)\src\Umbraco.sln" > "$($this.BuildTemp)\nuget.restore.log" @params
if (-not $?) { throw "Failed to restore NuGet packages." }
})
diff --git a/src/SolutionInfo.cs b/src/SolutionInfo.cs
index a9f5dcf352..4c2d72fb8c 100644
--- a/src/SolutionInfo.cs
+++ b/src/SolutionInfo.cs
@@ -2,7 +2,7 @@
using System.Resources;
[assembly: AssemblyCompany("Umbraco")]
-[assembly: AssemblyCopyright("Copyright © Umbraco 2019")]
+[assembly: AssemblyCopyright("Copyright © Umbraco 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
diff --git a/src/Umbraco.Abstractions/Cache/JsonCacheRefresherBase.cs b/src/Umbraco.Abstractions/Cache/JsonCacheRefresherBase.cs
deleted file mode 100644
index d9d9644a36..0000000000
--- a/src/Umbraco.Abstractions/Cache/JsonCacheRefresherBase.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using Umbraco.Core.Sync;
-
-namespace Umbraco.Core.Cache
-{
- ///
- /// A base class for "json" cache refreshers.
- ///
- /// The actual cache refresher type.
- /// The actual cache refresher type is used for strongly typed events.
- public abstract class JsonCacheRefresherBase : CacheRefresherBase, IJsonCacheRefresher
- where TInstanceType : class, ICacheRefresher
- {
- ///
- /// Initializes a new instance of the .
- ///
- /// A cache helper.
- protected JsonCacheRefresherBase(AppCaches appCaches) : base(appCaches)
- { }
-
- ///
- /// Refreshes as specified by a json payload.
- ///
- /// The json payload.
- public virtual void Refresh(string json)
- {
- OnCacheUpdated(This, new CacheRefresherEventArgs(json, MessageType.RefreshByJson));
- }
- }
-}
diff --git a/src/Umbraco.Abstractions/Composing/Current.cs b/src/Umbraco.Abstractions/Composing/Current.cs
deleted file mode 100644
index f99a32a585..0000000000
--- a/src/Umbraco.Abstractions/Composing/Current.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Umbraco.Core.Logging;
-
-namespace Umbraco.Composing
-{
- public static class Current
- {
-
- public static ILogger Logger { get; set; } = new NullLogger();
- }
-}
diff --git a/src/Umbraco.Abstractions/CompositionExtensions.cs b/src/Umbraco.Abstractions/CompositionExtensions.cs
deleted file mode 100644
index c65cff50d6..0000000000
--- a/src/Umbraco.Abstractions/CompositionExtensions.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Umbraco.Core.Composing;
-
-namespace Umbraco.Core
-{
- public static partial class CompositionExtensions
- {
-
- #region Collection Builders
-
- ///
- /// Gets the components collection builder.
- ///
- public static ComponentCollectionBuilder Components(this Composition composition)
- => composition.WithCollectionBuilder();
-
- #endregion
- }
-}
diff --git a/src/Umbraco.Abstractions/Configuration/Configs.cs b/src/Umbraco.Abstractions/Configuration/Configs.cs
deleted file mode 100644
index abb06d525f..0000000000
--- a/src/Umbraco.Abstractions/Configuration/Configs.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Umbraco.Core.Composing;
-
-namespace Umbraco.Core.Configuration
-{
- ///
- /// Represents Umbraco configurations.
- ///
- ///
- /// During composition, use composition.Configs. When running, either inject the required configuration,
- /// or use Current.Configs.
- ///
- public class Configs
- {
- private readonly Func _configSectionResolver;
-
- public Configs(Func configSectionResolver)
- {
- _configSectionResolver = configSectionResolver ?? throw new ArgumentNullException(nameof(configSectionResolver));
- }
-
- private readonly Dictionary> _configs = new Dictionary>();
- private Dictionary> _registerings = new Dictionary>();
- private Lazy _factory;
-
- ///
- /// Gets a configuration.
- ///
- public TConfig GetConfig()
- where TConfig : class
- {
- if (!_configs.TryGetValue(typeof(TConfig), out var configFactory))
- throw new InvalidOperationException($"No configuration of type {typeof(TConfig)} has been added.");
-
- return (TConfig) configFactory.Value;
- }
-
- ///
- /// Adds a configuration, provided by a factory.
- ///
- public void Add(Func configFactory)
- where TConfig : class
- {
- // make sure it is not too late
- if (_registerings == null)
- throw new InvalidOperationException("Configurations have already been registered.");
-
- var typeOfConfig = typeof(TConfig);
-
- var lazyConfigFactory = _configs[typeOfConfig] = new Lazy