summaryrefslogtreecommitdiff
path: root/doMerge.go
blob: acbfd1b6959a9e4f4d2e3f0f824c24ad60266253 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0

package main

import (
	"go.wit.com/lib/protobuf/forgepb"
	"go.wit.com/lib/protobuf/gitpb"
	"go.wit.com/log"
)

func doMergeReport() *forgepb.Patches {
	found := forgepb.NewPatches()
	for repo := range me.forge.Repos.IterAll() {
		if repo.GetDevelVersion() == repo.GetMasterVersion() {
			continue
		}
		tmp := log.Sprintf("%s..%s", repo.GetMasterVersion(), repo.GetDevelVersion())
		r, err := repo.RunStrict([]string{"git", "log", "--pretty=format:%H", tmp})
		_ = err
		for i, line := range r.Stdout {
			log.Info(i, line, repo.FullPath)
		}
	}
	return found
}

func doMergeDevel() (*gitpb.Repos, error) {
	var err error
	done := gitpb.NewRepos()
	found := findMergeToDevel()
	for repo := range found.IterAll() {
		if repo.CheckDirty() {
			log.Info("repo is dirty", repo.GetGoPath())
			continue
		}
		log.Infof("%s starting git merge\n", repo.FullPath)
		if repo.CheckoutDevel() {
			log.Info("checkout devel failed", repo.GetGoPath())
			err = log.Errorf("checkout devel failed")
			badExit(err)
		}
		// hash differences when merging user into devel branch
		out := repo.GetBranchDifferences(repo.GetDevelBranchName(), repo.GetUserBranchName())
		for i, hash := range out {
			log.Info("MERGE HASH FROM USER TO DEVEL", i, hash)
		}
		if _, err := repo.MergeToDevel(); err != nil {
			log.Info("merge from user failed", repo.GetGoPath(), err)
			err = log.Errorf("merge from user failed")
			// log.Info(strings.Join(r.Stdout, "\n"))
			// log.Info(strings.Join(r.Stderr, "\n"))
			badExit(err)
		}
		done.Append(repo)
	}
	return done, err
}

func doMergeMaster() (*gitpb.Repos, error) {
	var err error
	setForgeMode(forgepb.ForgeMode_MASTER)

	done := gitpb.NewRepos()
	found := findMergeToMaster()
	for repo := range found.IterAll() {
		if repo.CheckDirty() {
			log.Info("repo is dirty", repo.GetGoPath())
			continue
		}

		log.Info("Starting merge on", repo.GetGoPath())
		if repo.CheckoutMaster() {
			log.Info("checkout devel failed", repo.GetGoPath())
			err = log.Errorf("checkout devel failed")
			badExit(err)
		}

		if _, err := repo.MergeToMaster(); err != nil {
			log.Info("merge from user failed", repo.GetGoPath(), err)
			err = log.Errorf("merge from user failed")
			// log.Info(strings.Join(r.Stdout, "\n"))
			// log.Info(strings.Join(r.Stderr, "\n"))
			badExit(err)
		}

		done.Append(repo)
	}
	return done, err
}