Skip to content
Snippets Groups Projects
Commit 4027b7ec authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#562 - re-create credentialsprovider each time to make sure to get the latest...

#562 - re-create credentialsprovider each time to make sure to get the latest settings + improve check if a commit is neccessary and successful
parent d6062c84
No related branches found
No related tags found
No related merge requests found
......@@ -10,8 +10,8 @@ public abstract class BackupTask implements Runnable
{
protected static final String DATABASE_FILE_NAME = "budgetmaster.mv.db";
private final DatabaseService databaseService;
private final SettingsService settingsService;
protected final DatabaseService databaseService;
protected final SettingsService settingsService;
private final Path backupFolder;
protected BackupTask(DatabaseService databaseService, SettingsService settingsService)
......
......@@ -6,7 +6,6 @@ import de.deadlocker8.budgetmaster.settings.Settings;
import de.deadlocker8.budgetmaster.settings.SettingsService;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.joda.time.DateTime;
......@@ -18,6 +17,7 @@ import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.MessageFormat;
import java.util.Set;
public class RemoteGitBackupTask extends BackupTask
{
......@@ -25,18 +25,11 @@ public class RemoteGitBackupTask extends BackupTask
private static final String DATE_PATTERN = "yyyy-MM-dd_HH-mm-ss";
private final Path gitFolder;
private final UsernamePasswordCredentialsProvider credentialsProvider;
private final String remote;
public RemoteGitBackupTask(DatabaseService databaseService, SettingsService settingsService)
{
super(databaseService, settingsService);
this.gitFolder = Main.getApplicationSupportFolder().resolve(".git");
final Settings settings = settingsService.getSettings();
this.credentialsProvider = new UsernamePasswordCredentialsProvider(settings.getAutoBackupGitUserName(), settings.getAutoBackupGitPassword());
this.remote = settings.getAutoBackupGitUrl();
}
@Override
......@@ -44,12 +37,16 @@ public class RemoteGitBackupTask extends BackupTask
{
LOGGER.debug(MessageFormat.format("Starting backup with strategy \"{0}\"", AutoBackupStrategy.GIT_REMOTE));
final Settings settings = settingsService.getSettings();
final UsernamePasswordCredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(settings.getAutoBackupGitUserName(), settings.getAutoBackupGitPassword());
final String remote = settings.getAutoBackupGitUrl();
try
{
if(!Files.exists(gitFolder))
{
LOGGER.debug(MessageFormat.format("Cloning repository \"{0}\" to \"{1}\"...", remote, gitFolder.getParent()));
GitHelper.cloneRepository(this.remote, this.credentialsProvider, this.gitFolder.getParent());
GitHelper.cloneRepository(remote, credentialsProvider, this.gitFolder.getParent());
}
LOGGER.debug(MessageFormat.format("Using git repository: \"{0}\"", gitFolder));
......@@ -58,13 +55,22 @@ public class RemoteGitBackupTask extends BackupTask
final Git git = new Git(repository);
LOGGER.debug(MessageFormat.format("Set remote to \"{0}\"", remote));
GitHelper.setRemote(git, this.remote);
GitHelper.replaceRemote(git, remote);
LOGGER.debug("Pulling changes from remote...");
GitHelper.pullLatestChanges(git, credentialsProvider);
final DirCache dirCache = git.add().addFilepattern(DATABASE_FILE_NAME).call();
if(dirCache.getEntryCount() != 1)
// skip if database file is not modified and not staged for commit
if(!isDatabaseFileModified(git) && !isDatabaseFileAdded(git))
{
LOGGER.debug(MessageFormat.format("Skipping commit because \"{0}\" is not modified", DATABASE_FILE_NAME));
return;
}
git.add().addFilepattern(DATABASE_FILE_NAME).call();
// check if database file is successfully added
if(!isDatabaseFileAdded(git))
{
throw new RuntimeException(MessageFormat.format("Error adding \"{0}\" to git", DATABASE_FILE_NAME));
}
......@@ -73,7 +79,7 @@ public class RemoteGitBackupTask extends BackupTask
GitHelper.commitChanges(git, DateTime.now().toString(DATE_PATTERN));
LOGGER.debug(("Pushing commits to remote..."));
GitHelper.push(git, this.credentialsProvider);
GitHelper.push(git, credentialsProvider);
LOGGER.debug("Backup DONE");
}
......@@ -84,4 +90,16 @@ public class RemoteGitBackupTask extends BackupTask
e.printStackTrace();
}
}
private boolean isDatabaseFileModified(Git git) throws GitAPIException
{
final Set<String> modifiedFiles = git.status().call().getModified();
return modifiedFiles.contains(DATABASE_FILE_NAME);
}
private boolean isDatabaseFileAdded(Git git) throws GitAPIException
{
final Set<String> changedFiles = git.status().call().getChanged();
return changedFiles.contains(DATABASE_FILE_NAME);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment