Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 25 additions & 24 deletions src/App.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,24 +83,25 @@ public static void LogException(Exception ex)
if (ex == null)
return;

var builder = new StringBuilder();
builder.Append($"Crash::: {ex.GetType().FullName}: {ex.Message}\n\n");
builder.Append("----------------------------\n");
builder.Append($"Version: {Assembly.GetExecutingAssembly().GetName().Version}\n");
builder.Append($"OS: {Environment.OSVersion}\n");
builder.Append($"Framework: {AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName}\n");
builder.Append($"Source: {ex.Source}\n");
builder.Append($"Thread Name: {Thread.CurrentThread.Name ?? "Unnamed"}\n");
builder.Append($"User: {Environment.UserName}\n");
builder.Append($"App Start Time: {Process.GetCurrentProcess().StartTime}\n");
builder.Append($"Exception Time: {DateTime.Now}\n");
builder.Append($"Memory Usage: {Process.GetCurrentProcess().PrivateMemorySize64 / 1024 / 1024} MB\n");
builder.Append("---------------------------\n\n");
builder.Append(ex);

var time = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
var file = Path.Combine(Native.OS.DataDir, $"crash_{time}.log");
File.WriteAllText(file, builder.ToString());
using var writer = new StreamWriter(file);
writer.WriteLine($"Crash::: {ex.GetType().FullName}: {ex.Message}");
writer.WriteLine();
writer.WriteLine("----------------------------");
writer.WriteLine($"Version: {Assembly.GetExecutingAssembly().GetName().Version}");
writer.WriteLine($"OS: {Environment.OSVersion}");
writer.WriteLine($"Framework: {AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName}");
writer.WriteLine($"Source: {ex.Source}");
writer.WriteLine($"Thread Name: {Thread.CurrentThread.Name ?? "Unnamed"}");
writer.WriteLine($"User: {Environment.UserName}");
writer.WriteLine($"App Start Time: {Process.GetCurrentProcess().StartTime}");
writer.WriteLine($"Exception Time: {DateTime.Now}");
writer.WriteLine($"Memory Usage: {Process.GetCurrentProcess().PrivateMemorySize64 / 1024 / 1024} MB");
writer.WriteLine("----------------------------");
writer.WriteLine();
writer.WriteLine(ex);
writer.Flush();
}
#endregion

Expand Down Expand Up @@ -436,33 +437,33 @@ private static bool TryLaunchAsRebaseTodoEditor(string[] args, out int exitCode)
return true;

var collection = JsonSerializer.Deserialize(File.ReadAllText(jobsFile), JsonCodeGen.Default.InteractiveRebaseJobCollection);
var lines = new List<string>();
using var writer = new StreamWriter(file);
foreach (var job in collection.Jobs)
{
switch (job.Action)
{
case Models.InteractiveRebaseAction.Pick:
lines.Add($"p {job.SHA}");
writer.WriteLine($"p {job.SHA}");
break;
case Models.InteractiveRebaseAction.Edit:
lines.Add($"e {job.SHA}");
writer.WriteLine($"e {job.SHA}");
break;
case Models.InteractiveRebaseAction.Reword:
lines.Add($"r {job.SHA}");
writer.WriteLine($"r {job.SHA}");
break;
case Models.InteractiveRebaseAction.Squash:
lines.Add($"s {job.SHA}");
writer.WriteLine($"s {job.SHA}");
break;
case Models.InteractiveRebaseAction.Fixup:
lines.Add($"f {job.SHA}");
writer.WriteLine($"f {job.SHA}");
break;
default:
lines.Add($"d {job.SHA}");
writer.WriteLine($"d {job.SHA}");
break;
}
}

File.WriteAllLines(file, lines);
writer.Flush();

exitCode = 0;
return true;
Expand Down
100 changes: 49 additions & 51 deletions src/Models/DiffResult.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

using Avalonia;
Expand Down Expand Up @@ -148,13 +148,13 @@ public void GenerateNewPatchFromSelection(Change change, string fileBlobGuid, Te
var isTracked = !string.IsNullOrEmpty(fileBlobGuid);
var fileGuid = isTracked ? fileBlobGuid : "00000000";

var builder = new StringBuilder();
builder.Append("diff --git a/").Append(change.Path).Append(" b/").Append(change.Path).Append('\n');
using var writer = new StreamWriter(output);
writer.WriteLine($"diff --git a/{change.Path} b/{change.Path}");
if (!revert && !isTracked)
builder.Append("new file mode 100644\n");
builder.Append("index 00000000...").Append(fileGuid).Append('\n');
builder.Append("--- ").Append((revert || isTracked) ? $"a/{change.Path}\n" : "/dev/null\n");
builder.Append("+++ b/").Append(change.Path).Append('\n');
writer.WriteLine("new file mode 100644");
writer.WriteLine($"index 00000000...{fileGuid}");
writer.WriteLine($"--- {(revert || isTracked ? $"a/{change.Path}" : "/dev/null")}");
writer.WriteLine($"+++ b/{change.Path}");

var additions = selection.EndLine - selection.StartLine;
if (selection.StartLine != 1)
Expand All @@ -163,40 +163,40 @@ public void GenerateNewPatchFromSelection(Change change, string fileBlobGuid, Te
if (revert)
{
var totalLines = Lines.Count - 1;
builder.Append("@@ -0,").Append(totalLines - additions).Append(" +0,").Append(totalLines).Append(" @@");
writer.WriteLine($"@@ -0,{totalLines - additions} +0,{totalLines} @@");
for (int i = 1; i <= totalLines; i++)
{
var line = Lines[i];
if (line.Type != TextDiffLineType.Added)
continue;
builder.Append(selection.IsInRange(i) ? "\n+" : "\n ").Append(line.Content);
writer.WriteLine($"{(selection.IsInRange(i) ? "+" : " ")}{line.Content}");
}
}
else
{
builder.Append("@@ -0,0 +0,").Append(additions).Append(" @@");
writer.WriteLine($"@@ -0,0 +0,{additions} @@");
for (int i = selection.StartLine - 1; i < selection.EndLine; i++)
{
var line = Lines[i];
if (line.Type != TextDiffLineType.Added)
continue;
builder.Append("\n+").Append(line.Content);
writer.WriteLine($"+{line.Content}");
}
}

builder.Append("\n\\ No newline at end of file\n");
System.IO.File.WriteAllText(output, builder.ToString());
writer.WriteLine("\\ No newline at end of file");
writer.Flush();
}

public void GeneratePatchFromSelection(Change change, string fileTreeGuid, TextDiffSelection selection, bool revert, string output)
{
var orgFile = !string.IsNullOrEmpty(change.OriginalPath) ? change.OriginalPath : change.Path;

var builder = new StringBuilder();
builder.Append("diff --git a/").Append(change.Path).Append(" b/").Append(change.Path).Append('\n');
builder.Append("index 00000000...").Append(fileTreeGuid).Append(" 100644\n");
builder.Append("--- a/").Append(orgFile).Append('\n');
builder.Append("+++ b/").Append(change.Path);
using var writer = new StreamWriter(output);
writer.WriteLine($"diff --git a/{change.Path} b/{change.Path}");
writer.WriteLine($"index 00000000...{fileTreeGuid} 100644");
writer.WriteLine($"--- a/{orgFile}");
writer.WriteLine($"+++ b/{change.Path}");

// If last line of selection is a change. Find one more line.
var tail = null as string;
Expand Down Expand Up @@ -264,21 +264,21 @@ public void GeneratePatchFromSelection(Change change, string fileTreeGuid, TextD
var line = Lines[i];
if (line.Type == TextDiffLineType.Indicator)
{
ProcessIndicatorForPatch(builder, line, i, selection.StartLine, selection.EndLine, ignoreRemoves, ignoreAdds, revert, tail != null);
ProcessIndicatorForPatch(writer, line, i, selection.StartLine, selection.EndLine, ignoreRemoves, ignoreAdds, revert, tail != null);
}
else if (line.Type == TextDiffLineType.Added)
{
if (revert)
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else if (line.Type == TextDiffLineType.Deleted)
{
if (!revert)
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else if (line.Type == TextDiffLineType.Normal)
{
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
}
}
Expand All @@ -289,39 +289,38 @@ public void GeneratePatchFromSelection(Change change, string fileTreeGuid, TextD
var line = Lines[i];
if (line.Type == TextDiffLineType.Indicator)
{
if (!ProcessIndicatorForPatch(builder, line, i, selection.StartLine, selection.EndLine, selection.IgnoredDeletes, selection.IgnoredAdds, revert, tail != null))
if (!ProcessIndicatorForPatch(writer, line, i, selection.StartLine, selection.EndLine, selection.IgnoredDeletes, selection.IgnoredAdds, revert, tail != null))
{
break;
}
}
else if (line.Type == TextDiffLineType.Normal)
{
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else if (line.Type == TextDiffLineType.Added)
{
builder.Append("\n+").Append(line.Content);
writer.WriteLine($"+{line.Content}");
}
else if (line.Type == TextDiffLineType.Deleted)
{
builder.Append("\n-").Append(line.Content);
writer.WriteLine($"-{line.Content}");
}
}

builder.Append("\n ").Append(tail);
builder.Append("\n");
System.IO.File.WriteAllText(output, builder.ToString());
writer.WriteLine($" {tail}");
writer.Flush();
}

public void GeneratePatchFromSelectionSingleSide(Change change, string fileTreeGuid, TextDiffSelection selection, bool revert, bool isOldSide, string output)
{
var orgFile = !string.IsNullOrEmpty(change.OriginalPath) ? change.OriginalPath : change.Path;

var builder = new StringBuilder();
builder.Append("diff --git a/").Append(change.Path).Append(" b/").Append(change.Path).Append('\n');
builder.Append("index 00000000...").Append(fileTreeGuid).Append(" 100644\n");
builder.Append("--- a/").Append(orgFile).Append('\n');
builder.Append("+++ b/").Append(change.Path);
using var writer = new StreamWriter(output);
writer.WriteLine($"diff --git a/{change.Path} b/{change.Path}");
writer.WriteLine($"index 00000000...{fileTreeGuid} 100644");
writer.WriteLine($"--- a/{orgFile}");
writer.WriteLine($"+++ b/{change.Path}");

// If last line of selection is a change. Find one more line.
var tail = null as string;
Expand Down Expand Up @@ -389,21 +388,21 @@ public void GeneratePatchFromSelectionSingleSide(Change change, string fileTreeG
var line = Lines[i];
if (line.Type == TextDiffLineType.Indicator)
{
ProcessIndicatorForPatchSingleSide(builder, line, i, selection.StartLine, selection.EndLine, ignoreRemoves, ignoreAdds, revert, isOldSide, tail != null);
ProcessIndicatorForPatchSingleSide(writer, line, i, selection.StartLine, selection.EndLine, ignoreRemoves, ignoreAdds, revert, isOldSide, tail != null);
}
else if (line.Type == TextDiffLineType.Added)
{
if (revert)
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else if (line.Type == TextDiffLineType.Deleted)
{
if (!revert)
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else if (line.Type == TextDiffLineType.Normal)
{
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
}
}
Expand All @@ -414,22 +413,22 @@ public void GeneratePatchFromSelectionSingleSide(Change change, string fileTreeG
var line = Lines[i];
if (line.Type == TextDiffLineType.Indicator)
{
if (!ProcessIndicatorForPatchSingleSide(builder, line, i, selection.StartLine, selection.EndLine, selection.IgnoredDeletes, selection.IgnoredAdds, revert, isOldSide, tail != null))
if (!ProcessIndicatorForPatchSingleSide(writer, line, i, selection.StartLine, selection.EndLine, selection.IgnoredDeletes, selection.IgnoredAdds, revert, isOldSide, tail != null))
{
break;
}
}
else if (line.Type == TextDiffLineType.Normal)
{
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else if (line.Type == TextDiffLineType.Added)
{
if (isOldSide)
{
if (revert)
{
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else
{
Expand All @@ -438,20 +437,20 @@ public void GeneratePatchFromSelectionSingleSide(Change change, string fileTreeG
}
else
{
builder.Append("\n+").Append(line.Content);
writer.WriteLine($"+{line.Content}");
}
}
else if (line.Type == TextDiffLineType.Deleted)
{
if (isOldSide)
{
builder.Append("\n-").Append(line.Content);
writer.WriteLine($"-{line.Content}");
}
else
{
if (!revert)
{
builder.Append("\n ").Append(line.Content);
writer.WriteLine($" {line.Content}");
}
else
{
Expand All @@ -461,12 +460,11 @@ public void GeneratePatchFromSelectionSingleSide(Change change, string fileTreeG
}
}

builder.Append("\n ").Append(tail);
builder.Append("\n");
System.IO.File.WriteAllText(output, builder.ToString());
writer.WriteLine($" {tail}");
writer.Flush();
}

private bool ProcessIndicatorForPatch(StringBuilder builder, TextDiffLine indicator, int idx, int start, int end, int ignoreRemoves, int ignoreAdds, bool revert, bool tailed)
private bool ProcessIndicatorForPatch(StreamWriter writer, TextDiffLine indicator, int idx, int start, int end, int ignoreRemoves, int ignoreAdds, bool revert, bool tailed)
{
var match = REG_INDICATOR().Match(indicator.Content);
var oldStart = int.Parse(match.Groups[1].Value);
Expand Down Expand Up @@ -531,11 +529,11 @@ private bool ProcessIndicatorForPatch(StringBuilder builder, TextDiffLine indica
if (oldCount == 0 && newCount == 0)
return false;

builder.Append($"\n@@ -{oldStart},{oldCount} +{newStart},{newCount} @@");
writer.WriteLine($"@@ -{oldStart},{oldCount} +{newStart},{newCount} @@");
return true;
}

private bool ProcessIndicatorForPatchSingleSide(StringBuilder builder, TextDiffLine indicator, int idx, int start, int end, int ignoreRemoves, int ignoreAdds, bool revert, bool isOldSide, bool tailed)
private bool ProcessIndicatorForPatchSingleSide(StreamWriter writer, TextDiffLine indicator, int idx, int start, int end, int ignoreRemoves, int ignoreAdds, bool revert, bool isOldSide, bool tailed)
{
var match = REG_INDICATOR().Match(indicator.Content);
var oldStart = int.Parse(match.Groups[1].Value);
Expand Down Expand Up @@ -611,7 +609,7 @@ private bool ProcessIndicatorForPatchSingleSide(StringBuilder builder, TextDiffL
if (oldCount == 0 && newCount == 0)
return false;

builder.Append($"\n@@ -{oldStart},{oldCount} +{newStart},{newCount} @@");
writer.WriteLine($"@@ -{oldStart},{oldCount} +{newStart},{newCount} @@");
return true;
}

Expand Down
5 changes: 4 additions & 1 deletion src/ViewModels/InteractiveRebase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,10 @@ public Task<bool> Start()
Message = item.FullMessage,
});
}
File.WriteAllText(saveFile, JsonSerializer.Serialize(collection, JsonCodeGen.Default.InteractiveRebaseJobCollection));
using (var stream = File.Create(saveFile))
{
JsonSerializer.Serialize(stream, collection, JsonCodeGen.Default.InteractiveRebaseJobCollection);
}

var log = _repo.CreateLog("Interactive Rebase");
return Task.Run(() =>
Expand Down
4 changes: 2 additions & 2 deletions src/ViewModels/Preferences.cs
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,8 @@ public void Save()
return;

var file = Path.Combine(Native.OS.DataDir, "preference.json");
var data = JsonSerializer.Serialize(this, JsonCodeGen.Default.Preferences);
File.WriteAllText(file, data);
using var stream = File.Create(file);
JsonSerializer.Serialize(stream, this, JsonCodeGen.Default.Preferences);
}

private static Preferences Load()
Expand Down
Loading