Add a Sync command that calls Pull then Push

Fixes #78
This commit is contained in:
Mohamed Zenadi 2015-04-19 20:27:30 +02:00
parent 6983ef4f82
commit 771d8a9415
9 changed files with 101 additions and 43 deletions

View file

@ -3,12 +3,12 @@ apply from: 'copyLibs.gradle' // enable 'copyLibs.gradle' script plugin
apply plugin: 'eclipse'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
compileSdkVersion 22
buildToolsVersion "22.0.0"
defaultConfig {
applicationId "com.zeapo.pwdstore"
minSdkVersion 15
targetSdkVersion 21
targetSdkVersion 22
versionCode 35
versionName "1.2.0.15"
}
@ -25,8 +25,8 @@ android {
}
dependencies {
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.3'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:recyclerview-v7:22.0.0'
//compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':libraries:openpgp-api-lib')
compile 'org.eclipse.jgit:org.eclipse.jgit:3.7.0.201502260915-r'

View file

@ -29,8 +29,6 @@ import org.eclipse.jgit.api.CommitCommand;
import org.eclipse.jgit.api.Git;
import java.io.File;
import java.io.IOException;
import java.util.Stack;
public class PasswordStore extends ActionBarActivity {
private static final String TAG = "PwdStrAct";
@ -64,7 +62,7 @@ public class PasswordStore extends ActionBarActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.pwdstore, menu);
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
@ -160,6 +158,17 @@ public class PasswordStore extends ActionBarActivity {
startActivityForResult(intent, GitActivity.REQUEST_PULL);
return true;
case R.id.git_sync:
if (!PasswordRepository.isInitialized()) {
initBefore.show();
break;
}
intent = new Intent(this, GitActivity.class);
intent.putExtra("Operation", GitActivity.REQUEST_SYNC);
startActivityForResult(intent, GitActivity.REQUEST_SYNC);
return true;
case R.id.refresh:
updateListAdapter();
return true;

View file

@ -25,11 +25,7 @@ import com.zeapo.pwdstore.R;
import com.zeapo.pwdstore.UserPreference;
import com.zeapo.pwdstore.utils.PasswordRepository;
import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.Git;
import org.apache.commons.io.FileUtils;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import java.io.File;
import java.io.IOException;
@ -59,6 +55,7 @@ public class GitActivity extends ActionBarActivity {
public static final int REQUEST_CLONE = 103;
public static final int REQUEST_INIT = 104;
public static final int EDIT_SERVER = 105;
public static final int REQUEST_SYNC = 106;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -260,11 +257,15 @@ public class GitActivity extends ActionBarActivity {
break;
case REQUEST_PULL:
pullFromRepository();
syncRepository(REQUEST_PULL);
break;
case REQUEST_PUSH:
pushToRepository();
syncRepository(REQUEST_PUSH);
break;
case REQUEST_SYNC:
syncRepository(REQUEST_SYNC);
break;
}
@ -520,20 +521,6 @@ public class GitActivity extends ActionBarActivity {
}
}
/**
* Pull the latest changes from the remote repository and merges them locally
*/
public void pullFromRepository() {
syncRepository(REQUEST_PULL);
}
/**
* Pushes the latest changes from the local repository to the remote one
*/
public void pushToRepository() {
syncRepository(REQUEST_PUSH);
}
/**
* Syncs the local repository with the remote one (either pull or push)
* @param operation the operation to execute can be REQUEST_PULL or REQUEST_PUSH
@ -566,11 +553,17 @@ public class GitActivity extends ActionBarActivity {
PasswordRepository.addRemote("origin", hostname, false);
GitOperation op;
if (operation == REQUEST_PULL) {
switch (operation) {
case REQUEST_PULL:
op = new PullOperation(localDir, activity).setCommand();
} else if (operation == REQUEST_PUSH) {
break;
case REQUEST_PUSH:
op = new PushOperation(localDir, activity).setCommand();
} else {
break;
case REQUEST_SYNC:
op = new SyncOperation(localDir, activity).setCommands();
break;
default:
Log.e(TAG, "Sync operation not recognized : " + operation);
return;
}

View file

@ -39,10 +39,9 @@ public class GitAsyncTask extends AsyncTask<GitCommand, Integer, String> {
@Override
protected String doInBackground(GitCommand... cmd) {
int count = cmd.length;
for (int i = 0; i < count; i++) {
for (GitCommand aCmd : cmd) {
try {
cmd[i].call();
aCmd.call();
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
@ -52,6 +51,7 @@ public class GitAsyncTask extends AsyncTask<GitCommand, Integer, String> {
}
protected void onPostExecute(String result) {
if (this.dialog != null)
this.dialog.dismiss();
if (result == null)

View file

@ -6,7 +6,6 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.text.InputType;
import android.util.Log;
import android.widget.EditText;
import android.widget.LinearLayout;
@ -16,7 +15,6 @@ import com.zeapo.pwdstore.git.config.GitConfigSessionFactory;
import com.zeapo.pwdstore.git.config.SshConfigSessionFactory;
import com.zeapo.pwdstore.utils.PasswordRepository;
import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.GitCommand;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.JschConfigSessionFactory;

View file

@ -0,0 +1,50 @@
package com.zeapo.pwdstore.git;
import android.app.Activity;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.PullCommand;
import org.eclipse.jgit.api.PushCommand;
import java.io.File;
public class SyncOperation extends GitOperation {
protected PullCommand pullCommand;
protected PushCommand pushCommand;
/**
* Creates a new git operation
*
* @param fileDir the git working tree directory
* @param callingActivity the calling activity
*/
public SyncOperation(File fileDir, Activity callingActivity) {
super(fileDir, callingActivity);
}
/**
* Sets the command
* @return the current object
*/
public SyncOperation setCommands() {
this.pullCommand = new Git(repository)
.pull()
.setRebase(true)
.setRemote("origin");
this.pushCommand = new Git(repository)
.push()
.setPushAll()
.setRemote("origin");
return this;
}
@Override
public void execute() throws Exception {
if (this.provider != null) {
this.pullCommand.setCredentialsProvider(this.provider);
this.pushCommand.setCredentialsProvider(this.provider);
}
new GitAsyncTask(callingActivity, true, false, PullCommand.class).execute(this.pullCommand, this.pushCommand);
}
}

View file

@ -17,10 +17,12 @@
<!--<item android:id="@+id/menu_add_category"-->
<!--android:title="New category"/>-->
<item android:id="@+id/git_sync"
android:title="@string/git_sync"/>
<item android:id="@+id/git_pull"
android:title="Pull from remote"/>
android:title="@string/git_pull"/>
<item android:id="@+id/git_push"
android:title="Push to remote"/>
android:title="@string/git_push"/>
<item android:id="@+id/refresh"
android:title="Refresh list"

View file

@ -121,5 +121,8 @@
<string name="dialog_negative">Ne... později</string>
<string name="dialog_oops">Ajaj...</string>
<string name="dialog_cancel">Zrušit</string>
<string name="git_sync">Syncronize repository</string>
<string name="git_pull">Pull from remote</string>
<string name="git_push">Push to remote</string>
</resources>

View file

@ -122,5 +122,8 @@
<string name="dialog_negative">Nah... later</string>
<string name="dialog_oops">Oops...</string>
<string name="dialog_cancel">Cancel</string>
<string name="git_sync">Syncronize repository</string>
<string name="git_pull">Pull from remote</string>
<string name="git_push">Push to remote</string>
</resources>