[gitg] Offer to create new repository when adding non git directory
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Offer to create new repository when adding non git directory
- Date: Wed, 5 Aug 2015 20:02:34 +0000 (UTC)
commit b93ec1d622fba9368f2063a1d76e22bdaadb3dfe
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Wed Aug 5 22:00:36 2015 +0200
Offer to create new repository when adding non git directory
https://bugzilla.gnome.org/show_bug.cgi?id=741110
gitg/gitg-dash-view.vala | 118 ++++++++++++++++++++++++++++-----
gitg/gitg-window.vala | 5 ++
libgitg-ext/gitg-ext-user-query.vala | 1 +
3 files changed, 106 insertions(+), 18 deletions(-)
---
diff --git a/gitg/gitg-dash-view.vala b/gitg/gitg-dash-view.vala
index 81c39ff..33386f0 100644
--- a/gitg/gitg-dash-view.vala
+++ b/gitg/gitg-dash-view.vala
@@ -323,6 +323,102 @@ class DashView : Gtk.Grid, GitgExt.UIElement, GitgExt.Activity, GitgExt.Selectab
dlg.show();
}
+ private void finish_add_repository(Repository repo)
+ {
+ var row = add_repository(repo);
+
+ if (row != null)
+ {
+ row.grab_focus();
+ d_repository_list_box.grab_focus();
+ row.grab_focus();
+ }
+ }
+
+ private void do_add_repository(File location)
+ {
+ Repository repo;
+
+ try
+ {
+ repo = new Repository(location, null);
+ }
+ catch (Error err)
+ {
+ application.show_infobar(_("Failed to add repository"), err.message,
Gtk.MessageType.ERROR);
+ return;
+ }
+
+ finish_add_repository(repo);
+ }
+
+ private void query_create_repository(File location)
+ {
+ var q = new GitgExt.UserQuery();
+ var name = location.get_parse_name();
+
+ var homedir = Environment.get_home_dir();
+
+ if (homedir != null)
+ {
+ try
+ {
+ var hd = Filename.to_utf8(homedir, -1, null, null);
+
+ if (hd == name)
+ {
+ name = "~/";
+ }
+ else
+ {
+ if (name.has_prefix(hd + "/"))
+ {
+ name = "~" + name[hd.length:name.length];
+ }
+ }
+ } catch {}
+ }
+
+ name = Markup.escape_text(name);
+
+ q.title = _("Create new repository");
+
+ // Translators: %s is a file name
+ q.message = _("The location <i>%s</i> does not appear to be a valid git repository. Would you
like to initialize a new git repository at this location?").printf(name);
+ q.message_type = Gtk.MessageType.QUESTION;
+ q.message_use_markup = true;
+
+ q.responses = new GitgExt.UserQueryResponse[] {
+ new GitgExt.UserQueryResponse(_("_Cancel"), Gtk.ResponseType.CANCEL),
+ new GitgExt.UserQueryResponse(_("Create repository"), Gtk.ResponseType.OK)
+ };
+
+ q.default_response = Gtk.ResponseType.OK;
+
+ q.response.connect((w, r) => {
+ if (r == Gtk.ResponseType.OK)
+ {
+ Repository repo;
+
+ try
+ {
+ repo = Repository.init_repository(location, false);
+ }
+ catch (Error err)
+ {
+ application.show_infobar(_("Failed to create repository"),
err.message, Gtk.MessageType.ERROR);
+ return true;
+ }
+
+ finish_add_repository(repo);
+ }
+
+ return true;
+ });
+
+ application.user_query(q);
+ }
+
[GtkCallback]
private void add_repository_clicked()
{
@@ -345,27 +441,13 @@ class DashView : Gtk.Grid, GitgExt.UIElement, GitgExt.Activity, GitgExt.Selectab
file = chooser.get_current_folder_file();
}
- Repository? repo = null;
-
- try
+ if (!file.get_child(".git").query_exists())
{
- repo = new Repository(file, null);
+ query_create_repository(file);
}
- catch (Error err)
- {
- application.show_infobar(_("Failed to add repository"), err.message,
Gtk.MessageType.ERROR);
- }
-
- if (repo != null)
+ else
{
- var row = add_repository(repo);
-
- if (row != null)
- {
- row.grab_focus();
- d_repository_list_box.grab_focus();
- row.grab_focus();
- }
+ do_add_repository(file);
}
}
diff --git a/gitg/gitg-window.vala b/gitg/gitg-window.vala
index d4ab31d..0209946 100644
--- a/gitg/gitg-window.vala
+++ b/gitg/gitg-window.vala
@@ -761,6 +761,11 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable
dlg.format_secondary_text("%s", query.message);
+ if (query.message_use_markup)
+ {
+ dlg.secondary_use_markup = true;
+ }
+
dlg.set_default_response(query.default_response);
foreach (var response in query.responses)
diff --git a/libgitg-ext/gitg-ext-user-query.vala b/libgitg-ext/gitg-ext-user-query.vala
index 101297b..5a99a00 100644
--- a/libgitg-ext/gitg-ext-user-query.vala
+++ b/libgitg-ext/gitg-ext-user-query.vala
@@ -40,6 +40,7 @@ public class UserQuery : Object
public Gtk.ResponseType default_response { get; set; default = Gtk.ResponseType.CLOSE; }
public UserQueryResponse[] responses { get; set; }
public bool default_is_destructive { get; set; }
+ public bool message_use_markup { get; set; }
public signal void quit();
public signal bool response(Gtk.ResponseType response_type);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]