[gitg] Explicitly override author details for repository



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]