diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 9f6f4dafd6..a6d9488d3b 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -336,48 +336,56 @@ namespace Umbraco.Core.Services ? (from doc in element.Elements("DocumentType") select doc).ToList() : new List { element }; - //NOTE Here we sort the doctype XElements based on dependencies - //before creating the doc types - this should also allow for a better structure/inheritance support. + //When you are importing a single doc type we have to assume that the depedencies are already there. + //Otherwise something like uSync won't work. var fields = new List>(); - foreach (var documentType in unsortedDocumentTypes) + var isSingleDocTypeImport = unsortedDocumentTypes.Count == 1; + if (isSingleDocTypeImport == false) { - var elementCopy = documentType; - var infoElement = elementCopy.Element("Info"); - var dependencies = new List(); - - //Add the Master as a dependency - if (elementCopy.Element("Master") != null && - string.IsNullOrEmpty(elementCopy.Element("Master").Value) == false) + //NOTE Here we sort the doctype XElements based on dependencies + //before creating the doc types - this should also allow for a better structure/inheritance support. + foreach (var documentType in unsortedDocumentTypes) { - dependencies.Add(elementCopy.Element("Master").Value); - } + var elementCopy = documentType; + var infoElement = elementCopy.Element("Info"); + var dependencies = new List(); - //Add compositions as dependencies - var compositionsElement = infoElement.Element("Compositions"); - if (compositionsElement != null && compositionsElement.HasElements) - { - var compositions = compositionsElement.Elements("Composition"); - if (compositions.Any()) + //Add the Master as a dependency + if (elementCopy.Element("Master") != null && + string.IsNullOrEmpty(elementCopy.Element("Master").Value) == false) { - foreach (var composition in compositions) + dependencies.Add(elementCopy.Element("Master").Value); + } + + //Add compositions as dependencies + var compositionsElement = infoElement.Element("Compositions"); + if (compositionsElement != null && compositionsElement.HasElements) + { + var compositions = compositionsElement.Elements("Composition"); + if (compositions.Any()) { - dependencies.Add(composition.Value); + foreach (var composition in compositions) + { + dependencies.Add(composition.Value); + } } } - } - - var field = new TopologicalSorter.DependencyField - { - Alias = infoElement.Element("Alias").Value, - Item = new Lazy(() => elementCopy), - DependsOn = dependencies.ToArray() - }; - fields.Add(field); + var field = new TopologicalSorter.DependencyField + { + Alias = infoElement.Element("Alias").Value, + Item = new Lazy(() => elementCopy), + DependsOn = dependencies.ToArray() + }; + + fields.Add(field); + } } - //Sorting the Document Types based on dependencies - var documentTypes = TopologicalSorter.GetSortedItems(fields).ToList(); + //Sorting the Document Types based on dependencies - if its not a single doc type import ref. #U4-5921 + var documentTypes = isSingleDocTypeImport + ? unsortedDocumentTypes.ToList() + : TopologicalSorter.GetSortedItems(fields).ToList(); //Iterate the sorted document types and create them as IContentType objects foreach (var documentType in documentTypes)