diff --git a/src/Dialogs/CloneRepositoryDialog.vala b/src/Dialogs/CloneRepositoryDialog.vala index 8a0e2dfa4..ddf9bdf59 100644 --- a/src/Dialogs/CloneRepositoryDialog.vala +++ b/src/Dialogs/CloneRepositoryDialog.vala @@ -22,6 +22,7 @@ public class Scratch.Dialogs.CloneRepositoryDialog : Granite.MessageDialog { private Gtk.Spinner spinner; public bool can_clone { get; private set; default = false; } + public bool update_submodules { get; set; default = true; } public string suggested_local_folder { get; construct; } public string suggested_remote { get; construct; } @@ -114,10 +115,16 @@ public class Scratch.Dialogs.CloneRepositoryDialog : Granite.MessageDialog { }; local_project_name_entry.changed.connect (validate_local_name); + var update_submodules_checkbox = new Gtk.CheckButton.with_label (_("Update submodules")) { + margin_top = 12, + halign = START + }; + this.bind_property ("update-submodules", update_submodules_checkbox, "active", BIDIRECTIONAL | SYNC_CREATE ); var content_box = new Gtk.Box (VERTICAL, 0); content_box.add (new CloneEntry (_("Repository URL"), remote_repository_uri_entry)); content_box.add (new CloneEntry (_("Location"), folder_chooser_button)); content_box.add (new CloneEntry (_("Name of Clone"), local_project_name_entry)); + content_box.add (update_submodules_checkbox); var cloning_label = new Granite.HeaderLabel (_("Cloning in progress")); spinner = new Gtk.Spinner (); diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 3a4d3260b..7cdb29b9d 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -1071,6 +1071,7 @@ namespace Scratch { git_manager.clone_repository.begin ( uri, target, + clone_dialog.update_submodules, (obj, res) => { sidebar.cloning_in_progress = false; File? workdir = null; diff --git a/src/Services/GitManager.vala b/src/Services/GitManager.vala index 0c627930b..b4b6f0231 100644 --- a/src/Services/GitManager.vala +++ b/src/Services/GitManager.vala @@ -127,6 +127,7 @@ namespace Scratch.Services { public async bool clone_repository ( string uri, string local_folder, + bool update_submodules, out File? repo_workdir, out string? error ) { @@ -155,9 +156,15 @@ namespace Scratch.Services { folder_file, clone_options ); + + if (update_submodules) { + new_repo.submodule_foreach ((submodule, name) => { + submodule.update (true, null); + return 0; + }); + } } catch (Error e) { e_message = e.message; - new_repo = null; } Idle.add ((owned)callback); @@ -166,7 +173,9 @@ namespace Scratch.Services { yield; if (new_repo != null) { repo_workdir = new_repo.get_workdir (); - } else { + } + + if (e_message != "") { error = e_message; }