[gitg] Explicitly override author details for repository
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Explicitly override author details for repository
- Date: Sat, 8 Aug 2015 15:32:17 +0000 (UTC)
commit 3c523b6b139b1477daf6a4125b292632c3ca8335
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Sat Aug 8 17:25:43 2015 +0200
Explicitly override author details for repository
https://bugzilla.gnome.org/show_bug.cgi?id=702635
gitg/gitg-author-details-dialog.vala | 134 +++++++++++++++--------
gitg/resources/ui/gitg-author-details-dialog.ui | 34 +++---
2 files changed, 106 insertions(+), 62 deletions(-)
---
diff --git a/gitg/gitg-author-details-dialog.vala b/gitg/gitg-author-details-dialog.vala
index 2bba81e..1f73c17 100644
--- a/gitg/gitg-author-details-dialog.vala
+++ b/gitg/gitg-author-details-dialog.vala
@@ -25,15 +25,18 @@ namespace Gitg
//Do this to pull in config.h before glib.h (for gettext)
private const string version = Gitg.Config.VERSION;
- [GtkChild (name = "input_name")]
- private Gtk.Entry d_input_name;
+ [GtkChild (name = "entry_name")]
+ private Gtk.Entry d_entry_name;
- [GtkChild (name = "input_email")]
- private Gtk.Entry d_input_email;
+ [GtkChild (name = "entry_email")]
+ private Gtk.Entry d_entry_email;
[GtkChild (name = "label_info")]
private Gtk.Label d_label_info;
+ [GtkChild (name = "checkbutton_override_global")]
+ private Gtk.CheckButton d_checkbutton_override_global;
+
private string? d_repository_name;
private Ggit.Config d_config;
@@ -53,13 +56,20 @@ namespace Gitg
public static AuthorDetailsDialog? show_global(Window window)
{
- Ggit.Config global_config = null;
+ var global_config_file = Ggit.Config.find_global();
+
+ if (global_config_file == null)
+ {
+ return null;
+ }
+
+ Ggit.Config? global_config;
try
{
- global_config = new Ggit.Config.default();
+ global_config = new Ggit.Config.from_file(global_config_file);
}
- catch (Error e)
+ catch
{
return null;
}
@@ -70,27 +80,57 @@ namespace Gitg
return author_details;
}
+ private void build_global()
+ {
+ title = _("Author Details");
+ d_label_info.label = _("Enter default details used for all repositories:");
+ d_label_info.show();
+ }
+
+ private bool config_is_local(string name)
+ {
+ try
+ {
+ var entry = d_config.get_entry(name);
+ return entry.get_level() == Ggit.ConfigLevel.LOCAL;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ private void build_repository()
+ {
+ title = "%s - %s".printf(d_repository_name, _("Author Details"));
+
+ // Translators: %s is the repository name
+ d_checkbutton_override_global.label = _("Override global details for repository
'%s':").printf(d_repository_name);
+ d_checkbutton_override_global.active = (config_is_local("user.name") ||
config_is_local("user.email"));
+
+ d_checkbutton_override_global.notify["active"].connect(update_sensitivity);
+ d_checkbutton_override_global.show();
+
+ update_sensitivity();
+ }
+
+ private void update_sensitivity()
+ {
+ d_entry_name.sensitive = d_checkbutton_override_global.active;
+ d_entry_email.sensitive = d_checkbutton_override_global.active;
+ }
+
public override void show()
{
base.show();
if (d_repository_name == null)
{
- title = _("Author Details");
- d_label_info.label = _("Enter default details used for all repositories:");
-
- if (Ggit.Config.find_global().get_path() == null)
- {
- show_config_error(_("Unable to open the .gitconfig file."), "");
- return;
- }
+ build_global();
}
else
{
- title = "%s - %s".printf(d_repository_name, _("Author Details"));
-
- // Translators: %s is the repository name
- d_label_info.label = _("Enter details for repository
'%s':").printf(d_repository_name);
+ build_repository();
}
string author_name = "";
@@ -114,23 +154,27 @@ namespace Gitg
{
}
- if (author_name != "")
- {
- d_input_name.set_text(author_name.chomp());
- }
+ d_entry_name.set_text(author_name.chomp());
+ d_entry_email.set_text(author_email.chomp());
+ }
- if (author_email != "")
+ private void delete_local_entries()
+ {
+ try
{
- d_input_email.set_text(author_email.chomp());
- }
-
- d_input_name.activate.connect((e) => {
- response(Gtk.ResponseType.OK);
- });
+ if (d_config.get_entry("user.name").get_level() == Ggit.ConfigLevel.LOCAL)
+ {
+ d_config.delete_entry("user.name");
+ }
+ } catch {}
- d_input_email.activate.connect((e) => {
- response(Gtk.ResponseType.OK);
- });
+ try
+ {
+ if (d_config.get_entry("user.email").get_level() == Ggit.ConfigLevel.LOCAL)
+ {
+ d_config.delete_entry("user.email");
+ }
+ } catch {}
}
public override void response(int id) {
@@ -138,22 +182,22 @@ namespace Gitg
{
try
{
- if (d_input_name.get_text() == "")
- {
- d_config.delete_entry("user.name");
- }
- else
- {
- d_config.set_string("user.name", d_input_name.get_text());
- }
-
- if (d_input_email.get_text() == "")
+ if (d_repository_name != null)
{
- d_config.delete_entry("user.email");
+ if (d_checkbutton_override_global.active)
+ {
+ d_config.set_string("user.name",
d_entry_name.get_text());
+ d_config.set_string("user.email",
d_entry_email.get_text());
+ }
+ else
+ {
+ delete_local_entries();
+ }
}
else
{
- d_config.set_string("user.email", d_input_email.get_text());
+ d_config.set_string("user.name", d_entry_name.get_text());
+ d_config.set_string("user.email", d_entry_email.get_text());
}
}
catch (Error e)
diff --git a/gitg/resources/ui/gitg-author-details-dialog.ui b/gitg/resources/ui/gitg-author-details-dialog.ui
index c53dca5..009aa3b 100644
--- a/gitg/resources/ui/gitg-author-details-dialog.ui
+++ b/gitg/resources/ui/gitg-author-details-dialog.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
- <requires lib="gtk+" version="3.3"/>
+ <requires lib="gtk+" version="3.14"/>
<template class="GitgAuthorDetailsDialog" parent="GtkDialog">
<property name="can_focus">False</property>
<property name="type_hint">dialog</property>
@@ -59,16 +59,20 @@
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="label_info">
- <property name="visible">True</property>
+ <property name="visible">False</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label">Enter details for repository '%s':</property>
+ <property name="label" translatable="yes">Default details used for all repositories</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkbutton_override_global">
+ <property name="label">Override global details for repository '%s':</property>
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
</child>
<child>
<object class="GtkGrid" id="grid_user_details">
@@ -76,14 +80,15 @@
<property name="height_request">0</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="margin_start">18</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
- <object class="GtkEntry" id="input_name">
+ <object class="GtkEntry" id="entry_name">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
- <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -91,11 +96,11 @@
</packing>
</child>
<child>
- <object class="GtkEntry" id="input_email">
+ <object class="GtkEntry" id="entry_email">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
- <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -125,11 +130,6 @@
</packing>
</child>
</object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]