// NewSite creates a new hugo site and initializes a structured Hugo directory. func NewSite(cmd *cobra.Command, args []string) { if len(args) < 1 { cmd.Usage() jww.FATAL.Fatalln("path needs to be provided") } createpath, err := filepath.Abs(filepath.Clean(args[0])) if err != nil { cmd.Usage() jww.FATAL.Fatalln(err) } if x, _ := helpers.Exists(createpath, hugofs.SourceFs); x { y, _ := helpers.IsDir(createpath, hugofs.SourceFs) if z, _ := helpers.IsEmpty(createpath, hugofs.SourceFs); y && z { jww.INFO.Println(createpath, "already exists and is empty") } else { jww.FATAL.Fatalln(createpath, "already exists and is not empty") } } mkdir(createpath, "layouts") mkdir(createpath, "content") mkdir(createpath, "archetypes") mkdir(createpath, "static") mkdir(createpath, "data") createConfig(createpath, configFormat) }
// TODO: Consider calling doNewSite() instead? func createSiteFromJekyll(jekyllRoot, targetDir string, force bool) error { fs := hugofs.Source() if exists, _ := helpers.Exists(targetDir, fs); exists { if isDir, _ := helpers.IsDir(targetDir, fs); !isDir { return errors.New("Target path \"" + targetDir + "\" already exists but not a directory") } isEmpty, _ := helpers.IsEmpty(targetDir, fs) if !isEmpty && !force { return errors.New("Target path \"" + targetDir + "\" already exists and is not empty") } } jekyllConfig := loadJekyllConfig(jekyllRoot) // Crude test to make sure at least one of _drafts/ and _posts/ exists // and is not empty. hasPostsOrDrafts := false postsDir := filepath.Join(jekyllRoot, "_posts") draftsDir := filepath.Join(jekyllRoot, "_drafts") for _, d := range []string{postsDir, draftsDir} { if exists, _ := helpers.Exists(d, fs); exists { if isDir, _ := helpers.IsDir(d, fs); isDir { if isEmpty, _ := helpers.IsEmpty(d, fs); !isEmpty { hasPostsOrDrafts = true } } } } if !hasPostsOrDrafts { return errors.New("Your Jekyll root contains neither posts nor drafts, aborting.") } mkdir(targetDir, "layouts") mkdir(targetDir, "content") mkdir(targetDir, "archetypes") mkdir(targetDir, "static") mkdir(targetDir, "data") mkdir(targetDir, "themes") createConfigFromJekyll(targetDir, "yaml", jekyllConfig) copyJekyllFilesAndFolders(jekyllRoot, filepath.Join(targetDir, "static")) return nil }
func doNewSite(basepath string, force bool) error { dirs := []string{ filepath.Join(basepath, "layouts"), filepath.Join(basepath, "content"), filepath.Join(basepath, "archetypes"), filepath.Join(basepath, "static"), filepath.Join(basepath, "data"), filepath.Join(basepath, "themes"), } if exists, _ := helpers.Exists(basepath, hugofs.Source()); exists { if isDir, _ := helpers.IsDir(basepath, hugofs.Source()); !isDir { return errors.New(basepath + " already exists but not a directory") } isEmpty, _ := helpers.IsEmpty(basepath, hugofs.Source()) switch { case !isEmpty && !force: return errors.New(basepath + " already exists and is not empty") case !isEmpty && force: all := append(dirs, filepath.Join(basepath, "config."+configFormat)) for _, path := range all { if exists, _ := helpers.Exists(path, hugofs.Source()); exists { return errors.New(path + " already exists") } } } } for _, dir := range dirs { hugofs.Source().MkdirAll(dir, 0777) } createConfig(basepath, configFormat) jww.FEEDBACK.Printf("Congratulations! Your new Hugo site is created in %q.\n\n", basepath) jww.FEEDBACK.Println(`Just a few more steps and you're ready to go: 1. Download a theme into the same-named folder. Choose a theme from https://themes.gohugo.io or create your own with the "hugo new theme <THEMENAME>" command 2. Perhaps you want to add some content. You can add single files with "hugo new <SECTIONNAME>/<FILENAME>.<FORMAT>" 3. Start the built-in live server via "hugo server" For more information read the documentation at https://gohugo.io.`) return nil }
func doNewSite(basepath string, force bool) error { dirs := []string{ filepath.Join(basepath, "layouts"), filepath.Join(basepath, "content"), filepath.Join(basepath, "archetypes"), filepath.Join(basepath, "static"), filepath.Join(basepath, "data"), filepath.Join(basepath, "themes"), } if exists, _ := helpers.Exists(basepath, hugofs.Source()); exists { if isDir, _ := helpers.IsDir(basepath, hugofs.Source()); !isDir { return errors.New(basepath + " already exists but not a directory") } isEmpty, _ := helpers.IsEmpty(basepath, hugofs.Source()) switch { case !isEmpty && !force: return errors.New(basepath + " already exists and is not empty") case !isEmpty && force: all := append(dirs, filepath.Join(basepath, "config."+configFormat)) for _, path := range all { if exists, _ := helpers.Exists(path, hugofs.Source()); exists { return errors.New(path + " already exists") } } } } for _, dir := range dirs { hugofs.Source().MkdirAll(dir, 0777) } createConfig(basepath, configFormat) jww.FEEDBACK.Printf("Congratulations! Your new Hugo site is created in %s.\n\n", basepath) jww.FEEDBACK.Println(nextStepsText()) return nil }
func doNewSite(basepath string, force bool) error { dirs := []string{ filepath.Join(basepath, "layouts"), filepath.Join(basepath, "content"), filepath.Join(basepath, "archetypes"), filepath.Join(basepath, "static"), filepath.Join(basepath, "data"), filepath.Join(basepath, "themes"), } if exists, _ := helpers.Exists(basepath, hugofs.SourceFs); exists { if isDir, _ := helpers.IsDir(basepath, hugofs.SourceFs); !isDir { return errors.New(basepath + " already exists but not a directory") } isEmpty, _ := helpers.IsEmpty(basepath, hugofs.SourceFs) switch { case !isEmpty && !force: return errors.New(basepath + " already exists and is not empty") case !isEmpty && force: all := append(dirs, filepath.Join(basepath, "config."+configFormat)) for _, path := range all { if exists, _ := helpers.Exists(path, hugofs.SourceFs); exists { return errors.New(path + " already exists") } } } } for _, dir := range dirs { hugofs.SourceFs.MkdirAll(dir, 0777) } createConfig(basepath, configFormat) return nil }