diff options
| author | Jeff Carr <[email protected]> | 2024-02-13 21:45:25 -0600 | 
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-02-13 21:45:25 -0600 | 
| commit | 48299080138a77d94e5c75458c239bed324c729f (patch) | |
| tree | 5a95025f5f3a66895b902cafd6305032c6ce94d6 | |
initial commitv0.0.1
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Makefile | 12 | ||||
| -rw-r--r-- | README.md | 7 | ||||
| -rw-r--r-- | listWindow.go | 332 | ||||
| -rw-r--r-- | register.go | 48 | 
5 files changed, 402 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a630ed4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.swp +go.mod +go.sum diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..13279ec --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +all: +	@echo this is a go library, not a binary + +goimports: +	goimports -w *.go + +redomod: +	rm -f go.* +	goimports -w *.go +	GO111MODULE= go mod init +	GO111MODULE= go mod tidy + diff --git a/README.md b/README.md new file mode 100644 index 0000000..d303a4b --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# gowit + +This is the start of package to talk to go.wit.com + +* Let the user list and download the repository +* Attempt conversion to protobuf +* Allow submision of gui patch sets diff --git a/listWindow.go b/listWindow.go new file mode 100644 index 0000000..325824d --- /dev/null +++ b/listWindow.go @@ -0,0 +1,332 @@ +package gowit + +import ( +	"fmt" +	"io/ioutil" +	"net/http" +	"os" +	"path/filepath" +	"strings" +	"time" + +	"go.wit.com/gui" +	"go.wit.com/log" + +	"go.wit.com/lib/gadgets" +	"go.wit.com/lib/gui/repostatus" +	"go.wit.com/lib/gui/shell" +) + +var lw *gadgets.BasicWindow + +var allsections []*section + +type witRepo struct { +	sec       *section +	path      *gui.Node +	downloadB *gui.Node +} + +type section struct { +	name   string +	hidden bool + +	parent       *gui.Node +	box          *gui.Node +	group        *gui.Node +	grid         *gui.Node // where the repos are listed +	hideCB       *gui.Node +	downloadAllB *gui.Node +	witRepos     []*witRepo +} + +func CheckRegistered(rs *repostatus.RepoStatus) (bool, string) { +	var found bool = false +	var source string +	url := "https://" + rs.String() +	lines := dumpURL(url) +	for _, line := range lines { +		// log.Info("HTTP:", i, line) +		if strings.Contains(line, "\"go-import\"") { +			line = strings.TrimSuffix(line, "\">") +			parts := strings.Split(line, " ") +			source = parts[len(parts)-1] +			// log.Verbose("FOUND IMPORT:", i, source) +			found = true +		} +	} +	return found, source +} + +func ListWindow() *gadgets.BasicWindow { +	if lw != nil { +		if lw.Hidden() { +			lw.Show() +		} else { +			lw.Hide() +		} +		return lw +	} +	lw = gadgets.RawBasicWindow("go.wit.com repositories") +	lw.Custom = func() { +		log.Warn("got to close") +	} +	lw.Make() +	box := lw.Box() +	group := box.NewGroup("list") +	group.NewButton("make new go version list", func() { +		// dumpVersions() +	}) + +	var lines []string +	var curs *section + +	lines = dumpURL("https://go.wit.com/list") +	for i, line := range lines { +		if line == "" { +			continue +		} +		if line[0] == '#' { +			curs = NewSection(group, line) +			log.Warn("new group:", line) +			continue +		} +		log.Warn(i, line) +		parts := strings.Split(line, " ") +		if curs != nil { +			curs.add(parts[0]) +		} +	} +	for i, sec := range allsections { +		log.Info("section name:", sec.name, "hidden:", sec.hidden, i) +		parts := strings.Split(sec.name, " ") +		if len(parts) > 1 { +			if parts[1] != "Applications" { +				sec.Hide() +			} +		} +	} +	return lw +} + +func downloadRepo(path string) bool { +	log.Info("downloading", path, "here") +	os.Setenv("GO111MODULE", "off") + +	// goSrcDir := me.goSrcPwd.String() +	goSrcDir := "/home/jcarr/go/src" +	err, ok, output := shell.RunCmd(goSrcDir, []string{"go", "get", "-v", path}) +	if !ok { +		log.Info("go get failed") +		log.Info("err =", err) +		log.Info("output =", output) +		return false +	} + +	fullpath := filepath.Join(goSrcDir, path) +	err, ok, output = shell.RunCmd(fullpath, []string{"go", "get", "-v", "-u", "."}) +	if !ok { +		log.Info("go get depends failed") +		log.Info("err =", err) +		log.Info("output =", output) +		return false +	} +	/* +		if me.autoDryRun.Checked() { +			return false +		} +	*/ +	return true +} + +func (r *witRepo) doDownload() bool { +	/* +		if me.autoDryRun.Checked() { +			r.downloadB.SetLabel("uncheck --dry-run") +			return false +		} +	*/ +	if r.downloadB.String() == "downloaded" { +		log.Info("skipping already downloaded", r.path.String()) +		return true +	} +	if downloadRepo(r.path.String()) { +		log.Info("download", r.path.String(), "worked") +		r.downloadB.SetLabel("downloaded") +		r.downloadB.Disable() +	} else { +		r.downloadB.SetLabel("failed") +		log.Info("download", r.path.String(), "failed") +		return false +	} +	return true +} + +func (s *section) add(path string) { +	if s == nil { +		return +	} +	tmp := new(witRepo) +	tmp.sec = s +	tmp.path = s.grid.NewLabel(path) +	tmp.downloadB = s.grid.NewButton("download", func() { +		lw.Disable() +		tmp.doDownload() +		lw.Enable() +	}) +	if repostatus.VerifyLocalGoRepo(path) { +		log.Verbose("newRepo actually exists", path) +		tmp.downloadB.SetLabel("downloaded") +		tmp.downloadB.Disable() +	} + +	s.witRepos = append(s.witRepos, tmp) +} + +func NewSection(parent *gui.Node, desc string) *section { +	news := new(section) +	news.name = desc +	news.parent = parent +	news.box = news.parent.NewBox("bw vbox", true) +	news.group = news.box.NewGroup(desc) +	news.hideCB = news.box.NewCheckbox("hide") +	news.hideCB.Custom = func() { +		news.toggle() +	} +	news.downloadAllB = news.box.NewButton("download all", func() { +		lw.Disable() +		log.Warn("Download all here") +		for i, wrepo := range news.witRepos { +			log.Warn("download:", i, wrepo.path.String()) +			wrepo.doDownload() +			//wrepo.path.Show() +			//wrepo.downloadB.Show() +		} +		lw.Enable() +	}) +	news.grid = news.parent.NewGrid("sections", 2, 1) +	allsections = append(allsections, news) +	return news +} + +func (s *section) toggle() { +	log.Warn(s.name) +	if s.hidden { +		s.hidden = false +		for i, wrepo := range s.witRepos { +			log.Warn(i, wrepo.path.String()) +			wrepo.path.Show() +			wrepo.downloadB.Show() +		} +	} else { +		s.Hide() +	} +} + +func (s *section) Hide() { +	s.hidden = true +	s.hideCB.SetChecked(true) +	for i, wrepo := range s.witRepos { +		log.Warn(i, wrepo.path.String()) +		wrepo.path.Hide() +		wrepo.downloadB.Hide() +	} +} + +/* +func dumpURL(url string) string { +	resp, err := http.Get(url) +	if err != nil { +		return "" +	} +	defer resp.Body.Close() + +	return resp.Body.String() + +		_, err = io.Copy(os.Stdout, resp.Body) +		if err != nil { +			return "" +		} +} +*/ + +func dumpURL(url string) []string { +	resp, err := http.Get(url) +	if err != nil { +		return nil +	} +	defer resp.Body.Close() + +	bodyBytes, err := ioutil.ReadAll(resp.Body) +	if err != nil { +		return nil +	} + +	return strings.Split(string(bodyBytes), "\n") +} + +/* +func dumpVersions() { +	f, _ := os.OpenFile("/tmp/go.wit.com.versions", os.O_WRONLY|os.O_CREATE, 0600) +	defer f.Close() +	for _, sec := range allsections { +		for _, wrepo := range sec.witRepos { +			r, ok := me.allrepos[wrepo.path.String()] +			if ok { +				_, out := r.status.RunCmd([]string{"git", "log", "-1", "--format=%at", r.lastTag.String()}) +				out = strings.TrimSpace(out) + +				// Convert the string to an integer +				gitTagTimestampInt, err := strconv.ParseInt(out, 10, 64) +				if err != nil { +					fmt.Println("Error converting timestamp:", err) +					return +				} + +				// Parse the Unix timestamp into a time.Time object +				gitTagDate := time.Unix(gitTagTimestampInt, 0) + +				// Get the current time +				currentTime := time.Now() + +				// Calculate the duration between the git tag date and the current time +				duration := currentTime.Sub(gitTagDate) + +				// s := fmt.Sprint(duration) +				// fmt.Println("Duration since the git tag date:", s) + +				// fmt.Println("Default formatting:", duration.String()) +				// fmt.Println("Custom formatting:", formatDuration(duration)) +				log.Warn("found:", wrepo.path.String(), r.lastTag.String(), out, formatDuration(duration)) +				fmt.Fprintln(f, wrepo.path.String(), r.lastTag.String(), out) +			} +			//wrepo.path.Show() +		} +	} +} +*/ + +func formatDuration(d time.Duration) string { +	seconds := int(d.Seconds()) % 60 +	minutes := int(d.Minutes()) % 60 +	hours := int(d.Hours()) % 24 +	days := int(d.Hours()) / 24 + +	result := "" +	if days > 0 { +		result += fmt.Sprintf("%dd ", days) +		return result +	} +	if hours > 0 { +		result += fmt.Sprintf("%dh ", hours) +		return result +	} +	if minutes > 0 { +		result += fmt.Sprintf("%dm ", minutes) +		return result +	} +	if seconds > 0 { +		result += fmt.Sprintf("%ds", seconds) +	} +	return result +} diff --git a/register.go b/register.go new file mode 100644 index 0000000..2f94754 --- /dev/null +++ b/register.go @@ -0,0 +1,48 @@ +package gowit + +import ( +	"bytes" +	"io/ioutil" +	"net/http" +	"strings" + +	"go.wit.com/log" +) + +func Register(gopath string, giturl string) bool { +	var err error +	var req *http.Request + +	data := []byte("some junk") + +	url := "https://go.wit.com/register/" + +	req, err = http.NewRequest(http.MethodPost, url, bytes.NewBuffer(data)) + +	req.Header.Set("gopath", gopath) +	req.Header.Set("giturl", giturl) +	req.Header.Set("author", "jcarr") +	req.Header.Set("hostname", "hpdev2.wit.com") + +	client := &http.Client{} +	resp, err := client.Do(req) +	if err != nil { +		log.Error(err) +		return false +	} +	defer resp.Body.Close() + +	body, err := ioutil.ReadAll(resp.Body) +	if err != nil { +		log.Error(err) +		return false +	} + +	test := strings.TrimSpace(string(body)) +	log.Info("go.wit.com returned body:", test) +	if test == "OK" { +		return true +	} + +	return false +}  | 
