From 83f90a274cc8629caadb7ee3a1838be5e5c12b33 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sat, 14 Dec 2019 22:45:09 +0100 Subject: [PATCH] Set config "extensions" option when converting ref storage format When converting to reftable format the option extensions.refStorage must be set to "reftable" [1]. When converting back to refdir format this config option needs to be removed. Introduce constants for refStorage config options, also for the "reftree" format. [1] https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/master/Documentation/technical/reftable.md#Version-1 Change-Id: I190222fa5edc1ad7309daa9be17ca934ff7971e3 Signed-off-by: Matthias Sohn --- .../jgit/pgm/debug/RebuildRefTree.java | 8 ++++-- .../internal/storage/file/FileRepository.java | 18 ++++++++++--- .../org/eclipse/jgit/lib/ConfigConstants.java | 25 ++++++++++++++++++- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildRefTree.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildRefTree.java index 063600f4e..da58bbcb0 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildRefTree.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildRefTree.java @@ -52,6 +52,7 @@ import org.eclipse.jgit.internal.storage.reftree.RefTree; import org.eclipse.jgit.internal.storage.reftree.RefTreeDatabase; import org.eclipse.jgit.lib.CommitBuilder; +import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ObjectReader; @@ -133,8 +134,11 @@ protected void run() throws Exception { if (enable && !(db.getRefDatabase() instanceof RefTreeDatabase)) { StoredConfig cfg = db.getConfig(); - cfg.setInt("core", null, "repositoryformatversion", 1); //$NON-NLS-1$ //$NON-NLS-2$ - cfg.setString("extensions", null, "refStorage", "reftree"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + cfg.setInt(ConfigConstants.CONFIG_CORE_SECTION, null, + ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, 1); + cfg.setString(ConfigConstants.CONFIG_EXTENSIONS_SECTION, null, + ConfigConstants.CONFIG_KEY_REFSTORAGE, + ConfigConstants.CONFIG_REFSTORAGE_REFTREE); cfg.save(); errw.println("Enabled reftree."); //$NON-NLS-1$ errw.flush(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java index 92d5d24d0..ff9b32c1c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java @@ -205,12 +205,15 @@ public FileRepository(BaseRepositoryBuilder options) throws IOException { ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, 0); String reftype = repoConfig.getString( - "extensions", null, "refStorage"); //$NON-NLS-1$ //$NON-NLS-2$ + ConfigConstants.CONFIG_EXTENSIONS_SECTION, null, + ConfigConstants.CONFIG_KEY_REFSTORAGE); if (repositoryFormatVersion >= 1 && reftype != null) { - if (StringUtils.equalsIgnoreCase(reftype, "reftable")) { //$NON-NLS-1$ + if (StringUtils.equalsIgnoreCase(reftype, + ConfigConstants.CONFIG_REFSTORAGE_REFTABLE)) { refs = new FileReftableDatabase(this, new File(getDirectory(), "refs")); //$NON-NLS-1$ - } else if (StringUtils.equalsIgnoreCase(reftype, "reftree")) { //$NON-NLS-1$ + } else if (StringUtils.equalsIgnoreCase(reftype, + ConfigConstants.CONFIG_REFSTORAGE_REFTREE)) { refs = new RefTreeDatabase(this, new RefDirectory(this)); } else { throw new IOException(JGitText.get().unknownRepositoryFormat); @@ -721,6 +724,10 @@ void convertToPackedRefs(boolean backup) throws IOException { FileUtils.delete(reftableDir, FileUtils.RECURSIVE | FileUtils.IGNORE_ERRORS); } + + repoConfig.unset(ConfigConstants.CONFIG_EXTENSIONS_SECTION, null, + ConfigConstants.CONFIG_KEY_REFSTORAGE); + repoConfig.save(); } @SuppressWarnings("nls") @@ -774,6 +781,11 @@ void convertToReftable(boolean writeLogs, boolean backup) refs.close(); refs = new FileReftableDatabase(this, refsFile); + + repoConfig.setString(ConfigConstants.CONFIG_EXTENSIONS_SECTION, null, + ConfigConstants.CONFIG_KEY_REFSTORAGE, + ConfigConstants.CONFIG_REFSTORAGE_REFTABLE); + repoConfig.save(); } /** diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java index e0bd59219..b6ffb8479 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java @@ -503,8 +503,31 @@ public final class ConfigConstants { /** * The "minRacyThreshold" key - * * @since 5.1.9 */ public static final String CONFIG_KEY_MIN_RACY_THRESHOLD = "minRacyThreshold"; + + /** + * The "extensions" section + * @since 5.7 + */ + public static final String CONFIG_EXTENSIONS_SECTION = "extensions"; + + /** + * The extensions.refStorage key + * @since 5.7 + */ + public static final String CONFIG_KEY_REFSTORAGE = "refStorage"; + + /** + * The "reftable" refStorage format + * @since 5.7 + */ + public static final String CONFIG_REFSTORAGE_REFTABLE = "reftable"; + + /** + * The "reftree" refStorage format + * @since 5.7 + */ + public static final String CONFIG_REFSTORAGE_REFTREE = "reftree"; }