给Hugo提交了一个PR
给Hugo提交了一个Pull Request,并且通过了,记录一下。PR的内容是在config里增加了disablePathToLower选项,可以配置是否需要阻止Hugo自动将路径转换为小写。在站点从旧的系统里迁移到Hugo中时会非常有用。
在上一篇博客使用hugo搭建个人博客站点 里提到,Hugo强制将所有路径都变成了小写。小写路径虽好,但是如果之前你的网站路径不是全小写的,迁移过来路径发生变化,将会导致路径失效,是不可接受的。
上文提到,我硬改了Hugo代码,让它不要强制转换小写路径。这样的做法不够优雅,假如别人也和我有一样的需求怎么办?我们还是希望Hugo本身就能够提供这样的功能。于是,我决定把代码改的优雅一些,给Hugo作者提交一个Pull Request,将这个功能合并到Hugo代码里。
于是,我在config文件里增加了一个选项:
# Do not make the url/path to lowercase
disablePathToLower: true
增加一个开关其实很简单,只需要在command/hugo.go里的LoadDefaultSettings函数里增加一行:
viper.SetDefault("DisablePathToLower", false)
开关生效的实现也很简单,找到最终转换为小写的函数,加入disablePathToLower开关的判断:
func MakePathSanitized(s string) string {
if viper.GetBool("DisablePathToLower") {
return MakePath(s)
} else {
return strings.ToLower(MakePath(s))
}
}
之前的函数名叫MakePathToLower,由于我在内部加了个开关,于是名字不适用了,于是修改为了:MakePathSanitized。
修改完成之后,需要把测试案例跑一遍,保证你的修改不会破坏原来的逻辑。
go test ./...
当然,也要保证编译是成功的:
go build
在我修改的第一个版本时,我犯了一个错误,导致测试案例没有通过。原因是第一个版本我增加的配置选项是PathToLower,默认值是true。而有些测试案例是没有去设置PathToLower的,默认读到的会是false,从而导致执行失败的执行结果。所以,config里增加的选项,默认值尽量是false吧,也会好理解一些。于是就有了:disablePathToLower
提交Pull Request时,有几点需要注意的:
- 将自己的修改合并成一个commit再提交Pull Request。(这样在主Resp里更加规范和整洁)
- commit message里的描述尽量简洁清晰,如果有对应的issue ID,最好加上:See #1234 or Fixes #1234 之类的。这样可以自动关联起来。
- 不要在自己的master分支上修改提交PR,而是应该自己开一个单独分支,由该分支提交Pull Request到原Repo的master。
最后,我提交了这么一个Pull Request:add configuration variable: “disablePathToLower” See #557
不久后,Hugo的主要维护者之一通过了我的PR,很友善的将我蹩脚的中国式英语的commit message调整了一下合并到了Hugo的master:
commit: https://github.com/spf13/hugo/commit/52d94fa67578f6b63035e73b236ca8abd40d0006
这就是开源项目的好处,开源社区的魅力所在:你可以使用它,修改它,贡献自己的代码,参与其中,让它变好,让所有人受益。