summaryrefslogtreecommitdiff
path: root/applyPatch.go
blob: f142733997276f6fc71dc39d26f2378be181308b (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
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0

package main

import (
	"os"
	"path/filepath"
	"strings"

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

/*
// saves the patches in ~/.config/forge/currentpatches/
func savePatchset(pset *forgepb.Patchset) error {
	log.Info("savePatches() NAME", pset.Name)
	log.Info("savePatches() COMMENT", pset.Comment)
	log.Info("savePatches() GIT_AUTHOR_NAME", pset.GetGitAuthorName())
	log.Info("savePatches() GIT_AUTHOR_EMAIL", pset.GetGitAuthorEmail())
	log.Info("savePatches() Branch Name", pset.GetStartBranchName())
	log.Info("savePatches() Start Hash", pset.GetStartBranchHash())

	var count int
	var bad int
	var lasterr error
	all := pset.Patches.SortByFilename()
	for all.Scan() {
		p := all.Next()
		basedir := filepath.Join(os.Getenv("FORGE_CONFIG"), "currentpatches")
		if fullname, err := savePatchFile(p, basedir); err != nil {
			log.Info(fullname, "save failed", err)
			bad += 1
			lasterr = err
		}
		count += 1
	}
	log.Info("pset has", count, "total patches, ", bad, "bad save patches")
	if bad == 0 {
		return lasterr
	}
	return nil
}
*/

// re-run git CheckDirty() on everything
func IsAnythingDirty() bool {
	doCheckDirtyAndConfigSave()
	found := findDirty()
	if found.Len() == 0 {
		return false
	} else {
		return true
	}
}

// From 18ee541f89be2e9f9a91c54873da87885e8ffdf5 Mon Sep 17 00:00:00 2001
// From: Jeff Carr <[email protected]>
// Date: Sun, 5 Jan 2025 01:18:47 -0600
// Subject: [PATCH] 'forge dirty' will find and list only dirty repos

// list patches in jcarr but not in devel
// git log --format="%H %Subject" jcarr --not devel
func countCurrentPatches(repo *gitpb.Repo) int {
	cmd := []string{"git", "log", "--format=\"%H %s\"", "--no-merges", "jcarr", "--not", "devel"}
	result := repo.Run(cmd)
	return len(result.Stdout)
}

func savePatchFile(p *forgepb.Patch, basedir string) (string, error) {
	basepath, filename := filepath.Split(p.Filename)
	fulldir := filepath.Join(basedir, basepath)
	err := os.MkdirAll(fulldir, os.ModePerm)
	if err != nil {
		log.Info("applyPathces() MkdirAll failed for", fulldir)
		log.Info("applyPathces() MkdirAll failed err", err)
		return "", err
	}
	tmpname := filepath.Join(fulldir, filename)
	log.Info("pset filename FILENAME IS REAL?", tmpname)
	raw, _ := os.OpenFile(tmpname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
	raw.Write(p.Data)
	raw.Close()
	return tmpname, nil
}

func readPatchFile(pbfile string) (*forgepb.Patchset, error) {
	bytes, err := os.ReadFile(pbfile)
	if err != nil {
		log.Info("readfile error", pbfile, err)
		return nil, err
	}
	return handleBytes(bytes)
}

func handleBytes(bytes []byte) (*forgepb.Patchset, error) {
	var pset *forgepb.Patchset
	pset = new(forgepb.Patchset)
	err := pset.Unmarshal(bytes)
	if err != nil {
		log.Info("Unmarshal failed", err)
		return nil, err
	}
	return pset, nil
}

func doRegister(newurl string) error {
	var url string
	url = me.urlbase + "/register?url=" + newurl
	body, err := me.forge.HttpPost(url, nil)
	if err != nil {
		log.Info("httpPost() failed:", err)
		return err
	}

	test := strings.TrimSpace(string(body))
	for _, line := range strings.Split(test, "\n") {
		line = strings.TrimSpace(line)
		log.Info("server returned:", line)
	}
	return nil
}