Beispiel #1
0
        public static IRepositoryHostPlugin TryGetGitHosterForModule(GitModule aModule)
        {
            if (!aModule.ValidWorkingDir())
                return null;

            return GitHosters.FirstOrDefault(gitHoster => gitHoster.GitModuleIsRelevantToMe(aModule));
        }
        public CommitData GetOldCommitData(GitModule submodule)
        {
            if (submodule == null || !submodule.ValidWorkingDir())
                return null;

            string error = "";
            return CommitData.GetCommitData(submodule, OldCommit, ref error);
        }
        public void CheckIsCommitNewer(GitModule submodule)
        {
            if (submodule == null || !submodule.ValidWorkingDir())
                return;

            string baseCommit = submodule.GetMergeBase(Commit, OldCommit);
            IsCommitNewer = baseCommit == OldCommit;
        }
        private void FetchData()
        {
            Loading.Visible = true;

            CommitCount.Text = "";
            var dict = new Dictionary<string, HashSet<string>>();
            var items = CommitCounter.GroupAllCommitsByContributor().Item1;
            if (cbIncludeSubmodules.Checked)
            {
                IList<string> submodules = Settings.Module.GetSubmodulesNames();
                GitModule submodule = new GitModule();
                foreach (var submoduleName in submodules)
                {
                    submodule.WorkingDir = Settings.Module.WorkingDir + submoduleName + Settings.PathSeparator.ToString();
                    if (submodule.ValidWorkingDir())
                    {
                        var submoduleItems = CommitCounter.GroupAllCommitsByContributor(submodule).Item1;
                        foreach (var keyValuePair in submoduleItems)
                        {
                            if (!dict.ContainsKey(keyValuePair.Key))
                                dict.Add(keyValuePair.Key, new HashSet<string>());
                            dict[keyValuePair.Key].Add(submodule.SubmoduleName);
                            if (items.ContainsKey(keyValuePair.Key))
                                items[keyValuePair.Key] += keyValuePair.Value;
                            else
                                items.Add(keyValuePair.Key, keyValuePair.Value);
                        }
                    }
                }
            }

            var sortedItems = from pair in items
                        orderby pair.Value descending
                        select pair;

            foreach (var keyValuePair in sortedItems)
            {
                string submodulesList = "";
                if (dict.ContainsKey(keyValuePair.Key))
                {
                    var sub = dict[keyValuePair.Key];
                    if (sub.Count == 1)
                    {
                        foreach (var item in dict[keyValuePair.Key])
                            submodulesList = " [" + item + "]";
                    }
                    else
                        submodulesList = " [" + sub.Count.ToString() + " submodules]";
                }
                CommitCount.Text += string.Format("{0,6} - {1}{2}\r\n", keyValuePair.Value, keyValuePair.Key, submodulesList);
            }

            Loading.Visible = false;
        }
 private void BranchDropDown(object sender, EventArgs e)
 {
     GitModule module = new GitModule(Directory.Text);
     Branch.DisplayMember = "Name";
     IList<GitHead> heads;
     if (module.ValidWorkingDir())
         heads = module.GetHeads(false);
     else
         heads = new List<GitHead>();
     heads.Insert(0, GitHead.NoHead(module));
     Branch.DataSource = heads;
 }
Beispiel #6
0
        private void OpenPath(string path)
        {
            GitModule module = new GitModule(path);

            if (!module.ValidWorkingDir())
            {
                DialogResult dialogResult = MessageBox.Show(this, directoryIsNotAValidRepository.Text,
                    directoryIsNotAValidRepositoryCaption.Text, MessageBoxButtons.YesNoCancel,
                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                if (dialogResult == DialogResult.Cancel)
                {
                    return;
                }
                if (dialogResult == DialogResult.Yes)
                {
                    Repositories.RepositoryHistory.RemoveRecentRepository(path);
                    Refresh();
                    return;
                }
            }

            Repositories.AddMostRecentRepository(module.WorkingDir);
            OnModuleChanged(module);
        }
Beispiel #7
0
        private void groupLayoutPanel_DragDrop(object sender, DragEventArgs e)
        {
            var fileNameArray = e.Data.GetData(DataFormats.FileDrop) as string[];
            if (fileNameArray != null)
            {
                if (fileNameArray.Length != 1)
                    return;

                string dir = fileNameArray[0];
                if (!string.IsNullOrEmpty(dir) && Directory.Exists(dir))
                {
                    GitModule module = new GitModule(dir);

                    if (!module.ValidWorkingDir())
                    {
                        DialogResult dialogResult = MessageBox.Show(this, directoryIsNotAValidRepositoryOpenIt.Text,
                            directoryIsNotAValidRepositoryCaption.Text, MessageBoxButtons.YesNo,
                            MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);
                        if (dialogResult == DialogResult.No)
                            return;
                    }

                    Repositories.AddMostRecentRepository(module.WorkingDir);
                    OnModuleChanged(module);
                }
                return;
            }
            var text = e.Data.GetData(DataFormats.UnicodeText) as string;
            if (!string.IsNullOrEmpty(text))
            {
                var lines = text.Split('\n');
                if (lines.Length != 1)
                    return;
                string url = lines[0];
                if (!string.IsNullOrEmpty(url))
                {
                    UICommands.StartCloneDialog(this, url, false, OnModuleChanged);
                }
            }
        }
Beispiel #8
0
 private bool IsSubmodulesIntialized()
 {
     // Fast submodules check
     var submodules = Settings.Module.GetSubmodulesNames();
     GitModule submodule = new GitModule();
     foreach (var submoduleName in submodules)
     {
         submodule.WorkingDir = Settings.Module.WorkingDir + submoduleName + Settings.PathSeparator.ToString();
         if (!submodule.ValidWorkingDir())
             return false;
     }
     return true;
 }
        private void ChangeWorkingDir(string path)
        {
            GitModule module = new GitModule(path);

            if (!module.ValidWorkingDir())
            {
                DialogResult dialogResult = MessageBox.Show(this, directoryIsNotAValidRepository.Text,
                    directoryIsNotAValidRepositoryCaption.Text, MessageBoxButtons.YesNoCancel,
                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                if (dialogResult == DialogResult.Yes)
                {
                    Repositories.RepositoryHistory.RemoveRecentRepository(path);
                    return;
                }
                else if (dialogResult == DialogResult.Cancel)
                    return;
            }

            SetGitModule(module);
        }
 private bool IsSubmodulesIntialized()
 {
     // Fast submodules check
     var submodules = Settings.Module.GetSubmodulesLocalPaths();
     GitModule submodule = new GitModule();
     foreach (var submoduleName in submodules)
     {
         submodule.WorkingDir = Settings.Module.GetSubmoduleFullPath(submoduleName);
         if (!submodule.ValidWorkingDir())
             return false;
     }
     return true;
 }
        public static string ProcessSubmodulePatch(string text)
        {
            StringBuilder sb = new StringBuilder();
            using (StringReader reader = new StringReader(text))
            {
                string line;
                string module = "";
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.StartsWith("+++ "))
                    {
                        module = line.Substring("+++ ".Length);
                        var list = module.Split(new char[] { ' ' }, 2);
                        module = list.Length > 0 ? list[0] : "";
                        if (module.Length > 2 && module[1] == '/')
                        {
                            module = module.Substring(2);
                            break;
                        }
                    }
                }
                sb.AppendLine("Submodule " + module + " Change");
                string fromHash = null;
                string toHash = null;
                bool dirtyFlag = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Subproject"))
                    {
                        sb.AppendLine();
                        char c = line[0];
                        const string commit = "commit ";
                        string hash = "";
                        int pos = line.IndexOf(commit);
                        if (pos >= 0)
                            hash = line.Substring(pos + commit.Length);
                        bool bdirty = hash.EndsWith("-dirty");
                        dirtyFlag |= bdirty;
                        hash = hash.Replace("-dirty", "");
                        string dirty = !bdirty ? "" : " (dirty)";
                        if (c == '-')
                        {
                            fromHash = hash;
                            sb.AppendLine("From:\t" + hash + dirty);
                        }
                        else if (c == '+')
                        {
                            toHash = hash;
                            sb.AppendLine("To:\t\t" + hash + dirty);
                        }

                        string path = Settings.Module.GetSubmoduleFullPath(module);
                        GitModule gitmodule = new GitModule(path);
                        if (gitmodule.ValidWorkingDir())
                        {
                            string error = "";
                            CommitData commitData = CommitData.GetCommitData(gitmodule, hash, ref error);
                            if (commitData != null)
                            {
                                sb.AppendLine("\t\t\t\t\t" + GitCommandHelpers.GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + commitData.CommitDate.LocalDateTime.ToString(" (ddd MMM dd HH':'mm':'ss yyyy)"));
                                var delim = new char[] { '\n', '\r' };
                                var lines = commitData.Body.Trim(delim).Split(new string[] { "\r\n" }, 0);
                                foreach (var curline in lines)
                                    sb.AppendLine("\t\t" + curline);
                            }
                            if (fromHash != null && toHash != null)
                            {
                                if (dirtyFlag)
                                {
                                    string status = gitmodule.GetStatusText(false);
                                    if (!String.IsNullOrEmpty(status))
                                    {
                                        sb.AppendLine("\nStatus:");
                                        sb.Append(status);
                                    }
                                }

                                string diffs = gitmodule.GetDiffFilesText(fromHash, toHash);
                                if (!String.IsNullOrEmpty(diffs))
                                {
                                    sb.AppendLine("\nDifferences:");
                                    sb.Append(diffs);
                                }
                            }
                        }
                        else
                            sb.AppendLine();
                    }
                }
            }
            return sb.ToString();
        }
Beispiel #12
0
        private string ProcessSubmodulePatch(string text)
        {
            StringBuilder sb = new StringBuilder();
            using (StringReader reader = new StringReader(text))
            {
                string line = reader.ReadLine();
                const string gitstr = "--git ";
                string module = "";
                int pos = line.IndexOf(gitstr);
                if (pos >= 0)
                {
                    module = line.Substring(pos + gitstr.Length);
                    var list = module.Split(new char[] {' '},2);
                    module = list.Length > 0 ? list[0] : "";
                    if (module.StartsWith("a/"))
                        module = module.Substring(2);
                }
                sb.AppendLine("Submodule " + module + " Change");
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Subproject"))
                    {
                        sb.AppendLine();
                        char c = line[0];
                        const string commit = "commit ";
                        string hash = "";
                        pos = line.IndexOf(commit);
                        if (pos >= 0)
                            hash = line.Substring(pos + commit.Length);
                        bool bdirty = hash.EndsWith("-dirty");
                        hash = hash.Replace("-dirty", "");
                        string dirty = !bdirty ? "" : " (dirty)";
                        if (c == '-')
                            sb.AppendLine("From:\t" + hash + dirty);
                        else if (c == '+')
                            sb.AppendLine("To:\t\t" + hash + dirty);

                        string path = Settings.Module.GetSubmoduleFullPath(module);
                        GitModule gitmodule = new GitModule(path);
                        if (gitmodule.ValidWorkingDir())
                        {
                            string error = "";
                            CommitData commitData = CommitData.GetCommitData(gitmodule, hash, ref error);
                            if (commitData != null)
                            {
                                sb.AppendLine("\t\t\t\t\t" + GitCommandHelpers.GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + commitData.CommitDate.LocalDateTime.ToString(" (ddd MMM dd HH':'mm':'ss yyyy)"));
                                sb.AppendLine("\t\t" + commitData.Body.Trim(new char[] {'\n', '\r'}));
                            }
                        }
                        else
                            sb.AppendLine();
                    }
                }
            }
            return sb.ToString();
        }