private void HandleEventInDotGit(Event fileEvent, NPath fileA, NPath fileB = null) { if (fileA.Equals(paths.DotGitConfig)) { Logger.Trace("ConfigChanged"); ConfigChanged?.Invoke(); } else if (fileA.Equals(paths.DotGitHead)) { string headContent = null; if (fileEvent.Type != EventType.DELETED) { headContent = paths.DotGitHead.ReadAllLines().FirstOrDefault(); } Logger.Trace("HeadChanged: {0}", headContent ?? "[null]"); HeadChanged?.Invoke(headContent); } else if (fileA.Equals(paths.DotGitIndex)) { Logger.Trace("IndexChanged"); IndexChanged?.Invoke(); } else if (fileA.IsChildOf(paths.RemotesPath)) { var relativePath = fileA.RelativeTo(paths.RemotesPath); var relativePathElements = relativePath.Elements.ToArray(); if (!relativePathElements.Any()) { return; } var origin = relativePathElements[0]; if (fileEvent.Type == EventType.DELETED) { if (fileA.ExtensionWithDot == ".lock") { return; } var branch = string.Join(@"/", relativePathElements.Skip(1).ToArray()); Logger.Trace("RemoteBranchDeleted: {0}/{1}", origin, branch); RemoteBranchDeleted?.Invoke(origin, branch); } else if (fileEvent.Type == EventType.RENAMED) { if (fileA.ExtensionWithDot != ".lock") { return; } if (fileB != null && fileB.FileExists()) { if (fileA.FileNameWithoutExtension == fileB.FileNameWithoutExtension) { var branchPathElement = relativePathElements.Skip(1) .Take(relativePathElements.Length - 2) .Union(new [] { fileA.FileNameWithoutExtension }).ToArray(); var branch = string.Join(@"/", branchPathElement); Logger.Trace("RemoteBranchCreated: {0}/{1}", origin, branch); RemoteBranchCreated?.Invoke(origin, branch); } } } } else if (fileA.IsChildOf(paths.BranchesPath)) { if (fileEvent.Type == EventType.MODIFIED) { if (fileA.DirectoryExists()) { return; } if (fileA.ExtensionWithDot == ".lock") { return; } var relativePath = fileA.RelativeTo(paths.BranchesPath); var relativePathElements = relativePath.Elements.ToArray(); if (!relativePathElements.Any()) { return; } var branch = string.Join(@"/", relativePathElements.ToArray()); Logger.Trace("LocalBranchChanged: {0}", branch); LocalBranchChanged?.Invoke(branch); } else if (fileEvent.Type == EventType.DELETED) { if (fileA.ExtensionWithDot == ".lock") { return; } var relativePath = fileA.RelativeTo(paths.BranchesPath); var relativePathElements = relativePath.Elements.ToArray(); if (!relativePathElements.Any()) { return; } var branch = string.Join(@"/", relativePathElements.ToArray()); Logger.Trace("LocalBranchDeleted: {0}", branch); LocalBranchDeleted?.Invoke(branch); } else if (fileEvent.Type == EventType.RENAMED) { if (fileA.ExtensionWithDot != ".lock") { return; } if (fileB != null && fileB.FileExists()) { if (fileA.FileNameWithoutExtension == fileB.FileNameWithoutExtension) { var relativePath = fileB.RelativeTo(paths.BranchesPath); var relativePathElements = relativePath.Elements.ToArray(); if (!relativePathElements.Any()) { return; } var branch = string.Join(@"/", relativePathElements.ToArray()); Logger.Trace("LocalBranchCreated: {0}", branch); LocalBranchCreated?.Invoke(branch); } } } } }