Giter VIP home page Giter VIP logo

oxygen-git-client-addon's Introduction

Oxygen Git Client add-on

The Git Client add-on installs a Git client in Oxygen XML Editor/Author/Developer. It contributes multiple side-views, specialized for different Git operations, the main one being named Git Staging. The Git Staging side-view is available by default only in the Editor and DITA UI perspectives.

This add-on is compatible with Oxygen XML Editor/Author/Developer version 25.0 or higher.

Installation

To install the add-on, follow these instructions:

  1. Go to Help > Install new add-ons... to open an add-on selection dialog box.
  2. Enter or paste https://www.oxygenxml.com/InstData/Addons/default/updateSite.xml in the Show add-ons from field.
  3. Select the Git Client add-on and click Next.
  4. Read the end-user license agreement. Then select the I accept all terms of the end-user license agreement option and click Install.
  5. Restart the application.

Result: A Git Staging view will now be available in Oxygen. If it is not visible, go to Window > Show View and select Git Staging. This view acts as a basic Git client integrated directly in Oxygen, and it provides support for committing changes to a Git repository, comparing and merging changes, resolving conflicts, and other Git commands.

The add-on can also be installed using the following alternative procedure:

  1. Go to the Releases page and download the oxygen-git-client-{version}-plugin.jar file.
  2. Unzip it inside {oXygenInstallDir}/plugins. Make sure you don't create any intermediate folders. After unzipping the archive, the file system should look like this: {oXygenInstallDir}/plugins/oxygen-git-client-{version}, and inside this folder, there should be a plugin.xmlfile.

About

For more information about this add-on, read the Git Client Add-on topic from Oxygen's user guide.

Copyright and License

Copyright 2023 Syncro Soft SRL.

This project is licensed under Apache License 2.0

oxygen-git-client-addon's People

Contributors

adriansorop avatar ahenket avatar alexdinisor98 avatar alexjitianu avatar alexsmarandache15 avatar beniaminsavu avatar bogdan-cercelaru avatar bogdandr14 avatar bogdangoreci avatar dependabot[bot] avatar dunamariuscosmin avatar florinavram avatar gabrielnedianu avatar hidaruma avatar jlacour31 avatar kant avatar marius-ciolacu avatar mars-zero avatar mmmmmcr avatar octaviann avatar raducoravu avatar sorincarbunaru avatar stefanvasile avatar stevenhiggs avatar tofi86 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oxygen-git-client-addon's Issues

Sorting in the unstaged resources area

Initially for me the un staged resources area showed as the first entries the newly added resources, followed by the modified resources. Somehow after I staged one newly added resource, the other newly added resource appeared at the end of the list so the entire list seemed to be resorted.
Ideally in the unstaged resources area we should sort and first show the newly added resources followed by the modified ones.
Or add some sorting widget to allow sorting by file path or file status.

Branch management

Currently you can only switch between local branches. We should also present the remote branches and allow the user to check out these remote branches. Maybe more? Perhaps others can tell us what branch-related functionality they find useful and use relatively often.

Display diff in a preview pane upon selecting it

Another suggestion borrowed from Git GUI clients such as GitHub Desktop and Tower:

Current behavior

To view a diff, the user must double-click on a changed file in the Working Copy view, which opens a new window with the diff. Then the user must close or move this window before being able to return to the main window

Proposal

Upon selecting (with a single click) a changed file in the Working Copy view, a preview of the diff should appear in a pane. This would allow a user to quickly preview the changes in a file before deciding whether to stage it.

A future enhancement would be to select lines within a diff to stage.

Here is screenshot taken from GitHub Desktop showing how selecting a changed file displays a preview of the diff:

screen shot 2017-08-22 at 11 29 21 am

Problems with stage and unstage buttons

Those "Stage" buttons added to the right of each entry seem to be very many and the list gets crowded. How about if we add it as a contextual menu action?
Also the unstage button seems not to display the entire message on my side:
unstagepb

Warn the user when a submodule is in the detach Head state

It's wanted (but annoying) behavior, that a submodule always points to a commit hash and not to a branch. So it's a common and wanted (but annoying) situation, that submodules fall in a detached head state.

Oxygen should warn, that the head is detached and ask the user to pick a branch, because that's what he always wants. But Oxygen should not checkout a random branch, because that would also lead to unexpected results.

NPE when clicking on a submodule entry in Flat view

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at com.oxygenxml.git.view.ChangesPanel$TableFileLocationTextCellRenderer.getTableCellRendererComponent(ChangesPanel.java:761) at javax.swing.JTable$AccessibleJTable.getAccessibleChild(JTable.java:7031) at javax.swing.JTable$AccessibleJTable.getAccessibleAt(JTable.java:7418) at javax.swing.JTable$AccessibleJTable.valueChanged(JTable.java:6933) at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184) at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:154) at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:685) at javax.swing.plaf.basic.BasicTableUI$Handler.setValueIsAdjusting(BasicTableUI.java:953) at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1166) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Use checkboxes to toggle staging

Great work so far! I've already made my first commit with the plugin, and it worked very smoothly. Coming from other GUI git clients, such as GitHub Desktop, there are a couple of features I would like to see before I begin using this regularly. I'll put them into issues—this being the first:

Currently staging is controlled with two lists. To stage one or more files, select them in the "unstaged" list and click Stage Selected (or select Stage All).

My proposal would be to collapse these two lists into one, and place a checkbox next to each file. Checking a file stages it; unchecking it unstages it. I think this would simplify the UI for users.

Here screenshot to illustrate this UI in GitHub Desktop:

screen shot 2017-08-22 at 11 18 06 am

Note that 1.xml and 3.xml are staged, and 2.xml is unstaged. Note also the checkbox above the list of files which indicates some are stages; clicking this checkbox toggles between staging all and none.

Error starting oXygen after install of plugin

after installing the plugin I get this error message box when I try to start Oxygen (version 17.1 MacOs)

screen shot 2017-08-27 at 15 22 07

I can close the dialog and oXygen seems to work properly, I can open the Git Staging window/tab, but it is grey and empty.

Polish the used button icons

Use only icons designed by us.
For the push and pull buttons position the figures to be on the arrow stem instead of being on the right bottom part like now.

ArrayIndexOutOfBoundsException when "Save All"

Crashes when saving all files

java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
	at java.util.Vector.removeElementAt(Unknown Source)
	at javax.swing.tree.DefaultMutableTreeNode.remove(Unknown Source)
	at javax.swing.tree.DefaultMutableTreeNode.remove(Unknown Source)
	at com.oxygenxml.git.view.StagingResourcesTreeModel.deleteNodes(StagingResourcesTreeModel.java:107)
	at com.oxygenxml.git.view.StagingResourcesTreeModel.setFilesStatus(StagingResourcesTreeModel.java:209)
	at com.oxygenxml.git.view.ChangesPanel.createTreeView(ChangesPanel.java:180)
	at com.oxygenxml.git.view.StagingPanel$1$1.editorSaved(StagingPanel.java:198)
	at ro.sync.exml.workspace.b.e.d$2.editorSaved(Unknown Source)
	at ro.sync.exml.editor.tc.gsk(Unknown Source)
	at ro.sync.exml.editor.tc.saveDocument(Unknown Source)
	at ro.sync.exml.editor.vd.hcl(Unknown Source)~~~~

Add Summary & Description fields to commit message

Git GUI clients like GitHub Desktop and Tower provide two fields for commit messages - a one-line Summary field (which invites brief, ~50 character summaries) and a multiline Description field (which invites longer descriptions if needed).

A screenshot showing this in GitHub Desktop - before text has been entered:

screen shot 2017-08-22 at 11 37 02 am

After text has been entered:

screen shot 2017-08-22 at 11 37 10 am

I imagine that since this oXygen Git UI is designed to fit inside a sidebar pane, you're working with constrained space. If #23 is adopted, though, it could potentially reclaim a lot of space, some of which could go to this additional field.

NPE when comparing files in staging view


java.lang.NullPointerException
    at org.eclipse.jgit.internal.storage.file.UnpackedObjectCache$Table.index(UnpackedObjectCache.java:146)
    at org.eclipse.jgit.internal.storage.file.UnpackedObjectCache$Table.contains(UnpackedObjectCache.java:109)
    at org.eclipse.jgit.internal.storage.file.UnpackedObjectCache.isUnpacked(UnpackedObjectCache.java:64)
    at org.eclipse.jgit.internal.storage.file.ObjectDirectory.openObject(ObjectDirectory.java:414)
    at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:159)
    at org.eclipse.jgit.lib.ObjectDatabase.open(ObjectDatabase.java:173)
    at org.eclipse.jgit.lib.ObjectDatabase.open(ObjectDatabase.java:144)
    at org.eclipse.jgit.lib.Repository.open(Repository.java:307)
    at com.oxygenxml.git.service.GitAccess.getInputStream(GitAccess.java:882)
    at com.oxygenxml.git.protocol.GitRevisionURLHandler$GitRevisionConnection.getInputStream(GitRevisionURLHandler.java:143)

Add repositories via drag-and-drop and in batch

I have an oXygen project that houses about 20 git repositories. I'd like to add them all to Git Staging's list of working copies.

Currently the only way to add a repository is to select the "Browse File System" icon in the Git Staging pane.

I would like to be able to drag-and-drop 1+ folders from the Project pane (or the Finder) onto the Git Staging pane to register them with the plugin as working copies.

Ideally, I'd also like to be able to register a repository programmatically - so that I could configure an External Tool to call a script that could populate a set of repositories as working copies.

p.s. I just tried out the plugin again after a couple of months and can see it's been progressing nicely!

Create a local repository for a non-git project

If you open an xpr that is not a Git project, when switching to the Git Staging view, we could ask the user if he wants to create a local repository. This would result in a .git directory and the initialization of the view with that repository.

Because of #21 the user will be able to work normally with the repo and bind it to a remote later on.

History view

For a branch or current branch, present the commits, their message, what resources change (with the possibility of a diff) etc.

Cannot reach host

The plugin shows the error message Cannot reach host. Connection via SSH by CLI works. How can I fix that?

NPE when launching oXygen

This exception is shown in a modal dialog when launching oXygen after plugin installation:

[ main ]  -  java.lang.NullPointerException
java.lang.NullPointerException
	at com.oxygenxml.git.utils.StagingPanelRefresh.checkForGitRepositoriesUpAndDownFrom(StagingPanelRefresh.java:76)
	at com.oxygenxml.git.utils.StagingPanelRefresh.execute(StagingPanelRefresh.java:48)
	at com.oxygenxml.git.utils.StagingPanelRefresh.call(StagingPanelRefresh.java:42)
	at com.oxygenxml.git.CustomWorkspaceAccessPluginExtension.applicationStarted(CustomWorkspaceAccessPluginExtension.java:42)
	at ro.sync.exml.MainFrame.pvm(Unknown Source)
	at ro.sync.exml.MainFrame.<init>(Unknown Source)
	at ro.sync.exml.MainFrame.<init>(Unknown Source)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at ro.sync.ui.application.ApplicationLauncher.d(Unknown Source)
	at ro.sync.ui.application.ApplicationLauncher.launch(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at ro.sync.exml.Oxygen.main(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:65)
	at com.install4j.runtime.launcher.MacLauncher.main(MacLauncher.java:67)

I'm running oXygen Editor 19 in de_DE locale on a Mac.

.gitignore file is ignored

On a Mac, two junk files you shouldn't check in are:

Icon
.DS_Store

The Icon one is "special" in that the file name contains a carriage return (i.e. Icon^M), which reduces the possibility of a naming conflict. Right now Icon files show up as being Staged, despite being listed in .gitignore. Since the .DS_store files are not showing up, I suspect the problem is handing special characters in the file name.

Tree view - keep the expanded state

If I perform Discard or Stage on a resource the entire tree gets collapsed. it should keep its expanded state because I will definitely continue to stage/discard resources.

Refresh state of entire view when activated

For example if I make changes in Source Tree and then switch to Oxygen the entire Git view should refresh. Right now the "Unstaged" resources seems to refresh. But the list of already staged resources or the counters on the buttons used to Push or Pull resources seem to remain with stale info.

Use Oxygen's OptionsStorage to store stuff

WSOptionsStorage optionsStorage = pluginWorkspaceAccess.getOptionsStorage();

You could store the serialized options on a key in the options storage:

	/**
	 * Uses JAXB to save all the selected repositories from the users in the
	 * repositoryOptions variable
	 */
	private void saveRepositoryOptions() {
		try {

			JAXBContext jaxbContext = JAXBContext.newInstance(Options.class);
			Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
			jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			
			StringWriter stringWriter = new StringWriter();
      jaxbMarshaller.marshal(options, stringWriter);
      
      PluginWorkspaceProvider.getPluginWorkspace().getOptionsStorage().setOption(
          "MY_PLUGIN_OPTIONS", 
          PluginWorkspaceProvider.getPluginWorkspace().getXMLUtilAccess().escapeTextValue(stringWriter.toString()));
		} catch (JAXBException e1) {
			e1.printStackTrace();
		}
	}

	/**
	 * Uses JAXB to load all the selected repositories from the users in the
	 * repositoryOptions variable
	 */
	private void loadRepositoryOptions() {
		if (options == null) {
			options = new Options();
			try {
				JAXBContext jaxbContext = JAXBContext.newInstance(Options.class);
				Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
				
				
				 String option = PluginWorkspaceProvider.getPluginWorkspace().getOptionsStorage().getOption(
		          "MY_PLUGIN_OPTIONS", null);

				 if (option != null) {
				   options = (Options) jaxbUnmarshaller.unmarshal(
				       new StringReader(
				           PluginWorkspaceProvider.getPluginWorkspace().getXMLUtilAccess().unescapeAttributeValue(option)));
				 }
				
			} catch (JAXBException e) {
				logger.warn("Options not loaded: " + e, e);
			}

		}
	}

Implement i18n fallback to english

Currently, when a (new) string is not translated (like the ones with 1.0.8 version) the user just sees "de_DE_translation" instead of a proper label.

bildschirmfoto 2017-08-22 um 23 09 04

From other Java projects I'm used that there is a fallback mechanism to the default/english language tag. Any chance to implement this?

Checking fingerprint on every startup

The authenticity of host '...' can't be established.
RSA key fingerprint ...
Are you sure you want to continue connecting?

This message is shown on every oXygen startup. Why doesn't it cache my choice "Yes"?

Why is it shown anyway? The fingerprint is okay, Sourcetree isn't asking for it everytime?

Distribue a SLF4J implementation

JGIT uses the slf4j library. We should also distribute an implementation otherwise this implementation might be located in the main Oxygen class loader which will end badly...

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency>

Diffing on submodule files failes

When working with submodules, you often have changes in the submodule git files when you commit something in the submodule.

Diffing those files results in an error in the oXygen Diff (cannot open/read the file).

In those cases you should considder diffing the .git file in the submodule directory instead.

Handle renamed files

  1. If I rename a file using git mv old_filename new_filename I expect to see just the new file with a "Renamed" status/icon. The Diff should also be performed between the old and the new files because other changes might have been made (besides the rename). Right now we present the new file as added and the old one as deleted.

  2. It would be great if we can intercept the "Rename" action from Oxygen's Project view and use a git mv if the resource is under Git version control.

Evaluate the results of a git commit

In our workflow, we use git hooks to check the validity of commit messages (e.g., they must contain a valid issue ID). The git integration also seems to run the hooks, so a commit is rejected, if the commit message is not valid.
Though the commit is not applied, the git staging view tells erroneously that everything was fine. Like the git integration in Egit/Eclipse, it would be better to evaluate the return values of the git hooks and to display the error messages if the commit went wrong.

Plugin crashes when using branches with "/" feature branches

I have some feature branches checked out:

eike@P01470 MINGW64 ~/DITA/globaledition (develop)
$ git branch -l
  DAKDOK-780
* develop
  feature/DAKDOK-716
  feature/DAKDOK-739
  feature/DAKDOK-781
  feature/DAKDOK-789
  master
  release/KA_GlobalEdition_VollstaendigeZollanmeldungImaErstellen_1.0
  release/SU_DakosyGE_ExportAT_1.0
  release/SU_GlobalEdition_EZT_1.0
  release/SU_GlobalEdition_Export_2.3
  release/dakosy-ge-5.4

oXygen detects the branches, but drops/ignores the branch type, e.g. feature/.

oxygen-branch-issues

Because of that, JGit writes a messy stacktrace on checkout, because the branch cannot be found, because the correct branch name is feature/DAKDK-789.

eike@P01470 MINGW64 /c/Program Files/Oxygen XML Editor 19
$ ./oxygen19.0.exe
log4j:WARN No appenders could be found for logger (org.eclipse.jgit.util.FS).
log4j:WARN Please initialize the log4j system properly.
org.eclipse.jgit.api.errors.RefNotFoundException: Ref DAKDOK-789 can not be resolved
        at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:252)
        at com.oxygenxml.git.service.GitAccess.setBranch(GitAccess.java:1156)
        at com.oxygenxml.git.view.dialog.BranchSelectDialog.doOK(BranchSelectDialog.java:159)
        at ro.sync.exml.workspace.api.standalone.ui.OKCancelDialog$5.actionPerformed(Unknown Source)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.WaitDispatchSupport$2.run(Unknown Source)
        at java.awt.WaitDispatchSupport$4.run(Unknown Source)
        at java.awt.WaitDispatchSupport$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(Unknown Source)
        at java.awt.Dialog.show(Unknown Source)
        at java.awt.Component.show(Unknown Source)
        at java.awt.Component.setVisible(Unknown Source)
        at java.awt.Window.setVisible(Unknown Source)
        at java.awt.Dialog.setVisible(Unknown Source)
        at ro.sync.exml.workspace.api.standalone.ui.OKCancelDialog.setVisible(Unknown Source)
        at com.oxygenxml.git.view.dialog.BranchSelectDialog.<init>(BranchSelectDialog.java:74)
        at com.oxygenxml.git.view.ToolbarPanel$3.actionPerformed(ToolbarPanel.java:245)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at com.jidesoft.plaf.basic.BasicJideButtonListener.mouseReleased(Unknown Source)
        at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Local repository support

Let's test how the plugin works with local repositories, ones that don't have a remote yet. The Pull, Push, Switch Branch actions be aware of these special repos.

These actions that require a remote, might ask you for a remote URL, remote name and bind them:
git remote add <remote_name> <remote_repo_url>

NPE when closing the application

I closed Oxygen while the Git Staging view was floating.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.oxygenxml.git.view.StagingPanel$2.focusLost(StagingPanel.java:227)
at java.awt.AWTEventMulticaster.focusLost(Unknown Source)
at java.awt.AWTEventMulticaster.focusLost(Unknown Source)
at java.awt.Component.processFocusEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.