Finally! The Cloning is usable!!!
This commit is contained in:
parent
1c4defa4c9
commit
784a474efb
1 changed files with 87 additions and 29 deletions
|
@ -28,6 +28,9 @@ import org.eclipse.jgit.api.Git;
|
|||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.eclipse.jgit.api.errors.InvalidRemoteException;
|
||||
import org.eclipse.jgit.api.errors.JGitInternalException;
|
||||
import org.eclipse.jgit.api.errors.TransportException;
|
||||
import org.eclipse.jgit.errors.NotSupportedException;
|
||||
import org.eclipse.jgit.transport.JschConfigSessionFactory;
|
||||
import org.eclipse.jgit.transport.OpenSshConfig;
|
||||
import org.eclipse.jgit.transport.SshSessionFactory;
|
||||
|
@ -36,7 +39,12 @@ import org.eclipse.jgit.util.FS;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
// TODO move the messages to strings.xml
|
||||
|
||||
public class GitClone extends Activity {
|
||||
|
||||
|
@ -48,6 +56,7 @@ public class GitClone extends Activity {
|
|||
|
||||
private File localDir;
|
||||
private String hostname;
|
||||
private String username;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -68,6 +77,20 @@ public class GitClone extends Activity {
|
|||
@Override
|
||||
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
|
||||
protocol = ((Spinner)findViewById(R.id.clone_protocol)).getSelectedItem().toString();
|
||||
if (protocol.equals("ssh://")) {
|
||||
((EditText)findViewById(R.id.clone_uri)).setHint("user@hostname:path");
|
||||
} else {
|
||||
((EditText)findViewById(R.id.clone_uri)).setHint("hostname/path");
|
||||
new AlertDialog.Builder(activity).
|
||||
setMessage("You are about to use a read-only repository, you will not be able to push to it").
|
||||
setCancelable(true).
|
||||
setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -132,7 +155,7 @@ public class GitClone extends Activity {
|
|||
}
|
||||
|
||||
/* The clone process has to be on a different thread than the main one */
|
||||
private class CloneTask extends AsyncTask<CloneCommand, Integer, Long> {
|
||||
private class CloneTask extends AsyncTask<CloneCommand, Integer, Integer> {
|
||||
private ProgressDialog dialog;
|
||||
|
||||
public CloneTask(Activity activity) {
|
||||
|
@ -146,11 +169,34 @@ public class GitClone extends Activity {
|
|||
this.dialog.show();
|
||||
}
|
||||
|
||||
protected void onPostExecute(Long result) {
|
||||
if (result < 0) {
|
||||
protected void onPostExecute(Integer result) {
|
||||
switch (result) {
|
||||
case -1:
|
||||
new AlertDialog.Builder(activity).
|
||||
setTitle("Invalid remote repository path").
|
||||
setMessage("Please check that the repository path is correct.\nDid you forget to specify the path after the hostname?").
|
||||
setTitle("Please check that the repository path is correct.").
|
||||
setMessage("Did you forget to specify the path after the hostname?").
|
||||
setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
|
||||
}
|
||||
}).show();
|
||||
break;
|
||||
case -2:
|
||||
new AlertDialog.Builder(activity).
|
||||
setTitle("Communication error").
|
||||
setMessage("JGit said that the server didn't like our request. Either an authentication issue or the host is not reachable. Check the debug messages.").
|
||||
setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
|
||||
}
|
||||
}).show();
|
||||
break;
|
||||
case -99:
|
||||
new AlertDialog.Builder(activity).
|
||||
setTitle("JGit raised an internal exception").
|
||||
setMessage("OUPS, JGit didn't like what you did... Check that you provided it with a correct URI. Check also debug messages.").
|
||||
setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
|
@ -162,14 +208,18 @@ public class GitClone extends Activity {
|
|||
}
|
||||
|
||||
|
||||
protected Long doInBackground(CloneCommand... cmd) {
|
||||
protected Integer doInBackground(CloneCommand... cmd) {
|
||||
int count = cmd.length;
|
||||
long totalSize = 0;
|
||||
Integer totalSize = 0;
|
||||
for (int i = 0; i < count; i++) {
|
||||
try {
|
||||
cmd[i].call();
|
||||
} catch (JGitInternalException e) {
|
||||
return -99;
|
||||
} catch (InvalidRemoteException e) {
|
||||
return new Long(-1);
|
||||
return -1;
|
||||
} catch (TransportException e) {
|
||||
return -2;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -205,7 +255,26 @@ public class GitClone extends Activity {
|
|||
|
||||
// now cheat a little and prepend the real protocol
|
||||
// jGit does not accept a ssh:// but requires https://
|
||||
if (!protocol.equals("ssh://")) hostname = protocol + hostname;
|
||||
if (!protocol.equals("ssh://")) {
|
||||
hostname = protocol + hostname;
|
||||
} else {
|
||||
// did he forget the username?
|
||||
if (!hostname.matches("^.+@.+")) {
|
||||
new AlertDialog.Builder(this).
|
||||
setMessage("Did you forget to specify a username?").
|
||||
setPositiveButton("Oups...", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
|
||||
}
|
||||
}).
|
||||
show();
|
||||
return;
|
||||
}
|
||||
|
||||
username = hostname.split("@")[0];
|
||||
}
|
||||
|
||||
|
||||
if (localDir.exists()) {
|
||||
new AlertDialog.Builder(this).
|
||||
|
@ -256,33 +325,22 @@ public class GitClone extends Activity {
|
|||
if (connectionMode.equalsIgnoreCase("ssh-key")) {
|
||||
|
||||
} else {
|
||||
// Set an EditText view to get user input
|
||||
final LinearLayout layout = new LinearLayout(activity);
|
||||
layout.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
final EditText username = new EditText(activity);
|
||||
username.setHint("Username");
|
||||
username.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
|
||||
|
||||
final EditText password = new EditText(activity);
|
||||
password.setHint("Password");
|
||||
password.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
|
||||
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
||||
|
||||
layout.addView(username);
|
||||
layout.addView(password);
|
||||
|
||||
new AlertDialog.Builder(activity)
|
||||
.setTitle("Authenticate")
|
||||
.setMessage("Please provide your usename and password for this repository")
|
||||
.setView(layout)
|
||||
.setMessage("Please provide the password for this repository")
|
||||
.setView(password)
|
||||
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
|
||||
SshSessionFactory.setInstance(new GitConfigSessionFactory());
|
||||
|
||||
CloneCommand cmd = Git.cloneRepository().
|
||||
setCredentialsProvider(new UsernamePasswordCredentialsProvider("git", "nicomint")).
|
||||
setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password.getText().toString())).
|
||||
setCloneAllBranches(true).
|
||||
setDirectory(localDir).
|
||||
setURI(hostname);
|
||||
|
|
Loading…
Reference in a new issue