Add TLS skip-verify endpoint options · Entire

Add TLS skip-verify endpoint options

fs.StringVar(&cfg.Target.Token, "target-token", envOr("GITSYNC_TARGET_TOKEN", ""), "target token/password")
fs.StringVar(&cfg.Source.Username, "source-username", envOr("GITSYNC_SOURCE_USERNAME", "git"), "source basic auth username")
fs.StringVar(&cfg.Target.Username, "target-username", envOr("GITSYNC_TARGET_USERNAME", "git"), "target basic auth username")
fs.BoolVar(&cfg.Source.SkipTLSVerify, "source-insecure-skip-tls-verify", envBool("GITSYNC_SOURCE_INSECURE_SKIP_TLS_VERIFY"), "skip TLS certificate verification for the source")
fs.BoolVar(&cfg.Target.SkipTLSVerify, "target-insecure-skip-tls-verify", envBool("GITSYNC_TARGET_INSECURE_SKIP_TLS_VERIFY"), "skip TLS certificate verification for the target")

fs.StringVar(&cfg.Source.BearerToken, "source-bearer-token", envOr("GITSYNC_SOURCE_BEARER_TOKEN", ""), "source bearer token")
fs.StringVar(&cfg.Target.BearerToken, "target-bearer-token", envOr("GITSYNC_TARGET_BEARER_TOKEN", ""), "target bearer token")
func envBool(key string) bool {
    value := strings.TrimSpace(strings.ToLower(os.Getenv(key)))
    return value == "1" || value == "true" || value == "yes" || value == "on"
}

func usageError(message string) error {
    usage := "usage:\n  git-sync sync [flags] <source-url> <target-url>\n  git-sync plan [flags] <source-url> <target-url>\n  git-sync bootstrap [flags] <source-url> <target-url>\n  git-sync probe [flags] <source-url> [target-url]\n  git-sync fetch [flags] <source-url>\n\nsync/plan flags:\n  --branch main,dev\n  --map main:stable\n  --tags\n  --force\n  --prune\n  --stats\n  --measure-memory\n  --json\n  --protocol auto|v1|v2\n  --source-token ...\n  --target-token ...\n  --source-username git\n  --target-username git\n  --source-bearer-token ...\n  --target-bearer-token ...\n\nbootstrap flags:\n  --branch main,dev\n  --map main:stable\n  --tags\n  --max-pack-bytes 104857600\n  --batch-max-pack-bytes 1073741824\n  --stats\n  --measure-memory\n  --json\n  --protocol auto|v1|v2\n  --source-token ...\n  --target-token ...\n  --source-username git\n  --target-username git\n  --source-bearer-token ...\n  --target-bearer-token ...\n\nprobe flags:\n  --tags\n  --stats\n  --measure-memory\n  --json\n  --protocol auto|v1|v2\n  --source-token ...\n  --source-username git\n  --source-bearer-token ...\n  --target-token ...\n  --target-username git\n  --target-bearer-token ...\n\nfetch flags:\n  --branch main,dev\n  --tags\n  --stats\n  --measure-memory\n  --json\n  --protocol auto|v1|v2\n  --have-ref main\n  --have <hash>\n\n"
    if message == "" {
        return errors.New(strings.TrimSpace(usage))
    }
}

Main Configuration Structs

type Endpoint struct {
    URL         string
    Username    string
    Token       string
    BearerToken string
    SkipTLSVerify bool
}

type Config struct {
    Source       Endpoint
    Target       Endpoint
    Branches     []string
    Mappings     []RefMapping
    IncludeTags  bool
    DryRun       bool
    Verbose      bool
    ShowStats    bool
    MeasureMemory bool
    Force        bool
    Prune        bool
    MaxPackBytes int64
    BatchMaxPackBytes int64
    ProtocolMode string
}

... // Other struct definitions

Sample Usage Functionality

func (r FetchResult) MarshalJSON() ([]byte, error) {
    type fetchResultJSON struct {
        SourceURL      string    `json:"source_url"`
        RequestedMode  string    `json:"requested_mode"`
        Protocol       string    `json:"protocol"`
        Wants          []RefInfo `json:"wants"`
        Haves          []string  `json:"haves"`
        FetchedObjects int       `json:"fetched_objects"`
        Stats          Stats     `json:"stats"`
    }
    ...
}

This cleaned content preserves the relevant sections and removes non-semantic elements while maintaining the structure in the original markdown.