Revert "commands: Remove the rlimit tweaking on macOS" - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 26aa06a3db57ab7134a900d641fa2976f7971520
 (DIR) parent 52a0cea65de7b75ae1662abe3dec36fca3604617
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Mon, 12 Jun 2017 20:29:47 +0200
       
       Revert "commands: Remove the rlimit tweaking on macOS"
       
       This reverts commit bcd32f1086c8c604fb22a7496924e41cc46b1605.
       
       See #3582
       
       Diffstat:
         M commands/hugo.go                    |       5 +++++
         A commands/limit_darwin.go            |      85 +++++++++++++++++++++++++++++++
         A commands/limit_others.go            |      32 +++++++++++++++++++++++++++++++
       
       3 files changed, 122 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/commands/hugo.go b/commands/hugo.go
       @@ -25,6 +25,7 @@ import (
                "net/http"
                "os"
                "path/filepath"
       +        "runtime"
                "strings"
                "sync"
                "time"
       @@ -758,6 +759,10 @@ func (c *commandeer) rebuildSites(events []fsnotify.Event) error {
        
        // newWatcher creates a new watcher to watch filesystem events.
        func (c *commandeer) newWatcher(port int) error {
       +        if runtime.GOOS == "darwin" {
       +                tweakLimit()
       +        }
       +
                watcher, err := watcher.New(1 * time.Second)
                var wg sync.WaitGroup
        
 (DIR) diff --git a/commands/limit_darwin.go b/commands/limit_darwin.go
       @@ -0,0 +1,85 @@
       +// Copyright 2015 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +// Copyright 2015 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +package commands
       +
       +import (
       +        "syscall"
       +
       +        "github.com/spf13/cobra"
       +        jww "github.com/spf13/jwalterweatherman"
       +)
       +
       +func init() {
       +        checkCmd.AddCommand(limit)
       +}
       +
       +var limit = &cobra.Command{
       +        Use:   "ulimit",
       +        Short: "Check system ulimit settings",
       +        Long: `Hugo will inspect the current ulimit settings on the system.
       +This is primarily to ensure that Hugo can watch enough files on some OSs`,
       +        RunE: func(cmd *cobra.Command, args []string) error {
       +                var rLimit syscall.Rlimit
       +                err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
       +                if err != nil {
       +                        return newSystemError("Error Getting Rlimit ", err)
       +                }
       +
       +                jww.FEEDBACK.Println("Current rLimit:", rLimit)
       +
       +                jww.FEEDBACK.Println("Attempting to increase limit")
       +                rLimit.Max = 999999
       +                rLimit.Cur = 999999
       +                err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
       +                if err != nil {
       +                        return newSystemError("Error Setting rLimit ", err)
       +                }
       +                err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
       +                if err != nil {
       +                        return newSystemError("Error Getting rLimit ", err)
       +                }
       +                jww.FEEDBACK.Println("rLimit after change:", rLimit)
       +
       +                return nil
       +        },
       +}
       +
       +func tweakLimit() {
       +        var rLimit syscall.Rlimit
       +        err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
       +        if err != nil {
       +                jww.ERROR.Println("Unable to obtain rLimit", err)
       +        }
       +        if rLimit.Cur < rLimit.Max {
       +                rLimit.Max = 999999
       +                rLimit.Cur = 999999
       +                err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
       +                if err != nil {
       +                        jww.ERROR.Println("Unable to increase number of open files limit", err)
       +                }
       +        }
       +}
 (DIR) diff --git a/commands/limit_others.go b/commands/limit_others.go
       @@ -0,0 +1,32 @@
       +// Copyright 2015 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +// +build !darwin
       +// Copyright 2015 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +package commands
       +
       +func tweakLimit() {
       +        // nothing to do
       +}