public void ReturnsRightFullPath(string path, string expectedPath) { var assembly = GetType().Assembly; var fileLogListener = new FileLogListener(path, 25000, assembly); fileLogListener.FilePath = path; var returnedPath = fileLogListener.FilePath; var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); returnedPath = returnedPath.Replace(appDataPath, "{AppData}"); Assert.AreEqual(expectedPath, returnedPath); }
public static ILogListener CreateFileLogListener(string prefix) { Argument.IsNotNull(() => prefix); var directory = Path.Combine(Path.GetApplicationDataDirectory(), "log"); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } var fileName = Path.Combine(directory, prefix + "_{Date}_{Time}_{ProcessId}"); var fileLogListener = new FileLogListener(fileName, 10 * 1024); return fileLogListener; }
public static int Link(Context context) { int? exitCode = null; var stopWatch = new Stopwatch(); stopWatch.Start(); context.ValidateContext(); if (!string.IsNullOrEmpty(context.LogFile)) { var fileLogListener = new FileLogListener(context.LogFile, 25 * 1024); fileLogListener.IsDebugEnabled = context.IsDebug; fileLogListener.IgnoreCatelLogging = true; LogManager.AddListener(fileLogListener); } if (!PdbStrHelper.IsPdbStrAvailable()) { Log.Error("PdbStr is not found on the computer, please install 'Debugging Tools for Windows'"); return -1; } try { var projects = new List<Project>(); string[] solutionFiles; if (string.IsNullOrEmpty(context.SolutionFile)) { solutionFiles = Directory.GetFiles(context.SolutionDirectory, "*.sln", SearchOption.AllDirectories); } else { var pathToSolutionFile = Path.Combine(context.SolutionDirectory, context.SolutionFile); if (!File.Exists(pathToSolutionFile)) { Log.Error("Could not find solution file: " + pathToSolutionFile); return -1; } solutionFiles = new[] { pathToSolutionFile }; } foreach (var solutionFile in solutionFiles) { var solutionProjects = ProjectHelper.GetProjects(solutionFile, context.ConfigurationName, context.PlatformName); projects.AddRange(solutionProjects); } var provider = context.Provider; if (provider == null) { Log.ErrorAndThrowException<GitLinkException>("Cannot find a matching provider for '{0}'", context.TargetUrl); } Log.Info("Using provider '{0}'", provider.GetType().Name); var shaHash = context.Provider.GetShaHashOfCurrentBranch(context); Log.Info("Using commit sha '{0}' as version stamp", shaHash); var projectCount = projects.Count(); var failedProjects = new List<Project>(); Log.Info("Found '{0}' project(s)", projectCount); Log.Info(string.Empty); foreach (var project in projects) { try { if (project.ShouldBeIgnored(context.IgnoredProjects)) { Log.Info("Ignoring '{0}'", project.GetProjectName()); Log.Info(string.Empty); continue; } if (context.IsDebug) { project.DumpProperties(); } if (!LinkProject(context, project, shaHash)) { failedProjects.Add(project); } } catch (Exception) { failedProjects.Add(project); } } Log.Info("All projects are done. {0} of {1} succeeded", projectCount - failedProjects.Count, projectCount); if (failedProjects.Count > 0) { Log.Info(string.Empty); Log.Info("The following projects have failed:"); Log.Indent(); foreach (var failedProject in failedProjects) { Log.Info("* {0}", context.GetRelativePath(failedProject.GetProjectName())); } Log.Unindent(); } exitCode = (failedProjects.Count == 0) ? 0 : -1; } catch (GitLinkException ex) { Log.Error(ex, "An error occurred"); } catch (Exception ex) { Log.Error(ex, "An unexpected error occurred"); } stopWatch.Stop(); Log.Info(string.Empty); Log.Info("Completed in '{0}'", stopWatch.Elapsed); return exitCode ?? -1; }
/// <summary> /// Initializes a new instance of the <see cref="ShellWindow"/> class. /// </summary> /// <remarks>This method is required for design time support.</remarks> public ShellWindow() : base(DataWindowMode.Custom, setOwnerAndFocus: false) { var currentLogFileName = TaskRunnerEnvironment.CurrentLogFileName; if (File.Exists(currentLogFileName)) { File.Delete(currentLogFileName); } var fileLogListener = new FileLogListener(currentLogFileName, 25*1000) { IgnoreCatelLogging = true, IsDebugEnabled = false }; LogManager.AddListener(fileLogListener); var serviceLocator = this.GetServiceLocator(); var taskRunnerService = serviceLocator.ResolveType<ITaskRunnerService>(); var commandManager = serviceLocator.ResolveType<ICommandManager>(); var uiVisualizerService = serviceLocator.ResolveType<IUIVisualizerService>(); if (taskRunnerService.ShowCustomizeShortcutsButton) { AddCustomButton(new DataWindowButton("Keyboard shortcuts", () => uiVisualizerService.ShowDialog<KeyboardMappingsOverviewViewModel>())); } serviceLocator.RegisterInstance<IAboutInfoService>(taskRunnerService); if (taskRunnerService.GetAboutInfo() != null) { var aboutService = serviceLocator.ResolveType<IAboutService>(); commandManager.RegisterAction("Help.About", aboutService.ShowAbout); AddCustomButton(new DataWindowButton("About", commandManager.GetCommand("Help.About"))); } ThemeHelper.EnsureApplicationThemes(GetType().Assembly, true); InitializeComponent(); serviceLocator.RegisterInstance<ILogControlService>(new LogControlService(traceOutputControl)); ConfigurationContext = taskRunnerService.GetViewDataContext(); var startupSize = taskRunnerService.GetInitialWindowSize(); if (startupSize != null && !startupSize.IsEmpty) { bool setWidth = startupSize.Width > 0d; bool setHeight = startupSize.Height > 0d; if (setHeight && setWidth) { SizeToContent = SizeToContent.Manual; } else if (setHeight) { SizeToContent = SizeToContent.Width; } else if (setWidth) { SizeToContent = SizeToContent.Height; } else { SizeToContent = SizeToContent.WidthAndHeight; } if (setWidth) { MinWidth = startupSize.Width; Width = startupSize.Width; } if (setHeight) { MinHeight = startupSize.Height; Height = startupSize.Height; } } var view = taskRunnerService.GetView(); contentControl.Content = view; }
public static int Link(Context context) { int? exitCode = null; var stopWatch = new Stopwatch(); stopWatch.Start(); context.ValidateContext(); if (!string.IsNullOrEmpty(context.LogFile)) { var fileLogListener = new FileLogListener(context.LogFile, 25 * 1024); fileLogListener.IsDebugEnabled = context.IsDebug; fileLogListener.IgnoreCatelLogging = true; LogManager.AddListener(fileLogListener); } using (var temporaryFilesContext = new TemporaryFilesContext()) { Log.Info("Extracting embedded pdbstr.exe"); var pdbStrFile = temporaryFilesContext.GetFile("pdbstr.exe"); ResourceHelper.ExtractEmbeddedResource("GitLink.Resources.Files.pdbstr.exe", pdbStrFile); try { var projects = new List<Project>(); string[] solutionFiles; if (string.IsNullOrEmpty(context.SolutionFile)) { solutionFiles = Directory.GetFiles(context.SolutionDirectory, "*.sln", SearchOption.AllDirectories); } else { var pathToSolutionFile = Path.Combine(context.SolutionDirectory, context.SolutionFile); if (!File.Exists(pathToSolutionFile)) { Log.Error("Could not find solution file: {0}", pathToSolutionFile); return -1; } solutionFiles = new[] { pathToSolutionFile }; } foreach (var solutionFile in solutionFiles) { var solutionProjects = ProjectHelper.GetProjects(solutionFile, context.ConfigurationName, context.PlatformName); projects.AddRange(solutionProjects); } var provider = context.Provider; if (provider == null) { throw Log.ErrorAndCreateException<GitLinkException>("Cannot find a matching provider for '{0}'", context.TargetUrl); } Log.Info("Using provider '{0}'", provider.GetType().Name); var shaHash = context.Provider.GetShaHashOfCurrentBranch(context, temporaryFilesContext); Log.Info("Using commit sha '{0}' as version stamp", shaHash); var projectCount = projects.Count(); var failedProjects = new List<Project>(); Log.Info("Found '{0}' project(s)", projectCount); Log.Info(string.Empty); foreach (var project in projects) { try { var projectName = project.GetProjectName(); if (ProjectHelper.ShouldBeIgnored(projectName, context.IncludedProjects, context.IgnoredProjects)) { Log.Info("Ignoring '{0}'", project.GetProjectName()); Log.Info(string.Empty); continue; } if (context.IsDebug) { project.DumpProperties(); } if (!LinkProject(context, project, pdbStrFile, shaHash, context.PdbFilesDirectory)) { failedProjects.Add(project); } } catch (Exception) { failedProjects.Add(project); } } Log.Info("All projects are done. {0} of {1} succeeded", projectCount - failedProjects.Count, projectCount); if (failedProjects.Count > 0) { Log.Info(string.Empty); Log.Info("The following projects have failed:"); Log.Indent(); foreach (var failedProject in failedProjects) { Log.Info("* {0}", context.GetRelativePath(failedProject.GetProjectName())); } Log.Unindent(); } exitCode = (failedProjects.Count == 0) ? 0 : -1; } catch (GitLinkException ex) { Log.Error(ex, "An error occurred"); } catch (Exception ex) { Log.Error(ex, "An unexpected error occurred"); } stopWatch.Stop(); } Log.Info(string.Empty); Log.Info("Completed in '{0}'", stopWatch.Elapsed); exitCode = exitCode ?? -1; if (context.ErrorsAsWarnings && exitCode != 0) { Log.Info("One or more errors occurred, but treating it as warning instead"); exitCode = 0; } return exitCode.Value; }