// Define this so deferred functions get executed before exit. func realMain() (exitStatus int) { kbfsParams := libkbfs.AddFlags(flag.CommandLine) flag.Parse() if *version { fmt.Printf("%s\n", libkbfs.VersionString()) return 0 } if len(flag.Args()) < 1 { fmt.Print(getUsageStr()) return 1 } log := logger.NewWithCallDepth("", 1) config, err := libkbfs.Init(*kbfsParams, nil, log) if err != nil { printError("kbfs", err) return 1 } defer libkbfs.Shutdown() // TODO: Make the logging level WARNING instead of INFO, or // figure out some other way to log the full folder-branch // name for kbfsfuse but not for kbfs. cmd := flag.Arg(0) args := flag.Args()[1:] ctx := context.Background() switch cmd { case "stat": return stat(ctx, config, args) case "ls": return ls(ctx, config, args) case "mkdir": return mkdir(ctx, config, args) case "read": return read(ctx, config, args) case "write": return write(ctx, config, args) default: printError("kbfs", fmt.Errorf("unknown command '%s'", cmd)) return 1 } }
func start() *libfs.Error { kbfsParams := libkbfs.AddFlags(flag.CommandLine) platformParams := libfuse.AddPlatformFlags(flag.CommandLine) flag.Parse() if *version { fmt.Printf("%s\n", libkbfs.VersionString()) return nil } if len(flag.Args()) < 1 { fmt.Print(getUsageStr()) return libfs.InitError("no mount specified") } if len(flag.Args()) > 1 { fmt.Print(getUsageStr()) return libfs.InitError("extra arguments specified (flags go before the first argument)") } if kbfsParams.Debug { fuseLog := logger.NewWithCallDepth("FUSE", 1) fuseLog.Configure("", true, "") fuse.Debug = func(msg interface{}) { fuseLog.Debug("%s", msg) } } mountpoint := flag.Arg(0) var mounter libfuse.Mounter if *mountType == "force" { mounter = libfuse.NewForceMounter(mountpoint, *platformParams) } else { mounter = libfuse.NewDefaultMounter(mountpoint, *platformParams) } options := libfuse.StartOptions{ KbfsParams: *kbfsParams, RuntimeDir: *runtimeDir, Label: *label, } return libfuse.Start(mounter, options) }