Skip to content

Commit d530e27

Browse files
committed
Serialize cmdlets and change method for finding dll files
1 parent 74c7666 commit d530e27

File tree

49 files changed

+29198
-3887
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+29198
-3887
lines changed

tools/StaticAnalysis/BreakingChangeAnalyzer/BreakingChangeAnalyzer.cs

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,33 +84,47 @@ public void Analyze(
8484

8585
foreach (var directory in probingDirectories)
8686
{
87-
var index = Path.GetFileName(directory).IndexOf(".");
88-
var service = Path.GetFileName(directory).Substring(index + 1);
87+
var service = Path.GetFileName(directory);
8988

90-
var helpFiles = Directory.EnumerateFiles(directory, "*.dll-Help.xml")
91-
.Where(f => !processedHelpFiles.Contains(Path.GetFileName(f),
92-
StringComparer.OrdinalIgnoreCase)).ToList();
89+
var manifestFiles = Directory.EnumerateFiles(directory, "*.psd1").ToList();
9390

94-
if (helpFiles.Count > 1)
91+
if (manifestFiles.Count > 1)
9592
{
96-
helpFiles = helpFiles.Where(f => Path.GetFileName(f).IndexOf(service) >= 0).ToList();
93+
manifestFiles = manifestFiles.Where(f => Path.GetFileName(f).IndexOf(service) >= 0).ToList();
9794
}
9895

99-
if (helpFiles.Any())
96+
if (manifestFiles.Count == 0)
97+
{
98+
continue;
99+
}
100+
101+
var psd1 = manifestFiles.FirstOrDefault();
102+
103+
var parentDirectory = Directory.GetParent(psd1);
104+
var psd1FileName = Path.GetFileName(psd1);
105+
106+
PowerShell powershell = PowerShell.Create();
107+
powershell.AddScript("Import-LocalizedData -BaseDirectory " + parentDirectory +
108+
" -FileName " + psd1FileName +
109+
" -BindingVariable ModuleMetadata; $ModuleMetadata.NestedModules");
110+
111+
var cmdletResult = powershell.Invoke();
112+
var cmdletFiles = cmdletResult.Select(c => c.ToString().Substring(2));
113+
114+
if (cmdletFiles.Any())
100115
{
101116
Directory.SetCurrentDirectory(directory);
102-
foreach (var helpFile in helpFiles)
117+
foreach (var cmdletFile in cmdletFiles)
103118
{
104-
var cmdletFile = helpFile.Substring(0, helpFile.Length - "-Help.xml".Length);
105-
var helpFileName = Path.GetFileName(helpFile);
119+
var helpFileName = Path.GetFileName(cmdletFile);
106120
var cmdletFileName = Path.GetFileName(cmdletFile);
107121
if (File.Exists(cmdletFile))
108122
{
109123
issueLogger.Decorator.AddDecorator(a => a.AssemblyFileName = cmdletFileName, "AssemblyFileName");
110124
processedHelpFiles.Add(helpFileName);
111125
var proxy =
112126
EnvironmentHelpers.CreateProxy<CmdletBreakingChangeLoader>(directory, out _appDomain);
113-
var newModuleMetadata = proxy.GetModuleMetadata(cmdletFile);
127+
var newModuleMetadata = proxy.GetModuleMetadata(Path.GetFullPath(cmdletFile));
114128

115129
string fileName = cmdletFileName + ".json";
116130
string executingPath =
@@ -129,8 +143,28 @@ public void Analyze(
129143

130144
if (cmdletFilter != null)
131145
{
146+
string output = "Before filter\nOld module cmdlet count: " + oldModuleMetadata.Cmdlets.Count +
147+
"\nNew module cmdlet count: " + newModuleMetadata.Cmdlets.Count;
148+
149+
output += "\nCmdlet file: " + Path.GetFullPath(cmdletFile);
150+
132151
oldModuleMetadata.FilterCmdlets(cmdletFilter);
133152
newModuleMetadata.FilterCmdlets(cmdletFilter);
153+
154+
output += "\nAfter filter\nOld module cmdlet count: " + oldModuleMetadata.Cmdlets.Count +
155+
"\nNew module cmdlet count: " + newModuleMetadata.Cmdlets.Count;
156+
157+
foreach (var cmdlet in oldModuleMetadata.Cmdlets)
158+
{
159+
output += "\n\tOld cmdlet - " + cmdlet.Name;
160+
}
161+
162+
foreach (var cmdlet in newModuleMetadata.Cmdlets)
163+
{
164+
output += "\n\tNew cmdlet - " + cmdlet.Name;
165+
}
166+
167+
issueLogger.WriteMessage(output + "\n");
134168
}
135169

136170
RunBreakingChangeChecks(oldModuleMetadata, newModuleMetadata, issueLogger);

tools/StaticAnalysis/BreakingChangeAnalyzer/CmdletBreakingChangeLoader.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,9 @@ public ModuleMetadata GetModuleMetadata(string assemblyPath)
160160
results.Add(cmdletMetadata);
161161
}
162162
}
163-
catch
163+
catch (Exception ex)
164164
{
165+
throw ex;
165166
}
166167

167168
ModuleMetadata.Cmdlets = results;

tools/StaticAnalysis/BreakingChangeAnalyzer/TypeMetadata.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ public TypeMetadata(Type inputType)
129129
}
130130

131131
// Add the property to the dictionary
132-
_properties.Add(property.Name, propertyType.ToString());
132+
if (!_properties.ContainsKey(property.Name))
133+
{
134+
_properties.Add(property.Name, propertyType.ToString());
135+
}
133136
}
134137
}
135138

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +0,0 @@
1-
"AssemblyFileName","ClassName","Target","Severity","ProblemId","Description","Remediation"
2-
"Microsoft.Azure.Commands.Sql.dll","Microsoft.Azure.Commands.Sql.Auditing.Cmdlet.RemoveSqlDatabaseAuditing","Remove-AzureRmSqlDatabaseAuditing","0","1010","The cmdlet 'Remove-AzureRmSqlDatabaseAuditing' no longer supports the alias 'Remove-AzureRmSqlDatabaseAuditing'.","Add the alias 'Remove-AzureRmSqlDatabaseAuditing back to the cmdlet 'Remove-AzureRmSqlDatabaseAuditing'."

0 commit comments

Comments
 (0)