Handle bare repository cloning

This commit is contained in:
Ignacio Casal Quinteiro 2013-03-26 13:03:54 +01:00
parent b3bc32bcba
commit 7ef068e669
3 changed files with 34 additions and 6 deletions

View file

@ -194,11 +194,13 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable, Gtk.
"dialog-clone",
"entry-url",
"filechooserbutton-location",
"checkbutton-bare-repository",
"ok-button");
var dlg = ret["dialog-clone"] as Gtk.Dialog;
var entry_url = ret["entry-url"] as Gtk.Entry;
var chooser = ret["filechooserbutton-location"] as Gtk.FileChooserButton;
var bare = ret["checkbutton-bare-repository"] as Gtk.CheckButton;
var ok_button = ret["ok-button"] as Gtk.Button;
dlg.modal = true;
@ -211,7 +213,7 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable, Gtk.
dlg.response.connect((d, id) => {
if (id == Gtk.ResponseType.OK)
{
d_dash_view.clone_repository(entry_url.get_text(), chooser.get_file());
d_dash_view.clone_repository(entry_url.get_text(), chooser.get_file(), bare.get_active());
}
d.destroy();

View file

@ -115,6 +115,22 @@
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="checkbutton-bare-repository">
<property name="label" translatable="yes">Bare repository</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">2</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>

View file

@ -254,7 +254,7 @@ namespace GitgGtk
}
}
private async Gitg.Repository? clone(string url, File location)
private async Gitg.Repository? clone(string url, File location, bool is_bare)
{
SourceFunc callback = clone.callback;
Gitg.Repository? repository = null;
@ -262,7 +262,10 @@ namespace GitgGtk
ThreadFunc<void*> run = () => {
try
{
repository = Ggit.Repository.clone(url, location, null) as Gitg.Repository;
var options = new Ggit.CloneOptions();
options.set_is_bare(is_bare);
repository = Ggit.Repository.clone(url, location, options) as Gitg.Repository;
}
catch (Ggit.Error e)
{
@ -287,13 +290,20 @@ namespace GitgGtk
return repository;
}
public void clone_repository(string url, File location)
public void clone_repository(string url, File location, bool is_bare)
{
// create subfolder
var subfolder_name = url.substring(url.last_index_of_char('/') + 1);
if (subfolder_name.has_suffix(".git"))
{
subfolder_name = subfolder_name.slice(0, - ".git".length);
if (!is_bare)
{
subfolder_name = subfolder_name.slice(0, - ".git".length);
}
}
else
{
subfolder_name += ".git";
}
var subfolder = location.resolve_relative_path(subfolder_name);
@ -311,7 +321,7 @@ namespace GitgGtk
// Clone
RepositoryData? data = create_repository_data(subfolder_name, "Cloning...", true);
clone.begin(url, subfolder, (obj, res) => {
clone.begin(url, subfolder, is_bare, (obj, res) => {
Gitg.Repository? repository = clone.end(res);
string branch_name = "";