Link the commit viewer with the properties view

Move all the new property sheet related classes that work with general
git objects into a new package, and enable support for the property
view also in the commit viewer.

When the commit viewer is active, the property view shows the data of
that commit. With the properties view visible the user can thus see
information about the commit even when the diff or notes page is
active.

Change-Id: I62c1c4f19b31f78aad3dce63d552796f0ebd51ea
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
diff --git a/org.eclipse.egit.ui/.settings/.api_filters b/org.eclipse.egit.ui/.settings/.api_filters
new file mode 100644
index 0000000..38cb775
--- /dev/null
+++ b/org.eclipse.egit.ui/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.egit.ui" version="2">
+    <resource path="src/org/eclipse/egit/ui/internal/properties/GitPropertySheetPage.java" type="org.eclipse.egit.ui.internal.properties.GitPropertySheetPage">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="PropertySheetPage"/>
+                <message_argument value="GitPropertySheetPage"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/org.eclipse.egit.ui/META-INF/MANIFEST.MF b/org.eclipse.egit.ui/META-INF/MANIFEST.MF
index 84f2fdc..ab5c517 100644
--- a/org.eclipse.egit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.egit.ui/META-INF/MANIFEST.MF
@@ -103,6 +103,7 @@
  org.eclipse.egit.ui.internal.operations;version="5.11.0";x-friends:="org.eclipse.egit.gitflow.ui",
  org.eclipse.egit.ui.internal.patch;version="5.11.0";x-internal:=true,
  org.eclipse.egit.ui.internal.preferences;version="5.11.0";x-internal:=true,
+ org.eclipse.egit.ui.internal.properties;version="5.11.0";x-internal:=true,
  org.eclipse.egit.ui.internal.provisional.wizards;version="5.11.0";x-internal:=true,
  org.eclipse.egit.ui.internal.pull;version="5.11.0";x-internal:=true,
  org.eclipse.egit.ui.internal.push;version="5.11.0";x-friends:="org.eclipse.egit.gitflow.ui",
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java
index 72f10ee..47eefa3 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java
@@ -20,11 +20,14 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.egit.core.internal.IRepositoryCommit;
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.internal.CommonUtils;
 import org.eclipse.egit.ui.internal.UIIcons;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.actions.ActionCommands;
+import org.eclipse.egit.ui.internal.properties.CommitPropertySource;
+import org.eclipse.egit.ui.internal.properties.GitPropertySheetPage;
 import org.eclipse.egit.ui.internal.repository.RepositoriesView;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ActionContributionItem;
@@ -80,6 +83,9 @@
 import org.eclipse.ui.progress.UIJob;
 import org.eclipse.ui.services.IEvaluationService;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertySheetPage;
 
 /**
  * Editor class to view a commit in a form editor.
@@ -482,6 +488,19 @@
 			return Adapters.adapt(getEditorInput(), adapter);
 		} else if (IContentOutlinePage.class == adapter) {
 			return adapter.cast(getOutlinePage());
+		} else if (IPropertySheetPage.class == adapter) {
+			PropertySheetPage page = new GitPropertySheetPage();
+			page.setPropertySourceProvider(object -> {
+				if (object instanceof IPropertySource) {
+					return (IPropertySource) object;
+				}
+				if (object instanceof IRepositoryCommit) {
+					return new CommitPropertySource(
+							((IRepositoryCommit) object).getRevCommit(), page);
+				}
+				return null;
+			});
+			return adapter.cast(page);
 		}
 		return super.getAdapter(adapter);
 	}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/CommitPropertyDescriptor.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/CommitPropertyDescriptor.java
similarity index 95%
rename from org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/CommitPropertyDescriptor.java
rename to org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/CommitPropertyDescriptor.java
index 31764b0..abf6099 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/CommitPropertyDescriptor.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/CommitPropertyDescriptor.java
@@ -8,7 +8,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
-package org.eclipse.egit.ui.internal.repository;
+package org.eclipse.egit.ui.internal.properties;
 
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.internal.UIIcons;
@@ -45,12 +45,12 @@
  * editor with two buttons for opening the commit in the EGit commit viewer or
  * to show the commit in the EGit history view.
  */
-public class CommitPropertyDescriptor extends PropertyDescriptor {
+public class CommitPropertyDescriptor extends GitPropertyDescriptor {
+
+	static final int COLUMN_INDEX = 1;
 
 	private final RepositoryCommit commit;
 
-	private final int columnIndex = 1;
-
 	/**
 	 * Creates a new {@link CommitPropertyDescriptor}.
 	 *
@@ -68,15 +68,6 @@
 	}
 
 	@Override
-	public String getDescription() {
-		String description = super.getDescription();
-		if (description == null) {
-			description = getDisplayName();
-		}
-		return description;
-	}
-
-	@Override
 	public CellEditor createPropertyEditor(Composite parent) {
 		return new ButtonCellEditor(parent);
 	}
@@ -154,7 +145,7 @@
 			TreeItem[] selected = tree.getSelection();
 			TreeItem item = selected == null || selected.length == 0 ? null
 					: selected[0];
-			editor.setLayout(new ToolbarLayout(item, columnIndex));
+			editor.setLayout(new ToolbarLayout(item, COLUMN_INDEX));
 			return editor;
 		}
 
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/CommitPropertySource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/CommitPropertySource.java
similarity index 98%
rename from org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/CommitPropertySource.java
rename to org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/CommitPropertySource.java
index 7d69c3a..3319362 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/CommitPropertySource.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/CommitPropertySource.java
@@ -8,7 +8,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
-package org.eclipse.egit.ui.internal.repository;
+package org.eclipse.egit.ui.internal.properties;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/GitPropertyDescriptor.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/GitPropertyDescriptor.java
new file mode 100644
index 0000000..d590c32
--- /dev/null
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/GitPropertyDescriptor.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.egit.ui.internal.properties;
+
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * A {@link PropertyDescriptor} that uses the label as description if no
+ * explicit description is set.
+ */
+public class GitPropertyDescriptor extends PropertyDescriptor {
+
+	/**
+	 * Creates a new {@link GitPropertyDescriptor}.
+	 *
+	 * @param id
+	 *            for the property
+	 * @param label
+	 *            for the property
+	 */
+	public GitPropertyDescriptor(Object id, String label) {
+		super(id, label);
+	}
+
+	@Override
+	public String getDescription() {
+		String description = super.getDescription();
+		if (description == null) {
+			description = getDisplayName();
+		}
+		return description;
+	}
+}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/GitPropertySheetPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/GitPropertySheetPage.java
new file mode 100644
index 0000000..8bcc2f5
--- /dev/null
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/GitPropertySheetPage.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.egit.ui.internal.properties;
+
+import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+/**
+ * A {@link PropertySheetPage} that listens to git date format preference
+ * changes and refreshes itself when they change.
+ */
+public class GitPropertySheetPage extends PropertySheetPage {
+
+	private final IPropertyChangeListener dateFormatListener = event -> {
+		String property = event.getProperty();
+		if (property == null) {
+			return;
+		}
+		switch (property) {
+		case UIPreferences.DATE_FORMAT:
+		case UIPreferences.DATE_FORMAT_CHOICE:
+			refreshInUiThread();
+			break;
+		default:
+			break;
+		}
+	};
+
+	private final IPreferenceStore store;
+
+	private volatile boolean disposed;
+
+	/**
+	 * Creates a new instance.
+	 */
+	public GitPropertySheetPage() {
+		super();
+		store = Activator.getDefault().getPreferenceStore();
+		store.addPropertyChangeListener(dateFormatListener);
+	}
+
+	/**
+	 * Refreshes the page in the UI thread.
+	 */
+	public void refreshInUiThread() {
+		getSite().getShell().getDisplay().asyncExec(() -> {
+			if (!isDisposed()) {
+				refresh();
+			}
+		});
+	}
+
+	/**
+	 * Tells whether the page is disposed.
+	 *
+	 * @return {@code true} is {@link #dispose()} has been called,
+	 *         {@code false} otherwise
+	 */
+	public boolean isDisposed() {
+		return disposed;
+	}
+
+	@Override
+	public void dispose() {
+		disposed = true;
+		store.removePropertyChangeListener(dateFormatListener);
+		super.dispose();
+	}
+}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ListPropertySource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/ListPropertySource.java
similarity index 97%
rename from org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ListPropertySource.java
rename to org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/ListPropertySource.java
index 1038bd3..e01a72a 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ListPropertySource.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/ListPropertySource.java
@@ -8,7 +8,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
-package org.eclipse.egit.ui.internal.repository;
+package org.eclipse.egit.ui.internal.properties;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/MessagePropertyDescriptor.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/MessagePropertyDescriptor.java
similarity index 97%
rename from org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/MessagePropertyDescriptor.java
rename to org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/MessagePropertyDescriptor.java
index 7efc15a..e4163fb 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/MessagePropertyDescriptor.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/MessagePropertyDescriptor.java
@@ -8,7 +8,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
-package org.eclipse.egit.ui.internal.repository;
+package org.eclipse.egit.ui.internal.properties;
 
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
@@ -46,7 +46,7 @@
  * selected. The message is shown via the {@link IInformationControl} mechanism
  * from the JFace text editor framework.
  */
-public class MessagePropertyDescriptor extends PropertyDescriptor {
+public class MessagePropertyDescriptor extends GitPropertyDescriptor {
 
 	private final String message;
 
@@ -72,15 +72,6 @@
 	}
 
 	@Override
-	public String getDescription() {
-		String description = super.getDescription();
-		if (description == null) {
-			description = getDisplayName();
-		}
-		return description;
-	}
-
-	@Override
 	public CellEditor createPropertyEditor(Composite parent) {
 		if (StringUtils.isEmptyOrNull(message)) {
 			return null;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/PersonIdentPropertySource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/PersonIdentPropertySource.java
similarity index 98%
rename from org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/PersonIdentPropertySource.java
rename to org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/PersonIdentPropertySource.java
index 9b6d158..493a995 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/PersonIdentPropertySource.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/PersonIdentPropertySource.java
@@ -8,7 +8,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
-package org.eclipse.egit.ui.internal.repository;
+package org.eclipse.egit.ui.internal.properties;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/TagPropertySource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/TagPropertySource.java
similarity index 98%
rename from org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/TagPropertySource.java
rename to org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/TagPropertySource.java
index fa6d079..7b1de4f 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/TagPropertySource.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/properties/TagPropertySource.java
@@ -11,7 +11,7 @@
  * Contributors:
  *    Michael Keppler - initial implementation
  *******************************************************************************/
-package org.eclipse.egit.ui.internal.repository;
+package org.eclipse.egit.ui.internal.properties;
 
 import java.io.IOException;
 import java.text.MessageFormat;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
index 1bae067..ca495f4 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
@@ -62,6 +62,7 @@
 import org.eclipse.egit.ui.internal.groups.RepositoryGroup;
 import org.eclipse.egit.ui.internal.groups.RepositoryGroups;
 import org.eclipse.egit.ui.internal.history.HistoryPageInput;
+import org.eclipse.egit.ui.internal.properties.GitPropertySheetPage;
 import org.eclipse.egit.ui.internal.reflog.ReflogView;
 import org.eclipse.egit.ui.internal.repository.tree.FetchNode;
 import org.eclipse.egit.ui.internal.repository.tree.FileNode;
@@ -468,7 +469,7 @@
 	public <T> T getAdapter(Class<T> adapter) {
 		// integrate with Properties view
 		if (adapter == IPropertySheetPage.class) {
-			PropertySheetPage page = new PropertySheetPage();
+			PropertySheetPage page = new GitPropertySheetPage();
 			page.setPropertySourceProvider(
 					new RepositoryPropertySourceProvider(page));
 			return adapter.cast(page);
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySource.java
index e1644e1..330b3b6 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySource.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySource.java
@@ -22,6 +22,7 @@
 import org.eclipse.egit.ui.internal.UIIcons;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.preferences.ConfigurationEditorComponent;
+import org.eclipse.egit.ui.internal.properties.ListPropertySource;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ActionContributionItem;
 import org.eclipse.jface.action.IAction;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java
index 35cf6fd..4de70cc 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java
@@ -14,13 +14,10 @@
 package org.eclipse.egit.ui.internal.repository;
 
 import org.eclipse.core.runtime.Adapters;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
+import org.eclipse.egit.ui.internal.properties.TagPropertySource;
 import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
 import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType;
 import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jgit.events.ListenerHandle;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.Ref;
@@ -34,16 +31,13 @@
 import org.eclipse.ui.views.properties.PropertySheetPage;
 
 /**
- * PropertySource provider for Resource properties
- *
+ * A {@link IPropertySourceProvider} for git repository properties.
  */
 public class RepositoryPropertySourceProvider implements
 		IPropertySourceProvider {
 
 	private final PropertySheetPage myPage;
 
-	private final IPreferenceStore store;
-
 	private Object lastObject;
 
 	private IPropertySource lastRepositorySource;
@@ -58,33 +52,12 @@
 
 	private DisposeListener disposeListener;
 
-	private boolean listenToDateFormatChanges;
-
-	private IPropertyChangeListener dateFormatListener = event -> {
-		if (!listenToDateFormatChanges) {
-			return;
-		}
-		String property = event.getProperty();
-		if (property == null) {
-			return;
-		}
-		switch (property) {
-		case UIPreferences.DATE_FORMAT:
-		case UIPreferences.DATE_FORMAT_CHOICE:
-			refreshPage();
-			break;
-		default:
-			break;
-		}
-	};
-
 	/**
 	 * @param page
 	 *            the page
 	 */
 	public RepositoryPropertySourceProvider(PropertySheetPage page) {
 		myPage = page;
-		store = Activator.getDefault().getPreferenceStore();
 	}
 
 	private void registerDisposal() {
@@ -100,9 +73,6 @@
 			@Override
 			public void widgetDisposed(DisposeEvent e) {
 				removeListener();
-				if (listenToDateFormatChanges) {
-					store.removePropertyChangeListener(dateFormatListener);
-				}
 			}
 		};
 		control.addDisposeListener(disposeListener);
@@ -199,15 +169,6 @@
 				// removed.
 				bars.updateActionBars();
 			}
-			if (lastSourceType == SourceType.TAG) {
-				// Remove date format listener
-				store.removePropertyChangeListener(dateFormatListener);
-				listenToDateFormatChanges = false;
-			} else if (type == SourceType.TAG) {
-				// Add date format listener
-				listenToDateFormatChanges = true;
-				store.addPropertyChangeListener(dateFormatListener);
-			}
 		}
 		lastSourceType = type;
 	}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryRemotePropertySource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryRemotePropertySource.java
index 5dda4e3..9b8a7ed 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryRemotePropertySource.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryRemotePropertySource.java
@@ -19,6 +19,7 @@
 
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.internal.UIText;
+import org.eclipse.egit.ui.internal.properties.ListPropertySource;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.StoredConfig;