diff --git a/src/main/java/org/jabref/gui/actions/StandardActions.java b/src/main/java/org/jabref/gui/actions/StandardActions.java index 3f2f8b8ca15..4d99f46f019 100644 --- a/src/main/java/org/jabref/gui/actions/StandardActions.java +++ b/src/main/java/org/jabref/gui/actions/StandardActions.java @@ -209,6 +209,10 @@ public enum StandardActions implements Action { GROUP_SUBGROUP_RENAME(Localization.lang("Rename subgroup"), KeyBinding.GROUP_SUBGROUP_RENAME), GROUP_ENTRIES_REMOVE(Localization.lang("Remove selected entries from this group")), + GIT(Localization.lang("Git")), + GIT_PULL(Localization.lang("Git Pull")), + GIT_PUSH(Localization.lang("Git Push")), + CLEAR_EMBEDDINGS_CACHE(Localization.lang("Clear embeddings cache")); private String text; diff --git a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java index 10487ead6ad..b29838b5c13 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java @@ -32,6 +32,7 @@ import org.jabref.logic.exporter.BibtexDatabaseWriter; import org.jabref.logic.exporter.SaveException; import org.jabref.logic.exporter.SelfContainedSaveConfiguration; +import org.jabref.logic.git.GitClientHandler; import org.jabref.logic.l10n.Encodings; import org.jabref.logic.l10n.Localization; import org.jabref.logic.shared.DatabaseLocation; @@ -237,6 +238,10 @@ private boolean save(Path targetPath, SaveDatabaseMode mode) { if (success) { libraryTab.getUndoManager().markUnchanged(); libraryTab.resetChangedProperties(); + new GitClientHandler(targetPath.getParent(), + dialogService, + preferences.getGitPreferences()) + .postSaveDatabaseAction(); } dialogService.notify(Localization.lang("Library saved")); return success; diff --git a/src/main/java/org/jabref/gui/frame/MainMenu.java b/src/main/java/org/jabref/gui/frame/MainMenu.java index e119bf449fd..c3f72d59e2c 100644 --- a/src/main/java/org/jabref/gui/frame/MainMenu.java +++ b/src/main/java/org/jabref/gui/frame/MainMenu.java @@ -61,6 +61,8 @@ import org.jabref.gui.push.PushToApplicationCommand; import org.jabref.gui.search.RebuildFulltextSearchIndexAction; import org.jabref.gui.shared.ConnectToSharedDatabaseCommand; +import org.jabref.gui.shared.GitPullAction; +import org.jabref.gui.shared.GitPushAction; import org.jabref.gui.shared.PullChangesFromSharedAction; import org.jabref.gui.sidepane.SidePane; import org.jabref.gui.sidepane.SidePaneType; @@ -160,6 +162,12 @@ private void createMenu() { new SeparatorMenuItem(), + factory.createSubMenu(StandardActions.GIT, + factory.createMenuItem(StandardActions.GIT_PUSH, new GitPushAction(preferences, dialogService, stateManager)), + factory.createMenuItem(StandardActions.GIT_PULL, new GitPullAction(preferences, dialogService, stateManager))), + + new SeparatorMenuItem(), + factory.createSubMenu(StandardActions.IMPORT, factory.createMenuItem(StandardActions.IMPORT_INTO_CURRENT_LIBRARY, new ImportCommand(frame, ImportCommand.ImportMethod.TO_EXISTING, preferences, stateManager, fileUpdateMonitor, taskExecutor, dialogService)), factory.createMenuItem(StandardActions.IMPORT_INTO_NEW_LIBRARY, new ImportCommand(frame, ImportCommand.ImportMethod.AS_NEW, preferences, stateManager, fileUpdateMonitor, taskExecutor, dialogService))), @@ -407,3 +415,5 @@ private Menu createSendSubMenu(ActionFactory factory, return sendMenu; } } + + diff --git a/src/main/java/org/jabref/gui/importer/actions/CheckForVersionControlAction.java b/src/main/java/org/jabref/gui/importer/actions/CheckForVersionControlAction.java new file mode 100644 index 00000000000..fb80aae56a6 --- /dev/null +++ b/src/main/java/org/jabref/gui/importer/actions/CheckForVersionControlAction.java @@ -0,0 +1,46 @@ +package org.jabref.gui.importer.actions; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.logic.git.GitClientHandler; +import org.jabref.logic.importer.ParserResult; +import org.jabref.logic.preferences.CliPreferences; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This action checks whether this BIB file is contained in a Git repository. If so, + * then the file is tagged as "versioned" in BibDatabaseContext and a git pull is + * attempted. + */ +public class CheckForVersionControlAction implements GUIPostOpenAction { + private static final Logger LOGGER = LoggerFactory.getLogger(CheckForVersionControlAction.class); + private GitClientHandler gitClientHandler; + + @Override + public boolean isActionNecessary(ParserResult parserResult, DialogService dialogService, CliPreferences preferences) { + Optional path = parserResult.getDatabaseContext().getDatabasePath(); + if (path.isEmpty()) { + return false; + } + this.gitClientHandler = new GitClientHandler(path.get(), + dialogService, + preferences.getGitPreferences()); + return gitClientHandler.isGitRepository(); + } + + @Override + public void performAction(ParserResult parserResult, DialogService dialogService, CliPreferences preferencesService) { + parserResult.getDatabaseContext().setVersioned(true); + + try { + this.gitClientHandler.pullOnCurrentBranch(); + } catch (IOException e) { + LOGGER.error("Failed to pull.", e); + } + } +} diff --git a/src/main/java/org/jabref/gui/preferences/general/GeneralTab.fxml b/src/main/java/org/jabref/gui/preferences/general/GeneralTab.fxml index 924cd2a7504..161197cd6b3 100644 --- a/src/main/java/org/jabref/gui/preferences/general/GeneralTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/general/GeneralTab.fxml @@ -120,4 +120,19 @@ + +