Skip to content

Commit

Permalink
Merge pull request #3 from dbalan/init_command
Browse files Browse the repository at this point in the history
Init command
  • Loading branch information
dbalan committed Mar 6, 2018
2 parents 5efc1b6 + 0154c9d commit 7ef383a
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 4 deletions.
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ go install # installs to $GOPATH/bin
```

2. As a binary release
TBD
see: https://github.com/dbalan/pipet/releases


## Configuration
Expand All @@ -28,6 +28,9 @@ document_dir: "<directory-where-files-are-stored>" # default is ~/snippets
```

## Usage

[![asciicast](https://asciinema.org/a/W6tv7bN9z76EAlZJZDS025JwU.png)](https://asciinema.org/a/W6tv7bN9z76EAlZJZDS025JwU)

- pipet new : create a new snippets
- pipet search : search through current snippets (only titles and tags for now)
- pipet edit id : edit a snippet by id
Expand All @@ -37,10 +40,10 @@ document_dir: "<directory-where-files-are-stored>" # default is ~/snippets
- pipet configure: TBD

## TODO
- [ ] finish configure command
- [x] finish configure command
- [x] hacking docs
- [x] circleci build
- [ ] binary downloads
- [x] binary downloads
- [x] make public
- [ ] Search full text, with a flag to search command
- [ ] Try to abstract snippet id from operations.
Expand Down
93 changes: 93 additions & 0 deletions cmd/init.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
// Copyright © 2018 Dhananjay Balan <mail@dbalan.in>
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. 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.
//
// 3. Neither the name of the copyright holder 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 HOLDER 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.

package cmd

import (
"fmt"

"bufio"
"github.com/fatih/color"
"github.com/spf13/cobra"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"strings"
)

// initCmd represents the init command
var initCmd = &cobra.Command{
Use: "init",
Short: "Configure pipet",
Long: `Creates the config files for pipet if not present, usually you only need at the first use`,
Run: func(cmd *cobra.Command, args []string) {
green := color.New(color.FgGreen).SprintFunc()

configFile := expandHome("~/.pipet.yaml")
_, err := os.Stat(configFile)
if err == nil {
errorGuard(fmt.Errorf("e"), "files exists: delete ~/.pipet.yaml if you want to reconfig")
}

reader := bufio.NewReader(os.Stdin)
fmt.Printf("Where do you want to store snippets? (directory): ")
text, err := reader.ReadString('\n')
errorGuard(err, "reading failed")

text = strings.TrimSuffix(text, "\n")
if !isValidDirectory(text) {
errorGuard(fmt.Errorf("invalid path"), "error")
}

buf, err := yaml.Marshal(&struct {
DocDir string `yaml:"document_dir"`
}{text})

errorGuard(err, "failed marshalling data")
errorGuard(ioutil.WriteFile(configFile, buf, 0755), "writing file failed")
fmt.Printf(`pipet is now ready to use
snippets are stored in: %s
config is stored in %s
`, green(text), green(configFile))
},
}

func init() {
rootCmd.AddCommand(initCmd)

// Here you will define your flags and configuration settings.

// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// initCmd.PersistentFlags().String("foo", "", "A help for foo")

// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// initCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
18 changes: 17 additions & 1 deletion cmd/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,13 @@ import (
"github.com/spf13/viper"

"github.com/dbalan/pipet/pipetdata"
"github.com/fatih/color"
)

func errorGuard(err error, msg string) {
red := color.New(color.FgRed).SprintFunc()
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", msg, err)
fmt.Fprintf(os.Stderr, "%s: %v\n", red(msg), err)
os.Exit(-1)
}
}
Expand All @@ -64,6 +66,20 @@ func expandHome(p string) string {
return filepath.Join(h, p[2:])
}

func isValidDirectory(p string) bool {
if strings.Contains(p, " ") {
return false
}

fullPath := expandHome(p)
fi, err := os.Stat(fullPath)
if err == nil && !fi.IsDir() {
return false // present and is a file
}

return true
}

func getDataStore() *pipetdata.DataStore {
diskPath := viper.Get("document_dir").(string)
dataStore, err := pipetdata.NewDataStore(expandHome(diskPath))
Expand Down

0 comments on commit 7ef383a

Please sign in to comment.