From 1dd219dc40f6fd52da62de8d4c40ef3d4531ca04 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Sat, 3 Dec 2016 10:38:17 +0000 Subject: [PATCH] Fehlerbehebung --- svnsync/Controllers/ControllersTray.cs | 23 +- svnsync/Controllers/ControllersWindow.cs | 5 + svnsync/Libraries/Svn.cs | 393 ++++++++++------------- svnsync/Program.cs | 16 +- svnsync/Properties/AssemblyInfo.cs | 6 +- svnsync/bin/Release/SvnSync.exe | Bin 44032 -> 45056 bytes 6 files changed, 214 insertions(+), 229 deletions(-) diff --git a/svnsync/Controllers/ControllersTray.cs b/svnsync/Controllers/ControllersTray.cs index 508f85c..57326d0 100644 --- a/svnsync/Controllers/ControllersTray.cs +++ b/svnsync/Controllers/ControllersTray.cs @@ -12,7 +12,9 @@ namespace svnsync.Controllers { private static ViewsTray viewTray; private static ControllersWindow controllerWindow; - private string args; + //private string args; + public delegate void _enableLoopRun(); + public event _enableLoopRun StartLoop; /// /// Controlls a Tray. @@ -28,13 +30,24 @@ namespace svnsync.Controllers viewTray.ShowSuccess(); System.Threading.Thread.Sleep(5000); viewTray.Dispose(); - return; + } else { + this.StartLoop(); } + return; } else { controllerWindow.execute(); } } + public override void Dispose() { + if(viewTray != null) { + viewTray.Dispose(); + } + if(controllerWindow != null) { + controllerWindow.Dispose(); + } + } + private bool cronJob(int run, bool readyToCommit) { if(viewTray.Model.Svn == null) { return HandleError(Handles.SvnType.NotInit, ""); @@ -48,7 +61,7 @@ namespace svnsync.Controllers try { viewTray.Model.Svn.CheckStatus(); } catch(NotImplementedException e) { - return HandleError(Handles.SvnType.UnexpectedError, e.Message); + return HandleError(Handles.SvnType.UnexpectedError, e.Message, e.StackTrace); } catch(Helpers.SvnLockedException e) { return HandleError(Handles.SvnType.LockedFile, e.Message); } @@ -91,7 +104,7 @@ namespace svnsync.Controllers return true; } - private bool HandleError(Handles.SvnType svnType, string p) { + private bool HandleError(Handles.SvnType svnType, string p, string p1 = "") { viewTray.ShowError(svnType, p); switch(svnType) { case Handles.SvnType.ToMutchChronRuns: @@ -102,7 +115,7 @@ namespace svnsync.Controllers break; case Handles.SvnType.UnexpectedError: controllerWindow.setAction(Handles.FormType.Error); - controllerWindow.setMessage(p); + controllerWindow.setMessage(p+" "+p1); break; case Handles.SvnType.ExternDeletedFiles: controllerWindow.setAction(Handles.FormType.DeletedFiles); diff --git a/svnsync/Controllers/ControllersWindow.cs b/svnsync/Controllers/ControllersWindow.cs index 78d8d4c..1475ce3 100644 --- a/svnsync/Controllers/ControllersWindow.cs +++ b/svnsync/Controllers/ControllersWindow.cs @@ -24,6 +24,11 @@ namespace svnsync.Controllers { viewWindow.Model.FormType = initAction; } + public override void Dispose() { + if(viewWindow != null) + viewWindow.Dispose(); + } + public static void FormClosed(object sender, FormClosedEventArgs e) { viewWindow.Dispose(); } diff --git a/svnsync/Libraries/Svn.cs b/svnsync/Libraries/Svn.cs index c2f3a0e..d15d040 100644 --- a/svnsync/Libraries/Svn.cs +++ b/svnsync/Libraries/Svn.cs @@ -4,225 +4,182 @@ using System.Linq; using System.Text; using System.Diagnostics; -namespace svnsync.Libraries -{ - class Svn - { - private string dir; - private Process p = new Process(); - private List modified; - private List noversion; - private List wasdeleted; - private List added; - private string SvnError = ""; - private string SvnOutput = ""; - private List isdeleted; - private List external; - private static Svn instances; +namespace svnsync.Libraries { + class Svn { + private string dir; + private Process p = new Process(); + private List modified; + private List noversion; + private List wasdeleted; + private List added; + private string SvnError = ""; + private string SvnOutput = ""; + private List isdeleted; + private List external; + private static Svn instances; - private Svn() { } + private Svn() { } - public void setDirectory(string dir) - { - this.dir = dir; - this.Init(); - } - - private void Init() - { - p.StartInfo.FileName = "svn"; - p.StartInfo.WorkingDirectory = this.dir; - p.StartInfo.CreateNoWindow = true; - p.StartInfo.RedirectStandardOutput = true; - p.StartInfo.RedirectStandardError = true; - p.StartInfo.UseShellExecute = false; - } - - internal void CheckStatus() - { - modified = new List(); - noversion = new List(); - wasdeleted = new List(); - isdeleted = new List(); - added = new List(); - external = new List(); - this.runner("st"); - string[] lines = this.SvnOutput.Split('\n'); - foreach (String line in lines) - { - if (line.Length < 7) - break; - Char[] handles = line.Substring(0, 7).ToCharArray(); - String file = line.Substring(8).Trim(new Char[] {'\r','\n',' ','\t'}); - if (handles[0] == ' ') - { - if(handles[2] == 'L') { - throw new svnsync.Helpers.SvnLockedException("Datei: " + file + " ist gelockt!"); - } else { - throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] ' '"); - } - } - else if (handles[0] == 'A') - { - added.Add(file); - } - else if (handles[0] == 'D') - { - isdeleted.Add(file); - } - else if (handles[0] == 'M') - { - modified.Add(file); - } - else if (handles[0] == 'R') - { - throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] 'R'"); - } - else if (handles[0] == 'C') - { - throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] 'C'"); - } - else if (handles[0] == 'X') - { - external.Add(file); - } - else if (handles[0] == 'I') - { - throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] 'I'"); - } - else if (handles[0] == '?') - { - noversion.Add(file); - } - else if (handles[0] == '!') - { - wasdeleted.Add(file); - } - else if (handles[0] == '~') - { - throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] '~'"); - } - else - { - throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: Unexpected Symbol! [0]: \"" + handles[0] + "\""); - } - } - } - - internal bool IsNotOnlyModified() - { - if (this.noversion.Count != 0) - return true; - if (this.wasdeleted.Count != 0) - return true; - return false; - } - - internal void SetArgCheckIn(string message) - { - String arg = "ci -m \"" + message + "\""; - this.runner(arg); - } - - internal void AddFiles(List files) - { - String arg = "add"; - foreach (String item in files) - { - arg += " \"" + item+"\""; - } - this.runner(arg); - } - - private void runner(string arg) - { - this.SvnOutput = ""; - this.SvnError = ""; - p.StartInfo.Arguments = arg; - p.Start(); - this.SvnOutput = p.StandardOutput.ReadToEnd(); - this.SvnError = p.StandardError.ReadToEnd(); - p.WaitForExit(); - } - - internal bool IsUncheckedFiles() - { - if (this.noversion.Count != 0) - return true; - return false; - } - - internal bool IsExternDeletedFiles() - { - if (this.wasdeleted.Count != 0) - return true; - return false; - } - - internal bool IsError() - { - if (this.SvnError != "") - return true; - return false; - } - - internal string getError() - { - return this.SvnError; - } - - internal void DeleteFiles(List files) - { - String arg = "del"; - foreach (String item in files) - { - arg += " \"" + item + "\""; - } - this.runner(arg); - } - - internal List getWasDeletedFiles() - { - return this.wasdeleted; - } - - internal List getNoVersionFiles() - { - return this.noversion; - } - - internal void DeleteFiles(List l) - { - List s = new List(); - foreach (System.Windows.Forms.TreeNode item in l) - { - s.Add(item.FullPath); - } - this.DeleteFiles(s); - } - - internal void AddFiles(List l) - { - List s = new List(); - foreach (System.Windows.Forms.TreeNode item in l) - { - s.Add(item.FullPath); - } - this.AddFiles(s); - } - - internal void Update() - { - this.runner("up"); - } - - public static Svn getInstance() - { - if (instances == null) - { - instances = new Svn(); - } - return instances; - } + public void setDirectory(string dir) { + this.dir = dir; + this.Init(); } + + private void Init() { + p.StartInfo.FileName = "svn"; + p.StartInfo.WorkingDirectory = this.dir; + p.StartInfo.CreateNoWindow = true; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.UseShellExecute = false; + } + + internal void CheckStatus() { + modified = new List(); + noversion = new List(); + wasdeleted = new List(); + isdeleted = new List(); + added = new List(); + external = new List(); + this.runner("st"); + string[] lines = this.SvnOutput.Split('\n'); + foreach(String line in lines) { + if(line.Length < 7) + break; + Char[] handles = line.Substring(0, 7).ToCharArray(); + String file = line.Substring(8).Trim(new Char[] { '\r', '\n', ' ', '\t' }); + if(handles[0] == ' ') { + if(handles[2] == 'L') { + throw new svnsync.Helpers.SvnLockedException("Datei: " + file + " ist gelockt!"); + } + //Modifizierte Eigenschaft + else if(handles[1] == 'M') { + modified.Add(file); + } else { + throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] ' '"); + } + } else if(handles[0] == 'A') { + added.Add(file); + } else if(handles[0] == 'D') { + isdeleted.Add(file); + } + // Modifizierte Datei + else if(handles[0] == 'M') { + modified.Add(file); + } else if(handles[0] == 'R') { + throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] 'R'"); + } else if(handles[0] == 'C') { + throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] 'C'"); + } else if(handles[0] == 'X') { + external.Add(file); + } else if(handles[0] == 'I') { + throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] 'I'"); + } else if(handles[0] == '?') { + noversion.Add(file); + } else if(handles[0] == '!') { + wasdeleted.Add(file); + } else if(handles[0] == '~') { + throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: SVN Line[0] '~'"); + } else { + throw new NotImplementedException("NOT IMPLEMENTED in SvnClass: Unexpected Symbol! [0]: \"" + handles[0] + "\""); + } + } + } + + internal bool IsNotOnlyModified() { + if(this.noversion.Count != 0) + return true; + if(this.wasdeleted.Count != 0) + return true; + return false; + } + + internal void SetArgCheckIn(string message) { + String arg = "ci -m \"" + message + "\""; + this.runner(arg); + } + + internal void AddFiles(List files) { + String arg = "add"; + foreach(String item in files) { + arg += " \"" + item + "\""; + } + this.runner(arg); + } + + private void runner(string arg) { + this.SvnOutput = ""; + this.SvnError = ""; + p.StartInfo.Arguments = arg; + p.Start(); + this.SvnOutput = p.StandardOutput.ReadToEnd(); + this.SvnError = p.StandardError.ReadToEnd(); + p.WaitForExit(); + } + + internal bool IsUncheckedFiles() { + if(this.noversion.Count != 0) + return true; + return false; + } + + internal bool IsExternDeletedFiles() { + if(this.wasdeleted.Count != 0) + return true; + return false; + } + + internal bool IsError() { + if(this.SvnError != "") + return true; + return false; + } + + internal string getError() { + return this.SvnError; + } + + internal void DeleteFiles(List files) { + String arg = "del"; + foreach(String item in files) { + arg += " \"" + item + "\""; + } + this.runner(arg); + } + + internal List getWasDeletedFiles() { + return this.wasdeleted; + } + + internal List getNoVersionFiles() { + return this.noversion; + } + + internal void DeleteFiles(List l) { + List s = new List(); + foreach(System.Windows.Forms.TreeNode item in l) { + s.Add(item.FullPath); + } + this.DeleteFiles(s); + } + + internal void AddFiles(List l) { + List s = new List(); + foreach(System.Windows.Forms.TreeNode item in l) { + s.Add(item.FullPath); + } + this.AddFiles(s); + } + + internal void Update() { + this.runner("up"); + } + + public static Svn getInstance() { + if(instances == null) { + instances = new Svn(); + } + return instances; + } + } } diff --git a/svnsync/Program.cs b/svnsync/Program.cs index bb5133d..0f977c9 100644 --- a/svnsync/Program.cs +++ b/svnsync/Program.cs @@ -10,6 +10,7 @@ namespace svnsync { static class Program { + private static bool LoopStarted = false; /// /// Der Haupteinstiegspunkt für die Anwendung. /// @@ -22,6 +23,7 @@ namespace svnsync try { Svn.getInstance().setDirectory(CmdArgs.getInstance().GetArgumentData("-d")); t = new ControllersTray(); + t.StartLoop += t_StartLoop; t.execute(); } catch(Exception e) { t.hideToolTip(); @@ -32,20 +34,28 @@ namespace svnsync return; } if(!CmdArgs.getInstance().HasArgumentType("-cron")) { - Application.Run(); + t_StartLoop(); } return; /*Application.Run();*/ - Application.EnableVisualStyles(); + /*Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new Form1(args)); } catch(NotImplementedException e) { System.Windows.Forms.MessageBox.Show("In: " + e.Source + "\n\n" + e.Message, "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error); - } catch(Exception /*e*/) { + } catch(Exception e) { //System.Windows.Forms.MessageBox.Show("In: " + e.Source + "\n\n" + e.Message, "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); + }*/ + } + + static void t_StartLoop() { + if(!LoopStarted) { + LoopStarted = true; + Application.Run(); } + } private static bool cmd(string[] args) diff --git a/svnsync/Properties/AssemblyInfo.cs b/svnsync/Properties/AssemblyInfo.cs index c30a36a..0df45cc 100644 --- a/svnsync/Properties/AssemblyInfo.cs +++ b/svnsync/Properties/AssemblyInfo.cs @@ -11,7 +11,7 @@ using System.Resources; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("BlubbFish")] [assembly: AssemblyProduct("SvnSync")] -[assembly: AssemblyCopyright("Copyright © 2012 - 2014")] +[assembly: AssemblyCopyright("Copyright © 2012 - 03.12.2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -33,6 +33,6 @@ using System.Resources; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.1.0")] -[assembly: AssemblyFileVersion("1.0.1.0")] +[assembly: AssemblyVersion("1.0.2.0")] +[assembly: AssemblyFileVersion("1.0.2.0")] [assembly: NeutralResourcesLanguageAttribute("de-DE")] diff --git a/svnsync/bin/Release/SvnSync.exe b/svnsync/bin/Release/SvnSync.exe index 72903baf6eda8dedcd8cfe3afb4efd883a672c6e..f776602a1ab583fb2630cd7db972de40d5747239 100644 GIT binary patch delta 18871 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 delta 17861 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 PJ!PM}_XA_+=