From 724e0d35deac4209755e00103c10b42408b049b4 Mon Sep 17 00:00:00 2001 From: "Artem V. Navrotskiy" Date: Sat, 22 Aug 2015 22:50:40 +0300 Subject: [PATCH] We are trying to fulfill each request 3 times before the error --- .../java/git/lfs/migrate/GitConverter.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/git/lfs/migrate/GitConverter.java b/src/main/java/git/lfs/migrate/GitConverter.java index cc19510..4896364 100644 --- a/src/main/java/git/lfs/migrate/GitConverter.java +++ b/src/main/java/git/lfs/migrate/GitConverter.java @@ -31,6 +31,7 @@ public class GitConverter { @NotNull private static final String GIT_ATTRIBUTES = ".gitattributes"; + private static final int PASS_COUNT = 3; @Nullable private final URL lfs; @NotNull @@ -264,7 +265,7 @@ public ObjectId convert(@NotNull ObjectInserter inserter, @NotNull ConvertResolv throw new IOException("Can't rename file: " + tmpFile + " -> " + lfsFile); } // Upload file. - checkAndUpload(loader, hash); + reply(() -> checkAndUpload(loader, hash)); // Create pointer. StringWriter pointer = new StringWriter(); pointer.write("version https://git-lfs.github.com/spec/v1\n"); @@ -313,12 +314,22 @@ private void checkAndUpload(@NotNull ObjectLoader loader, @NotNull String hash) } // Upload data. - PutMethod put = new PutMethod(upload.get("href").getAsString()); - Map header = new HashMap<>(); + final Map header = new HashMap<>(); for (Map.Entry entry : upload.get("header").getAsJsonObject().entrySet()) { header.put(entry.getKey(), entry.getValue().getAsString()); } - upload(loader, hash, upload.get("href").getAsString(), header); + reply(() -> upload(loader, hash, upload.get("href").getAsString(), header)); + } + + private void reply(@NotNull UploadTask href) throws IOException { + for (int pass = 0; pass < PASS_COUNT - 1; ++pass) { + try { + href.exec(); + return; + } catch (IOException ignored) { + } + } + href.exec(); } private void upload(@NotNull ObjectLoader loader, @NotNull String hash, @NotNull String href, @NotNull Map header) throws IOException { @@ -405,6 +416,11 @@ public enum TaskType { Simple, Root, Attribute, UploadLfs, } + @FunctionalInterface + public interface UploadTask { + void exec() throws IOException; + } + public interface ConvertResolver { @NotNull ObjectId resolve(@NotNull TaskKey key);