public void SetDiffs(GitRevision selectedRev = null, GitRevision parentRev = null, IList <GitItemStatus> items = null)
        {
            Revision = selectedRev;
            if (parentRev == null)
            {
                parentRev = new GitRevision("");
            }
            IGitItemsWithParents dictionary = items == null ? null :
                                              dictionary = new GitItemsWithParents {
                { parentRev, items }
            };

            GitItemStatusesWithParents = dictionary;
        }
示例#2
0
        public void SetDiffs(IList <GitRevision> revisions)
        {
            if (revisions == null || revisions.Count == 0)
            {
                Revision = null;
            }
            else
            {
                Revision = revisions[0];
            }

            var dictionary = new GitItemsWithParents();

            NoFiles.Text = _noDiffFilesChangesDefaultText; // Temporary
            if (revisions.Count > 2)
            {
                // Not a limitations, to keep compatibility with existing RevisionDiff
                NoFiles.Text = _UnsupportedMultiselectAction.Text;
            }
            else if (Revision != null)
            {
                GitRevision[] parentRevs;
                if (revisions.Count == 1)
                {
                    var list = new List <GitRevision>();
                    foreach (var item in Revision.ParentGuids)
                    {
                        // Note: RevisionGrid could in some forms be used to get the parent guids
                        list.Add(new GitRevision(item));
                    }

                    parentRevs = list.ToArray();
                }
                else
                {
                    parentRevs = revisions.Skip(1).ToArray();
                }

                if (parentRevs.Length == 0)
                {
                    // No parent, will set "" as parent
                    var rev = new GitRevision("");
                    dictionary.Add(rev, Module.GetTreeFiles(Revision.TreeGuid, true));
                }
                else
                {
                    if (!AppSettings.ShowDiffForAllParents)
                    {
                        parentRevs = new GitRevision[] { parentRevs[0] };
                    }

                    foreach (var rev in parentRevs)
                    {
                        dictionary.Add(rev, Module.GetDiffFilesWithSubmodulesStatus(rev.Guid, Revision.Guid));
                    }

                    // Show combined (merge conflicts) only when A is only parent
                    var isMergeCommit = AppSettings.ShowDiffForAllParents &&
                                        Revision.ParentGuids != null && Revision.ParentGuids.Count() > 1 &&
                                        revisions.Count == 1;
                    if (isMergeCommit)
                    {
                        var conflicts = Module.GetCombinedDiffFileList(Revision.Guid);
                        if (conflicts.Any())
                        {
                            // Create a mock commit
                            var rev = new GitRevision(CombinedDiff.Text);
                            dictionary.Add(rev, conflicts);
                        }
                    }
                }
            }

            GitItemStatusesWithParents = dictionary;
        }