예제 #1
0
        private void copyAsXmlButton_Click(object sender, EventArgs args)
        {
            Change[] changes;
            if (IgnoredChangesListBox.SelectedItems.Count > 0)
            {
                changes = IgnoredChangesListBox.SelectedItems
                          .Cast <ChangeEntry>()
                          .Select(e => e.Change)
                          .ToArray();
            }
            else
            {
                changes = IgnoredChangesListBox.Items
                          .Cast <ChangeEntry>()
                          .Select(e => e.Change)
                          .ToArray();
            }

            if (changes.Length == 0)
            {
                return;
            }

            var includeOld = includeOldSourceCheckbox.Checked;
            var includeNew = includeNewSourceCheckbox.Checked;

            if (!includeOld || !includeNew)
            {
                using (var shaUtility = new ShaUtility(SHA256.Create()))
                {
                    changes = changes.Select(
                        e =>
                    {
                        if (!(e is MemberChange))
                        {
                            return(e);
                        }

                        var memberChange = (MemberChange)e.Clone();

                        var oldSource = memberChange.OldSource;
                        if (!includeOld && oldSource != null)
                        {
                            if (oldSource.Hash == null)
                            {
                                oldSource.Hash = shaUtility.ComputeHashAsString(oldSource.Text);
                            }

                            oldSource.Text = null;
                        }

                        var newSource = memberChange.NewSource;
                        if (!includeNew && newSource != null)
                        {
                            if (newSource.Hash == null)
                            {
                                newSource.Hash = shaUtility.ComputeHashAsString(newSource.Text);
                            }

                            newSource.Text = null;
                        }

                        return(memberChange);
                    }).ToArray();
                }
            }

            var changeSet     = new ChangeSet(changes);
            var xmlSerializer = new XmlSerializer(typeof(ChangeSet));

            using (var stringWriter = new StringWriter())
            {
                xmlSerializer.Serialize(stringWriter, changeSet);

                var result = stringWriter.ToString();
                var parts  = result.Split(
                    new[]
                {
                    Environment.NewLine
                },
                    StringSplitOptions.None).ToArray();


                Clipboard.SetText(string.Join(Environment.NewLine, parts.Skip(3).Take(parts.Length - 5)));
            }
        }