private static int fo_comp(FileOp fo1, FileOp fo2) { if (fo1.op.CompareTo(fo2.op) == 0) { return 0; } else if (fo1.op.CompareTo("A") == 0) { return 1; } else { return -1; } }
// Aktualizacja danych z serwera SVN protected void test_Button_Click(object sender, EventArgs e) { string returnvalue = string.Empty; operacje.Clear(); int temp_rew = akt_rewizja + 1; ProcessStartInfo info = new ProcessStartInfo("svn"); info.UseShellExecute = false; info.Arguments = @"log " + svn_url + " -r " + temp_rew + ":HEAD -v --username " + svn_user + " --password " + svn_pass; info.RedirectStandardInput = true; info.RedirectStandardOutput = true; info.CreateNoWindow = true; using (Process process = Process.Start(info)) { returnvalue = process.StandardOutput.ReadToEnd(); } int i = 0, j = 0, n=0, next_n=0, k=0; int a = 0, d = 0, m=0; string rew = string.Empty; while (i < returnvalue.Length && i != -1) { // osobna lista dla każdej rewizji operacje.Add(new List<FileOp>()); i = returnvalue.IndexOf("\nr", i); if (i != -1) { next_n = 0; i = i + 2; j = returnvalue.IndexOf(" ", i); // numer rewizji rew = returnvalue.Substring(i, j - i); i = returnvalue.IndexOf("Zmodyfikowane ścieżki:", i); while (next_n != n + 2 && n != -1) { FileOp fo = new FileOp(); a = returnvalue.IndexOf(" A ", i); d = returnvalue.IndexOf(" D ", i); m = returnvalue.IndexOf(" M ", i); //if ((a < d && a != -1) || (a != -1 && d == -1)) if(a!= -1 && ((a < d && a < m) || (a < d && m == -1) || (a < m && d == -1))) { // kolejny jest Added n = returnvalue.IndexOf("\n", a); next_n = returnvalue.IndexOf("\n", n+1); fo.op = "A"; fo.rew = rew; a = returnvalue.IndexOf("/", a); string temp = returnvalue.Substring(0, n); int old = temp.IndexOf("(z", a); int koniec_old = temp.IndexOf(":", a); if (old != -1) { fo.path = returnvalue.Substring(a, (old - 1) - a); fo.old_path = returnvalue.Substring(old + 3, koniec_old - (old + 3)); } else { fo.path = returnvalue.Substring(a, n-a-1); } fo.name = is_filename(fo.path); if (string.IsNullOrEmpty(fo.name) == false) { operacje[k].Add(fo); } } else if ((d < m && d != -1) || (m == -1 && d != -1)) { // kolejny jest Deleted n = returnvalue.IndexOf("\n", d); next_n = returnvalue.IndexOf("\n", n+1); fo.op = "D"; fo.rew = rew; d = returnvalue.IndexOf("/", d); fo.path = returnvalue.Substring(d, n-d-1); fo.name = is_filename(fo.path); if (string.IsNullOrEmpty(fo.name) == false) { operacje[k].Add(fo); } } else if (m != -1) { // kolejny jest Modified n = returnvalue.IndexOf("\n", m); next_n = returnvalue.IndexOf("\n", n + 1); fo.op = "M"; fo.rew = rew; m = returnvalue.IndexOf("/", m); fo.path = returnvalue.Substring(m, n - m - 1); fo.name = is_filename(fo.path); if (string.IsNullOrEmpty(fo.name) == false) { operacje[k].Add(fo); } } else { n = returnvalue.IndexOf("\n", i); next_n = returnvalue.IndexOf("\n", n + 1); } i = n+1; } //sortujemy tak by dla każdej rewizji najpierw były operacje dodawania, a dopiero później usuwania usun_nadmiarowe(operacje[k]); operacje[k].Sort(fo_comp); k++; } } update_DB(rew); GridView1.DataBind(); }