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");
            }
        }
Example #2
0
        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");
            }
        }
Example #3
0
        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"));
            }
        }
Example #4
0
        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));
            }
        }
Example #5
0
        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/"));
            }
        }
Example #6
0
        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));
            }
        }
Example #7
0
        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));
            }
        }
Example #8
0
 private void OnPostCommit(object sender, ReposHookEventArgs e)
 {
     e.ErrorText = "The Post Commit Warning";
     e.ExitCode  = 1;
 }
Example #9
0
 private void OnPostCommit(object sender, ReposHookEventArgs e)
 {
     e.ErrorText = "The Post Commit Warning";
     e.ExitCode = 1;
 }
Example #10
0
        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));
            }
        }
Example #11
0
        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/"));
            }
        }
Example #12
0
        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"));
            }
        }
Example #13
0
        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;
        }
Example #14
0
        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);
        }
Example #15
0
        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));
            }
        }
Example #16
0
        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));
            }
        }