diff --git a/.gitignore b/.gitignore index 6ab788c..aecd2d5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ go.mod go.sum fixup +*.so /files/* diff --git a/Makefile b/Makefile index 65d1dc9..5601d2a 100644 --- a/Makefile +++ b/Makefile @@ -3,15 +3,14 @@ GUIVERSION = $(shell git describe --tags) BUILDTIME = $(shell date +%Y.%m.%d) all: verbose - -fixup --gui-check-plugin ../../../toolkits/gocui/gocui.so - fixup --gui gocui --gui-verbose --gui-file ../../toolkits/gocui/gocui.so drives + # -fixup --gui-check-plugin ../../../toolkits/gocui/gocui.so + fixup --gui gocui --gui-verbose --gui-file ../../toolkits/gocui/gocui.so go-build: goimports GO111MODULE=off go build \ -ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}" verbose: goimports - -cp -a ../../../toolkits/gocui/gocui.so resources/ GO111MODULE=off go install -v -x \ -ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}" @@ -22,9 +21,9 @@ install: goimports vet: GO111MODULE=off go vet -stderr: go-build - echo "writing to /tmp/wit-test.log" - ./wit-test >/tmp/wit-test.log 2>&1 +stderr: verbose + echo "writing to /tmp/fixup.log" + fixup --gui gocui --gui-verbose --gui-file ../../toolkits/gocui/gocui.so drives >/tmp/fixup.log 2>&1 goimports: goimports -w *.go @@ -39,30 +38,3 @@ gpl: check-git-clean: @git diff-index --quiet HEAD -- || (echo "Git repository is dirty, please commit your changes first"; exit 1) - -old-debian-release: install - wit-test debian --dry-run --verbose --release - -debian-release: install - forge dirty - rm -f ~/incoming/*.deb - rm -f ~/go/lib/go-gui/* - forge --install go.wit.com/apps/go-deb - go-deb -h # check to make sure go-deb builds - wit-test debian --verbose - ls -hl ~/incoming/ - do-aptly - -debian-release-force: install - forge dirty - rm -f ~/incoming/*.deb - rm -f ~/go/lib/go-gui/* - forge --install go.wit.com/apps/go-deb - go-deb -h # check to make sure go-deb builds - wit-test debian --force --verbose - ls -hl ~/incoming/ - -dpkg-deb -c ~/incoming/go-gui-toolkits*.deb - do-aptly - -debian-release-build-only: install - wit-test debian --verbose --release diff --git a/doGui.go b/doGui.go index fc6fe53..bc8890b 100644 --- a/doGui.go +++ b/doGui.go @@ -7,10 +7,12 @@ package main import ( "os" + "strings" "time" "go.wit.com/gui" "go.wit.com/lib/gadgets" + "go.wit.com/lib/gui/shell" "go.wit.com/log" ) @@ -41,31 +43,35 @@ func doGui() { func drawWindow(win *gadgets.GenericWindow) { grid := win.Group.RawGrid() - grid.NewLabel("Drives:") - me.dd = grid.NewDropdown() - me.dd.AddText("/dev/blah") + // me.dd.AddText("/dev/blah") me.dd.Custom = func() { - log.Info("todo: changed drive") + fields := strings.Fields(me.dd.String()) + log.Info("changed to", fields) + if len(fields) < 1 { + return + } + me.currentDev = fields[0] + me.parted.SetText("Partition " + me.currentDev) } grid.NextRow() + // a button to format or blank a drive + me.parted = grid.NewButton("select drive", func() { + if me.currentDev == "" { + log.Info("You must select a drive first") + return + } + log.Info("check if", me.currentDev, "is in use") + shell.RunVerbose([]string{"parted", me.currentDev, "print"}) + }) + + grid.NextRow() + grid.NewButton("doDrives()", func() { doDrives() }) - grid.NewButton("doDrives2()", func() { - doDrives2() - }) - - grid.NewButton("partition drives", func() { - log.Info("something") - }) - - grid.NextRow() - - grid.NewButton("ConfigSave()", func() { - log.Info("todo: make code for this") - }) + doDrives2() } diff --git a/main.go b/main.go index 1a5be65..3e6acdf 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,6 @@ package main import ( "debug/buildinfo" "embed" - "fmt" "os" "os/exec" "path/filepath" @@ -33,6 +32,14 @@ func main() { gui.InitArg() me.pp = arg.MustParse(&argv) + // check if the binary is being called to test + // if the plugin can actually loaded. This is a hack + // around needing a Test() plugin load function in GO + if gui.IsGoPluginTestHack() { + gui.CheckPlugin() + os.Exit(0) + } + if argv.Bash { argv.doBash() os.Exit(0) @@ -42,9 +49,6 @@ func main() { os.Exit(0) } - // checkPlug("../../../toolkits/gocui/gocui.so") - // checkPlug("/usr/lib/go-gui-toolkits/gocui.v0.22.46.so") - /* if argv.Drives != nil { doDrives() @@ -52,9 +56,6 @@ func main() { } */ - // doDrives() - // okExit("everything compiled") - go listenForBlockEvents() doGui() okExit("everything compiled") @@ -117,7 +118,7 @@ func dumpDebug() { func checkPlug(pluginPath string) *plugin.Plugin { if err := checkPluginViaSubprocess(pluginPath); err != nil { - fmt.Printf("Plugin check failed: %v\n", err) + log.Printf("Plugin check failed: %v\n", err) return nil } @@ -133,11 +134,11 @@ func checkPlug(pluginPath string) *plugin.Plugin { func checkPluginViaSubprocess(path string) error { exe, err := os.Executable() if err != nil { - return fmt.Errorf("failed to get executable path: %w", err) + return log.Errorf("failed to get executable path: %w", err) } resolved, err := filepath.EvalSymlinks(exe) if err != nil { - return fmt.Errorf("failed to resolve executable symlink: %w", err) + return log.Errorf("failed to resolve executable symlink: %w", err) } cmd := exec.Command(resolved, "--gui-check-plugin", path) diff --git a/plugincheck/check.go b/plugincheck/check.go deleted file mode 100644 index 8d3b683..0000000 --- a/plugincheck/check.go +++ /dev/null @@ -1,47 +0,0 @@ -package plugincheck - -import ( - "debug/buildinfo" - "errors" - "fmt" - "runtime/debug" -) - -// CheckPluginCompatibility verifies that the plugin .so file was built -// with the same Go version and dependency versions as the host binary. -func CheckPluginCompatibility(pluginPath string) error { - pluginInfo, err := buildinfo.ReadFile(pluginPath) - if err != nil { - return fmt.Errorf("failed to read plugin build info: %w", err) - } - - mainInfo, ok := debug.ReadBuildInfo() - if !ok { - return errors.New("failed to read main binary build info") - } - - if pluginInfo.GoVersion != mainInfo.GoVersion { - return fmt.Errorf("Go version mismatch: plugin=%s, host=%s", - pluginInfo.GoVersion, mainInfo.GoVersion) - } - - // Create a map of main binary dependencies for quick lookup - hostDeps := make(map[string]string) - for _, dep := range mainInfo.Deps { - hostDeps[dep.Path] = dep.Version - } - - // Compare plugin dependencies - for _, dep := range pluginInfo.Deps { - hostVer, ok := hostDeps[dep.Path] - if !ok { - return fmt.Errorf("dependency %s not found in host binary", dep.Path) - } - if dep.Version != hostVer { - return fmt.Errorf("dependency version mismatch for %s: plugin=%s, host=%s", - dep.Path, dep.Version, hostVer) - } - } - - return nil -} diff --git a/resources/gocui.so b/resources/gocui.so deleted file mode 100644 index df8357e..0000000 Binary files a/resources/gocui.so and /dev/null differ diff --git a/structs.go b/structs.go index d76a1ff..2fb0554 100644 --- a/structs.go +++ b/structs.go @@ -12,7 +12,9 @@ var me *autoType // this app's variables type autoType struct { - pp *arg.Parser // go-arg preprocessor - myGui *gui.Node // the gui toolkit handle - dd *gui.Node // the drives dropdown list + pp *arg.Parser // go-arg preprocessor + myGui *gui.Node // the gui toolkit handle + dd *gui.Node // the drives dropdown list + parted *gui.Node // the current drive to run parted on + currentDev string // the current dev entry to work on } diff --git a/watchForNewDrives.go b/watchForNewDrives.go index 78b2954..3f50707 100644 --- a/watchForNewDrives.go +++ b/watchForNewDrives.go @@ -1,8 +1,9 @@ package main import ( - "log" "syscall" + + "go.wit.com/log" ) /* @@ -43,7 +44,9 @@ func listenForBlockEvents() { msg := parseUevent(buf[:n]) if msg["SUBSYSTEM"] == "block" && msg["ACTION"] == "add" { log.Printf("New block device added: %s\n", msg["DEVNAME"]) + me.dd.AddText("/dev/" + msg["DEVNAME"] + " new") } + log.Printf("New syscall.NETLINK_KOBJECT_UEVENT: %v\n", msg) } }