@@ -1448,7 +1448,9 @@ private Dictionary<string, HashSet<string>> GetManifestAliasesByName() {
1448
1448
/// <summary>
1449
1449
/// Use manifest aliases to cosolidate manifest metadata.
1450
1450
/// </summary>
1451
- public void ConsolidateManifests ( ) {
1451
+ /// <returns>Flattened map of highest priority manifest name by each alias of the manifest
1452
+ /// name.</returns>
1453
+ public Dictionary < string , string > ConsolidateManifests ( ) {
1452
1454
var aliasesByName = GetManifestAliasesByName ( ) ;
1453
1455
// Flatten graph of manifest aliases so that each entry maps to the highest priority
1454
1456
// name.
@@ -1494,6 +1496,7 @@ public void ConsolidateManifests() {
1494
1496
canonicalFilenameAndMetadataByVersion . Value ) ;
1495
1497
}
1496
1498
}
1499
+ return manifestAliases ;
1497
1500
}
1498
1501
1499
1502
/// <summary>
@@ -1685,6 +1688,16 @@ public class ManifestReferences {
1685
1688
/// </summary>
1686
1689
public HashSet < string > obsoleteFiles = new HashSet < string > ( ) ;
1687
1690
1691
+ /// <summary>
1692
+ /// Backing store of Aliases.
1693
+ /// </summary>
1694
+ private HashSet < string > aliases = new HashSet < string > ( ) ;
1695
+
1696
+ /// <summary>
1697
+ /// Alias names of this manifest.
1698
+ /// </summary>
1699
+ public ICollection < string > Aliases { get { return aliases ; } }
1700
+
1688
1701
/// <summary>
1689
1702
/// Cache of all manifest references indexed by package name.
1690
1703
/// </summary>
@@ -1838,12 +1851,28 @@ public static List<ManifestReferences> FindAndReadManifests(FileMetadataSet meta
1838
1851
/// <returns>Dictionary of ManifestReferences indexed by package name.</returns>
1839
1852
public static Dictionary < string , ManifestReferences > FindAndReadManifestsByPackageName (
1840
1853
FileMetadataSet metadataSet ) {
1841
- metadataSet . ConsolidateManifests ( ) ;
1854
+ var manifestAliases = metadataSet . ConsolidateManifests ( ) ;
1855
+ // Invert the map of manifest aliases to create a dictionary that maps canonical name
1856
+ // to a set of aliases.
1857
+ var aliasesByName = new Dictionary < string , HashSet < string > > ( ) ;
1858
+ foreach ( var aliasAndName in manifestAliases ) {
1859
+ var alias = aliasAndName . Key ;
1860
+ var name = aliasAndName . Value ;
1861
+ HashSet < string > aliases ;
1862
+ if ( ! aliasesByName . TryGetValue ( name , out aliases ) ) {
1863
+ aliases = new HashSet < string > ( ) ;
1864
+ aliasesByName [ name ] = aliases ;
1865
+ }
1866
+ aliases . Add ( alias ) ;
1867
+ }
1868
+
1842
1869
var manifestReferencesByPackageName = new Dictionary < string , ManifestReferences > ( ) ;
1843
1870
foreach ( var metadataByVersion in metadataSet . Values ) {
1844
1871
ManifestReferences manifestReferences = new ManifestReferences ( ) ;
1845
1872
if ( manifestReferences . ParseManifests ( metadataByVersion ,
1846
1873
metadataSet ) ) {
1874
+ manifestReferences . aliases =
1875
+ aliasesByName [ manifestReferences . filenameCanonical ] ;
1847
1876
manifestReferencesByPackageName [ manifestReferences . filenameCanonical ] =
1848
1877
manifestReferences ;
1849
1878
}
0 commit comments