public void Remote_CompareRanges() { SvnSandBox sbox = new SvnSandBox(this); Uri CollabReposUri = sbox.CreateRepository(SandBoxRepository.MergeScenario); using (SvnRemoteSession rc = new SvnRemoteSession()) { rc.Open(CollabReposUri); Collection <SvnRemoteLocationSegmentEventArgs> c; rc.GetLocationSegments("branches/c/products/medium.html", out c); List <long> revs = new List <long>(); foreach (SvnRemoteLocationSegmentEventArgs e in c) { revs.Add(e.StartRevision); revs.Add(e.EndRevision); System.Diagnostics.Debug.WriteLine(string.Format("{0}: {1}", e.Uri, e.Range)); } SvnRevisionLocationMap revMap; rc.GetLocations("branches/c/products/medium.html", revs, out revMap); foreach (SvnRemoteLocationSegmentEventArgs e in c) { Assert.That(revMap.Contains(e.StartRevision)); Assert.That(revMap[e.StartRevision].Uri, Is.EqualTo(e.Uri)); Assert.That(revMap.Contains(e.EndRevision)); Assert.That(revMap[e.EndRevision].Uri, Is.EqualTo(e.Uri)); } } }
private void btnStart_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtRemotePath.Text)) { MessageBox.Show("必须输入远程目录", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrWhiteSpace(txtOutputPath.Text)) { MessageBox.Show("必须输入文件输出目录", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Task.Run(() => { List <ChangedFile> changedFiles = new List <ChangedFile>(); var deleteList = new List <string>(); var includeList = txtInclude.Text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); using (SvnRemoteSession remoteSession = new SvnRemoteSession(new Uri(txtRemotePath.Text))) { SvnUI.Bind(remoteSession, new SvnUIBindArgs()); SvnRemoteLogArgs svnRemoteLogArgs = new SvnRemoteLogArgs(); var svnRemoteLocationSegmentEventArgsCollection = new Collection <SvnRemoteLocationSegmentEventArgs>(); remoteSession.GetLocationSegments("/", out svnRemoteLocationSegmentEventArgsCollection); foreach (var svnRemoteLocationSegmentEventArgse in svnRemoteLocationSegmentEventArgsCollection) { if (!long.TryParse(txtFirstRevision.Text, out var startRevision)) { startRevision = 0; } startRevision = svnRemoteLocationSegmentEventArgse.StartRevision > startRevision ? svnRemoteLocationSegmentEventArgse.StartRevision : startRevision; if (!long.TryParse(txtSecondRevision.Text, out var endRevision)) { endRevision = long.MaxValue; } endRevision = svnRemoteLocationSegmentEventArgse.EndRevision < endRevision ? svnRemoteLocationSegmentEventArgse.EndRevision : endRevision; remoteSession.Log("/", new SvnRevisionRange(startRevision, endRevision), ((o, args) => { foreach (var argsChangedPath in args.ChangedPaths) { if (cbDontIncludeDelete.Checked) { if (argsChangedPath.Action == SvnChangeAction.Delete) { deleteList.Add(argsChangedPath.Path); changedFiles = changedFiles.Where(x => x.Path != argsChangedPath.Path).ToList(); continue; } if (deleteList.Contains(argsChangedPath.Path)) { continue; } } if (argsChangedPath.ContentModified == false) { continue; } if (rbDontInclude.Checked && includeList.Any(x => argsChangedPath.Path.IndexOf(x) >= 0)) { continue; } if (rbInclude.Checked && !includeList.Any(x => argsChangedPath.Path.IndexOf(x) >= 0)) { continue; } ChangedFile changedFile = new ChangedFile(); changedFile.Path = argsChangedPath.Path; changedFile.Author = args.Author; changedFile.Message = args.LogMessage; changedFile.FirstModifyAction = argsChangedPath.Action.ToString(); changedFile.FirstModifyRevision = args.Revision; if (cbComparedEvery.Checked || !changedFiles.Contains(changedFile)) { changedFiles.Add(changedFile); } } })); } //File.AppendAllLines("E:/123.txt", changedFiles.Select(x => $"文件信息:{x.Path}\t文件是否是修改:{x.FirstModifyAction}\t文件初次修改版本号:{x.FirstModifyRevision}\t初次修改作者:{x.Author}\t提交信息:{x.Message}")); var wb = new XLWorkbook(new MemoryStream(Properties.Resources.model)); int lineNum = 1; if (wb.TryGetWorksheet("ソース一覧", out IXLWorksheet iWorksheet)) { foreach (var changedFile in changedFiles) { var row = iWorksheet.Row(lineNum + 2); row.Cell("A").SetValue(lineNum); row.Cell("B").SetValue(Path.GetDirectoryName(changedFile.Path)); row.Cell("C").SetValue(Path.GetFileName(changedFile.Path)); if (changedFile.FirstModifyAction == "Add") { row.Cell("H").SetValue("○"); } else if (changedFile.FirstModifyAction == "Modify") { row.Cell("I").SetValue("○"); } row.Cell("J").SetValue(changedFile.Author); if (cbWriteFirstRevision.Checked) { row.Cell("L").Value = "版本号:" + changedFile.FirstModifyRevision; } if (cbWriteFirstAction.Checked) { row.Cell("L").Value += "执行操作" + changedFile.FirstModifyAction; } lineNum++; } var range = iWorksheet.Range(3, 1, lineNum + 1, 12); range.Style.Border.BottomBorder = XLBorderStyleValues.Dotted; range.Style.Border.RightBorder = XLBorderStyleValues.Thin; wb.SaveAs(txtOutputPath.Text); } } this.Invoke((MethodInvoker)(() => { btnStart.Enabled = true; btnStart.Text = "开始"; })); MessageBox.Show("处理完成"); }); btnStart.Enabled = false; btnStart.Text = "处理中"; }