/// <summary> /// /// </summary> /// <param name="Manifest"></param> /// <param name="Tag"></param> public void TagManifest(Guid ManifestId, Guid TagId) { BuildManifest Manifest = GetManifestById(ManifestId); if (Manifest == null) { return; } Tag Tag = TagRegistry.GetTagById(TagId); if (Tag == null) { return; } if (Manifest.Metadata != null && !Manifest.Metadata.TagIds.Contains(TagId)) { Logger.Log(LogLevel.Info, LogCategory.Manifest, "Tagging manifest {0} with {1}", ManifestId.ToString(), Tag.Name); Manifest.Metadata.ModifiedTime = DateTime.UtcNow; Manifest.Metadata.TagIds.Add(TagId); StoreMetadata(Manifest); } if (Tag.Unique) { string ParentPath = VirtualFileSystem.GetParentPath(Manifest.VirtualPath); string NodeName = VirtualFileSystem.GetNodeName(Manifest.VirtualPath); List <string> Children = GetVirtualPathChildren(ParentPath); Tag DecayTag = TagRegistry.GetTagById(Tag.DecayTagId); foreach (string ChildName in Children) { if (ChildName == Manifest.VirtualPath) { continue; } BuildManifest ChildManifest = GetManifestByPath(ChildName); if (ChildManifest != null) { if (ChildManifest.Metadata != null && ChildManifest.Metadata.TagIds.Contains(TagId)) { UntagManifest(ChildManifest.Guid, TagId); if (DecayTag != null) { TagManifest(ChildManifest.Guid, DecayTag.Id); } } } } } }