// Returns the path of the ChangeLog where changes of the provided file have to be logged.
        // Returns null if no ChangeLog could be found.
        // Returns an empty string if changes don't have to be logged.
        public static string GetChangeLogForFile(string baseCommitPath, FilePath file, out SolutionItem parentEntry, out ChangeLogPolicy policy)
        {
            parentEntry = null;
            policy      = null;
            if (!IdeApp.Workspace.IsOpen)
            {
                return(null);
            }

            // Find the project that contains the file. If none is found
            // find a combine entry at the file location
            string bestPath = null;

            file = file.CanonicalPath;

            foreach (SolutionItem e in IdeApp.Workspace.GetAllSolutionItems())
            {
                if (e is Project && ((Project)e).Files.GetFile(file) != null)
                {
                    parentEntry = e;
                    break;
                }
                FilePath epath = e.BaseDirectory.CanonicalPath;
                if ((file == epath || file.IsChildPathOf(epath)) && (bestPath == null || bestPath.Length < epath.ToString().Length))
                {
                    bestPath    = epath.ToString();
                    parentEntry = e;
                }
            }

            if (parentEntry == null)
            {
                return(null);
            }

            policy = GetPolicy(parentEntry);

            if (baseCommitPath == null)
            {
                baseCommitPath = parentEntry.ParentSolution.BaseDirectory;
            }

            baseCommitPath = FileService.GetFullPath(baseCommitPath);

            if (policy.VcsIntegration == VcsIntegration.None)
            {
                return("");
            }

            switch (policy.UpdateMode)
            {
            case ChangeLogUpdateMode.None:
                return(string.Empty);

            case ChangeLogUpdateMode.Nearest: {
                string dir = FileService.GetFullPath(Path.GetDirectoryName(file));

                do
                {
                    string cf = Path.Combine(dir, "ChangeLog");
                    if (File.Exists(cf))
                    {
                        return(cf);
                    }
                    dir = Path.GetDirectoryName(dir);
                } while (dir.Length >= baseCommitPath.Length);

                return(null);
            }

            case ChangeLogUpdateMode.ProjectRoot:
                return(Path.Combine(parentEntry.BaseDirectory, "ChangeLog"));

            case ChangeLogUpdateMode.Directory:
                string fileDir = Path.GetDirectoryName(file);
                return(Path.Combine(fileDir, "ChangeLog"));

            default:
                LoggingService.LogError("Could not handle ChangeLogUpdateMode: " + policy.UpdateMode);
                return(null);
            }
        }
Exemple #2
0
        public static CommitMessageStyle GetMessageStyle(SolutionItem item)
        {
            ChangeLogPolicy policy = item != null?GetPolicy(item) : new ChangeLogPolicy();

            return(policy.MessageStyle);
        }