Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-04-09 21:37:17 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-04-11 10:48:56 +0300
commit2a2c9838671b5401331d20f8c72e2b934fe34e8d (patch)
tree178157d2cbf06b7360ea8add593213d2da76d020 /commands
parent15b1e269ade91ddc6a74c552bc61b0c5e527d268 (diff)
commands: Make the import commands non-global
See #4598
Diffstat (limited to 'commands')
-rw-r--r--commands/hugo.go2
-rw-r--r--commands/import_jekyll.go72
2 files changed, 45 insertions, 29 deletions
diff --git a/commands/hugo.go b/commands/hugo.go
index 3a45c3046..6e3dc488d 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -202,7 +202,7 @@ func AddCommands() {
HugoCmd.AddCommand(newConvertCmd().getCommand())
HugoCmd.AddCommand(newNewCmd().getCommand())
HugoCmd.AddCommand(listCmd)
- HugoCmd.AddCommand(importCmd)
+ HugoCmd.AddCommand(newImportCmd().getCommand())
HugoCmd.AddCommand(genCmd)
genCmd.AddCommand(genautocompleteCmd)
diff --git a/commands/import_jekyll.go b/commands/import_jekyll.go
index 8c9c4d093..df36951c9 100644
--- a/commands/import_jekyll.go
+++ b/commands/import_jekyll.go
@@ -35,33 +35,49 @@ import (
jww "github.com/spf13/jwalterweatherman"
)
-func init() {
- importCmd.AddCommand(importJekyllCmd)
+var _ cmder = (*newThemeCmd)(nil)
+
+type importCmd struct {
+ cmd *cobra.Command
+}
+
+func (c *importCmd) getCommand() *cobra.Command {
+ return c.cmd
}
-var importCmd = &cobra.Command{
- Use: "import",
- Short: "Import your site from others.",
- Long: `Import your site from other web site generators like Jekyll.
+func newImportCmd() *importCmd {
+ cc := &importCmd{}
+
+ cc.cmd = &cobra.Command{
+ Use: "import",
+ Short: "Import your site from others.",
+ Long: `Import your site from other web site generators like Jekyll.
Import requires a subcommand, e.g. ` + "`hugo import jekyll jekyll_root_path target_path`.",
- RunE: nil,
-}
+ RunE: nil,
+ }
-var importJekyllCmd = &cobra.Command{
- Use: "jekyll",
- Short: "hugo import from Jekyll",
- Long: `hugo import from Jekyll.
+ importJekyllCmd := &cobra.Command{
+ Use: "jekyll",
+ Short: "hugo import from Jekyll",
+ Long: `hugo import from Jekyll.
Import from Jekyll requires two paths, e.g. ` + "`hugo import jekyll jekyll_root_path target_path`.",
- RunE: importFromJekyll,
+ RunE: cc.importFromJekyll,
+ }
+
+ importJekyllCmd.Flags().Bool("force", false, "allow import into non-empty target directory")
+
+ cc.cmd.AddCommand(importJekyllCmd)
+
+ return cc
+
}
func init() {
- importJekyllCmd.Flags().Bool("force", false, "allow import into non-empty target directory")
}
-func importFromJekyll(cmd *cobra.Command, args []string) error {
+func (i *importCmd) importFromJekyll(cmd *cobra.Command, args []string) error {
if len(args) < 2 {
return newUserError(`Import from Jekyll requires two paths, e.g. ` + "`hugo import jekyll jekyll_root_path target_path`.")
@@ -86,12 +102,12 @@ func importFromJekyll(cmd *cobra.Command, args []string) error {
forceImport, _ := cmd.Flags().GetBool("force")
fs := afero.NewOsFs()
- jekyllPostDirs, hasAnyPost := getJekyllDirInfo(fs, jekyllRoot)
+ jekyllPostDirs, hasAnyPost := i.getJekyllDirInfo(fs, jekyllRoot)
if !hasAnyPost {
return errors.New("Your Jekyll root contains neither posts nor drafts, aborting.")
}
- site, err := createSiteFromJekyll(jekyllRoot, targetDir, jekyllPostDirs, forceImport)
+ site, err := i.createSiteFromJekyll(jekyllRoot, targetDir, jekyllPostDirs, forceImport)
if err != nil {
return newUserError(err)
@@ -147,14 +163,14 @@ func importFromJekyll(cmd *cobra.Command, args []string) error {
return nil
}
-func getJekyllDirInfo(fs afero.Fs, jekyllRoot string) (map[string]bool, bool) {
+func (i *importCmd) getJekyllDirInfo(fs afero.Fs, jekyllRoot string) (map[string]bool, bool) {
postDirs := make(map[string]bool)
hasAnyPost := false
if entries, err := ioutil.ReadDir(jekyllRoot); err == nil {
for _, entry := range entries {
if entry.IsDir() {
subDir := filepath.Join(jekyllRoot, entry.Name())
- if isPostDir, hasAnyPostInDir := retrieveJekyllPostDir(fs, subDir); isPostDir {
+ if isPostDir, hasAnyPostInDir := i.retrieveJekyllPostDir(fs, subDir); isPostDir {
postDirs[entry.Name()] = hasAnyPostInDir
if hasAnyPostInDir {
hasAnyPost = true
@@ -166,7 +182,7 @@ func getJekyllDirInfo(fs afero.Fs, jekyllRoot string) (map[string]bool, bool) {
return postDirs, hasAnyPost
}
-func retrieveJekyllPostDir(fs afero.Fs, dir string) (bool, bool) {
+func (i *importCmd) retrieveJekyllPostDir(fs afero.Fs, dir string) (bool, bool) {
if strings.HasSuffix(dir, "_posts") || strings.HasSuffix(dir, "_drafts") {
isEmpty, _ := helpers.IsEmpty(dir, fs)
return true, !isEmpty
@@ -176,7 +192,7 @@ func retrieveJekyllPostDir(fs afero.Fs, dir string) (bool, bool) {
for _, entry := range entries {
if entry.IsDir() {
subDir := filepath.Join(dir, entry.Name())
- if isPostDir, hasAnyPost := retrieveJekyllPostDir(fs, subDir); isPostDir {
+ if isPostDir, hasAnyPost := i.retrieveJekyllPostDir(fs, subDir); isPostDir {
return isPostDir, hasAnyPost
}
}
@@ -186,7 +202,7 @@ func retrieveJekyllPostDir(fs afero.Fs, dir string) (bool, bool) {
return false, true
}
-func createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPostDirs map[string]bool, force bool) (*hugolib.Site, error) {
+func (i *importCmd) createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPostDirs map[string]bool, force bool) (*hugolib.Site, error) {
s, err := hugolib.NewSiteDefaultLang()
if err != nil {
return nil, err
@@ -205,7 +221,7 @@ func createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPostDirs map[strin
}
}
- jekyllConfig := loadJekyllConfig(fs, jekyllRoot)
+ jekyllConfig := i.loadJekyllConfig(fs, jekyllRoot)
mkdir(targetDir, "layouts")
mkdir(targetDir, "content")
@@ -214,14 +230,14 @@ func createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPostDirs map[strin
mkdir(targetDir, "data")
mkdir(targetDir, "themes")
- createConfigFromJekyll(fs, targetDir, "yaml", jekyllConfig)
+ i.createConfigFromJekyll(fs, targetDir, "yaml", jekyllConfig)
- copyJekyllFilesAndFolders(jekyllRoot, filepath.Join(targetDir, "static"), jekyllPostDirs)
+ i.copyJekyllFilesAndFolders(jekyllRoot, filepath.Join(targetDir, "static"), jekyllPostDirs)
return s, nil
}
-func loadJekyllConfig(fs afero.Fs, jekyllRoot string) map[string]interface{} {
+func (i *importCmd) loadJekyllConfig(fs afero.Fs, jekyllRoot string) map[string]interface{} {
path := filepath.Join(jekyllRoot, "_config.yml")
exists, err := helpers.Exists(path, fs)
@@ -253,7 +269,7 @@ func loadJekyllConfig(fs afero.Fs, jekyllRoot string) map[string]interface{} {
return c
}
-func createConfigFromJekyll(fs afero.Fs, inpath string, kind string, jekyllConfig map[string]interface{}) (err error) {
+func (i *importCmd) createConfigFromJekyll(fs afero.Fs, inpath string, kind string, jekyllConfig map[string]interface{}) (err error) {
title := "My New Hugo Site"
baseURL := "http://example.org/"
@@ -348,7 +364,7 @@ func copyDir(source string, dest string) error {
return nil
}
-func copyJekyllFilesAndFolders(jekyllRoot, dest string, jekyllPostDirs map[string]bool) (err error) {
+func (i *importCmd) copyJekyllFilesAndFolders(jekyllRoot, dest string, jekyllPostDirs map[string]bool) (err error) {
fi, err := os.Stat(jekyllRoot)
if err != nil {
return err