summaryrefslogtreecommitdiff
path: root/windowModeMaster.go
blob: e09d991b202e97f361c2e36fac01e04bc7b9c3de (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// 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/gadgets"
	"go.wit.com/lib/protobuf/gitpb"
	"go.wit.com/log"
)

// An app to submit patches for the 30 GO GUI repos

func makeModeMasterWin() *gadgets.GenericWindow {
	win := gadgets.NewGenericWindow("Release", "tools")
	grid := win.Group.RawGrid()

	checkout := grid.NewButton("git checkout master", func() {
		win.Disable()
		defer win.Enable()
	})
	gitpull := grid.NewButton("git pull", func() {
		win.Disable()
		defer win.Enable()
	})
	grid.NextRow()

	cleanUser := grid.NewButton("Clean user branches", func() {
		win.Disable()
		defer win.Enable()
		if err := doCleanUser(); err != nil {
			log.Info("Clean user branches failed", err)
		}
	})

	cleanDevel := grid.NewButton("Clean devel branches", func() {
		win.Disable()
		defer win.Enable()
		if err := doCleanDevel(); err != nil {
			log.Info("Clean devel branches failed", err)
		}
	})
	grid.NextRow()

	f := func() {
		total, count, nope, err := IsEverythingOnMaster()
		if nope == 0 {
			checkout.Disable()
			gitpull.Enable()
		} else {
			log.Printf("Master branch check. %d total repos. (%d ok) (%d not on master branch) err=%v\n", total, count, nope, err)
			checkout.Enable()
		}

		var localuser bool  // are there still local user branches
		var localdevel bool // are there still local devel branches

		all := me.forge.Repos.SortByFullPath()
		for all.Scan() {
			repo := all.Next()
			if repo.IsLocalBranch(repo.GetUserBranchName()) {
				localuser = true
			}
			if repo.IsLocalBranch(repo.GetDevelBranchName()) {
				localdevel = true
			}
		}
		if localuser {
			cleanUser.Enable()
		} else {
			cleanUser.Disable()
		}
		if localdevel {
			cleanDevel.Enable()
		} else {
			cleanDevel.Disable()
		}
	}

	grid.NewButton("check repo state", func() {
		win.Disable()
		defer win.Enable()

		f()
	})

	grid.NewButton("reset user branches (?)", func() {
		resetUserBranchesWindow()
	})
	return win
}

func resetUserBranchesWindow() {
	found := gitpb.NewRepos()
	all := me.forge.Repos.SortByFullPath()
	for all.Scan() {
		repo := all.Next()
		uname := repo.GetUserBranchName()
		dname := repo.GetDevelBranchName()
		if repo.GetCurrentBranchName() == uname {
			log.Info("Repo is on the user branch. Can't delete it.", repo.GetGoPath())
			continue
		}
		b1 := repo.CountDiffObjects(uname, dname)
		b2 := repo.CountDiffObjects(dname, uname)
		log.Info("user vs devel count", b1, b2)
		if b1 == 0 && b2 == 0 {
			cmd := []string{"git", "branch", "-D", uname}
			log.Info(repo.GetGoPath(), cmd)
			repo.RunVerbose(cmd)
			repo.Reload()
			continue
		}
		found.Append(repo)

	}

	win := gadgets.RawBasicWindow("reset user branches")
	win.Make()
	win.Show()
	win.Custom = func() {
		// sets the hidden flag to false so Toggle() works
		win.Hide()
	}
	box := win.Box().NewBox("bw vbox", false)

	group := box.NewGroup("test buttons")
	hbox := group.Box().Horizontal()
	hbox.NewButton("force delete user branch", func() {
		win.Disable()
		defer win.Enable()
		all := found.SortByFullPath()
		for all.Scan() {
			repo := all.Next()
			brname := repo.GetUserBranchName()
			cmd := []string{"git", "branch", "-D", brname}
			log.Info(repo.GetGoPath(), cmd)
			repo.RunVerbose(cmd)
			repo.Reload()
		}
		me.forge.SetConfigSave(true)
		me.forge.ConfigSave()
	})

	t := makeStandardReposGrid(found)
	t.SetParent(box)
	t.ShowTable()
}