private void ClearCache() { if (!this.use_git_bin) return; SparkleGitBin git_bin = new SparkleGitBin (LocalPath, "clear -f"); git_bin.Start (); git_bin.WaitForExit (); }
public override bool SyncUp() { if (HasLocalChanges) { Add (); string message = FormatCommitMessage (); Commit (message); } SparkleGit git; if (this.use_git_bin) { if (this.remote_url_is_set) { git = new SparkleGit (LocalPath, "config remote.origin.url \"" + RemoteUrl + "\""); git.Start (); git.WaitForExit (); this.remote_url_is_set = true; } SparkleGitBin git_bin = new SparkleGitBin (LocalPath, "push"); git_bin.Start (); git_bin.WaitForExit (); // TODO: Progress } git = new SparkleGit (LocalPath, "push --progress " + // Redirects progress stats to standarderror "\"" + RemoteUrl + "\" master"); git.StartInfo.RedirectStandardError = true; git.Start (); double percentage = 1.0; Regex progress_regex = new Regex (@"([0-9]+)%", RegexOptions.Compiled); while (!git.StandardError.EndOfStream) { string line = git.StandardError.ReadLine (); Match match = progress_regex.Match (line); string speed = ""; double number = 0.0; if (match.Success) { number = double.Parse (match.Groups [1].Value); // The pushing progress consists of two stages: the "Compressing // objects" stage which we count as 20% of the total progress, and // the "Writing objects" stage which we count as the last 80% if (line.StartsWith ("Compressing")) { // "Compressing objects" stage number = (number / 100 * 20); } else { if (line.StartsWith ("ERROR: QUOTA EXCEEDED")) { int quota_limit = int.Parse (line.Substring (21).Trim ()); throw new QuotaExceededException ("Quota exceeded", quota_limit); } // "Writing objects" stage number = (number / 100 * 80 + 20); if (line.Contains ("|")) { speed = line.Substring (line.IndexOf ("|") + 1).Trim (); speed = speed.Replace (", done.", "").Trim (); speed = speed.Replace ("i", ""); speed = speed.Replace ("KB/s", "ᴋʙ/s"); speed = speed.Replace ("MB/s", "ᴍʙ/s"); } } } else { SparkleHelpers.DebugInfo ("Git", Name + " | " + line); } if (number >= percentage) { percentage = number; base.OnProgressChanged (percentage, speed); } } git.WaitForExit (); UpdateSizes (); ChangeSets = GetChangeSets (); if (git.ExitCode == 0) { ClearCache (); return true; } else { return false; } }