Skip to content

Commit

Permalink
Add temp commit: I do not like this code.
Browse files Browse the repository at this point in the history
  • Loading branch information
telemachus committed Oct 23, 2024
1 parent aae258c commit c2647b4
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 26 deletions.
74 changes: 57 additions & 17 deletions cli/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import (
type App struct {
HomeDir string
ExitValue int
InitWanted bool
HelpWanted bool
PruneWanted bool
QuietWanted bool
VersionWanted bool
}
Expand All @@ -37,26 +37,22 @@ func NewApp() *App {
return &App{ExitValue: exitSuccess, HomeDir: homeDir}
}

// ParseFlags handles flags and options in my finicky way.
func (app *App) ParseFlags(args []string) (string, bool) {
// ParseGitmirror handles flags and options in my finicky way.
func (app *App) ParseGitmirror(args []string) (string, bool) {
if app.NoOp() {
return "", false
}
flags := flag.NewFlagSet("gitmirror", flag.ContinueOnError)
flags.SetOutput(io.Discard)
gitmirrorCmd := flag.NewFlagSet("gitmirror", flag.ContinueOnError)
gitmirrorCmd.SetOutput(io.Discard)
var configFile string
var configIsDefault bool
flags.BoolVar(&app.HelpWanted, "help", false, "")
flags.BoolVar(&app.HelpWanted, "h", false, "")
flags.BoolVar(&app.InitWanted, "init", false, "")
flags.BoolVar(&app.InitWanted, "i", false, "")
flags.BoolVar(&app.QuietWanted, "quiet", false, "")
flags.BoolVar(&app.QuietWanted, "q", false, "")
flags.BoolVar(&app.VersionWanted, "version", false, "")
flags.BoolVar(&app.VersionWanted, "v", false, "")
flags.StringVar(&configFile, "config", "", "")
flags.StringVar(&configFile, "c", "", "")
err := flags.Parse(args)
gitmirrorCmd.BoolVar(&app.HelpWanted, "help", false, "")
gitmirrorCmd.BoolVar(&app.HelpWanted, "h", false, "")
gitmirrorCmd.BoolVar(&app.VersionWanted, "version", false, "")
gitmirrorCmd.BoolVar(&app.VersionWanted, "v", false, "")
gitmirrorCmd.StringVar(&configFile, "config", "", "")
gitmirrorCmd.StringVar(&configFile, "c", "", "")
err := gitmirrorCmd.Parse(args)
switch {
// This must precede all other checks.
case err != nil:
Expand All @@ -73,6 +69,50 @@ func (app *App) ParseFlags(args []string) (string, bool) {
return configFile, configIsDefault
}

// ParseInitialize checks the flags for the initialize|init command.
func (app *App) ParseInitialize(args []string) {
if app.NoOp() {
return
}
initializeCmd := flag.NewFlagSet("initialize", flag.ContinueOnError)
initializeCmd.SetOutput(io.Discard)
initializeCmd.BoolVar(&app.QuietWanted, "quiet", false, "")
initializeCmd.BoolVar(&app.QuietWanted, "q", false, "")
err := initializeCmd.Parse(args)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %s\n%s\n", appName, err, appUsage)
app.ExitValue = exitFailure
}
// After parsing is over, there should not be any extra arguments.
if len(initializeCmd.Args()) > 0 {
fmt.Fprintln(os.Stderr, appUsage)
app.ExitValue = exitFailure
}
}

// ParseUpdate checks the flags for the update command.
func (app *App) ParseUpdate(args []string) {
if app.NoOp() {
return
}
updateCmd := flag.NewFlagSet("update", flag.ContinueOnError)
updateCmd.SetOutput(io.Discard)
updateCmd.BoolVar(&app.QuietWanted, "quiet", false, "")
updateCmd.BoolVar(&app.QuietWanted, "q", false, "")
updateCmd.BoolVar(&app.PruneWanted, "prune", false, "")
updateCmd.BoolVar(&app.PruneWanted, "p", false, "")
err := updateCmd.Parse(args)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %s\n%s\n", appName, err, appUsage)
app.ExitValue = exitFailure
}
// After parsing is over, there should not be any extra arguments.
if len(updateCmd.Args()) > 0 {
fmt.Fprintln(os.Stderr, appUsage)
app.ExitValue = exitFailure
}
}

// Repo stores information about a git repository.
type Repo struct {
URL string
Expand Down Expand Up @@ -157,7 +197,7 @@ func (app *App) initialize(repo Repo, ch chan<- Publisher) {

// Update runs git repote update on a group of repositories.
func (app *App) Update(repos []Repo) {
if app.InitWanted || app.NoOp() {
if app.NoOp() {
return
}
ch := make(chan Publisher)
Expand Down
47 changes: 38 additions & 9 deletions cli/run.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
// Package cli organizes and implements a command line program.
package cli

import (
"fmt"
"os"
)

const (
appName = "gitmirror"
appVersion = "v0.1.0"
appUsage = `usage: gitmirror [-config FILENAME]
appUsage = `usage: gitmirror [-config FILENAME] <command> [<args>]
options:
option:
-config/-c FILENAME Specify a configuration file (default = ~/.gitmirror.json)
-init/-i Clone repositories for later mirroring
-quiet/-q Suppress output unless an error occurs
-help/-h Show this message
-version/-v Show version`
commands:
initialize|init Clone repositories for later mirroring
update Update repositories
help <command> Get more information about a command
version Show version`
defaultConfig = ".gitmirror.json"
defaultStorage = ".local/share/gitmirror"
exitSuccess = 0
Expand All @@ -21,11 +28,33 @@ options:
// Run creates an App, performs the App's tasks, and returns an exit value.
func Run(args []string) int {
app := NewApp()
configFile, configIsDefault := app.ParseFlags(args)
// TODO: this is foul.
// Also, I should return the command args that remain.
configFile, configIsDefault := app.ParseGitmirror(args)
if len(args) < 1 && !(app.HelpWanted || app.VersionWanted) {
fmt.Fprintln(os.Stderr, appUsage)
return exitFailure
}
repos := app.Unmarshal(configFile, configIsDefault)
if app.InitWanted {
switch args[0] {
case "help":
// TODO: parse help for a command to show.
// if len(args) != 3 { blow up }
// switch args[1] { show help for initialize or update }
fmt.Fprintln(os.Stdout, appUsage)
app.HelpWanted = true
case "version":
fmt.Fprintln(os.Stdout, appVersion)
app.VersionWanted = true
case "initialize", "init":
app.ParseInitialize(args[1:])
app.Initialize(repos)
case "update":
app.ParseUpdate(args[1:])
app.Update(repos)
default:
fmt.Fprintln(os.Stderr, appUsage)
app.ExitValue = exitFailure
}
app.Update(repos)
return app.ExitValue
}

0 comments on commit c2647b4

Please sign in to comment.