From 8f9a9adeaea7aaac815f5e9d9aa7251de05aa839 Mon Sep 17 00:00:00 2001 From: msanlli Date: Thu, 6 Feb 2025 18:49:29 +0100 Subject: [PATCH 1/6] adapt config to ADJ --- backend/cmd/config.go | 5 +++-- backend/cmd/config.toml | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/cmd/config.go b/backend/cmd/config.go index 3cb268afe..80908c01e 100644 --- a/backend/cmd/config.go +++ b/backend/cmd/config.go @@ -6,6 +6,7 @@ import ( ) type Config struct { - Vehicle vehicle.Config - Server server.Config + Vehicle vehicle.Config + Server server.Config + AdjBranch string } diff --git a/backend/cmd/config.toml b/backend/cmd/config.toml index 297584b3f..33ee414db 100644 --- a/backend/cmd/config.toml +++ b/backend/cmd/config.toml @@ -11,4 +11,7 @@ connections = "/backend" files = "/" [vehicle] -boardsList = ["VCU"] \ No newline at end of file +boardsList = ["VCU"] + +[adj] +branch = "" # Leave blank when using ADJ as a submodule From ea604f2532b4e89b486524a40e9c83223eb4a765 Mon Sep 17 00:00:00 2001 From: msanlli Date: Thu, 6 Feb 2025 18:50:12 +0100 Subject: [PATCH 2/6] adapt main to branch selector --- backend/cmd/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index a8ad0e2a9..39276ec7a 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -100,7 +100,7 @@ func main() { // <--- ADJ ---> - adj, err := adj_module.NewADJ() + adj, err := adj_module.NewADJ(config.AdjBranch) if err != nil { trace.Fatal().Err(err).Msg("setting up ADJ") } From 2e0ad3c7e00b3cadb56e6886f69e533ba9eede9e Mon Sep 17 00:00:00 2001 From: msanlli Date: Thu, 6 Feb 2025 20:28:39 +0100 Subject: [PATCH 3/6] fix config struct --- backend/cmd/config.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/cmd/config.go b/backend/cmd/config.go index 80908c01e..e80b70d52 100644 --- a/backend/cmd/config.go +++ b/backend/cmd/config.go @@ -5,8 +5,11 @@ import ( "github.com/HyperloopUPV-H8/h9-backend/internal/vehicle" ) +type Adj struct { + Branch string +} type Config struct { - Vehicle vehicle.Config - Server server.Config - AdjBranch string + Vehicle vehicle.Config + Server server.Config + Adj Adj } From da4790168fa4d6e2211a1ebf9fc835684a15b503 Mon Sep 17 00:00:00 2001 From: msanlli Date: Thu, 6 Feb 2025 20:29:15 +0100 Subject: [PATCH 4/6] adjust main to new struct --- backend/cmd/main.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 39276ec7a..618506903 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -96,11 +96,12 @@ func main() { defer pprof.StopCPUProfile() } runtime.SetBlockProfileRate(*blockprofile) + config := getConfig("./config.toml") // <--- ADJ ---> - adj, err := adj_module.NewADJ(config.AdjBranch) + adj, err := adj_module.NewADJ(config.Adj.Branch) if err != nil { trace.Fatal().Err(err).Msg("setting up ADJ") } From 6ce939a62865cd0d1645ec611d752ca79f101ecd Mon Sep 17 00:00:00 2001 From: msanlli Date: Fri, 7 Feb 2025 18:58:49 +0100 Subject: [PATCH 5/6] git plumbing --- backend/internal/adj/adj.go | 110 +++++++++++++++++++++++++++++++----- 1 file changed, 95 insertions(+), 15 deletions(-) diff --git a/backend/internal/adj/adj.go b/backend/internal/adj/adj.go index 52c02d2e1..7a6ba9ea3 100644 --- a/backend/internal/adj/adj.go +++ b/backend/internal/adj/adj.go @@ -7,6 +7,7 @@ import ( "github.com/HyperloopUPV-H8/h9-backend/internal/utils" "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" ) const ( @@ -14,8 +15,8 @@ const ( RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned ) -func NewADJ() (ADJ, error) { - infoRaw, boardsRaw, err := downloadADJ() +func NewADJ(AdjBranch string) (ADJ, error) { + infoRaw, boardsRaw, err := downloadADJ(AdjBranch) if err != nil { return ADJ{}, err } @@ -73,15 +74,8 @@ func NewADJ() (ADJ, error) { return adj, nil } -func downloadADJ() (json.RawMessage, json.RawMessage, error) { - if !checkRepo() { - _, err := git.PlainClone(RepoPath, false, &git.CloneOptions{ - URL: RepoUrl, - }) - if err != nil { - return nil, nil, err - } - } +func downloadADJ(AdjBranch string) (json.RawMessage, json.RawMessage, error) { + updateRepo(AdjBranch) // The BoardIds are applied in the NewADJ function by the getBoardIds function info, err := os.ReadFile(RepoPath + "general_info.json") @@ -97,12 +91,98 @@ func downloadADJ() (json.RawMessage, json.RawMessage, error) { return info, boardsList, nil } -func checkRepo() bool { - if _, err := os.Stat(RepoPath); os.IsNotExist(err) { - return false +// WARNING: Doing tricks on it +func updateRepo(AdjBranch string) error { + var repo *git.Repository + var err error + + if AdjBranch == "" { + // Makes use of submodule + return nil + } else { + if _, err = os.Stat(RepoPath); os.IsNotExist(err) { + repo, err = git.PlainClone(RepoPath, false, &git.CloneOptions{ + URL: RepoUrl, + ReferenceName: plumbing.NewBranchReferenceName(AdjBranch), + SingleBranch: true, + Depth: 1, + }) + if err != nil { + return err + } + } else { + repo, err = git.PlainOpen(RepoPath) + if err != nil { + return err + } + } + + err = repo.Fetch(&git.FetchOptions{ + RemoteName: "origin", + Force: true, + }) + if err != nil && err != git.NoErrAlreadyUpToDate { + return err + } + + head, err := repo.Head() + if err != nil { + return err + } + + branch := head.Name().Short() + + println("actual branch is: ", branch) + + worktree, err := repo.Worktree() + if err != nil { + return err + } + + println(head.Name().Short(), AdjBranch) + + if branch != AdjBranch { + localBranchRef := plumbing.NewBranchReferenceName(AdjBranch) + _, err = repo.Reference(localBranchRef, false) + if err != nil { + remoteBranchRef := plumbing.NewRemoteReferenceName("origin", AdjBranch) + remoteRef, err2 := repo.Reference(remoteBranchRef, true) + if err2 != nil { + return err2 + } + + err = worktree.Checkout(&git.CheckoutOptions{ + Branch: localBranchRef, + Create: true, + Force: true, + Hash: remoteRef.Hash(), + }) + if err != nil { + println(err.Error()) + return err + } + } else { + err = worktree.Checkout(&git.CheckoutOptions{ + Branch: localBranchRef, + Force: true, + }) + } + } + + err = worktree.Pull(&git.PullOptions{ + RemoteName: "origin", + SingleBranch: true, + }) + if err != nil { + if err == git.NoErrAlreadyUpToDate { + return nil + } else { + return err + } + } } - return true + return nil } func getBoards(boardsList map[string]string) (map[string]Board, error) { From e09bbdae15800b0a986873dadeab3d8e31920b2c Mon Sep 17 00:00:00 2001 From: msanlli Date: Fri, 7 Feb 2025 18:59:18 +0100 Subject: [PATCH 6/6] make toml select adj main by default --- backend/cmd/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/cmd/config.toml b/backend/cmd/config.toml index 33ee414db..8a9f54fa1 100644 --- a/backend/cmd/config.toml +++ b/backend/cmd/config.toml @@ -14,4 +14,4 @@ files = "/" boardsList = ["VCU"] [adj] -branch = "" # Leave blank when using ADJ as a submodule +branch = "main" # Leave blank when using ADJ as a submodule