ブログを新しくした

blog hugo 2014/12/07 04:00:00

golang製の静的サイトジェネレータである Hugo を使った。

examples/blog がそのまま動いたのでうまくいくかと思いきや、そこそこ面倒くさかった。

  • configでパーマリンクを指定したとき、日本語が含まれていると生成されるファイルだけパーセントエンコードされリンクが切れる。

  • それを直そうとcloneしてきたら path.Join 使ってたところがすべて filepath.Join になっててWindowsだとファイル区切りが\になってた。

そもそも url と生成時のファイル生成のパスの扱いが同じ関数で行われている。

結局、

  • hugolib/permalinks.go 内 pageToPermalinkFilename で Urlize を止める。
  • helpers/url.go の filepath を path にもどす。

という修正をやって動かしてる。

後者に関してはissueは挙がってたしそのうち直るだろうたぶん。

あとコードのハイライトは pygments 使おうと思ったけどなぜかpタグがcode内にでてくる

function func() { var v; v = 0; v = ‘string’; v = function () {}; }

ので Hilight.js の monokai sublime テーマにした。

function func() {
    var v;
    v = 0;
    v = 'string';
    v = function () {};
}

追記

静的ファイルの追加が何故か1フォルダしか行われていなかった。 chtimeで権限エラーになっていた。 hugo.go で NewSyncer 後に

syncer.NoTimes = true

を追加することで最終更新日の同期をやめさせて対応した。

diff --git a/commands/hugo.go b/commands/hugo.go
index 6fd7fa2..21dad47 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -227,6 +229,7 @@ func copyStatic() error {
    publishDir := helpers.AbsPathify(viper.GetString("PublishDir")) + "/"
 
    syncer := fsync.NewSyncer()
+   syncer.NoTimes = true
    syncer.NoTimes = viper.GetBool("notimes")
    syncer.SrcFs = hugofs.SourceFs
    syncer.DestFs = hugofs.DestinationFS
diff --git a/helpers/url.go b/helpers/url.go
index dd8d750..6b234b4 100644
--- a/helpers/url.go
+++ b/helpers/url.go
@@ -16,7 +16,7 @@ package helpers
 import (
    "fmt"
    "net/url"
-   "path/filepath"
+   "path"
    "strings"
 
    "github.com/PuerkitoBio/purell"
@@ -68,7 +68,7 @@ func MakePermalink(host, plink string) *url.URL {
        panic(fmt.Errorf("Can't make permalink from absolute link %q", plink))
    }
 
-   base.Path = filepath.Join(base.Path, p.Path)
+   base.Path = path.Join(base.Path, p.Path)
 
    // path.Join will strip off the last /, so put it back if it was there.
    if strings.HasSuffix(p.Path, "/") && !strings.HasSuffix(base.Path, "/") {
@@ -84,7 +84,7 @@ func UrlPrep(ugly bool, in string) string {
        return x
    } else {
        x := PrettifyUrl(SanitizeUrl(in))
-       if filepath.Ext(x) == ".xml" {
+       if path.Ext(x) == ".xml" {
            return x
        }
        url, err := purell.NormalizeURLString(x, purell.FlagAddTrailingSlash)
@@ -100,8 +100,8 @@ func UrlPrep(ugly bool, in string) string {
 func PrettifyUrl(in string) string {
    x := PrettifyPath(in)
 
-   if filepath.Base(x) == "index.html" {
-       return filepath.Dir(x)
+   if path.Base(x) == "index.html" {
+       return path.Dir(x)
    }
 
    if in == "" {
@@ -115,17 +115,17 @@ func PrettifyUrl(in string) string {
 // /section/name/  -> /section/name.html
 // /section/name.html -> /section/name.html
 func Uglify(in string) string {
-   if filepath.Ext(in) == "" {
+   if path.Ext(in) == "" {
        if len(in) < 2 {
            return "/"
        }
        // /section/name/  -> /section/name.html
-       return filepath.Clean(in) + ".html"
+       return path.Clean(in) + ".html"
    } else {
        name, ext := FileAndExt(in)
        if name == "index" {
            // /section/name/index.html -> /section/name.html
-           d := filepath.Dir(in)
+           d := path.Dir(in)
            if len(d) > 1 {
                return d + ext
            } else {
@@ -133,7 +133,7 @@ func Uglify(in string) string {
            }
        } else {
            // /section/name.html -> /section/name.html
-           return filepath.Clean(in)
+           return path.Clean(in)
        }
    }
 }
diff --git a/hugolib/permalinks.go b/hugolib/permalinks.go
index 642de83..955401c 100644
--- a/hugolib/permalinks.go
+++ b/hugolib/permalinks.go
@@ -146,7 +146,8 @@ func pageToPermalinkTitle(p *Page, _ string) (string, error) {
 func pageToPermalinkFilename(p *Page, _ string) (string, error) {
    //var extension = p.Source.Ext
    //var name = p.Source.Path()[0 : len(p.Source.Path())-len(extension)]
-   return helpers.Urlize(p.Source.BaseFileName()), nil
+   return p.Source.BaseFileName(), nil
+   // return helpers.Urlize(p.Source.BaseFileName()), nil
 }
 
 // if the page has a slug, return the slug, else return the title