From 17ebc832581ed845ec381bffcf78edc5002b8248 Mon Sep 17 00:00:00 2001 From: Launium Date: Fri, 5 Sep 2025 18:28:55 +0800 Subject: [PATCH 1/3] Use fetch --depth 1 & hard reset to update --- .../skyblocker/utils/NEURepoManager.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java index d1fa1c01c4c..2290b69bcd2 100644 --- a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java @@ -23,10 +23,11 @@ import org.apache.commons.lang3.function.Consumers; import org.checkerframework.checker.nullness.qual.Nullable; import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.MergeCommand; -import org.eclipse.jgit.api.PullResult; +import org.eclipse.jgit.api.ResetCommand; +import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.eclipse.jgit.lib.Ref; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,14 +103,17 @@ private static CompletableFuture loadRepository() { try { if (Files.isDirectory(NEURepoManager.LOCAL_REPO_DIR)) { try (Git localRepo = Git.open(NEURepoManager.LOCAL_REPO_DIR.toFile())) { - PullResult result = localRepo.pull().setRebase(false).setFastForward(MergeCommand.FastForwardMode.FF_ONLY).call(); - if (result.isSuccessful()) { - LOGGER.info("[Skyblocker NEU Repo] NEU Repository updated with merge status: {}", result.getMergeResult().getMergeStatus()); - } else { - LOGGER.error("[Skyblocker NEU Repo] Update failed with merge status: {}. Downloading new repository", result.getMergeResult().getMergeStatus()); - Scheduler.INSTANCE.schedule(() -> deleteAndDownloadRepositoryInternal(MinecraftClient.getInstance().player), 1); - success = false; - } + localRepo.fetch() + .setRefSpecs("+refs/heads/master:refs/remotes/origin/master") + .setThin(true) + .setDepth(1) + .call(); + Ref ref = localRepo.reset() + .setRef("refs/remotes/origin/master") + .setMode(ResetCommand.ResetType.HARD) + .disableRefLog(true) + .call(); + LOGGER.info("[Skyblocker NEU Repo] NEU Repository was updated to {}", ref.getObjectId().getName()); } } else { Git.cloneRepository() @@ -117,14 +121,14 @@ private static CompletableFuture loadRepository() { .setDirectory(NEURepoManager.LOCAL_REPO_DIR.toFile()) .setBranchesToClone(List.of("refs/heads/master")) .setBranch("refs/heads/master") - .setDepth(1) // do shallow clone + .setDepth(1) .call().close(); LOGGER.info("[Skyblocker NEU Repo] NEU Repository Downloaded"); } } catch (TransportException e) { LOGGER.error("[Skyblocker NEU Repo] Transport operation failed. Most likely unable to connect to the remote NEU repo on github", e); success = false; - } catch (RepositoryNotFoundException e) { + } catch (GitAPIException | RepositoryNotFoundException e) { LOGGER.warn("[Skyblocker NEU Repo] Local NEU Repository not found or corrupted, downloading new one", e); Scheduler.INSTANCE.schedule(() -> deleteAndDownloadRepositoryInternal(MinecraftClient.getInstance().player), 1); success = false; From fae331acb94a572e432a72457c7a765f95787272 Mon Sep 17 00:00:00 2001 From: Launium Date: Fri, 5 Sep 2025 23:05:05 +0800 Subject: [PATCH 2/3] Workaround for keeping uncommited local changes --- .../java/de/hysky/skyblocker/utils/NEURepoManager.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java index 2290b69bcd2..3804c6b4c7e 100644 --- a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java @@ -28,6 +28,8 @@ import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.merge.ContentMergeStrategy; +import org.eclipse.jgit.merge.MergeStrategy; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,6 +105,7 @@ private static CompletableFuture loadRepository() { try { if (Files.isDirectory(NEURepoManager.LOCAL_REPO_DIR)) { try (Git localRepo = Git.open(NEURepoManager.LOCAL_REPO_DIR.toFile())) { + boolean stashed = localRepo.stashCreate().call() != null; localRepo.fetch() .setRefSpecs("+refs/heads/master:refs/remotes/origin/master") .setThin(true) @@ -113,6 +116,13 @@ private static CompletableFuture loadRepository() { .setMode(ResetCommand.ResetType.HARD) .disableRefLog(true) .call(); + if (stashed) { + localRepo.stashApply() + .setContentMergeStrategy(ContentMergeStrategy.OURS) + .call(); + localRepo.stashDrop().call(); + LOGGER.info("[Skyblocker NEU Repo] Auto stash has been applied to the NEU Repository"); + } LOGGER.info("[Skyblocker NEU Repo] NEU Repository was updated to {}", ref.getObjectId().getName()); } } else { From 204f0fccb96fdaa602b54349f78bdaf0e0d66b78 Mon Sep 17 00:00:00 2001 From: Launium Date: Sat, 13 Sep 2025 13:03:44 +0800 Subject: [PATCH 3/3] Resolve conflict by using theirs --- src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java index 3804c6b4c7e..4565778abde 100644 --- a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java @@ -118,7 +118,7 @@ private static CompletableFuture loadRepository() { .call(); if (stashed) { localRepo.stashApply() - .setContentMergeStrategy(ContentMergeStrategy.OURS) + .setContentMergeStrategy(ContentMergeStrategy.THEIRS) .call(); localRepo.stashDrop().call(); LOGGER.info("[Skyblocker NEU Repo] Auto stash has been applied to the NEU Repository");