in commands/project/create/project_create.go [62:213]
func runCreateProject(cmd *cobra.Command, args []string, f *cmdutils.Factory) error {
var (
projectPath string
visiblity gitlab.VisibilityValue
err error
isPath bool
namespaceID int
namespace string
)
c := f.IO.Color()
defaultBranch, err := cmd.Flags().GetString("defaultBranch")
if err != nil {
return err
}
remoteName, err := cmd.Flags().GetString("remoteName")
if err != nil {
return err
}
skipGitInit, _ := cmd.Flags().GetBool("skipGitInit")
if !skipGitInit && f.IO.PromptEnabled() {
err = initGit(defaultBranch)
if err != nil {
return err
}
}
apiClient, err := f.HttpClient()
if err != nil {
return err
}
if len(args) == 1 {
var host string
host, namespace, projectPath = projectPathFromArgs(args)
if host != "" {
cfg, _ := f.Config()
client, err := api.NewClientWithCfg(host, cfg, false)
if err != nil {
return err
}
apiClient = client.Lab()
}
user, err := api.CurrentUser(apiClient)
if err != nil {
return err
}
if user.Username == namespace {
namespace = ""
}
} else {
projectPath, err = git.ToplevelDir()
projectPath = path.Base(projectPath)
if err != nil {
return err
}
isPath = true
}
group, err := cmd.Flags().GetString("group")
if err != nil {
return fmt.Errorf("could not parse group flag: %v", err)
}
if group != "" {
namespace = group
}
if namespace != "" {
group, err := api.GetGroup(apiClient, namespace)
if err != nil {
return fmt.Errorf("could not find group or namespace %s: %v", namespace, err)
}
namespaceID = group.ID
}
name, _ := cmd.Flags().GetString("name")
if projectPath == "" && name == "" {
fmt.Println("ERROR: path or name required to create a project.")
return cmd.Usage()
} else if name == "" {
name = projectPath
}
description, _ := cmd.Flags().GetString("description")
if internal, _ := cmd.Flags().GetBool("internal"); internal {
visiblity = gitlab.InternalVisibility
} else if private, _ := cmd.Flags().GetBool("private"); private {
visiblity = gitlab.PrivateVisibility
} else if public, _ := cmd.Flags().GetBool("public"); public {
visiblity = gitlab.PublicVisibility
}
tags, _ := cmd.Flags().GetStringArray("tag")
readme, _ := cmd.Flags().GetBool("readme")
opts := &gitlab.CreateProjectOptions{
Name: gitlab.Ptr(name),
Path: gitlab.Ptr(projectPath),
Description: gitlab.Ptr(description),
DefaultBranch: gitlab.Ptr(defaultBranch),
TagList: &tags,
InitializeWithReadme: gitlab.Ptr(readme),
}
if visiblity != "" {
opts.Visibility = &visiblity
}
if namespaceID != 0 {
opts.NamespaceID = &namespaceID
}
project, err := api.CreateProject(apiClient, opts)
greenCheck := c.Green("✓")
if err == nil {
fmt.Fprintf(f.IO.StdOut, "%s Created repository %s on GitLab: %s\n", greenCheck, project.NameWithNamespace, project.WebURL)
if isPath {
cfg, _ := f.Config()
webURL, _ := url.Parse(project.WebURL)
protocol, _ := cfg.Get(webURL.Host, "git_protocol")
remote := glrepo.RemoteURL(project, protocol)
_, err = git.AddRemote(remoteName, remote)
if err != nil {
return err
}
fmt.Fprintf(f.IO.StdOut, "%s Added remote %s\n", greenCheck, remote)
} else if f.IO.PromptEnabled() {
var doSetup bool
err := prompt.Confirm(&doSetup, fmt.Sprintf("Create a local project directory for %s?", project.NameWithNamespace), true)
if err != nil {
return err
}
if doSetup {
projectPath := project.Path
err = initialiseRepo(projectPath, project.SSHURLToRepo)
if err != nil {
return err
}
fmt.Fprintf(f.IO.StdOut, "%s Initialized repository in './%s/'\n", greenCheck, projectPath)
}
}
} else {
return fmt.Errorf("error creating project: %v", err)
}
return err
}