diff options
| author | Paul Buetow <paul@buetow.org> | 2025-06-23 17:24:20 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-06-23 17:24:20 +0300 |
| commit | 60691a6fb610cb7f7290d6ab3a26bc74f95af611 (patch) | |
| tree | 8c6fb5cc4f3907c14bbc6258ed8eac85041acf05 /cmd | |
| parent | 97e0151ba6a260195ced76ab69d3e3bd58ba68fc (diff) | |
Add configuration file support with organization list
- Create config package with JSON parsing support
- Define Organization struct with host and name
- Add config file auto-detection in common locations
- Add --config/-c flag for custom config path
- Add --list-orgs flag to display configured organizations
- Create example configuration file
- Add comprehensive .gitignore
Configuration supports multiple git organizations for future sync functionality.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/gitsyncer/main.go | 76 |
1 files changed, 73 insertions, 3 deletions
diff --git a/cmd/gitsyncer/main.go b/cmd/gitsyncer/main.go index 3a38d32..d859747 100644 --- a/cmd/gitsyncer/main.go +++ b/cmd/gitsyncer/main.go @@ -3,23 +3,93 @@ package main import ( "flag" "fmt" + "log" "os" + "path/filepath" + "github.com/paul/gitsyncer/internal/config" "github.com/paul/gitsyncer/internal/version" ) func main() { - var versionFlag bool + var ( + versionFlag bool + configPath string + listOrgs bool + ) + + // Define command line flags flag.BoolVar(&versionFlag, "version", false, "print version information") flag.BoolVar(&versionFlag, "v", false, "print version information (short)") + flag.StringVar(&configPath, "config", "", "path to configuration file") + flag.StringVar(&configPath, "c", "", "path to configuration file (short)") + flag.BoolVar(&listOrgs, "list-orgs", false, "list configured organizations") flag.Parse() + // Handle version flag if versionFlag { fmt.Println(version.GetVersion()) os.Exit(0) } + // Determine config file path + if configPath == "" { + // Try default locations + home, err := os.UserHomeDir() + if err != nil { + log.Fatal("Failed to get home directory:", err) + } + + // Check common config locations + configLocations := []string{ + filepath.Join(".", "gitsyncer.json"), + filepath.Join(home, ".config", "gitsyncer", "config.json"), + filepath.Join(home, ".gitsyncer.json"), + } + + for _, loc := range configLocations { + if _, err := os.Stat(loc); err == nil { + configPath = loc + break + } + } + + if configPath == "" { + fmt.Println("No configuration file found. Please create one of:") + for _, loc := range configLocations { + fmt.Printf(" - %s\n", loc) + } + fmt.Println("\nOr specify a config file with --config flag") + fmt.Println("\nExample configuration:") + fmt.Println(`{ + "organizations": [ + {"host": "git@github.com", "name": "myorg"}, + {"host": "git@codeberg.org", "name": "myorg"} + ] +}`) + os.Exit(1) + } + } + + // Load configuration + cfg, err := config.Load(configPath) + if err != nil { + log.Fatal("Failed to load configuration:", err) + } + + fmt.Printf("Loaded configuration from: %s\n", configPath) + + // Handle list organizations flag + if listOrgs { + fmt.Println("\nConfigured organizations:") + for _, org := range cfg.Organizations { + fmt.Printf(" - %s\n", org.GetGitURL()) + } + os.Exit(0) + } + // TODO: Implement main gitsyncer functionality - fmt.Println("gitsyncer - Git repository synchronization tool") - fmt.Println("Use --version to display version information") + fmt.Println("\ngitsyncer - Git repository synchronization tool") + fmt.Printf("Configured with %d organization(s)\n", len(cfg.Organizations)) + fmt.Println("\nUse --list-orgs to display configured organizations") }
\ No newline at end of file |
