public void HelpWriter() { // when outputting to the console, just ensure things work without crashing... var hw = new HelpWriter(); hw.WriteLine(); hw.WriteLine("Hello"); hw.WriteBanner("BANNER"); hw.WriteOption("name", "description"); using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { hw = new HelpWriter(writer, 30); hw.WriteLine(); hw.WriteLine("A short line"); hw.WriteLine("A long long long long long long line"); hw.WriteOption(string.Empty, string.Empty); // test an option of length HelpWriter.DescriptionColumn - N hw.WriteOption("namenamenamenamenamenamename", string.Empty); hw.WriteOption("namenamenamenamenamenamename", "description"); // test an option of length HelpWriter.DescriptionColumn - 1 hw.WriteOption("namenamenamenamenamenamenamenam", string.Empty); hw.WriteOption("namenamenamenamenamenamenamenam", "description"); // test an option of length HelpWriter.DescriptionColumn hw.WriteOption("namenamenamenamenamenamenamename", string.Empty); hw.WriteOption("namenamenamenamenamenamenamename", "description"); // test an option of length HelpWriter.DescriptionColumn + 1 hw.WriteOption("namenamenamenamenamenamenamenamen", string.Empty); hw.WriteOption("namenamenamenamenamenamenamenamen", "description"); // test an option of length HelpWriter.DescriptionColumn + N hw.WriteOption("namenamenamenamenamenamenamenamenamenamenamename", string.Empty); hw.WriteOption("namenamenamenamenamenamenamenamenamenamenamename", "description"); // test long option name and description hw.WriteOption( "namenamenamenamenamenamenamenamenamenamenamename", "descriptiondescriptiondescriptiondescriptiondescriptiondescription"); hw.WriteBanner(string.Empty); hw.WriteBanner("banner"); hw.WriteBanner("bannerbannerbannerbannerbannerbannerbanner"); writer.Flush(); string output = writer.ToString(); string Expected = Environment.NewLine + "A short line" + Environment.NewLine + "A long long long long long" + Environment.NewLine + "long line" + Environment.NewLine + Environment.NewLine + "namenamenamenamenamenamename" + Environment.NewLine + "namenamenamenamenamenamename description" + Environment.NewLine + "namenamenamenamenamenamenamenam" + Environment.NewLine + "namenamenamenamenamenamenamenam description" + Environment.NewLine + "namenamenamenamenamenamenamename" + Environment.NewLine + "namenamenamenamenamenamenamename" + Environment.NewLine + " description" + Environment.NewLine + "namenamenamenamenamenamenamenamen" + Environment.NewLine + "namenamenamenamenamenamenamenamen" + Environment.NewLine + " description" + Environment.NewLine + "namenamenamenamenamenamenamenamenamenamenamename" + Environment.NewLine + "namenamenamenamenamenamenamenamenamenamenamename" + Environment.NewLine + " description" + Environment.NewLine + "namenamenamenamenamenamenamenamenamenamenamename" + Environment.NewLine + " descriptiondescriptiondescriptiondescriptiondescriptiondescription" + Environment.NewLine + Environment.NewLine + " - -" + Environment.NewLine + Environment.NewLine + Environment.NewLine + " - banner -" + Environment.NewLine + Environment.NewLine + Environment.NewLine + "- bannerbannerbannerbannerbannerbannerbanner -" + Environment.NewLine + Environment.NewLine; Assert.Equal(Expected, output); } }
// BUG: should display list of available qualifiers // BUG: should display list of available filter tags public static void DisplayHelp(HelpLevel helpLevel) { var hw = new HelpWriter(helpLevel); hw.WriteBanner(Strings.HelpText_DisplayHelp_BuildBanner); #region Build hw.WriteOption( "/config:<file>", Strings.HelpText_DisplayHelp_ConfigFile); hw.WriteOption( "/additionalConfigFile:<file>*", Strings.HelpText_DisplayHelp_AdditionalConfigFile, HelpLevel.Verbose); hw.WriteOption( "/qualifier:<qualifier list>", Strings.HelpText_DisplayHelp_Qualifiers); hw.WriteOption( "/objectDirectory:<output directory>", Strings.HelpText_DisplayHelp_Obj); hw.WriteOption( "/tempDirectory:<temp directory>", Strings.HelpText_DisplayHelp_TempDirectory, HelpLevel.Verbose); hw.WriteOption( "/property:<key>=<value>", Strings.HelpText_DisplayHelp_Property); hw.WriteOption( "<paths>", Strings.HelpText_DisplayHelp_Paths); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_FilteringBanner); #region Filtering hw.WriteLine(Strings.HelpText_DisplayHelp_FilteringInfo); hw.WriteLine(); hw.WriteOption( "/filter:<deps><filter>", Strings.HelpText_DisplayHelp_Filter); hw.WriteOption( "<deps>", Strings.HelpText_DisplayHelp_DependencySelection, HelpLevel.Verbose); hw.WriteOption( "<filter>", Strings.HelpText_DisplayHelp_Filter_Expression, HelpLevel.Verbose); hw.WriteLine(Strings.HelpText_DisplayHelp_FilterTypeExplanation, HelpLevel.Verbose); hw.WriteLine(HelpLevel.Verbose); hw.WriteOption( "id", Strings.HelpText_DisplayHelp_Filter_Id, HelpLevel.Verbose); hw.WriteOption( "output", Strings.HelpText_DisplayHelp_Filter_Output + " " + Strings.HelpText_DisplayHelp_Filter_PathArgument, HelpLevel.Verbose); hw.WriteOption( "input", Strings.HelpText_DisplayHelp_Filter_Input + " " + Strings.HelpText_DisplayHelp_Filter_PathArgument, HelpLevel.Verbose); hw.WriteOption( "tag", Strings.HelpText_DisplayHelp_Filter_Tag, HelpLevel.Verbose); hw.WriteOption( "value", Strings.HelpText_DisplayHelp_Filter_Value, HelpLevel.Verbose); hw.WriteOption( "valuetransitive", Strings.HelpText_DisplayHelp_Filter_ValueTransitive, HelpLevel.Verbose); hw.WriteOption( "spec", Strings.HelpText_DisplayHelp_Filter_Spec + " " + Strings.HelpText_DisplayHelp_Filter_PathArgument, HelpLevel.Verbose); hw.WriteOption( "spec_valuetransitive", Strings.HelpText_DisplayHelp_Filter_Spec_ValueTransitive, HelpLevel.Verbose); hw.WriteOption( "specref", Strings.HelpText_DisplayHelp_Filter_SpecDependencies, HelpLevel.Verbose); hw.WriteLine(Strings.HelpText_DisplayHelp_FilterFunctionExplanation, HelpLevel.Verbose); hw.WriteOption("dpt", Strings.HelpText_DisplayHelp_Filter_DependentsFunction, HelpLevel.Verbose); hw.WriteOption("dpc", Strings.HelpText_DisplayHelp_Filter_DependenciesFunction, HelpLevel.Verbose); hw.WriteOption("copydpt", Strings.HelpText_DisplayHelp_Filter_CopyDependentsFunction, HelpLevel.Verbose); hw.WriteOption("requiredfor", Strings.HelpText_DisplayHelp_Filter_RequiredInputsFunction, HelpLevel.Verbose); hw.WriteLine(HelpLevel.Verbose); hw.WriteLine(Strings.HelpText_DisplayHelp_Filter_Examples, HelpLevel.Verbose); // Note to maintainer: if you're changing one of those samples, // make sure that they're valid by testing them in FilterParserTests. hw.WriteOption( " /f:~(tag='test')", Strings.HelpText_DisplayHelp_FilterExampleNoTest, HelpLevel.Verbose); hw.WriteOption( " /f:+spec='src\\utilities\\*'", Strings.HelpText_DisplayHelp_FilterExampleDirectory, HelpLevel.Verbose); hw.WriteOption( " /f:(tag='csc.exe'and~(tag='test'))", Strings.HelpText_DisplayHelp_Filter_ExamplesBinaryFilter, HelpLevel.Verbose); hw.WriteOption( "/canonicalizeFilterOutputs[+|-]", Strings.HelpText_DisplayHelp_CanonicalizeFilterOutputs); // TODO: This option is DScript only. It isn't shown in the help text because we have the goal of // removing it and unifying it with the standard filtering above. // hw.WriteOption("scriptFile" #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_LoggingBanner); #region Logging hw.WriteOption( "/logsDirectory:<path>", Strings.HelpText_DisplayHelp_LogsDirectory); hw.WriteOption( "/logPrefix:<string>", Strings.HelpText_DisplayHelp_LogPrefix, HelpLevel.Verbose); hw.WriteOption( "/logsToRetain:<number>", Strings.HelpText_DisplayHelp_LogsToRetain, HelpLevel.Verbose); hw.WriteOption( "/customLog:<file>=<id list>", Strings.HelpText_DisplayHelp_CustomLog, HelpLevel.Verbose); hw.WriteOption( "/noLog:<id list>", Strings.HelpText_DisplayHelp_NoLog, HelpLevel.Verbose); hw.WriteOption( "/consoleVerbosity:<level>", Strings.HelpText_DisplayHelp_ConsoleVerbosity, HelpLevel.Verbose); hw.WriteOption( "/fileVerbosity:<level>", Strings.HelpText_DisplayHelp_FileVerbosity, HelpLevel.Verbose); hw.WriteOption( "/logExecution[+|-]", Strings.HelpText_DisplayHelp_LogExecution, HelpLevel.Verbose); hw.WriteOption( "/noLog:<id list>", Strings.HelpText_DisplayHelp_NoExecutionLog, HelpLevel.Verbose); hw.WriteOption( "/logProcesses[+|-]", Strings.HelpText_DisplayHelp_LogProcesses, HelpLevel.Verbose); hw.WriteOption( "/logProcessData[+|-]", Strings.HelpText_DisplayHelp_LogProcessData, HelpLevel.Verbose); hw.WriteOption( "/logFileAccessTables[+|-]", Strings.HelpText_DisplayHelp_LogFileEnforcementTables, HelpLevel.Verbose); hw.WriteOption( "/logObservedFileAccesses[+|-]", Strings.HelpText_DisplayHelp_LogObservedAccesses, HelpLevel.Verbose); hw.WriteOption( "/logOutput:<option>", Strings.HelpText_DisplayHelp_LogOutput, HelpLevel.Verbose); hw.WriteOption( "/environment:<environment>", string.Format( CultureInfo.InvariantCulture, Strings.HelpText_DisplayHelp_Environment, string.Join(",", Enum.GetNames(typeof(BuildXL.Utilities.Configuration.ExecutionEnvironment)))), HelpLevel.Verbose); hw.WriteOption( "/remoteTelemetry[+|-]", Strings.HelpText_DisplayHelp_RemoteTelemetry); hw.WriteOption( "/replayWarnings[+|-]", Strings.HelpText_DisplayHelp_ReplayWarnings); hw.WriteOption( "/logStats[+|-]", Strings.HelpText_DisplayHelp_LogStats, HelpLevel.Verbose); hw.WriteOption( "/logStatus[+|-]", Strings.HelpText_DisplayHelp_LogStatus, HelpLevel.Verbose); hw.WriteOption( "/traceInfo:<Key>=<Value>", Strings.HelpText_DisplayHelp_TraceInfo, HelpLevel.Verbose); hw.WriteOption( "/logCounters[+|-]", Strings.HelpText_DisplayHelp_LogCounters, HelpLevel.Verbose); hw.WriteOption( "/logMemory[+|-]", Strings.HelpText_DisplayHelp_LogMemory, HelpLevel.Verbose); hw.WriteOption( "/storeFingerprints[+|-]", Strings.HelpText_DisplayHelp_StoreFingerprints, HelpLevel.Verbose); hw.WriteOption( "/storeFingerprints:<Default|ExecutionFingerprintsOnly|IgnoreExistingEntries>", Strings.HelpText_DisplayHelp_StoreFingerprintsWithMode, HelpLevel.Verbose); hw.WriteOption( "/substSource:[path]", Strings.HelpText_DisplayHelp_SubstSource, HelpLevel.Verbose); hw.WriteOption( "/substTarget:[path]", Strings.HelpText_DisplayHelp_SubstTarget, HelpLevel.Verbose); hw.WriteOption( "/fancyConsole[+|-]", Strings.HelpText_DisplayHelp_FancyConsole, HelpLevel.Verbose); hw.WriteOption( "/fancyConsoleMaxStatusPips:<number>", Strings.HelpText_DisplayHelp_FancyConsoleMaxStatusPips, HelpLevel.Verbose); hw.WriteOption( "/profileScript[+|-]", Strings.HelpText_DisplayHelp_ProfileScript, HelpLevel.Verbose); hw.WriteOption( "/profileReportDestination:[path]", string.Format( CultureInfo.InvariantCulture, Strings.HelpText_DisplayHelp_ProfileReportDestination, FrontEndConfigurationExtensions.DefaultProfileReportFilename), HelpLevel.Verbose); hw.WriteOption( "/trackBuildsInUserFolder[+-]", Strings.HelpText_DisplayHelp_TrackBuildsInUserFolder, HelpLevel.Verbose ); hw.WriteOption( "/trackMethodInvocations[+|-]", string.Format( CultureInfo.InvariantCulture, Strings.HelpText_DisplayHelp_TrackMethodInvocations), HelpLevel.Verbose); hw.WriteOption( "/useCustomPipDescriptionOnConsole[+|-]", Strings.HelpText_DisplayHelp_UseCustomPipDescriptionOnConsole, HelpLevel.Verbose); hw.WriteOption( "/cacheMiss[+|-|<path>|{<changeset list}]", Strings.HelpText_DisplayHelp_CacheMiss, HelpLevel.Verbose); hw.WriteOption( "/scriptShowSlowest[+|-]", Strings.HelpText_DisplayHelp_ScriptShowSlowest, HelpLevel.Verbose); hw.WriteOption( "/scriptShowLargest[+|-]", Strings.HelpText_DisplayHelp_ScriptShowLargest, HelpLevel.Verbose); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_ErrorsAndWarningsBanner); #region ErrorsAndWarnings hw.WriteOption( "/warnAsError[+|-]", Strings.HelpText_DisplayHelp_WarnAsError, HelpLevel.Verbose); hw.WriteOption( "/warnAsError[+|-]:<warn list>", Strings.HelpText_DisplayHelp_WarnAsErrorWithList, HelpLevel.Verbose); hw.WriteOption( "/noWarn:<warn list>", Strings.HelpText_DisplayHelp_NoWarn, HelpLevel.Verbose); hw.WriteOption( "/stopOnFirstError[+|-]", Strings.HelpText_DisplayHelp_StopOnFirstError); hw.WriteOption( "/color[+|-]", Strings.HelpText_DisplayHelp_Color, HelpLevel.Verbose); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_CachingBanner); #region Caching hw.WriteOption( "/allowFetchingCachedGraphFromContentCache", Strings.HelpText_DisplayHelp_AllowFetchingCachedGraphFromContentCache, HelpLevel.Verbose); hw.WriteOption( "/cacheConfigFilePath:<file>", Strings.HelpText_DisplayHelp_CacheConfigFilePath); hw.WriteOption( "/cacheDirectory:<artifact cache directory>", Strings.HelpText_DisplayHelp_CacheDirectory); hw.WriteOption( "/cacheSessionName:<unique session name>", Strings.HelpText_DisplayHelp_CacheSessionName, HelpLevel.Verbose); hw.WriteOption( "/cacheGraph[+|-]", Strings.HelpText_DisplayHelp_CacheGraph, HelpLevel.Verbose); hw.WriteOption( "/cacheSpecs[+|-]", Strings.HelpText_DisplayHelp_CacheSpecs, HelpLevel.Verbose); hw.WriteOption( "/cacheMemoryUsage[+|-]", Strings.HelpText_DisplayHelp_CacheMemoryUsage, HelpLevel.Verbose); hw.WriteOption( "/compressGraphFiles[+|-]", Strings.HelpText_DisplayHelp_CompressGraphFiles, HelpLevel.Verbose); hw.WriteOption( "/determinismProbe[+|-]", Strings.HelpText_DisplayHelp_DeterminismProbeUsage, HelpLevel.Verbose); hw.WriteOption( "/engineCacheDirectory:<engine cache directory>", Strings.HelpText_DisplayHelp_EngineCacheDirectory, HelpLevel.Verbose); hw.WriteOption( "/reuseEngineState[+|-]", Strings.HelpText_DisplayHelp_ReuseEngineState, HelpLevel.Verbose); hw.WriteOption( "/reuseOutputsOnDisk[+|-]", Strings.HelpText_DisplayHelp_ReuseOutputsOnDisk, HelpLevel.Verbose); hw.WriteOption( "/server[+|-]", Strings.HelpText_DisplayHelp_Server); hw.WriteOption( "/serverMaxIdleTimeInMinutes", Strings.HelpText_DisplayHelp_ServerMaxIdleTimeInMinutes); hw.WriteOption( "/serverDeploymentDir", Strings.HelpText_DisplayHelp_ServerDeploymentDir, HelpLevel.Verbose); hw.WriteOption( "/storeOutputsToCache", Strings.HelpText_DisplayHelp_StoreOutputsToCache, HelpLevel.Verbose); hw.WriteOption( "/verifyCacheLookupPin[+|-]", Strings.HelpText_DisplayHelp_VerifyCacheLookupPin, HelpLevel.Verbose); hw.WriteOption( "/pinCachedOutputs[+|-]", Strings.HelpText_DisplayHelp_PinCachedOutputs, HelpLevel.Verbose); hw.WriteOption( "/vfsCasRoot<vfs cas root directory>", Strings.HelpText_DisplayHelp_VfsCasRoot, HelpLevel.Verbose); hw.WriteOption( "/enableDedupChunk[+|-]", Strings.HelpText_DisplayHelp_EnableDedupChunk, HelpLevel.Verbose); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_ExecutionControlBanner); #region ExecutionControl hw.WriteOption( "/incremental[+|-]", Strings.HelpText_DisplayHelp_Incremental); hw.WriteOption( "/incrementalScheduling[+|-]", Strings.HelpText_DisplayHelp_IncrementalScheduling); hw.WriteOption( "/useHardlinks[+|-]", Strings.HelpText_DisplayHelp_UseHardlinks, HelpLevel.Verbose); // This feature is used to support distributed build tests internally but is not an externally supported feature. // Don't include it in help text /* * hw.WriteOption( * "/rootMap:<drive letter>=<path>", * Strings.HelpText_DisplayHelp_RootMap, * HelpLevel.Verbose);*/ hw.WriteOption( "/injectCacheMisses:<rate and options>", Strings.HelpText_DisplayHelp_InjectCacheMisses, HelpLevel.Verbose); hw.WriteOption( "/pipDefaultTimeout:<ms>", Strings.HelpText_DisplayHelp_PipTimeout); hw.WriteOption( "/pipDefaultWarningTimeout:<ms>", Strings.HelpText_DisplayHelp_PipWarningTimeout); hw.WriteOption( "/pipTimeoutMultiplier:<float>", Strings.HelpText_DisplayHelp_PipTimeoutMultiplier, HelpLevel.Verbose); hw.WriteOption( "/pipWarningTimeoutMultiplier:<float>", Strings.HelpText_DisplayHelp_PipWarningTimeoutMultiplier, HelpLevel.Verbose); hw.WriteOption( "/maxProc:<number of concurrent processes>", Strings.HelpText_DisplayHelp_MaxProc); hw.WriteOption( "/maxProcMultiplier:<double>", Strings.HelpText_DisplayHelp_MaxProcMultiplier, HelpLevel.Verbose); hw.WriteOption( "/maxLightProc:<number of concurrent light processes>", Strings.HelpText_DisplayHelp_MaxLightProc); hw.WriteOption( "/maxIO:<number of concurrent I/O operations>", Strings.HelpText_DisplayHelp_MaxIO); hw.WriteOption( "/maxIOMultiplier:<double>", Strings.HelpText_DisplayHelp_MaxIOMultiplier, HelpLevel.Verbose); hw.WriteOption( "/maxCacheLookup:<number of concurrent cache lookup operations>", Strings.HelpText_DisplayHelp_MaxCacheLookup); hw.WriteOption( "/maxChooseWorker:<number of concurrent choose worker operations>", Strings.HelpText_DisplayHelp_MaxCacheLookup); hw.WriteOption( "/maxMaterialize:<number of concurrent materialize operations>", Strings.HelpText_DisplayHelp_MaxMaterialize); hw.WriteOption( "/lowPriority[+|-]", Strings.HelpText_DisplayHelp_LowPriority); hw.WriteOption( "/maxRamUtilizationPercentage:<number>", Strings.HelpText_DisplayHelp_MaxRamUtilizationPercentage, HelpLevel.Verbose); hw.WriteOption( "/minAvailableRamMb:<number>", Strings.HelpText_DisplayHelp_MinAvailableRam, HelpLevel.Verbose); hw.WriteOption( "/phase:<engine phase>", Strings.HelpText_DisplayHelp_Phase); hw.WriteOption( "/maxRelativeOutputDirectoryLength:<characters>", Strings.HelpText_DisplayHelp_MaxRelativeOutputDirectoryLength, HelpLevel.Verbose); hw.WriteOption( "/buildLockPolling:<seconds>", Strings.HelpText_DisplayHelp_BuildLockPolling, HelpLevel.Verbose); hw.WriteOption( "/buildWaitTimeout:<minutes>", Strings.HelpText_DisplayHelp_BuildWaitTimeout, HelpLevel.Verbose); hw.WriteOption( "/enableLazyOutputs[+|-]", Strings.HelpText_DisplayHelp_EnableLazyOutputs, HelpLevel.Verbose); hw.WriteOption( "/cleanTempDirectories[+|-]", Strings.HelpText_DisplayHelp_CleanTempDirectories, HelpLevel.Verbose); hw.WriteOption( "/cleanOnly[+|-]", Strings.HelpText_DisplayHelp_CleanOnly, HelpLevel.Verbose); hw.WriteOption( "/scrub[+|-]", Strings.HelpText_DisplayHelp_Scrub, HelpLevel.Verbose); hw.WriteOption( "/scrubDirectory:<path>", Strings.HelpText_DisplayHelp_ScrubDirectory, HelpLevel.Verbose); hw.WriteOption( "/analyzeDependencyViolations[+|-]", Strings.HelpText_DisplayHelp_AnalyzeDependencyViolations, HelpLevel.Verbose); hw.WriteOption( "/emitSpotlightIndexingWarning[+|-]", Strings.HelpText_DisplayHelp_EmitSpotlightIndexingWarning, HelpLevel.Verbose); hw.WriteOption( "/disableConHostSharing[+|-]", Strings.HelpText_DisplayHelp_DisableConHostSharing, HelpLevel.Verbose); hw.WriteOption( "/scanChangeJournal[+|-]", Strings.HelpText_DisplayHelp_ScanChangeJournal, HelpLevel.Verbose); hw.WriteOption( "/scanChangeJournalTimeLimitInSec:<seconds>", Strings.HelpText_DisplayHelp_ScanChangeJournalTimeLimitInSec, HelpLevel.Verbose); hw.WriteOption( "/fileSystemMode<option>", Strings.HelpText_DisplayHelp_FileSystemMode, HelpLevel.Verbose); hw.WriteOption( "/flushPageCacheToFileSystemOnStoringOutputsToCache[+|-]", Strings.HelpText_DisplayHelp_FlushPageCacheToFileSystemOnStoringOutputsToCache, HelpLevel.Verbose); hw.WriteOption( "/unsafe_forceSkipDeps[+|-]", Strings.HelpText_DisplayHelp_ForceSkipDependencies, HelpLevel.Verbose); hw.WriteOption( "/normalizeReadTimestamps[+|-]", Strings.HelpText_DisplayHelp_NormalizeReadTimestamps, HelpLevel.Verbose); hw.WriteOption( "/useLargeNtClosePreallocatedList[+|-]", Strings.HelpText_DisplayHelp_UseLargeNtClosePreallocatedList, HelpLevel.Verbose); hw.WriteOption( "/useExtraThreadToDrainNtClose[+|-]", Strings.HelpText_DisplayHelp_UseExtraThreadToDrainNtClose, HelpLevel.Verbose); hw.WriteOption( "/maskUntrackedAccesses[+|-]", Strings.HelpText_DisplayHelp_MaskUntrackedAccesses, HelpLevel.Verbose); hw.WriteOption( "/treatDirectoryAsAbsentFileOnHashingInputContent[+|-]", Strings.HelpText_DisplayHelp_TreatDirectoryAsAbsentFileOnHashingInputContent, HelpLevel.Verbose); hw.WriteOption( "/unsafe_AllowCopySymlink[+|-]", Strings.HelpText_DisplayHelp_AllowCopySymlink, HelpLevel.Verbose); hw.WriteOption( "/server[+|-]", Strings.HelpText_DisplayHelp_Server); hw.WriteOption( "/serverDeploymentDir", Strings.HelpText_DisplayHelp_ServerDeploymentDir, HelpLevel.Verbose); hw.WriteOption( "/processRetries:<number of retries>", Strings.HelpText_DisplayHelp_ProcessRetries, HelpLevel.Verbose); hw.WriteOption( "/fileChangeTrackerInitializationMode:<mode>", Strings.HelpText_DisplayHelp_FileChangeTrackerInitializationMode, HelpLevel.Verbose); hw.WriteOption( "/fileChangeTrackingExclusionRoot:<path>", Strings.HelpText_DisplayHelp_FileChangeTrackingExclusionRoot, HelpLevel.Verbose); hw.WriteOption( "/fileChangeTrackingInclusionRoot:<path>", Strings.HelpText_DisplayHelp_FileChangeTrackingInclusionRoot, HelpLevel.Verbose); hw.WriteOption( "/inferNonExistenceBasedOnParentPathInRealFileSystem[+|-]", Strings.HelpText_DisplayHelp_InferNonExistenceBasedOnParentPathInRealFileSystem, HelpLevel.Verbose); hw.WriteOption( "/outputMaterializationExclusionRoot:<path>", Strings.HelpText_DisplayHelp_OutputMaterializationExclusionRoot, HelpLevel.Verbose); hw.WriteOption( "/enforceAccessPoliciesOnDirectoryCreation[+|-]", Strings.HelpText_DisplayHelp_EnforceAccessPoliciesOnDirectoryCreation, HelpLevel.Verbose); hw.WriteOption( "/useFileContentTable[+|-]", Strings.HelpText_DisplayHelp_UseFileContentTable, HelpLevel.Verbose); hw.WriteOption( "/adminRequiredProcessExecutionMode:<mode>", Strings.HelpText_DisplayHelp_AdminRequiredProcessExecutionMode, HelpLevel.Verbose); #endregion hw.WriteBanner( Strings.HelpText_DisplayHelp_DistributedBuildBanner, HelpLevel.Verbose); #region DistributedBuild hw.WriteOption( "/distributeCacheLookups[+|-]", Strings.HelpText_DisplayHelp_DistributeCacheLookups, HelpLevel.Verbose); hw.WriteOption( "/distributedBuildRole:<distributed build role>", Strings.HelpText_DisplayHelp_DistributedBuildRole, HelpLevel.Verbose); hw.WriteOption( "/distributedBuildServicePort:<local TCP port>", Strings.HelpText_DisplayHelp_DistributedBuildServicePort, HelpLevel.Verbose); hw.WriteOption( "/distributedBuildWorker:<IP address or host name>:<local TCP port>", Strings.HelpText_DisplayHelp_DistributedBuildWorker, HelpLevel.Verbose); hw.WriteOption( "/enableWorkerSourceFileMaterialization[+|-]", Strings.HelpText_DisplayHelp_DistributedBuildWorkerSourceMaterialization, HelpLevel.Verbose); hw.WriteOption( "/masterCpuMultiplier:<double>", Strings.HelpText_DisplayHelp_MasterCpuMultiplier, HelpLevel.Verbose); hw.WriteOption( "/masterCacheLookupMultiplier:<double>", Strings.HelpText_DisplayHelp_MasterCacheLookupMultiplier, HelpLevel.Verbose); hw.WriteOption( "/validateDistribution:[+|-]", Strings.HelpText_DisplayHelp_ValidateDistribution, HelpLevel.Verbose); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_DiagBanner); #region Diagnostics hw.WriteOption( "/diagnostic:<area>", Strings.HelpText_DisplayHelp_Diagnostic); hw.WriteOption( "/experiment.<flag>[+|-]", GetExperimentalFlagHelp()); hw.WriteOption( "/breakOnUnexpectedFileAccess[+|-]", Strings.HelpText_DisplayHelp_BreakOnUnexpectedFileAccess, HelpLevel.Verbose); hw.WriteOption( "/unsafe_AllowMissingOutput:<filename>", Strings.HelpText_DisplayHelp_AllowMissingOutputs, HelpLevel.Verbose); hw.WriteOption( "/TranslateDirectory:<fromPath>::<toPath>", Strings.HelpText_DisplayHelp_TranslateDirectory, HelpLevel.Verbose); hw.WriteOption( "/unsafe_MonitorFileAccesses[+|-]", Strings.HelpText_DisplayHelp_EnforceFileAccesses); hw.WriteOption( "/unsafe_IgnoreZwRenameFileInformation[+|-]", Strings.HelpText_DisplayHelp_IgnoreZwRenameFileInformation, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreZwOtherFileInformation[+|-]", Strings.HelpText_DisplayHelp_IgnoreZwOtherFileInformation, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreNonCreateFileReparsePoints[+|-]", Strings.HelpText_DisplayHelp_IgnoreNonCreateFileReparsePoints, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreSetFileInformationByHandle[+|-]", Strings.HelpText_DisplayHelp_IgnoreSetFileInformationByHandle, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreReparsePoints[+|-]", Strings.HelpText_DisplayHelp_IgnoreReparsePoints, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnorePreloadedDlls[+|-]", Strings.HelpText_DisplayHelp_IgnorePreloadedDlls, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreDynamicWritesOnAbsentProbes[+|-]", Strings.HelpText_DisplayHelp_IgnoreDynamicWritesOnAbsentProbes, HelpLevel.Verbose); hw.WriteOption( "/sandboxKind:<sandbox kind>", Strings.HelpText_DisplayHelp_SandboxKind, HelpLevel.Verbose); hw.WriteOption( "/unsafe_DisableDetours[+|-]", Strings.HelpText_DisplayHelp_DisableDetours, HelpLevel.Verbose); hw.WriteOption( "/logProcessDetouringStatus[+|-]", Strings.HelpText_DisplayHelp_LogProcessDetouringStatus, HelpLevel.Verbose); hw.WriteOption( "/hardExitOnErrorInDetours[+|-]", Strings.HelpText_DisplayHelp_HardExitOnErrorInDetours, HelpLevel.Verbose); hw.WriteOption( "/checkDetoursMessageCount[+|-]", Strings.HelpText_DisplayHelp_CheckDetoursMessageCount, HelpLevel.Verbose); hw.WriteOption( "/allowInternalDetoursErrorNotificationFile[+|-]", Strings.HelpText_DisplayHelp_AllowInternalDetoursErrorNotificationFile, HelpLevel.Verbose); #if PLATFORM_OSX hw.WriteOption( "/kextNumberOfKextConnections:<number>", Strings.HelpText_DisplayHelp_KextNumberOfKextConnections, HelpLevel.Verbose); hw.WriteOption( "/kextReportQueueSizeMb:<number>", Strings.HelpText_DisplayHelp_KextReportQueueSizeMb, HelpLevel.Verbose); hw.WriteOption( "/kextThrottleCpuUsageBlockThresholdPercent:<number>", Strings.HelpText_DisplayHelp_KextThrottleCpuUsageBlockThresholdPercent, HelpLevel.Verbose); hw.WriteOption( "/kextThrottleCpuUsageWakeupThresholdPercent:<number>", Strings.HelpText_DisplayHelp_KextThrottleCpuUsageWakeupThresholdPercent, HelpLevel.Verbose); hw.WriteOption( "/KextThrottleMinAvailableRamMB:<number>", Strings.HelpText_DisplayHelp_KextThrottleMinAvailableRamMB, HelpLevel.Verbose); #endif hw.WriteOption( "/unsafe_ExistingDirectoryProbesAsEnumerations[+|-]", Strings.HelpText_DisplayHelp_ExistingDirectoryProbesAsEnumerations, HelpLevel.Verbose); hw.WriteOption( "/unsafe_ignoreGetFinalPathNameByHandle[+|-]", Strings.HelpText_DisplayHelp_IgnoreGetFinalPathNameByHandle, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreNtCreateFile[+|-]", Strings.HelpText_DisplayHelp_IgnoreNtCreateFile, HelpLevel.Verbose); hw.WriteOption( "/unsafe_IgnoreZwCreateOpenQueryFamily[+|-]", Strings.HelpText_DisplayHelp_IgnoreZwCreateOpenQueryFamily, HelpLevel.Verbose); hw.WriteOption( "/unsafe_OptimizedAstConversion[+|-]", Strings.HelpText_DisplayHelp_OptimizedAstConversion, HelpLevel.Verbose); hw.WriteOption( "/unsafe_PreserveOutputs[+|-|:Reset]", Strings.HelpText_DisplayHelp_PreserveOutputs, HelpLevel.Verbose); hw.WriteOption( "/unsafe_UnexpectedFileAccessesAreErrors[+|-]", Strings.HelpText_DisplayHelp_UnexpectedFileAccessesAreErrors, HelpLevel.Verbose); hw.WriteOption( "/debug_LoadGraph:<fingerprint | path | name>", Strings.HelpText_DisplayHelp_LoadGraph, HelpLevel.Verbose); hw.WriteOption( "/launchDebugger", Strings.HelpText_DisplayHelp_LaunchDebugger, HelpLevel.Verbose); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_ScriptBanner); #region DScript hw.WriteOption( "/debugScript[+|-]", Strings.HelpText_DisplayHelp_ScriptDebugScript); hw.WriteOption( "/debuggerBreakOnExit[+|-]", Strings.HelpText_DisplayHelp_ScriptDebugScriptBreakOnExit); hw.WriteOption( "/debuggerPort", Strings.HelpText_DisplayHelp_ScriptDebugScriptPort); hw.WriteOption( "/unsafe_disableCycleDetection[+|-]", Strings.HelpText_DisplayHelp_DisableCycleDetection); hw.WriteOption( "/maxFrontEndConcurrency:<number of processes>", Strings.HelpText_DisplayHelp_MaxFrontEndConcurrency); hw.WriteOption( "/enableIncrementalFrontEnd:[+|-]", Strings.HelpText_DisplayHelp_EnableIncrementalFrontEnd); hw.WriteOption( "/maxTypeCheckingConcurrency[+|-]", Strings.HelpText_DisplayHelp_MaxTypeCheckingConcurrency); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_MsBuildBanner); #region MSBuild hw.WriteOption( "/msbuild.logVerbosity:<q[uiet] | m[inimal] | n[ormal] | d[etailed] | diag[nostic]>", Strings.HelpText_DisplayHelp_MsBuild_LogVerbosity); hw.WriteOption( "/msbuild.enableBinLogTracing[+|-]", Strings.HelpText_DisplayHelp_MsBuild_EnableBinLogTracing); hw.WriteOption( "/msbuild.enableEngineTracing[+|-]", Strings.HelpText_DisplayHelp_MsBuild_EnableEngineTracing); #endregion hw.WriteBanner(Strings.HelpText_DisplayHelp_MiscBanner); #region Misc hw.WriteOption( "/usePartialEvaluation[+|-]", Strings.HelpText_DisplayHelp_UsePartialEvaluation, HelpLevel.Verbose); hw.WriteOption( "@<file>", Strings.HelpText_DisplayHelp_ResponseFile); hw.WriteOption( "/help:[standard|verbose]", Strings.HelpText_DisplayHelp_Help); hw.WriteOption( "/interactive[+|-]", Strings.HelpText_DisplayHelp_Interactive, HelpLevel.Verbose); hw.WriteOption( "/noLogo", Strings.HelpText_DisplayHelp_NoLogo); hw.WriteOption( "/snap:<file>", Strings.HelpText_DisplayHelp_Snapshot, HelpLevel.Verbose); hw.WriteOption( "/snapshotMode:<snapshot mode>", Strings.HelpText_DisplayHelp_SnapshotMode, HelpLevel.Verbose); hw.WriteOption( "/viewer:<mode>", Strings.HelpText_DisplayHelp_ViewerOptions); hw.WriteOption( "/relatedActivityId:<guid>", Strings.HelpText_DiplayHelp_RelatedActivityId, HelpLevel.Verbose); hw.WriteOption( "/vs[+|-]", Strings.HelpText_DiplayHelp_VS); hw.WriteOption( "/solutionName:<string>", Strings.HelpText_DisplayHelp_SolutionName, HelpLevel.Verbose); hw.WriteOption( "/vsOutputSrc[+|-]", Strings.HelpText_DisplayHelp_VsOutputSrc, HelpLevel.Verbose); hw.WriteOption( "/symlinkDefinitionFile:<file>", Strings.HelpText_DisplayHelp_SymlinkDefinitionFile); hw.WriteOption( "/inputChanges:<file>", Strings.HelpText_DisplayHelp_InputChanges); hw.WriteOption( "/telemetryTagPrefix:<string>", Strings.HelpText_DisplayHelp_TelemetryTagPrefix); hw.WriteOption( "/populateSymlinkDirectory:<file>", Strings.HelpText_DisplayHelp_PopulateSymlinkDirectory); hw.WriteOption( "/unsafe_LazySymlinkCreation[+|-]", Strings.HelpText_DisplayHelp_LazySymlinkCreation); hw.WriteOption( "/unsafe_LazySymlinkCreation[+|-]", Strings.HelpText_DisplayHelp_LazySymlinkCreation); hw.WriteOption( "/unexpectedSymlinkAccessReportingMode:<mode>", Strings.HelpText_DisplayHelp_UnexpectedSymlinkAccessReportingMode); hw.WriteOption( "/unsafe_DisableGraphPostValidation[+|-]", Strings.HelpText_DisplayHelp_DisableGraphPostValidation); hw.WriteOption( "/logPipStaticFingerprintTexts[+|-]", Strings.HelpText_DisplayHelp_LogPipStaticFingerprintTexts); hw.WriteOption( "/posixDeleteMode:[NoRun|RunFirst|RunLast]", Strings.HelpText_DisplayHelp_PosixDeleteMode); #endregion if (helpLevel < HelpLevel.Verbose) { hw.WriteLine(); hw.WriteLine(Strings.HelpText_DisplayHelp_ShowingStandardHelp); } }
private static void WriteFileConsumptionAnalyzerHelp(HelpWriter writer) { writer.WriteBanner("File Consumption Analyzer"); writer.WriteModeOption(nameof(AnalysisMode.FileConsumption), "Collects information about produced/consumed files"); writer.WriteOption("outputDirectory", "Required. The directory where to write the results", shortName: "o"); }
/// <summary> /// Writes the mode flag help for each analyzer. /// </summary> public static void WriteModeOption(this HelpWriter writer, string modeName, string description, HelpLevel level = HelpLevel.Standard) { writer.WriteOption("mode", string.Format("\"{0}\". {1}", modeName, description), level: level, shortName: "m"); }
/// <inheritdoc /> public override void WriteHelp(HelpWriter writer) { writer.WriteOption("specialAddIfFormatting[+|-]", "Whether addIf functions should be printed in a non-standard way.", shortName: "s"); base.WriteHelp(writer); }
private static void WritePipGraphExporterHelp(HelpWriter writer) { writer.WriteBanner("Pip Graph Export Analysis"); writer.WriteModeOption(nameof(AnalysisMode.ExportGraph), "Generates a JSON file containing pip graph and runtime info"); writer.WriteOption("outputFile", "Required. The directory containing the cached pip graph files.", shortName: "o"); }
private static void WritePerfSummaryAnalyzerHelp(HelpWriter writer) { writer.WriteBanner("Performance Summary Analysis"); writer.WriteModeOption(nameof(AnalysisMode.PerfSummary), "Dumps an html file that contains a performance summary"); writer.WriteOption("outputFile", "Required. The location of the output file for critical path analysis.", shortName: "o"); }
private static void WriteCosineJsonExportHelp(HelpWriter writer) { writer.WriteBanner("Cosine Json Export Analysis"); writer.WriteModeOption(nameof(AnalysisMode.ExportGraph), "Generates a JSON file containing pip graph and runtime info"); writer.WriteOption("outputFile", "Required. The json file to create.", shortName: "o"); }
private static void WriteBuildSimulatorHelp(HelpWriter writer) { writer.WriteBanner("Build Simulation Analysis"); writer.WriteModeOption(nameof(AnalysisMode.Simulate), "EXPERIMENTAL. Build Simulator"); writer.WriteOption("outputFile", "Required. The file where to write the results", shortName: "o"); }
/// <summary> /// Main method for outputting help text to the screen /// </summary> private static void WriteHelp() { HelpWriter writer = new HelpWriter(); writer.WriteBanner("bxlcacheanalyzer.exe is a tool for doing statistical analysis, input list analysis and consistency checking of a cache."); writer.WriteLine("bxlcacheanalyzer.exe [/statisticalAnalysis [/contentAnalysis] | /consistencyCheck [/rehashCASContent] | inputAssertionListDump [/inputAssertionListDumpMustIncludeRegex] [/inputAssertionListDumpMustNotIncludeRegex] | /inputAssertionListCheck [/inputAssertionListSizeDisparityMinimumFactor:double]] | [/contentBreakdown] " + "[/jsonString:string | /jsonFile:string] " + "[/sessionIDFilter:string | /weakFingerprintInputFilepath:string] " + "[/outputFile:string] " + "[/weakFingerprintOutputFilepath:string]"); writer.WriteLine(); writer.WriteOption("statisticalAnalysis", "If specified, performs a statistical analysis of the cache and outputs the results in CSV format", shortName: "sa"); writer.WriteOption("contentAnalysis", "If specified, includes per-session content size in the statistical analysis", shortName: "ca"); writer.WriteOption("consistencyCheck", "If specified, performs a consistency check of the cache", shortName: "cc"); writer.WriteOption("rehashCASContent", "If specified, all content in the CAS will be rehashed to see if any of the content has been corrupted", shortName: "rc"); writer.WriteOption("inputAssertionListDump", "If specified, all strong fingerprints found will have their input assertion lists dumped", shortName: "id"); writer.WriteOption("inputAssertionListDumpMustIncludeRegex", "Regex that must match in the input list", shortName: "ii"); writer.WriteOption("inputAssertionListDumpMustNotIncludeRegex", "Regex that must not match in the input list", shortName: "in"); writer.WriteOption("inputAssertionListCheck", "If specified, performs a check of all input assertion lists for each weak fingerprint to look for major discrepancies in list size", shortName: "ic"); writer.WriteOption("inputAssertionListSizeDisparityMinimumFactor", "Sets the minimum factor of size disparity between input assertion lists of same weak fingerprint, defaults to " + InputAssertionListChecker.DefaultDisparityFactor, shortName: "mf"); writer.WriteOption("contentBreakdown", "If specified, produce a CSV breaking down content for each session.", shortName: "cb"); writer.WriteOption("jsonString", "JSON Config string of the cache", shortName: "js"); writer.WriteOption("jsonFile", "File containing the JSON Config string of the cache", shortName: "jf"); writer.WriteOption("sessionIDFilter", "Limits the analysis to only session IDs that match the specified regex string", shortName: "sf"); writer.WriteOption("weakFingerprintInputFilepath", "If specified, the requested operations will be done with the weak fingerprints contained in the specified file (except for statisticalAnalysis which is always through sessions)", shortName: "wi"); writer.WriteOption("outputFile", "The output of the tool is redirected to the file specified. If no file is specified, the output is directed to the console", shortName: "of"); writer.WriteOption("weakFingerprintOutputFilepath", "If specified, all weak fingerprints found during execution (except for statisticalAnalysis) will be output to the specified file", shortName: "wo"); }
private static void WriteIncrementalSchedulingStateAnalyzerHelp(HelpWriter writer) { writer.WriteBanner("Incremental Scheduling State Analysis"); writer.WriteModeOption(nameof(AnalysisMode.IncrementalSchedulingState), "Generates textual format of incremental scheduling state"); writer.WriteOption("outputFile", "Required. The output file.", shortName: "o"); }
private static void WriteFilterLogHelp(HelpWriter writer) { writer.WriteBanner("Filter Log Analysis"); writer.WriteOption("exclude", "Required. An execution event id name to exclude from the filtered execution log."); writer.WriteOption("outputFile", "Required. The file where to write the filtered execution log.", shortName: "o"); }
private static void WriteObservedInputSummaryHelp(HelpWriter writer) { writer.WriteBanner("Observed Input Summary Analysis"); writer.WriteModeOption(nameof(AnalysisMode.ObservedInputSummary), "Generates a text file containing summary level information about ObservedInputs"); writer.WriteOption("outputFile", "Required. The file where to write the results", shortName: "o"); }