Skip to content

Commit

Permalink
Add Date options to rebase dialog
Browse files Browse the repository at this point in the history
  * Add "Ignore Date"
  * Add "Committer Date Is Author Date"
  • Loading branch information
George Tisdelle committed Jul 10, 2020
1 parent a363371 commit e033ce0
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 80 deletions.
41 changes: 30 additions & 11 deletions GitCommands/Git/GitCommandHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -427,24 +427,43 @@ public static ArgumentString StopBisectCmd()
return new GitArgumentBuilder("bisect") { "reset" };
}

public static ArgumentString RebaseCmd(string branch, bool interactive, bool preserveMerges, bool autosquash, bool autoStash, string from = null, string onto = null)
public static ArgumentString RebaseCmd(
string branch, bool interactive, bool preserveMerges, bool autosquash, bool autoStash, bool ignoreDate, bool committerDateIsAuthorDate, string from = null, string onto = null)
{
if (from == null ^ onto == null)
{
throw new ArgumentException($"For arguments \"{nameof(from)}\" and \"{nameof(onto)}\", either both must have values, or neither may.");
}

return new GitArgumentBuilder("rebase")
var builder = new GitArgumentBuilder("rebase");
if (ignoreDate)
{
{ interactive, "-i" },
{ interactive && autosquash, "--autosquash" },
{ interactive && !autosquash, "--no-autosquash" },
{ preserveMerges, GitVersion.Current.SupportRebaseMerges ? "--rebase-merges" : "--preserve-merges" },
{ autoStash, "--autostash" },
from.QuoteNE(),
branch.Quote(),
{ onto != null, $"--onto {onto}" }
};
builder.Add("--ignore-date");
}
else if (committerDateIsAuthorDate)
{
builder.Add("--committer-date-is-author-date");
}
else
{
if (interactive)
{
builder.Add("-i");
builder.Add(autosquash ? "--autosquash" : "--no-autosquash");
}

if (preserveMerges)
{
builder.Add(GitVersion.Current.SupportRebaseMerges ? "--rebase-merges" : "--preserve-merges");
}
}

builder.Add(autoStash, "--autostash");
builder.Add(from.QuoteNE());
builder.Add(branch.Quote());
builder.Add(onto != null, $"--onto {onto}");

return builder;
}

public static ArgumentString AbortRebaseCmd()
Expand Down
146 changes: 91 additions & 55 deletions GitUI/CommandsDialogs/FormRebase.Designer.cs

Large diffs are not rendered by default.

13 changes: 11 additions & 2 deletions GitUI/CommandsDialogs/FormRebase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,15 @@ private void InteractiveRebaseClick(object sender, EventArgs e)
chkAutosquash.Enabled = chkInteractive.Checked;
}

private void DateClick(object sender, EventArgs e)
{
chkCommitterDateIsAuthorDate.Enabled = !chkIgnoreDate.Checked;
chkIgnoreDate.Enabled = !chkCommitterDateIsAuthorDate.Checked;
chkInteractive.Enabled = !chkIgnoreDate.Checked && !chkCommitterDateIsAuthorDate.Checked;
chkPreserveMerges.Enabled = !chkIgnoreDate.Checked && !chkCommitterDateIsAuthorDate.Checked;
chkAutosquash.Enabled = chkInteractive.Checked && !chkIgnoreDate.Checked && !chkCommitterDateIsAuthorDate.Checked;
}

private void AddFilesClick(object sender, EventArgs e)
{
UICommands.StartAddFilesDialog(this);
Expand Down Expand Up @@ -259,13 +268,13 @@ private void OkClick(object sender, EventArgs e)
{
rebaseCmd = GitCommandHelpers.RebaseCmd(
cboTo.Text, chkInteractive.Checked, chkPreserveMerges.Checked,
chkAutosquash.Checked, chkStash.Checked, txtFrom.Text, Branches.Text);
chkAutosquash.Checked, chkStash.Checked, chkIgnoreDate.Checked, chkCommitterDateIsAuthorDate.Checked, txtFrom.Text, Branches.Text);
}
else
{
rebaseCmd = GitCommandHelpers.RebaseCmd(
Branches.Text, chkInteractive.Checked,
chkPreserveMerges.Checked, chkAutosquash.Checked, chkStash.Checked);
chkPreserveMerges.Checked, chkAutosquash.Checked, chkStash.Checked, chkIgnoreDate.Checked, chkCommitterDateIsAuthorDate.Checked);
}

var dialogResult = FormProcess.ReadDialog(this, rebaseCmd);
Expand Down
3 changes: 3 additions & 0 deletions GitUI/CommandsDialogs/FormRebase.resx
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
8 changes: 8 additions & 0 deletions GitUI/Translation/English.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -5647,6 +5647,14 @@ Nothing to rebase.</source>
<source>Autosquash</source>
<target />
</trans-unit>
<trans-unit id="chkCommitterDateIsAuthorDate.Text">
<source>Committer Date Is Author Date</source>
<target />
</trans-unit>
<trans-unit id="chkIgnoreDate.Text">
<source>Ignore Date</source>
<target />
</trans-unit>
<trans-unit id="chkInteractive.Text">
<source>Interactive Rebase</source>
<target />
Expand Down
4 changes: 2 additions & 2 deletions GitUI/UserControls/RevisionGrid/RevisionGridControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2592,8 +2592,8 @@ private void LaunchRebase(string command)
}

string rebaseCmd = GitCommandHelpers.RebaseCmd(
LatestSelectedRevision.FirstParentId?.ToString(),
interactive: true, preserveMerges: false, autosquash: false, autoStash: true);
LatestSelectedRevision.FirstParentId?.ToString(), interactive: true, preserveMerges: false,
autosquash: false, autoStash: true, ignoreDate: false, committerDateIsAuthorDate: false);

using (var formProcess = new FormProcess(null, rebaseCmd, Module.WorkingDir, null, true))
{
Expand Down
41 changes: 31 additions & 10 deletions UnitTests/GitCommands.Tests/Git/GitCommandHelpersTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -599,37 +599,58 @@ public void RebaseCmd()
{
Assert.AreEqual(
"-c rebase.autoSquash=false rebase \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase -i --no-autosquash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: false, autosquash: false, autoStash: false).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: false, autosquash: false, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
GitVersion.Current.SupportRebaseMerges ? "-c rebase.autoSquash=false rebase --rebase-merges \"branch\"" : "-c rebase.autoSquash=false rebase --preserve-merges \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: true, autosquash: false, autoStash: false).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: true, autosquash: false, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: true, autoStash: false).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: true, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --autostash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: true).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: true, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase -i --autosquash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: false, autosquash: true, autoStash: false).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: false, autosquash: true, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --ignore-date \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false, ignoreDate: true, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --committer-date-is-author-date \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: true).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --ignore-date --autostash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: true, ignoreDate: true, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --committer-date-is-author-date --autostash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: true, ignoreDate: false, committerDateIsAuthorDate: true).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --ignore-date --autostash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: true, autosquash: true, autoStash: true, ignoreDate: true, committerDateIsAuthorDate: false).Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --committer-date-is-author-date --autostash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: true, autosquash: true, autoStash: true, ignoreDate: false, committerDateIsAuthorDate: true).Arguments);
Assert.AreEqual(
GitVersion.Current.SupportRebaseMerges ? "-c rebase.autoSquash=false rebase -i --autosquash --rebase-merges --autostash \"branch\"" : "-c rebase.autoSquash=false rebase -i --autosquash --preserve-merges --autostash \"branch\"",
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: true, autosquash: true, autoStash: true).Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: true, preserveMerges: true, autosquash: true, autoStash: true, ignoreDate: false, committerDateIsAuthorDate: false).Arguments);

// TODO quote 'onto'?

Assert.AreEqual(
"-c rebase.autoSquash=false rebase \"from\" \"branch\" --onto onto",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false, "from", "onto").Arguments);
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false, ignoreDate: false, committerDateIsAuthorDate: false, "from", "onto").Arguments);
Assert.AreEqual(
"-c rebase.autoSquash=false rebase --ignore-date \"from\" \"branch\" --onto onto",
GitCommandHelpers.RebaseCmd("branch", interactive: false, preserveMerges: false, autosquash: false, autoStash: false, ignoreDate: true, committerDateIsAuthorDate: false, "from", "onto").Arguments);

Assert.Throws<ArgumentException>(
() => GitCommandHelpers.RebaseCmd("branch", false, false, false, false, from: null, onto: "onto"));
() => GitCommandHelpers.RebaseCmd("branch", false, false, false, false, false, false, from: null, onto: "onto"));

Assert.Throws<ArgumentException>(
() => GitCommandHelpers.RebaseCmd("branch", false, false, false, false, from: "from", onto: null));
() => GitCommandHelpers.RebaseCmd("branch", false, false, false, false, false, false, from: "from", onto: null));
}

[TestCase(CleanMode.OnlyNonIgnored, true, false, null, "clean --dry-run")]
Expand Down

0 comments on commit e033ce0

Please sign in to comment.