Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
hypnoglow committed Jan 27, 2017
1 parent 2b63138 commit 891c278
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 10 deletions.
5 changes: 3 additions & 2 deletions docopt.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import "github.com/docopt/docopt-go"

const version = "0.2.0"

func parseArguments() (map[string]interface{}, error) {
// ParseArguments parses arguments, that were passed to the dotbro, by docopt.
func ParseArguments(argv []string) (map[string]interface{}, error) {
usage := `dotbro - simple yet effective dotfiles manager.
Usage:
Expand All @@ -27,5 +28,5 @@ Other options:
-V --version Show version.
`

return docopt.Parse(usage, nil, true, "dotbro "+version, false)
return docopt.Parse(usage, argv, true, "dotbro "+version, false)
}
10 changes: 10 additions & 0 deletions docopt_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package main

import "testing"

func TestParseArguments(t *testing.T) {
_, err := ParseArguments([]string{"--quiet"})
if err != nil {
t.Fatalf("Error parsing arguments: %v", err.Error())
}
}
14 changes: 12 additions & 2 deletions linker.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"fmt"
"os"
"path"
"path/filepath"
Expand Down Expand Up @@ -72,11 +73,20 @@ func needBackup(dest string) (bool, error) {
}

// backup copies existing destination file to backup dir.
func backup(dest string, destAbs string, backupDir string) error {
func backup(dest string, destAbs string, backupDir string, stater Stater) error {
// todo: if dry-run, just print

// check if destination file exists
exists, err := IsExists(stater, destAbs)
if err != nil {
return err
}
if !exists {
return fmt.Errorf("File %s not exists", destAbs)
}

dir := path.Dir(backupDir + "/" + dest)
err := os.MkdirAll(dir, 0700)
err = os.MkdirAll(dir, 0700)
if err != nil {
return err
}
Expand Down
22 changes: 18 additions & 4 deletions linker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,22 +117,36 @@ func TestNeedBackup(t *testing.T) {
assert.False(t, actual)
}

// TODO: WIP
func TestBackup(t *testing.T) {

os.RemoveAll("/tmp/dotbro") // Cleanup
// TODO: test fails if outputer is not defined.
outputer = NewOutputer(OutputerModeQuiet, os.Stdout, &FakeLogWriterForLinkerOutputer{})

err := os.RemoveAll("/tmp/dotbro") // Cleanup
if err != nil {
t.Fatal(err)
}

dest := "new"
destAbs := "/tmp/dotbro/linker/TestBackup/new"
backupDir := "/tmp/dotbro/linker/TestBackup/backup"

err := backup(dest, destAbs, backupDir)
stater := new(OsStater)

err = backup(dest, destAbs, backupDir, stater)
assert.Error(t, err)

err = os.MkdirAll(destAbs, 0700)
err = os.MkdirAll(path.Dir(destAbs), 0700)
if err != nil {
t.Fatal(err)
}
_, err = os.Create(destAbs)
if err != nil {
t.Fatal(err)
}
err = backup(dest, destAbs, backupDir)

err = backup(dest, destAbs, backupDir, stater)
assert.Empty(t, err)
}

Expand Down
4 changes: 2 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func main() {

// Parse arguments

args, err := parseArguments()
args, err := ParseArguments(nil)
if err != nil {
outputer.OutError("Error parsing aruments: %s", err)
exit(1)
Expand Down Expand Up @@ -302,7 +302,7 @@ func installDotfile(src, dest string, linker Linker, config *Configuration, srcD
}

if needBackup {
err = backup(dest, destAbs, config.Directories.Backup)
err = backup(dest, destAbs, config.Directories.Backup, osStater)
if err != nil {
outputer.OutError("Error backuping file %s: %s", destAbs, err)
exit(1)
Expand Down

0 comments on commit 891c278

Please sign in to comment.