Skip to content

Commit 3d4cedd

Browse files
authored
DYN-6901 Pm - retainfolderstructure rework (#15357)
1 parent 29ff5e5 commit 3d4cedd

10 files changed

+388
-76
lines changed

src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs

+22-26
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,9 @@ public bool RetainFolderStructureOverride
895895
/// <summary>
896896
/// The root directory of the package
897897
/// </summary>
898-
private string CurrentPackageDirectory { get; set; }
898+
private IEnumerable<string> CurrentPackageRootDirectories { get; set; }
899899
private static MetadataLoadContext sharedMetaDataLoadContext = null;
900+
900901
/// <summary>
901902
/// A shared MetaDataLoadContext that is used for assembly inspection during package publishing.
902903
/// This member is shared so the behavior is similar to the ReflectionOnlyLoadContext this is replacing.
@@ -1073,34 +1074,30 @@ internal List<PackageItemRootViewModel> BindParentToChild(Dictionary<string, Pac
10731074
}
10741075

10751076
// Only add the folder items, they contain the files
1076-
var updatedItems = GetRootItems(items);
1077+
var updatedItems = OrganizePackageRootItems(items);
10771078
return updatedItems;
10781079
}
10791080

10801081
/// <summary>
1081-
/// Gets the list PackageItemRootViewModel items which will be at the root directory of the package with all the child items.
1082+
/// Organizes package items into root items based on common paths and hierarchical structure.
1083+
/// This includes determining root items, establishing parent-child relationships, and collecting all child items.
10821084
/// </summary>
1083-
/// <param name="items"></param>
1084-
/// <returns></returns>
1085-
private List<PackageItemRootViewModel> GetRootItems(Dictionary<string, PackageItemRootViewModel> items)
1085+
/// <param name="items">A dictionary of package item keys and their corresponding PackageItemRootViewModel objects.</param>
1086+
/// <returns>A list of PackageItemRootViewModel items representing the organized root items and their child items.</returns>
1087+
private List<PackageItemRootViewModel> OrganizePackageRootItems(Dictionary<string, PackageItemRootViewModel> items)
10861088
{
10871089
var rootItems = items.Values.Where(x => !x.isChild).ToList();
10881090
if (!rootItems.Any()) return rootItems;
10891091

10901092
var roots = new List<PackageItemRootViewModel>();
1093+
1094+
var commonPaths = GetCommonPaths(items.Keys.ToArray());
1095+
if (commonPaths == null) return null;
10911096

1092-
if (CurrentPackageDirectory != null)
1093-
{
1094-
roots.Add(new PackageItemRootViewModel(CurrentPackageDirectory));
1095-
}
1096-
else
1097-
{
1098-
var commonPaths = GetCommonPaths(items.Keys.ToArray());
1099-
if (commonPaths == null) return null;
1097+
CurrentPackageRootDirectories = commonPaths;
11001098

1101-
// Add a new root item for each common path found
1102-
commonPaths.ForEach(p => roots.Add(new PackageItemRootViewModel(p)));
1103-
}
1099+
// Add a new root item for each common path found
1100+
commonPaths.ForEach(p => roots.Add(new PackageItemRootViewModel(p)));
11041101

11051102
// Check each root item and create any missing connections
11061103
foreach (var item in rootItems)
@@ -1532,7 +1529,7 @@ internal static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoV
15321529
CopyrightHolder = pkg.CopyrightHolder,
15331530
CopyrightYear = pkg.CopyrightYear,
15341531
IsPublishFromLocalPackage = true,
1535-
CurrentPackageDirectory = pkg.RootDirectory,
1532+
CurrentPackageRootDirectories = new List<string> { pkg.RootDirectory },
15361533
//default retain folder structure to true when publishing a new version from local.
15371534
RetainFolderStructureOverride = retainFolderStructure
15381535
};
@@ -2270,7 +2267,7 @@ private void Submit()
22702267
{
22712268
// begin submission
22722269
var pmExtension = dynamoViewModel.Model.GetPackageManagerExtension();
2273-
var handle = pmExtension.PackageManagerClient.PublishAsync(Package, RetainFolderStructureOverride ? updatedFiles : contentFiles, MarkdownFiles, IsNewVersion, RetainFolderStructureOverride);
2270+
var handle = pmExtension.PackageManagerClient.PublishAsync(Package, RetainFolderStructureOverride ? updatedFiles : contentFiles, MarkdownFiles, IsNewVersion, CurrentPackageRootDirectories, RetainFolderStructureOverride);
22742271

22752272
// start upload
22762273
Uploading = true;
@@ -2365,11 +2362,7 @@ private void PublishLocally()
23652362
var remapper = new CustomNodePathRemapper(DynamoViewModel.Model.CustomNodeManager,
23662363
DynamoModel.IsTestMode);
23672364
var builder = new PackageDirectoryBuilder(new MutatingFileSystem(), remapper);
2368-
if (string.IsNullOrEmpty(Package.RootDirectory))
2369-
{
2370-
Package.RootDirectory = CurrentPackageDirectory;
2371-
}
2372-
builder.BuildRetainDirectory(Package, publishPath, updatedFiles, MarkdownFiles);
2365+
builder.BuildRetainDirectory(Package, publishPath, CurrentPackageRootDirectories, updatedFiles, MarkdownFiles);
23732366
UploadState = PackageUploadHandle.State.Uploaded;
23742367
}
23752368
else
@@ -2770,11 +2763,11 @@ internal PackageItemRootViewModel GetExistingRootItemViewModel(string publishPat
27702763
{
27712764
if (!PackageContents.Any()) return null;
27722765
if (PackageContents.Count(x => x.DependencyType.Equals(DependencyType.Folder)) == 1) {
2773-
// If there is only one root item, nest it under the new root package folder
2766+
// If there is only one root item, this root item becomes the new folder
27742767
var item = PackageContents.First(x => x.DependencyType.Equals(DependencyType.Folder));
27752768

27762769
item = new PackageItemRootViewModel(Path.Combine(publishPath, packageName));
2777-
item.AddChildren(new List<PackageItemRootViewModel> { PackageContents.First() } );
2770+
item.AddChildren( PackageContents.First().ChildItems.ToList() );
27782771

27792772
return item;
27802773
}
@@ -2783,6 +2776,9 @@ internal PackageItemRootViewModel GetExistingRootItemViewModel(string publishPat
27832776
var rootItem = new PackageItemRootViewModel(Path.Combine(publishPath, packageName));
27842777
foreach(var item in PackageContents)
27852778
{
2779+
// Skip 'bare' custom nodes, they will be represented by their CustomNodePreview counterparts
2780+
if(item.DependencyType.Equals(DependencyType.CustomNode)) { continue; }
2781+
27862782
item.isChild = true;
27872783
rootItem.AddChildren(item);
27882784
}

0 commit comments

Comments
 (0)