From a4ef3e1bf5cab49c755d2831631c6b7e4135421b Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 6 Sep 2017 13:53:16 -0400 Subject: [PATCH 1/4] Adds submodule update handling --- TGServerService/Repository.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/TGServerService/Repository.cs b/TGServerService/Repository.cs index e30759d1d3..a6bb1d7ddc 100644 --- a/TGServerService/Repository.cs +++ b/TGServerService/Repository.cs @@ -364,11 +364,12 @@ namespace TGServerService }; fos.OnTransferProgress += HandleTransferProgress; Commands.Fetch(Repo, R.Name, refSpecs, fos, logMessage); - + var originBranch = Repo.Head.TrackedBranch; if (reset) { var error = ResetNoLock(Repo.Head.TrackedBranch); + UpdateSubmodules(); if (error != null) throw new Exception(error); DeletePRList(); @@ -376,6 +377,7 @@ namespace TGServerService return error; } var res = MergeBranch(originBranch.FriendlyName); + UpdateSubmodules(); if (res != null) throw new Exception(res); TGServerService.WriteInfo("Repo merge updated to " + originBranch.Tip.Sha, TGServerService.EventID.RepoMergeUpdate); @@ -390,6 +392,16 @@ namespace TGServerService } } + private void UpdateSubmodules() + { + var suo = new SubmoduleUpdateOptions + { + Init = true + }; + foreach (var I in Repo.Submodules) + Repo.Submodules.Update(I.Name, suo); + } + string CreateBackup() { try From 51884104aa1da7d670b0a367bf2a55e83ece9ae1 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 6 Sep 2017 14:01:59 -0400 Subject: [PATCH 2/4] Also while testmerging --- TGServerService/Repository.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/TGServerService/Repository.cs b/TGServerService/Repository.cs index a6bb1d7ddc..ad8eaafdef 100644 --- a/TGServerService/Repository.cs +++ b/TGServerService/Repository.cs @@ -377,9 +377,9 @@ namespace TGServerService return error; } var res = MergeBranch(originBranch.FriendlyName); - UpdateSubmodules(); if (res != null) throw new Exception(res); + UpdateSubmodules(); TGServerService.WriteInfo("Repo merge updated to " + originBranch.Tip.Sha, TGServerService.EventID.RepoMergeUpdate); return null; } @@ -569,6 +569,16 @@ namespace TGServerService //so we'll know if this fails var Result = MergeBranch(LocalBranchName); + if (Result == null) + try + { + UpdateSubmodules(); + } + catch (Exception e) + { + Result = e.ToString(); + } + if (Result == null) { TGServerService.WriteInfo(String.Format("Merged pull request #{0}", PRNumber), TGServerService.EventID.RepoPRMerge); From 8809b8f25edcfa65c34f4eb6647295bd1e33cd4d Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 6 Sep 2017 14:14:31 -0400 Subject: [PATCH 3/4] Also on checkout --- TGServerService/Repository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/TGServerService/Repository.cs b/TGServerService/Repository.cs index ad8eaafdef..387a72b442 100644 --- a/TGServerService/Repository.cs +++ b/TGServerService/Repository.cs @@ -307,6 +307,7 @@ namespace TGServerService }; Commands.Checkout(Repo, sha, Opts); var res = ResetNoLock(null); + UpdateSubmodules(); SendMessage("REPO: Checkout complete!", ChatMessageType.DeveloperInfo); TGServerService.WriteInfo("Repo checked out " + sha, TGServerService.EventID.RepoCheckout); return res; From 43faed13409c36820e48edf3a194718e2120cf56 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 6 Sep 2017 15:36:09 -0400 Subject: [PATCH 4/4] What a beautiful hack this is! --- TGServerService/Repository.cs | 21 ++++++++++++++++++++- TGServerService/ServerService.cs | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/TGServerService/Repository.cs b/TGServerService/Repository.cs index 387a72b442..461ea798e5 100644 --- a/TGServerService/Repository.cs +++ b/TGServerService/Repository.cs @@ -400,7 +400,26 @@ namespace TGServerService Init = true }; foreach (var I in Repo.Submodules) - Repo.Submodules.Update(I.Name, suo); + try + { + Repo.Submodules.Update(I.Name, suo); + } + catch(Exception e) + { + //workaround for https://github.com/libgit2/libgit2/issues/3820 + //kill off the modules/ folder in .git and try again + try + { + Program.DeleteDirectory(String.Format("{0}/.git/modules/{1}", RepoPath, I.Path)); + } + catch { + throw e; + } + Repo.Submodules.Update(I.Name, suo); + var msg = String.Format("I had to reclone submodule {0}. If this is happening a lot find a better hack or fix https://github.com/libgit2/libgit2/issues/3820!", I.Name); + SendMessage(String.Format("REPO: {0}", msg), ChatMessageType.DeveloperInfo); + TGServerService.WriteWarning(msg, TGServerService.EventID.SubmoduleReclone); + } } string CreateBackup() diff --git a/TGServerService/ServerService.cs b/TGServerService/ServerService.cs index 7cbc5fb224..1f3a5d76ea 100644 --- a/TGServerService/ServerService.cs +++ b/TGServerService/ServerService.cs @@ -75,6 +75,7 @@ namespace TGServerService ServerUpdateApplied = 6300, ChatBroadcastFail = 6400, IRCLogModes = 6500, + SubmoduleReclone = 6600, } static TGServerService ActiveService; //So everyone else can write to our eventlog