eclipse/cmd/eclipse-gitcache/main.go

87 lines
2.6 KiB
Go
Raw Normal View History

2024-01-11 20:36:03 +00:00
// Copyright (C) 2024 Umorpha Systems
// SPDX-License-Identifier: AGPL-3.0-or-later
package main
import (
"context"
"fmt"
"os"
"time"
"github.com/datawire/ocibuild/pkg/cliutil"
"github.com/spf13/cobra"
"git.mothstuff.lol/lukeshu/eclipse/lib/gitcache"
)
func main() {
argparser := &cobra.Command{
Use: os.Args[0] + " {[flags]|SUBCOMMAND...}",
Short: "Directly interact with a gitcache",
Args: cliutil.WrapPositionalArgs(cliutil.OnlySubcommands),
RunE: cliutil.RunSubcommands,
SilenceErrors: true, // we'll handle this ourselves after .ExecuteContext()
SilenceUsage: true, // FlagErrorFunc will handle this
CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: true,
},
}
argparser.SetFlagErrorFunc(cliutil.FlagErrorFunc)
argparser.SetHelpTemplate(cliutil.HelpTemplate)
var cache gitcache.Cache
argparser.PersistentFlags().StringVarP(&cache.Dir, "cache-dir", "d", "/var/cache/gitcache.git",
"Where to store cached data")
2024-01-11 20:45:23 +00:00
argparser.PersistentFlags().DurationVar(&cache.MinPeriod, "min-interval", 5*time.Second,
2024-01-11 20:36:03 +00:00
"Do not fetch from the same remote more often than this")
argparser.AddCommand(&cobra.Command{
2024-01-12 19:49:26 +00:00
Use: "fetch [flags] URL",
2024-01-11 20:36:03 +00:00
Short: "Update the cache's store of the repository at URL",
Args: cliutil.WrapPositionalArgs(cobra.ExactArgs(1)),
RunE: func(_ *cobra.Command, args []string) error {
2024-01-11 21:46:13 +00:00
return cache.Fetch(os.Stderr, args[0])
2024-01-11 20:36:03 +00:00
},
})
argparser.AddCommand(&cobra.Command{
2024-01-12 19:49:26 +00:00
Use: "rev-parse [flags] URL REV",
2024-01-11 20:36:03 +00:00
Short: "Resolve REF to an object ID within the repository at URL",
Args: cliutil.WrapPositionalArgs(cobra.ExactArgs(2)),
RunE: func(_ *cobra.Command, args []string) error {
2024-01-11 21:46:13 +00:00
objID, err := cache.RevParse(os.Stderr, args[0], args[1])
2024-01-11 20:36:03 +00:00
if err != nil {
return err
}
fmt.Println(objID)
return nil
},
})
argparser.AddCommand(&cobra.Command{
2024-01-12 19:49:26 +00:00
Use: "clone [flags] URL DIR [-- GIT_CLONE_FLAGS...]",
2024-01-11 20:36:03 +00:00
Short: "Clone the repository at URL from the cache to DIR",
Args: cliutil.WrapPositionalArgs(cobra.MinimumNArgs(2)),
RunE: func(cmd *cobra.Command, args []string) error {
2024-01-11 21:46:13 +00:00
return cache.Clone(os.Stderr, args[0], args[1], args[2:]...)
2024-01-11 20:36:03 +00:00
},
})
2024-01-12 19:50:52 +00:00
argparser.AddCommand(&cobra.Command{
Use: "gc [flags] [-- GIT_GC_FLAGS...]",
Short: "Run garbage collection",
Args: cliutil.WrapPositionalArgs(cobra.NoArgs),
RunE: func(cmd *cobra.Command, args []string) error {
return cache.GC(os.Stderr, args...)
},
})
2024-01-11 20:36:03 +00:00
ctx := context.Background()
if err := argparser.ExecuteContext(ctx); err != nil {
fmt.Fprintf(os.Stderr, "%v: error: %v\n", argparser.CommandPath(), err)
os.Exit(1)
}
}