private void OnChangedProps(object sender, ReposHookEventArgs e) { using (SvnLookClient look = new SvnLookClient()) { int i = 0; look.InheritedPropertyList(e.HookArgs.LookOrigin, "trunk/A/mu", delegate(object sender2, SvnLookInheritedPropertyListEventArgs ee) { switch (i++) { case 0: Assert.That(ee.Path, Is.EqualTo("trunk")); Assert.That(ee.Properties.Contains("root-A")); break; case 1: Assert.That(ee.Path, Is.EqualTo("trunk/A")); Assert.That(ee.Properties.Contains("A-A")); break; case 2: Assert.That(ee.Path, Is.EqualTo("trunk/A/mu")); Assert.That(ee.Properties.Contains("mu-A")); break; default: throw new InvalidOperationException("Too many invocations"); } }); Assert.That(i, Is.GreaterThan(0), "No props listed"); } }
private void OnPreCommitBigFile(object sender, ReposHookEventArgs e) { using (SvnLookClient cl = new SvnLookClient()) { using (MemoryStream ms = new MemoryStream()) { cl.Write(e.HookArgs.LookOrigin, "/bigfile", ms); } string b_p; Assert.That(cl.GetProperty(e.HookArgs.LookOrigin, "/bigfile", "a", out b_p)); Assert.That(b_p, Is.EqualTo("b")); } }
void OnPostCommit(object sender, ReposHookEventArgs e) { using (SvnLookClient cl = new SvnLookClient()) { SvnChangeInfoArgs ia = new SvnChangeInfoArgs(); SvnChangeInfoEventArgs i; Assert.That(cl.GetChangeInfo(e.HookArgs.LookOrigin, ia, out i)); GC.KeepAlive(i); Assert.That(i.Revision, Is.GreaterThanOrEqualTo(0L)); Assert.That(i.Author, Is.EqualTo(Environment.UserName)); } }
private void OnChangedDirs(object sender, ReposHookEventArgs e) { using (SvnLookClient lc = new SvnLookClient()) { SvnChangedArgs ca = new SvnChangedArgs(); ca.Transaction = e.HookArgs.TransactionName; Collection <SvnChangedEventArgs> list; Assert.That(lc.GetChanged(e.HookArgs.LookOrigin, ca, out list)); Assert.That(list.Count, Is.EqualTo(16)); Assert.That(list[0].Name, Is.EqualTo("a")); Assert.That(list[0].Path, Is.EqualTo("/a/")); Assert.That(list[1].Name, Is.EqualTo("b")); Assert.That(list[1].Path, Is.EqualTo("/a/b/")); Assert.That(list[2].Name, Is.EqualTo("c")); Assert.That(list[2].Path, Is.EqualTo("/a/b/c/")); } }
void OnPreCommit(object sender, ReposHookEventArgs e) { using (SvnLookClient cl = new SvnLookClient()) { SvnChangeInfoArgs ia = new SvnChangeInfoArgs(); SvnChangeInfoEventArgs i; Assert.That(cl.GetChangeInfo(e.HookArgs.LookOrigin, ia, out i)); Assert.That(i.Revision, Is.LessThan(0L)); Assert.That(i.Author, Is.EqualTo(Environment.UserName)); Assert.That(i.LogMessage, Is.EqualTo("Blaat!\r\nQWQQ\r\n")); using (MemoryStream ms = new MemoryStream()) { SvnLookWriteArgs wa = new SvnLookWriteArgs(); cl.Write(e.HookArgs.LookOrigin, "trunk/Pre.txt", ms, wa); ms.Position = 0; using (StreamReader sr = new StreamReader(ms)) { Assert.That(sr.ReadToEnd(), Is.EqualTo("AllTheData")); } string v; cl.GetProperty(e.HookArgs.LookOrigin, "trunk/Pre.txt", "boe", out v); Assert.That(v, Is.EqualTo("blaat")); SvnPropertyCollection props; cl.GetPropertyList(e.HookArgs.LookOrigin, "trunk/Pre.txt", out props); Assert.That(props, Is.Not.Null); Assert.That(props.Count, Is.EqualTo(1)); } Guid id; Assert.That(cl.TryGetRepositoryId(e.HookArgs.LookOrigin, out id)); Assert.That(id, Is.Not.EqualTo(Guid.Empty)); } }
private void OnCopyDir(object sender, ReposHookEventArgs e) { using (SvnLookClient lc = new SvnLookClient()) { SvnChangedArgs ca = new SvnChangedArgs(); ca.Transaction = e.HookArgs.TransactionName; Collection <SvnChangedEventArgs> list; Assert.That(lc.GetChanged(e.HookArgs.LookOrigin, ca, out list)); Assert.That(list.Count, Is.EqualTo(2)); Assert.That(list[0].Name, Is.EqualTo("d")); Assert.That(list[0].Path, Is.EqualTo("/d/")); Assert.That(list[0].CopyFromPath, Is.EqualTo("/a/b/c/d")); Assert.That(list[0].CopyFromRevision, Is.EqualTo(1L)); Assert.That(list[1].Name, Is.EqualTo("j")); Assert.That(list[1].Path, Is.EqualTo("/j/")); Assert.That(list[1].CopyFromPath, Is.EqualTo("/i/j")); Assert.That(list[1].CopyFromRevision, Is.EqualTo(1L)); } }
private void OnPostCommit(object sender, ReposHookEventArgs e) { e.ErrorText = "The Post Commit Warning"; e.ExitCode = 1; }
private void OnCopyDir(object sender, ReposHookEventArgs e) { using (SvnLookClient lc = new SvnLookClient()) { SvnChangedArgs ca = new SvnChangedArgs(); ca.Transaction = e.HookArgs.TransactionName; Collection<SvnChangedEventArgs> list; Assert.That(lc.GetChanged(e.HookArgs.LookOrigin, ca, out list)); Assert.That(list.Count, Is.EqualTo(2)); Assert.That(list[0].Name, Is.EqualTo("d")); Assert.That(list[0].Path, Is.EqualTo("/d/")); Assert.That(list[0].CopyFromPath, Is.EqualTo("/a/b/c/d")); Assert.That(list[0].CopyFromRevision, Is.EqualTo(1L)); Assert.That(list[1].Name, Is.EqualTo("j")); Assert.That(list[1].Path, Is.EqualTo("/j/")); Assert.That(list[1].CopyFromPath, Is.EqualTo("/i/j")); Assert.That(list[1].CopyFromRevision, Is.EqualTo(1L)); } }
private void OnChangedDirs(object sender, ReposHookEventArgs e) { using (SvnLookClient lc = new SvnLookClient()) { SvnChangedArgs ca = new SvnChangedArgs(); ca.Transaction = e.HookArgs.TransactionName; Collection<SvnChangedEventArgs> list; Assert.That(lc.GetChanged(e.HookArgs.LookOrigin, ca, out list)); Assert.That(list.Count, Is.EqualTo(16)); Assert.That(list[0].Name, Is.EqualTo("a")); Assert.That(list[0].Path, Is.EqualTo("/a/")); Assert.That(list[1].Name, Is.EqualTo("b")); Assert.That(list[1].Path, Is.EqualTo("/a/b/")); Assert.That(list[2].Name, Is.EqualTo("c")); Assert.That(list[2].Path, Is.EqualTo("/a/b/c/")); } }
public IDisposable InstallHook(Uri reposUri, SvnHookType type, EventHandler<ReposHookEventArgs> hook) { if (reposUri == null) throw new ArgumentNullException("reposUri"); else if (!reposUri.IsFile) throw new InvalidOperationException(); string reposPath = reposUri.LocalPath; TempFileCollection tfc = new TempFileCollection(); string dir = Path.GetTempPath(); string suffix = Guid.NewGuid().ToString("N"); string args = Path.Combine(dir, suffix + "-args.txt"); string stdin = Path.Combine(dir, suffix + "-stdin.txt"); string done = Path.Combine(dir, suffix + "-done.txt"); string wait = Path.Combine(dir, suffix + "-wait.txt"); string errTxt = Path.Combine(dir, suffix + "-errTxt.txt"); string outTxt = Path.Combine(dir, suffix + "-outTxt.txt"); tfc.AddFile(args, false); tfc.AddFile(stdin, false); tfc.AddFile(wait, false); tfc.AddFile(errTxt, false); tfc.AddFile(outTxt, false); ThreadStopper stopper = new ThreadStopper(); string envPrefix = Path.GetFileNameWithoutExtension(SvnHookArguments.GetHookFileName(reposPath, type)) + "."; Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_FILE", args); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_STDIN", stdin); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_DONE", done); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_WAIT", wait); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDOUT", outTxt); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDERR", errTxt); string file = Path.ChangeExtension(SvnHookArguments.GetHookFileName(reposPath, type), ".exe"); stopper.Start( delegate { try { while (!stopper.Cancel) { if (File.Exists(done)) { List<string> argCollection = new List<string>(); using (StreamReader fs = File.OpenText(args)) { string line; while (null != (line = fs.ReadLine())) argCollection.Add(line); } string stdinText = File.ReadAllText(stdin); File.Delete(args); File.Delete(stdin); ReposHookEventArgs ra = new ReposHookEventArgs(type, argCollection.ToArray(), stdinText); try { hook(this, ra); } catch (Exception e) { if (string.IsNullOrEmpty(ra.ErrorText)) ra.ErrorText = e.ToString(); ra.ExitCode = 129; } finally { if (ra.ErrorText != null) File.WriteAllText(errTxt, ra.ErrorText); if (ra.OutputText != null) File.WriteAllText(outTxt, ra.OutputText); File.WriteAllText(wait, ra.ExitCode.ToString()); } File.Delete(done); if (ra.Cancel) break; } Thread.Sleep(50); } } finally { Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_FILE", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_STDIN", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_DONE", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_WAIT", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDOUT", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDERR", null); } GC.KeepAlive(tfc); File.Delete(file); }); File.Copy(Path.Combine(ProjectBase, "..\\tools\\hooknotifier\\bin\\" + Configuration + "\\HookNotifier.exe"), file); return stopper; }
public IDisposable InstallHook(Uri reposUri, SvnHookType type, EventHandler <ReposHookEventArgs> hook) { if (reposUri == null) { throw new ArgumentNullException("reposUri"); } else if (!reposUri.IsFile) { throw new InvalidOperationException(); } string reposPath = reposUri.LocalPath; TempFileCollection tfc = new TempFileCollection(); string dir = Path.GetTempPath(); string suffix = Guid.NewGuid().ToString("N"); string args = Path.Combine(dir, suffix + "-args.txt"); string stdin = Path.Combine(dir, suffix + "-stdin.txt"); string done = Path.Combine(dir, suffix + "-done.txt"); string wait = Path.Combine(dir, suffix + "-wait.txt"); string errTxt = Path.Combine(dir, suffix + "-errTxt.txt"); string outTxt = Path.Combine(dir, suffix + "-outTxt.txt"); tfc.AddFile(args, false); tfc.AddFile(stdin, false); tfc.AddFile(wait, false); tfc.AddFile(errTxt, false); tfc.AddFile(outTxt, false); ThreadStopper stopper = new ThreadStopper(); string envPrefix = Path.GetFileNameWithoutExtension(SvnHookArguments.GetHookFileName(reposPath, type)) + "."; Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_FILE", args); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_STDIN", stdin); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_DONE", done); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_WAIT", wait); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDOUT", outTxt); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDERR", errTxt); string file = Path.ChangeExtension(SvnHookArguments.GetHookFileName(reposPath, type), ".exe"); stopper.Start( delegate { try { while (!stopper.Cancel) { if (File.Exists(done)) { List <string> argCollection = new List <string>(); using (StreamReader fs = File.OpenText(args)) { string line; while (null != (line = fs.ReadLine())) { argCollection.Add(line); } } string stdinText = File.ReadAllText(stdin); File.Delete(args); File.Delete(stdin); ReposHookEventArgs ra = new ReposHookEventArgs(type, argCollection.ToArray(), stdinText); try { hook(this, ra); } catch (Exception e) { if (string.IsNullOrEmpty(ra.ErrorText)) { ra.ErrorText = e.ToString(); } ra.ExitCode = 129; } finally { if (ra.ErrorText != null) { File.WriteAllText(errTxt, ra.ErrorText); } if (ra.OutputText != null) { File.WriteAllText(outTxt, ra.OutputText); } File.WriteAllText(wait, ra.ExitCode.ToString()); } File.Delete(done); if (ra.Cancel) { break; } } Thread.Sleep(50); } } finally { Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_FILE", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_STDIN", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_DONE", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_WAIT", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDOUT", null); Environment.SetEnvironmentVariable(envPrefix + "SHARPSVNHOOK_OUT_STDERR", null); } GC.KeepAlive(tfc); File.Delete(file); }); File.Copy(Path.Combine(ProjectBase, "..\\tools\\hooknotifier\\bin\\" + Configuration + "\\HookNotifier.exe"), file); return(stopper); }