fetcher git: make url parsing more readable by using the Uri object
This commit is contained in:
parent
4c7ef791fe
commit
a58342a798
|
@ -31,53 +31,54 @@ namespace SparkleLib {
|
||||||
public SparkleFetcherGit (string server, string remote_folder, string target_folder) :
|
public SparkleFetcherGit (string server, string remote_folder, string target_folder) :
|
||||||
base (server, remote_folder, target_folder)
|
base (server, remote_folder, target_folder)
|
||||||
{
|
{
|
||||||
remote_folder = remote_folder.Trim ("/".ToCharArray ());
|
if (server.EndsWith ("/"))
|
||||||
|
server = server.Substring (0, server.Length - 1);
|
||||||
|
|
||||||
if (server.StartsWith ("http")) {
|
if (!remote_folder.StartsWith ("/"))
|
||||||
base.target_folder = target_folder;
|
remote_folder = "/" + remote_folder;
|
||||||
base.remote_url = server;
|
|
||||||
return;
|
|
||||||
|
Uri uri;
|
||||||
|
|
||||||
|
try {
|
||||||
|
uri = new Uri (server + remote_folder);
|
||||||
|
|
||||||
|
} catch (UriFormatException) {
|
||||||
|
uri = new Uri ("ssh://" + server + remote_folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gitorious formatting
|
|
||||||
if (server.Contains ("gitorious.org")) {
|
|
||||||
server = "ssh://git@gitorious.org";
|
|
||||||
|
|
||||||
if (!remote_folder.EndsWith (".git")) {
|
if (!uri.Scheme.Equals ("ssh") &&
|
||||||
|
!uri.Scheme.Equals ("git")) {
|
||||||
|
|
||||||
if (!remote_folder.Contains ("/"))
|
uri = new Uri ("ssh://" + server);
|
||||||
remote_folder = remote_folder + "/" + remote_folder;
|
}
|
||||||
|
|
||||||
remote_folder += ".git";
|
|
||||||
|
if (uri.Host.Equals ("gitorious.org")) {
|
||||||
|
if (!uri.AbsolutePath.Equals ("/") &&
|
||||||
|
!uri.AbsolutePath.EndsWith (".git")) {
|
||||||
|
|
||||||
|
uri = new Uri ("ssh://git@gitorious.org" + uri.AbsolutePath + ".git");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uri = new Uri ("ssh://git@gitorious.org" + uri.AbsolutePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (server.Contains ("github.com")) {
|
} else if (uri.Host.Equals ("github.com")) {
|
||||||
server = "ssh://git@github.com";
|
uri = new Uri ("ssh://git@github.com" + uri.AbsolutePath);
|
||||||
|
|
||||||
} else if (server.Contains ("gnome.org")) {
|
} else if (uri.Host.Equals ("gnome.org")) {
|
||||||
server = "ssh://git@gnome.org/git";
|
uri = new Uri ("ssh://git@gnome.org/git" + uri.AbsolutePath);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
server = server.TrimEnd ("/".ToCharArray ());
|
if (string.IsNullOrEmpty (uri.UserInfo))
|
||||||
|
uri = new Uri (uri.Scheme + "://git@" + uri.Host + uri.AbsolutePath);
|
||||||
string protocol = "ssh://";
|
|
||||||
|
|
||||||
if (server.StartsWith ("ssh://"))
|
|
||||||
server = server.Substring (6);
|
|
||||||
|
|
||||||
if (server.StartsWith ("git://")) {
|
|
||||||
server = server.Substring (6);
|
|
||||||
protocol = "git://";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!server.Contains ("@"))
|
|
||||||
server = "git@" + server;
|
|
||||||
|
|
||||||
server = protocol + server;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
base.target_folder = target_folder;
|
base.target_folder = target_folder;
|
||||||
base.remote_url = server + "/" + remote_folder;
|
base.remote_url = uri.ToString ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue