git-lfs/commands/command_install.go
risk danger olson a12cdc889f RegisterCommand() can no longer disable commands
the config is available at init(), so isCommandEnabled() checks can be
pulled out of the RegisterCommand() callback, simplifying its signature.
2016-09-01 10:09:38 -06:00

64 lines
1.8 KiB
Go

package commands
import (
"os"
"github.com/github/git-lfs/lfs"
"github.com/spf13/cobra"
)
var (
forceInstall = false
localInstall = false
systemInstall = false
skipSmudgeInstall = false
)
func installCommand(cmd *cobra.Command, args []string) {
requireGitVersion()
if localInstall {
requireInRepo()
}
if systemInstall && os.Geteuid() != 0 {
Print("WARNING: current user is not root/admin, system install is likely to fail.")
}
if localInstall && systemInstall {
Exit("Only one of --local and --system options can be specified.")
}
opt := lfs.InstallOptions{Force: forceInstall, Local: localInstall, System: systemInstall}
if skipSmudgeInstall {
// assume the user is changing their smudge mode, so enable force implicitly
opt.Force = true
}
if err := lfs.InstallFilters(opt, skipSmudgeInstall); err != nil {
Error(err.Error())
Exit("Run `git lfs install --force` to reset git config.")
}
if localInstall || lfs.InRepo() {
installHooksCommand(cmd, args)
}
Print("Git LFS initialized.")
}
func installHooksCommand(cmd *cobra.Command, args []string) {
updateForce = forceInstall
updateCommand(cmd, args)
}
func init() {
RegisterCommand("install", installCommand, func(cmd *cobra.Command) {
cmd.Flags().BoolVarP(&forceInstall, "force", "f", false, "Set the Git LFS global config, overwriting previous values.")
cmd.Flags().BoolVarP(&localInstall, "local", "l", false, "Set the Git LFS config for the local Git repository only.")
cmd.Flags().BoolVarP(&systemInstall, "system", "", false, "Set the Git LFS config in system-wide scope.")
cmd.Flags().BoolVarP(&skipSmudgeInstall, "skip-smudge", "s", false, "Skip automatic downloading of objects on clone or pull.")
cmd.AddCommand(NewCommand("hooks", installHooksCommand))
})
}