Archived
1
0
This repository has been archived on 2025-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
ponder/cmd/init.go
2016-10-02 01:39:54 +02:00

93 lines
2.4 KiB
Go

// Copyright © 2016 Jip J. Dekker <jip@dekker.li>
//
// 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 cmd
import (
"io/ioutil"
"os"
"path/filepath"
log "github.com/Sirupsen/logrus"
"github.com/jjdekker/ponder/helpers"
"github.com/spf13/cobra"
)
var (
settingsFile = "ponder.json"
settingsTemplate = []byte(`{ "default" : {
"Name": "",
"Author": "",
"IgnoreDirs": [".git"],
"LilypondIncludes": [],
"OutputDir": "out"
}
}`)
gitIgnoreTemplate = []byte(`# Output Folder
out/`)
)
// initCmd represents the init command
var initCmd = &cobra.Command{
Use: "init [location]",
Short: "Initialize a Ponder Library",
Long: `Initialize (ponder init) will create a new library, with a ponder
settings file and corresponding git ignore file.
* If a name is provided, it will be created in the current directory;
* If no name is provided, the current directory will be assumed;
Init will not use an existing directory with contents.`,
Run: func(cmd *cobra.Command, args []string) {
var path string
var err error
switch len(args) {
case 0:
path, err = helpers.CleanPath("")
case 1:
path, err = helpers.CleanPath(args[0])
default:
log.Fatal("init command does not support more than 1 parameter")
}
helpers.Check(err, "Given path is invalid")
initializePath(path)
},
}
func initializePath(path string) {
if !helpers.Exists(path) {
err := os.MkdirAll(path, os.ModePerm)
helpers.Check(err, "Could not create directory")
}
createFile(filepath.Join(path, settingsFile), settingsTemplate)
createFile(filepath.Join(path, ".gitignore"), gitIgnoreTemplate)
}
func createFile(path string, content []byte) {
b := helpers.Exists(path)
if !b {
err := ioutil.WriteFile(path, content, 0644)
if err != nil {
log.WithFields(log.Fields{"error": err, "path": path}).
Fatal("Unable to create settings file")
}
}
}
func init() {
RootCmd.AddCommand(initCmd)
}