aboutsummaryrefslogtreecommitdiffhomepage
path: root/create
diff options
context:
space:
mode:
Diffstat (limited to 'create')
-rw-r--r--create/content.go8
-rw-r--r--create/content_test.go45
2 files changed, 41 insertions, 12 deletions
diff --git a/create/content.go b/create/content.go
index 5f05e25f9..0b9f27797 100644
--- a/create/content.go
+++ b/create/content.go
@@ -52,7 +52,7 @@ draft: true
// NewContent creates a new content file in h (or a full bundle if the archetype is a directory)
// in targetPath.
-func NewContent(h *hugolib.HugoSites, kind, targetPath string) error {
+func NewContent(h *hugolib.HugoSites, kind, targetPath string, force bool) error {
if h.BaseFs.Content.Dirs == nil {
return errors.New("no existing content directory configured for this project")
}
@@ -76,6 +76,7 @@ func NewContent(h *hugolib.HugoSites, kind, targetPath string) error {
kind: kind,
targetPath: targetPath,
+ force: force,
}
ext := paths.Ext(targetPath)
@@ -132,6 +133,7 @@ type contentBuilder struct {
kind string
isDir bool
dirMap archetypeMap
+ force bool
}
func (b *contentBuilder) buildDir() error {
@@ -145,7 +147,7 @@ func (b *contentBuilder) buildDir() error {
for _, fi := range b.dirMap.contentFiles {
targetFilename := filepath.Join(b.targetPath, strings.TrimPrefix(fi.Meta().Path, b.archetypeFilename))
- abs, err := b.cf.CreateContentPlaceHolder(targetFilename)
+ abs, err := b.cf.CreateContentPlaceHolder(targetFilename, b.force)
if err != nil {
return err
}
@@ -218,7 +220,7 @@ func (b *contentBuilder) buildDir() error {
}
func (b *contentBuilder) buildFile() (string, error) {
- contentPlaceholderAbsFilename, err := b.cf.CreateContentPlaceHolder(b.targetPath)
+ contentPlaceholderAbsFilename, err := b.cf.CreateContentPlaceHolder(b.targetPath, b.force)
if err != nil {
return "", err
}
diff --git a/create/content_test.go b/create/content_test.go
index 80a666093..fdfee6e68 100644
--- a/create/content_test.go
+++ b/create/content_test.go
@@ -82,7 +82,7 @@ func TestNewContentFromFile(t *testing.T) {
cfg, fs := newTestCfg(c, mm)
h, err := hugolib.NewHugoSites(deps.DepsCfg{Cfg: cfg, Fs: fs})
c.Assert(err, qt.IsNil)
- err = create.NewContent(h, cas.kind, cas.path)
+ err = create.NewContent(h, cas.kind, cas.path, false)
if b, ok := cas.expected.(bool); ok && !b {
if !b {
@@ -145,7 +145,7 @@ i18n: {{ T "hugo" }}
c.Assert(err, qt.IsNil)
c.Assert(len(h.Sites), qt.Equals, 2)
- c.Assert(create.NewContent(h, "my-bundle", "post/my-post"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-bundle", "post/my-post", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/resources/hugo1.json")), `hugo1: {{ printf "no template handling in here" }}`)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/resources/hugo2.xml")), `hugo2: {{ printf "no template handling in here" }}`)
@@ -157,7 +157,7 @@ i18n: {{ T "hugo" }}
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/pages/bio.md")), `File: bio.md`, `Site Lang: en`, `Name: Bio`)
- c.Assert(create.NewContent(h, "my-theme-bundle", "post/my-theme-post"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-theme-bundle", "post/my-theme-post", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-theme-post/index.md")), `File: index.md`, `Site Lang: en`, `Name: My Theme Post`, `i18n: Hugo Rocks!`)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-theme-post/resources/hugo1.json")), `hugo1: {{ printf "no template handling in here" }}`)
}
@@ -187,19 +187,19 @@ site RegularPages: {{ len site.RegularPages }}
c.Assert(err, qt.IsNil)
c.Assert(len(h.Sites), qt.Equals, 2)
- c.Assert(create.NewContent(h, "my-bundle", "post/my-post"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-bundle", "post/my-post", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/index.md")), `site RegularPages: 10`)
// Default bundle archetype
- c.Assert(create.NewContent(h, "", "post/my-post2"), qt.IsNil)
+ c.Assert(create.NewContent(h, "", "post/my-post2", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post2/index.md")), `default archetype index.md`)
// Regular file with bundle kind.
- c.Assert(create.NewContent(h, "my-bundle", "post/foo.md"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-bundle", "post/foo.md", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/foo.md")), `draft: true`)
// Regular files should fall back to the default archetype (we have no regular file archetype).
- c.Assert(create.NewContent(h, "my-bundle", "mypage.md"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-bundle", "mypage.md", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "mypage.md")), `draft: true`)
}
@@ -237,7 +237,7 @@ i18n: {{ T "hugo" }}
c.Assert(err, qt.IsNil)
c.Assert(len(h.Sites), qt.Equals, 2)
- c.Assert(create.NewContent(h, "my-bundle", "post/my-post"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-bundle", "post/my-post", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/resources/hugo1.json")), `hugo1: {{ printf "no template handling in here" }}`)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/resources/hugo2.xml")), `hugo2: {{ printf "no template handling in here" }}`)
@@ -247,11 +247,38 @@ i18n: {{ T "hugo" }}
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-post/pages/bio.md")), `File: bio.md`, `Name: Bio`)
- c.Assert(create.NewContent(h, "my-theme-bundle", "post/my-theme-post"), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-theme-bundle", "post/my-theme-post", false), qt.IsNil)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-theme-post/index.md")), `File: index.md`, `Name: My Theme Post`, `i18n: Hugo Rocks!`)
cContains(c, readFileFromFs(t, fs.Source, filepath.Join("content", "post/my-theme-post/resources/hugo1.json")), `hugo1: {{ printf "no template handling in here" }}`)
}
+func TestNewContentForce(t *testing.T) {
+ mm := afero.NewMemMapFs()
+ c := qt.New(t)
+
+ archetypeDir := filepath.Join("archetypes", "my-bundle")
+ c.Assert(mm.MkdirAll(archetypeDir, 0o755), qt.IsNil)
+ c.Assert(afero.WriteFile(mm, filepath.Join(archetypeDir, "index.md"), []byte(""), 0o755), qt.IsNil)
+ c.Assert(afero.WriteFile(mm, filepath.Join(archetypeDir, "index.nn.md"), []byte(""), 0o755), qt.IsNil)
+
+ c.Assert(initFs(mm), qt.IsNil)
+ cfg, fs := newTestCfg(c, mm)
+
+ h, err := hugolib.NewHugoSites(deps.DepsCfg{Cfg: cfg, Fs: fs})
+ c.Assert(err, qt.IsNil)
+ c.Assert(len(h.Sites), qt.Equals, 2)
+
+ // from file
+ c.Assert(create.NewContent(h, "post", "post/my-post.md", false), qt.IsNil)
+ c.Assert(create.NewContent(h, "post", "post/my-post.md", false), qt.IsNotNil)
+ c.Assert(create.NewContent(h, "post", "post/my-post.md", true), qt.IsNil)
+
+ // from dir
+ c.Assert(create.NewContent(h, "my-bundle", "post/my-post", false), qt.IsNil)
+ c.Assert(create.NewContent(h, "my-bundle", "post/my-post", false), qt.IsNotNil)
+ c.Assert(create.NewContent(h, "my-bundle", "post/my-post", true), qt.IsNil)
+}
+
func initFs(fs afero.Fs) error {
perm := os.FileMode(0o755)
var err error