mirror of
https://gitlab.gnome.org/GNOME/gitg
synced 2024-10-02 14:13:48 +00:00
Added supported diff options for commit diff
This commit is contained in:
parent
8aba6770bb
commit
ed1412628c
|
@ -75,6 +75,7 @@
|
|||
</schema>
|
||||
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gitg.preferences.commit" path="/org/gnome/gitg/preferences/commit/">
|
||||
<child name="message" schema="org.gnome.gitg.preferences.commit.message" />
|
||||
<child name="diff" schema="org.gnome.gitg.preferences.commit.diff" />
|
||||
</schema>
|
||||
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gitg.preferences.commit.message" path="/org/gnome/gitg/preferences/commit/message/">
|
||||
<key name="show-markup" type="b">
|
||||
|
@ -140,6 +141,25 @@
|
|||
<default>4</default>
|
||||
</key>
|
||||
</schema>
|
||||
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gitg.preferences.commit.diff" path="/org/gnome/gitg/preferences/commit/diff/">
|
||||
<key name="context-lines" type="i">
|
||||
<default>3</default>
|
||||
<_summary>Number of Before/After Context Lines</_summary>
|
||||
<_description>
|
||||
Setting that determines how many lines of context (before and after)
|
||||
should be shown when showing the diff to be staged/unstaged in the
|
||||
commit area.
|
||||
</_description>
|
||||
</key>
|
||||
<key name="tab-width" type="i">
|
||||
<default>4</default>
|
||||
<_summary>Rendered Width of a Tab Character</_summary>
|
||||
<_description>
|
||||
Setting that determines how much space a tab character should occupy
|
||||
when showing the diff of a commit.
|
||||
</_description>
|
||||
</key>
|
||||
</schema>
|
||||
<schema id="org.gnome.gitg.state" path="/org/gnome/gitg/state/">
|
||||
<child name="window" schema="org.gnome.gitg.state.window"/>
|
||||
<child name="history" schema="org.gnome.gitg.state.history"/>
|
||||
|
|
|
@ -140,11 +140,14 @@ namespace GitgCommit
|
|||
|
||||
private delegate void StageUnstageCallback(Gitg.StageStatusFile f, int numclick);
|
||||
|
||||
private delegate void UpdateDiffCallback();
|
||||
private UpdateDiffCallback? d_update_diff_callback;
|
||||
|
||||
private void show_unstaged_diff(Gitg.StageStatusFile f)
|
||||
{
|
||||
var stage = application.repository.stage;
|
||||
|
||||
stage.diff_workdir.begin(f, (obj, res) => {
|
||||
stage.diff_workdir.begin(f, d_main.diff_view.options, (obj, res) => {
|
||||
try
|
||||
{
|
||||
var d = stage.diff_workdir.end(res);
|
||||
|
@ -163,6 +166,10 @@ namespace GitgCommit
|
|||
d_main.diff_view.diff = null;
|
||||
}
|
||||
});
|
||||
|
||||
d_update_diff_callback = () => {
|
||||
show_unstaged_diff(f);
|
||||
};
|
||||
}
|
||||
|
||||
private void stage_file(Gitg.StageStatusFile f)
|
||||
|
@ -229,7 +236,7 @@ namespace GitgCommit
|
|||
{
|
||||
var stage = application.repository.stage;
|
||||
|
||||
stage.diff_index.begin(f, (obj, res) => {
|
||||
stage.diff_index.begin(f, d_main.diff_view.options, (obj, res) => {
|
||||
try
|
||||
{
|
||||
var d = stage.diff_index.end(res);
|
||||
|
@ -248,6 +255,10 @@ namespace GitgCommit
|
|||
d_main.diff_view.diff = null;
|
||||
}
|
||||
});
|
||||
|
||||
d_update_diff_callback = () => {
|
||||
show_staged_diff(f);
|
||||
};
|
||||
}
|
||||
|
||||
private void delete_index_file(Gitg.StageStatusFile f)
|
||||
|
@ -1005,6 +1016,13 @@ namespace GitgCommit
|
|||
{
|
||||
d_main = new Paned();
|
||||
|
||||
d_main.diff_view.options_changed.connect(() => {
|
||||
if (d_update_diff_callback != null)
|
||||
{
|
||||
d_update_diff_callback();
|
||||
}
|
||||
});
|
||||
|
||||
d_main.sidebar.deselected.connect(() => {
|
||||
d_main.diff_view.diff = null;
|
||||
});
|
||||
|
@ -1023,6 +1041,20 @@ namespace GitgCommit
|
|||
|
||||
d_main.sidebar.populate_popup.connect(do_populate_menu);
|
||||
|
||||
var settings = new Settings("org.gnome.gitg.preferences.commit.diff");
|
||||
|
||||
settings.bind("context-lines",
|
||||
d_main.diff_view,
|
||||
"context-lines",
|
||||
SettingsBindFlags.GET |
|
||||
SettingsBindFlags.SET);
|
||||
|
||||
settings.bind("tab-width",
|
||||
d_main.diff_view,
|
||||
"tab-width",
|
||||
SettingsBindFlags.GET |
|
||||
SettingsBindFlags.SET);
|
||||
|
||||
d_main.diff_view.bind_property("has-selection",
|
||||
d_main.button_stage,
|
||||
"sensitive",
|
||||
|
|
|
@ -26,9 +26,15 @@ public class DiffViewOptions : Gtk.Grid
|
|||
[GtkChild (name = "switch_changes_inline")]
|
||||
private Gtk.Switch d_switch_changes_inline;
|
||||
|
||||
[GtkChild (name = "label_changes_inline")]
|
||||
private Gtk.Label d_label_changes_inline;
|
||||
|
||||
[GtkChild (name = "switch_ignore_whitespace")]
|
||||
private Gtk.Switch d_switch_ignore_whitespace;
|
||||
|
||||
[GtkChild (name = "label_ignore_whitespace")]
|
||||
private Gtk.Label d_label_ignore_whitespace;
|
||||
|
||||
[GtkChild (name = "adjustment_context")]
|
||||
private Gtk.Adjustment d_adjustment_context;
|
||||
|
||||
|
@ -41,6 +47,9 @@ public class DiffViewOptions : Gtk.Grid
|
|||
[GtkChild (name = "separator_developer_tools")]
|
||||
private Gtk.Separator d_separator_developer_tools;
|
||||
|
||||
[GtkChild (name = "separator_first_options")]
|
||||
private Gtk.Separator d_separator_first_options;
|
||||
|
||||
public bool changes_inline { get; set; }
|
||||
public bool ignore_whitespace { get; set; }
|
||||
public int context_lines { get; set; }
|
||||
|
@ -127,6 +136,17 @@ public class DiffViewOptions : Gtk.Grid
|
|||
|
||||
d_separator_developer_tools.visible = dbg;
|
||||
d_button_developer_tools.visible = dbg;
|
||||
|
||||
if (view.commit == null)
|
||||
{
|
||||
d_label_changes_inline.visible = false;
|
||||
d_switch_changes_inline.visible = false;
|
||||
|
||||
d_label_ignore_whitespace.visible = false;
|
||||
d_switch_ignore_whitespace.visible = false;
|
||||
|
||||
d_separator_first_options.visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
|
|
|
@ -60,6 +60,14 @@ namespace Gitg
|
|||
public File? custom_css { get; construct; }
|
||||
public File? custom_js { get; construct; }
|
||||
|
||||
public virtual signal void options_changed()
|
||||
{
|
||||
if (d_commit != null)
|
||||
{
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
public Ggit.DiffOptions options
|
||||
{
|
||||
get
|
||||
|
@ -148,7 +156,8 @@ namespace Gitg
|
|||
if (flags != options.flags)
|
||||
{
|
||||
options.flags = flags;
|
||||
update();
|
||||
|
||||
options_changed();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -168,7 +177,8 @@ namespace Gitg
|
|||
if (d_changes_inline != value)
|
||||
{
|
||||
d_changes_inline = value;
|
||||
update();
|
||||
|
||||
options_changed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -184,7 +194,7 @@ namespace Gitg
|
|||
options.n_context_lines = value;
|
||||
options.n_interhunk_lines = value;
|
||||
|
||||
update();
|
||||
options_changed();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -592,11 +602,6 @@ namespace Gitg
|
|||
Gdk.Event event,
|
||||
WebKit.HitTestResult hit_test_result)
|
||||
{
|
||||
if (d_commit == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var m = new Gtk.Popover(this);
|
||||
var opts = new DiffViewOptions(this);
|
||||
|
||||
|
|
|
@ -904,7 +904,7 @@ public class Stage : Object
|
|||
});
|
||||
}
|
||||
|
||||
public async Ggit.Diff? diff_index(StageStatusFile f) throws Error
|
||||
public async Ggit.Diff? diff_index(StageStatusFile f, Ggit.DiffOptions? defopts = null) throws Error
|
||||
{
|
||||
var opts = new Ggit.DiffOptions();
|
||||
|
||||
|
@ -912,11 +912,19 @@ public class Stage : Object
|
|||
Ggit.DiffOption.DISABLE_PATHSPEC_MATCH |
|
||||
Ggit.DiffOption.RECURSE_UNTRACKED_DIRS;
|
||||
|
||||
opts.n_context_lines = 3;
|
||||
opts.n_interhunk_lines = 3;
|
||||
|
||||
opts.pathspec = new string[] {f.path};
|
||||
|
||||
if (defopts != null)
|
||||
{
|
||||
opts.flags |= defopts.flags;
|
||||
|
||||
opts.n_context_lines = defopts.n_context_lines;
|
||||
opts.n_interhunk_lines = defopts.n_interhunk_lines;
|
||||
|
||||
opts.old_prefix = defopts.old_prefix;
|
||||
opts.new_prefix = defopts.new_prefix;
|
||||
}
|
||||
|
||||
var tree = yield get_head_tree();
|
||||
|
||||
return new Ggit.Diff.tree_to_index(d_repository,
|
||||
|
@ -925,7 +933,7 @@ public class Stage : Object
|
|||
opts);
|
||||
}
|
||||
|
||||
public async Ggit.Diff? diff_workdir(StageStatusFile f) throws Error
|
||||
public async Ggit.Diff? diff_workdir(StageStatusFile f, Ggit.DiffOptions? defopts = null) throws Error
|
||||
{
|
||||
var opts = new Ggit.DiffOptions();
|
||||
|
||||
|
@ -933,11 +941,19 @@ public class Stage : Object
|
|||
Ggit.DiffOption.DISABLE_PATHSPEC_MATCH |
|
||||
Ggit.DiffOption.RECURSE_UNTRACKED_DIRS;
|
||||
|
||||
opts.n_context_lines = 3;
|
||||
opts.n_interhunk_lines = 3;
|
||||
|
||||
opts.pathspec = new string[] {f.path};
|
||||
|
||||
if (defopts != null)
|
||||
{
|
||||
opts.flags |= defopts.flags;
|
||||
|
||||
opts.n_context_lines = defopts.n_context_lines;
|
||||
opts.n_interhunk_lines = defopts.n_interhunk_lines;
|
||||
|
||||
opts.old_prefix = defopts.old_prefix;
|
||||
opts.new_prefix = defopts.new_prefix;
|
||||
}
|
||||
|
||||
return new Ggit.Diff.index_to_workdir(d_repository,
|
||||
d_repository.get_index(),
|
||||
opts);
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator" id="separator1">
|
||||
<object class="GtkSeparator" id="separator_first_options">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
|
|
Loading…
Reference in a new issue