]> git.lizzy.rs Git - micro.git/commitdiff
Only write settings if no error when reading
authorZachary Yedidia <zyedidia@gmail.com>
Sun, 6 Aug 2017 16:02:17 +0000 (12:02 -0400)
committerZachary Yedidia <zyedidia@gmail.com>
Sun, 6 Aug 2017 16:02:17 +0000 (12:02 -0400)
This commit also switches from yosuke-furukawa/json5 to flynn/json5
because yosuke-furukawa/json5 does not provide a license.

Ref zyedidia/json5#1

Closes #775

.gitmodules
LICENSE-THIRD-PARTY
cmd/micro/bindings.go
cmd/micro/pluginmanager.go
cmd/micro/pluginmanager_test.go
cmd/micro/settings.go
cmd/micro/vendor/github.com/flynn/json5 [new submodule]
cmd/micro/vendor/github.com/zyedidia/json5 [deleted submodule]

index 75264262ae3c2fe5fec9edf1a00ec9384a12d854..2d9bffcde020d82c51aeae334173b9c1d9080f2f 100644 (file)
@@ -31,9 +31,6 @@
 [submodule "cmd/micro/vendor/github.com/zyedidia/glob"]
        path = cmd/micro/vendor/github.com/zyedidia/glob
        url = https://github.com/zyedidia/glob
-[submodule "cmd/micro/vendor/github.com/zyedidia/json5"]
-       path = cmd/micro/vendor/github.com/zyedidia/json5
-       url = https://github.com/zyedidia/json5
 [submodule "cmd/micro/vendor/github.com/zyedidia/tcell"]
        path = cmd/micro/vendor/github.com/zyedidia/tcell
        url = https://github.com/zyedidia/tcell
@@ -55,3 +52,6 @@
 [submodule "cmd/micro/vendor/github.com/zyedidia/poller"]
        path = cmd/micro/vendor/github.com/zyedidia/poller
        url = https://github.com/zyedidia/poller
+[submodule "cmd/micro/vendor/github.com/flynn/json5"]
+       path = cmd/micro/vendor/github.com/flynn/json5
+       url = https://github.com/flynn/json5
index 11e9a6f03e7208ce0e210bd1e5adcc97fc743013..679ed82a4ec1223c4ef23431bb86665e61387ff2 100644 (file)
@@ -1106,3 +1106,61 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice
 
   This Source Code Form is "Incompatible With Secondary Licenses", as
   defined by the Mozilla Public License, v. 2.0.
+
+github.com/flynn/json5/LICENSE
+================
+
+Decoder code based on package encoding/json from the Go language.
+
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+Test data based on the parse cases from https://github.com/json5/json5
+
+Copyright (c) 2012-2016 Aseem Kishore, and others.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
index c860e69de7b64ba3c79932fb99b9677d61e7ccd2..b62be8b3e6718dea8d4560e038a39ef4f48ff2dc 100644 (file)
@@ -5,7 +5,7 @@ import (
        "os"
        "strings"
 
-       "github.com/zyedidia/json5/encoding/json5"
+       "github.com/flynn/json5"
        "github.com/zyedidia/tcell"
 )
 
index 0703a62f5d1d4339aeceb35728cf5281a50a1eb3..7fe46334df431e276b861565462ae0499766e04b 100644 (file)
@@ -14,8 +14,8 @@ import (
        "sync"
 
        "github.com/blang/semver"
+       "github.com/flynn/json5"
        "github.com/yuin/gopher-lua"
-       "github.com/zyedidia/json5/encoding/json5"
 )
 
 var (
index 25e2203f6293bb35ee4426a3e012349e0c3b90bb..de12fc4555765ac7ca10dcfda4fdc4458a042e10 100644 (file)
@@ -1,10 +1,11 @@
 package main
 
 import (
-       "github.com/blang/semver"
        "testing"
 
-       "github.com/zyedidia/json5/encoding/json5"
+       "github.com/blang/semver"
+
+       "github.com/flynn/json5"
 )
 
 func TestDependencyResolving(t *testing.T) {
index c0ed53b35f263424e60ec1a64eb0670ea3364dc3..03321b369ebd3b9f91325ce419a29a3fbb0e9d6e 100644 (file)
@@ -1,6 +1,7 @@
 package main
 
 import (
+       "encoding/json"
        "errors"
        "io/ioutil"
        "os"
@@ -8,8 +9,8 @@ import (
        "strconv"
        "strings"
 
+       "github.com/flynn/json5"
        "github.com/zyedidia/glob"
-       "github.com/zyedidia/json5/encoding/json5"
 )
 
 type optionValidator func(string, interface{}) error
@@ -17,6 +18,8 @@ type optionValidator func(string, interface{}) error
 // The options that the user can set
 var globalSettings map[string]interface{}
 
+var invalidSettings bool
+
 // Options with validators
 var optionValidators = map[string]optionValidator{
        "tabsize":      validatePositiveValue,
@@ -28,6 +31,7 @@ var optionValidators = map[string]optionValidator{
 
 // InitGlobalSettings initializes the options map and sets all options to their default values
 func InitGlobalSettings() {
+       invalidSettings = false
        defaults := DefaultGlobalSettings()
        var parsed map[string]interface{}
 
@@ -38,12 +42,14 @@ func InitGlobalSettings() {
                if !strings.HasPrefix(string(input), "null") {
                        if err != nil {
                                TermMessage("Error reading settings.json file: " + err.Error())
+                               invalidSettings = true
                                return
                        }
 
                        err = json5.Unmarshal(input, &parsed)
                        if err != nil {
                                TermMessage("Error reading settings.json:", err.Error())
+                               invalidSettings = true
                        }
                } else {
                        writeSettings = true
@@ -71,6 +77,7 @@ func InitGlobalSettings() {
 // InitLocalSettings scans the json in settings.json and sets the options locally based
 // on whether the buffer matches the glob
 func InitLocalSettings(buf *Buffer) {
+       invalidSettings = false
        var parsed map[string]interface{}
 
        filename := configDir + "/settings.json"
@@ -78,12 +85,14 @@ func InitLocalSettings(buf *Buffer) {
                input, err := ioutil.ReadFile(filename)
                if err != nil {
                        TermMessage("Error reading settings.json file: " + err.Error())
+                       invalidSettings = true
                        return
                }
 
                err = json5.Unmarshal(input, &parsed)
                if err != nil {
                        TermMessage("Error reading settings.json:", err.Error())
+                       invalidSettings = true
                }
        }
 
@@ -106,6 +115,11 @@ func InitLocalSettings(buf *Buffer) {
 
 // WriteSettings writes the settings to the specified filename as JSON
 func WriteSettings(filename string) error {
+       if invalidSettings {
+               // Do not write the settings if there was an error when reading them
+               return nil
+       }
+
        var err error
        if _, e := os.Stat(configDir); e == nil {
                parsed := make(map[string]interface{})
@@ -124,6 +138,7 @@ func WriteSettings(filename string) error {
                                err = json5.Unmarshal(input, &parsed)
                                if err != nil {
                                        TermMessage("Error reading settings.json:", err.Error())
+                                       invalidSettings = true
                                }
 
                                for k, v := range parsed {
@@ -136,7 +151,7 @@ func WriteSettings(filename string) error {
                        }
                }
 
-               txt, _ := json5.MarshalIndent(parsed, "", "    ")
+               txt, _ := json.MarshalIndent(parsed, "", "    ")
                err = ioutil.WriteFile(filename, append(txt, '\n'), 0644)
        }
        return err
diff --git a/cmd/micro/vendor/github.com/flynn/json5 b/cmd/micro/vendor/github.com/flynn/json5
new file mode 160000 (submodule)
index 0000000..7620272
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 7620272ed63390e979cf5882d2fa0506fe2a8db5
diff --git a/cmd/micro/vendor/github.com/zyedidia/json5 b/cmd/micro/vendor/github.com/zyedidia/json5
deleted file mode 160000 (submodule)
index 2518f8b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2518f8beebde6814f2d30d566260480d2ded2f76