remove old code

This commit is contained in:
Jeff Carr 2025-09-03 19:39:02 -05:00
parent aea7f16891
commit b847d9aa6c
8 changed files with 22 additions and 209 deletions

View File

@ -75,3 +75,9 @@ submit:
commit: commit:
FORGE_URL="https://forge.grid.wit.com/" forge commit --all FORGE_URL="https://forge.grid.wit.com/" forge commit --all
doc:
echo "/*" > doc.go
forge -h >> doc.go
echo "*/" >> doc.go
echo "package main" >> doc.go

10
argv.go
View File

@ -23,8 +23,8 @@ type args struct {
Dirty *DirtyCmd `arg:"subcommand:dirty" help:"show dirty git repos"` Dirty *DirtyCmd `arg:"subcommand:dirty" help:"show dirty git repos"`
GitFetch *FindCmd `arg:"subcommand:fetch" help:"run 'git fetch master'"` GitFetch *FindCmd `arg:"subcommand:fetch" help:"run 'git fetch master'"`
List *FindCmd `arg:"subcommand:list" help:"print a table of the current repos"` List *FindCmd `arg:"subcommand:list" help:"print a table of the current repos"`
Normal *EmptyCmd `arg:"subcommand:normal" help:"set every repo to the default state for software development"`
Merge *MergeCmd `arg:"subcommand:merge" help:"merge branches"` Merge *MergeCmd `arg:"subcommand:merge" help:"merge branches"`
Normal *EmptyCmd `arg:"subcommand:normal" help:"set every repo to the default state for software development"`
Patch *PatchCmd `arg:"subcommand:patch" help:"make patchsets"` Patch *PatchCmd `arg:"subcommand:patch" help:"make patchsets"`
Pull *PullCmd `arg:"subcommand:pull" help:"run 'git pull'"` Pull *PullCmd `arg:"subcommand:pull" help:"run 'git pull'"`
URL string `arg:"--connect" help:"forge url"` URL string `arg:"--connect" help:"forge url"`
@ -76,7 +76,6 @@ type PullCmd struct {
Check *EmptyCmd `arg:"subcommand:check" help:"check repo versions"` Check *EmptyCmd `arg:"subcommand:check" help:"check repo versions"`
Dirty *EmptyCmd `arg:"subcommand:dirty" help:"only check dirty repos"` Dirty *EmptyCmd `arg:"subcommand:dirty" help:"only check dirty repos"`
Patches *EmptyCmd `arg:"subcommand:patches" help:"only check repos with patches"` Patches *EmptyCmd `arg:"subcommand:patches" help:"only check repos with patches"`
Sync *SyncCmd `arg:"subcommand:sync" help:"sync repos with upstream"`
} }
type ConfigAddCmd struct { type ConfigAddCmd struct {
@ -118,11 +117,6 @@ type MergeCmd struct {
Publish *EmptyCmd `arg:"subcommand:publish" help:"increment versions and publish master branch"` Publish *EmptyCmd `arg:"subcommand:publish" help:"increment versions and publish master branch"`
} }
type SyncCmd struct {
Clean *EmptyCmd `arg:"subcommand:clean" help:"sync everything to upstream master"`
User *EmptyCmd `arg:"subcommand:user" help:"sync everything to user"`
}
type DirtyCmd struct { type DirtyCmd struct {
} }
@ -146,7 +140,7 @@ func (a args) Description() string {
forge -- a tool to manage lots of git repos. forge includes a GUI and TUI. forge -- a tool to manage lots of git repos. forge includes a GUI and TUI.
forge only executes the 'git' command. Everything it does, you can run by hand with 'git'. forge only executes the 'git' command. Everything it does, you can run by hand with 'git'.
` `
} }
func (args) doBashHelpDebug() { func (args) doBashHelpDebug() {

View File

@ -24,7 +24,7 @@ func (args) doBashAuto() {
argv.doBashHelp() argv.doBashHelp()
switch argv.BashAuto[0] { switch argv.BashAuto[0] {
case "checkout": case "checkout":
fmt.Println("user devel master ") fmt.Println("devel master user")
case "clean": case "clean":
// me.pp.WriteHelp(os.Stderr) // me.pp.WriteHelp(os.Stderr)
// me.pp.WriteUsageForSubcommand(os.Stderr, me.pp.SubcommandNames()...) // me.pp.WriteUsageForSubcommand(os.Stderr, me.pp.SubcommandNames()...)
@ -48,17 +48,13 @@ func (args) doBashAuto() {
case "merge": case "merge":
fmt.Println("devel master") fmt.Println("devel master")
case "pull": case "pull":
fmt.Println("dirty clean list patches sync --force") fmt.Println("dirty clean list patches --force")
case "--find":
fmt.Println("foo bar")
case "patch": case "patch":
fmt.Println("get list submit show") fmt.Println("get list submit show")
case "user": case "user":
fmt.Println("--force") fmt.Println("--force")
case "devel": case "devel":
fmt.Println("--force") fmt.Println("--force")
case "sync":
fmt.Println("clean user --force")
case "master": case "master":
fmt.Println("") fmt.Println("")
case "verify": case "verify":

View File

@ -43,7 +43,7 @@ func rillPull(repo *gitpb.Repo) error {
// is every repo on the devel branch? // is every repo on the devel branch?
func doGitPullNew() error { func doGitPull() error {
if argv.Pull == nil { if argv.Pull == nil {
return fmt.Errorf("not really 'fetch pull'") return fmt.Errorf("not really 'fetch pull'")
} }
@ -138,33 +138,6 @@ func doGitPullNew() error {
} }
/*
func doGitPull() {
allerr := me.found.RillGitPull(40, 5)
all := me.found.SortByFullPath()
for all.Scan() {
repo := all.Next()
result := allerr[repo]
if result.Error == gitpb.ErrorGitPullOnDirty {
log.Info("skip git pull. repo is dirty", repo.GetGoPath())
continue
}
if result.Error == gitpb.ErrorGitPullOnLocal {
log.Info("skip git pull. local branch ", repo.GetGoPath())
continue
}
if result.Exit == 0 {
continue
}
log.Info("git pull error:", repo.GetGoPath(), result.Error)
log.Info("git pull error:", repo.GetGoPath(), result.Stdout)
}
}
*/
// git fetch origin master:master // git fetch origin master:master
func rillFetchMaster(repo *gitpb.Repo) error { func rillFetchMaster(repo *gitpb.Repo) error {
if repo.GetCurrentBranchName() != repo.GetUserBranchName() { if repo.GetCurrentBranchName() != repo.GetUserBranchName() {

View File

@ -3,16 +3,9 @@
package main package main
import (
"fmt"
"path/filepath"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
// trys to figure out if there is still something to update // trys to figure out if there is still something to update
/*
func doSync() error { func doSync() error {
if argv.Pull.Sync.Clean != nil { if argv.Pull.Sync.Clean != nil {
return doSyncClean() return doSyncClean()
@ -83,3 +76,4 @@ func syncDevelBranches() error {
} }
return nil return nil
} }
*/

16
doc.go
View File

@ -1,13 +1,10 @@
/* /*
forge -- a tool to git repos at go.wit.com forge -- a tool to manage lots of git repos. forge includes a GUI and TUI.
but you can probably use it for other things forge only executes the 'git' command. Everything it does, you can run by hand with 'git'.
A video demonstration of the terminal UI is available at: forge v0.22.138-6-gaea7f16 Built on 2025.09.03_1935
https://mirrors.wit.com/guidemo/forge-gocui-demo.webm Usage: forge [--debugger] [--logger] [--no-gui] [--gui GUI] [--gui-file GUI-FILE] [--gui-build] [--gui-verbose] [--gui-check-plugin GUI-CHECK-PLUGIN] [--connect CONNECT] [--all] [--build BUILD] [--install INSTALL] [--forge-rebuild] [--force] [--verbose] [--bash] [--auto-complete AUTO-COMPLETE] <command> [<args>]
forge v0.22.124-2-g8c25ed1 Built on 2025.07.21_1348
Usage: forge [--debugger] [--logger] [--no-gui] [--gui GUI] [--gui-file GUI-FILE] [--gui-test GUI-TEST] [--gui-verbose] [--connect CONNECT] [--all] [--build BUILD] [--install INSTALL] [--forge-rebuild] [--force] [--verbose] [--bash] [--auto-complete AUTO-COMPLETE] <command> [<args>]
Options: Options:
@ -16,8 +13,10 @@ Options:
--no-gui ignore all these gui problems --no-gui ignore all these gui problems
--gui GUI Use this gui toolkit [andlabs,gocui,nocui,stdin] --gui GUI Use this gui toolkit [andlabs,gocui,nocui,stdin]
--gui-file GUI-FILE Use a specific plugin.so file --gui-file GUI-FILE Use a specific plugin.so file
--gui-test GUI-TEST test a specific plugin.so will load --gui-build attempt to build the GUI plugins
--gui-verbose enable all logging --gui-verbose enable all logging
--gui-check-plugin GUI-CHECK-PLUGIN
hack to verify GO plugins load
--connect CONNECT forge url --connect CONNECT forge url
--all git commit --all --all git commit --all
--build BUILD build a repo --build BUILD build a repo
@ -42,6 +41,7 @@ Commands:
fetch run 'git fetch master' fetch run 'git fetch master'
list print a table of the current repos list print a table of the current repos
merge merge branches merge merge branches
normal set every repo to the default state for software development
patch make patchsets patch make patchsets
pull run 'git pull' pull run 'git pull'
*/ */

View File

@ -1,143 +0,0 @@
package main
// playing with gemini to do simple tasks. it kicked this out
import (
"bufio"
"errors"
"fmt"
"os"
"path/filepath"
"strings"
)
// ParsedGitConfig represents the structure of a .gitconfig file,
// which is a map of section names to a map of their key-value pairs.
// For example:
//
// {
// "user": {
// "name": "John Doe",
// "email": "john.doe@example.com",
// },
// "core": {
// "editor": "vim",
// },
// }
type ParsedGitConfig map[string]map[string]string
// ParseGlobalGitConfig finds and parses the global .gitconfig file for the current user.
// It is platform-agnostic and works on Windows, macOS, and Linux.
// It returns the parsed configuration or an error if the file cannot be found or read.
func ParseGlobalGitConfig() (ParsedGitConfig, error) {
// os.UserHomeDir() is the platform-agnostic way to get the user's home directory.
homeDir, err := os.UserHomeDir()
if err != nil {
return nil, fmt.Errorf("could not get user home directory: %w", err)
}
// filepath.Join correctly constructs the path for the current OS.
gitConfigPath := filepath.Join(homeDir, ".gitconfig")
file, err := os.Open(gitConfigPath)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
return nil, fmt.Errorf(".gitconfig file not found at %s", gitConfigPath)
}
return nil, fmt.Errorf("could not open .gitconfig file: %w", err)
}
defer file.Close()
config := make(ParsedGitConfig)
var currentSection string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
// Ignore empty lines and comments
if line == "" || line[0] == '#' || line[0] == ';' {
continue
}
// Check for a new section
if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
sectionName := line[1 : len(line)-1]
// Handle subsections like [remote "origin"] by splitting them.
// For simplicity, we'll just use the full string as the key.
// A more complex parser might create nested maps.
currentSection = strings.TrimSpace(sectionName)
if _, exists := config[currentSection]; !exists {
config[currentSection] = make(map[string]string)
}
continue
}
// Parse key-value pairs within a section
if currentSection != "" {
// Split by "=". Use SplitN to handle values that might contain "=".
parts := strings.SplitN(line, "=", 2)
if len(parts) == 2 {
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
config[currentSection][key] = value
}
}
}
if err := scanner.Err(); err != nil {
return nil, fmt.Errorf("error reading .gitconfig file: %w", err)
}
return config, nil
}
// GetValue retrieves a specific value from the parsed git config.
// It takes the section and key as input (e.g., "user", "name").
// It returns the value and a boolean indicating if the key was found.
func (c ParsedGitConfig) GetValue(section, key string) (string, bool) {
if sectionMap, ok := c[section]; ok {
if value, ok := sectionMap[key]; ok {
return value, true
}
}
return "", false
}
/*
// main function to demonstrate the usage of ParseGlobalGitConfig.
func main() {
config, err := ParseGlobalGitConfig()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
fmt.Println("Successfully parsed global .gitconfig file.")
fmt.Println("-----------------------------------------")
// Example of using GetValue to retrieve the user's name and email.
userName, found := config.GetValue("user", "name")
if found {
fmt.Printf("User Name: %s\n", userName)
} else {
fmt.Println("User name not found.")
}
userEmail, found := config.GetValue("user", "email")
if found {
fmt.Printf("User Email: %s\n", userEmail)
} else {
fmt.Println("User email not found.")
}
fmt.Println("\nFull configuration:")
// Print out the full parsed configuration
for section, keys := range config {
fmt.Printf("[%s]\n", section)
for key, value := range keys {
fmt.Printf(" %s = %s\n", key, value)
}
}
}
*/

View File

@ -165,14 +165,7 @@ func main() {
} }
if argv.Pull != nil { if argv.Pull != nil {
if argv.Pull.Sync != nil { doGitPull()
if err := doSync(); err != nil {
badExit(err)
}
okExit("")
}
doGitPullNew()
okExit("") okExit("")
} }