Skip to content
This repository was archived by the owner on Jan 10, 2023. It is now read-only.

Commit 93a51a3

Browse files
author
Eric Crosson
committed
Implement commands
1 parent 1b12a0c commit 93a51a3

File tree

6 files changed

+104
-18
lines changed

6 files changed

+104
-18
lines changed

src/cmd/git-ledger/add.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package main
22

3+
// TODO: test
4+
// TODO: doxygenize
5+
36
import (
47
"fmt"
58
"regexp"
69
"strings"
10+
"path/filepath"
711

812
"github.com/urfave/cli"
9-
"github.com/git-hook/git-ledger/src/git-ledger"
1013
"github.com/codeskyblue/go-sh"
14+
"github.com/git-hook/git-ledger/src/git-ledger"
1115
)
1216

1317
func getRemote(dir string) string {
@@ -34,20 +38,23 @@ func getSlug(dir string) string {
3438
}
3539

3640
func add(c *cli.Context) error {
41+
// TODO: print message to user
3742
fmt.Println("I am in add!")
3843
// Default: add cwd to toml
3944
project := c.Args().First()
4045

46+
// TODO: ensure project contains a '.git' directory
47+
4148
// TODO: clean up this declaration
4249
var record ledger.Record
43-
record.Path = project
50+
record.Path, _ = filepath.Abs(project)
4451
record.Slug = getSlug(project)
4552

4653
fmt.Println("record is ", record)
4754
fmt.Println("path is ", ledger.Path())
4855

4956
record.RemoveFromLedger()
50-
record.WriteToLedger()
57+
record.AddToLedger()
5158

5259
return nil
5360
}

src/cmd/git-ledger/find.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,19 @@ import (
44
"fmt"
55

66
"github.com/urfave/cli"
7+
"github.com/git-hook/git-ledger/src/git-ledger"
78
)
89

910
func find(c *cli.Context) error {
10-
fmt.Println("I am in find!")
11+
slug := c.Args().First()
12+
13+
record, err := ledger.GetBySlug(slug)
14+
if err != nil {
15+
// TODO: print a helpful message to stderr
16+
fmt.Println(err)
17+
// panic(err)
18+
}
19+
fmt.Println(record.Path)
20+
1121
return nil
1222
}

src/cmd/git-ledger/ls.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,20 @@ import (
44
"fmt"
55

66
"github.com/urfave/cli"
7+
"github.com/git-hook/git-ledger/src/git-ledger"
78
)
89

910
func ls(c *cli.Context) error {
10-
fmt.Println("I am in ls!")
11+
records, err := ledger.GetRecords()
12+
if err != nil {
13+
// TODO: stderr time
14+
// TODO exit code
15+
panic(err)
16+
}
17+
18+
for _, rec := range records {
19+
fmt.Println(fmt.Sprintf("%s: %s", rec.Slug, rec.Path))
20+
}
21+
// TODO: handle no size, print "none" to stderr? if git does something similar
1122
return nil
1223
}

src/cmd/git-ledger/main.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package main
22

33
import (
44
"os"
5-
"fmt"
65

76
"github.com/Masterminds/semver"
8-
"github.com/jmalloc/grit/src/grit/pathutil"
97
"github.com/urfave/cli"
108
)
119

@@ -14,10 +12,9 @@ var VERSION = semver.MustParse("0.0.0")
1412
func main () {
1513

1614
app := cli.NewApp()
17-
homeDir, _ := pathutil.HomeDir()
1815

19-
app.Name = "grip"
20-
app.Usage = "Index your Git clones."
16+
app.Name = "git-ledger"
17+
app.Usage = "Index your git clones."
2118
app.Version = VERSION.String()
2219

2320
app.Commands = []cli.Command {
@@ -36,7 +33,7 @@ func main () {
3633
{
3734
Name: "ls",
3835
Usage: "Print all tracked repositories",
39-
Action: find,
36+
Action: ls,
4037
},
4138
{
4239
Name: "rm",
@@ -46,8 +43,6 @@ func main () {
4643
},
4744
}
4845

49-
fmt.Println("Made it here with homeDir ", homeDir)
50-
5146
if err := app.Run(os.Args); err != nil {
5247
os.Exit(1)
5348
}

src/cmd/git-ledger/rm.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,30 @@ import (
44
"fmt"
55

66
"github.com/urfave/cli"
7+
"github.com/git-hook/git-ledger/src/git-ledger"
78
)
89

10+
// TODO document that this command:
11+
// takes PATH
12+
13+
// TODO: set exit code (project-wide)
914
func rm(c *cli.Context) error {
1015
fmt.Println("I am in rm!")
16+
slug := c.Args().First()
17+
18+
record, err := ledger.GetBySlug(slug)
19+
if err != nil {
20+
// TODO: print a helpful message to stderr
21+
fmt.Println(err)
22+
// panic(err)
23+
}
24+
25+
err = record.RemoveFromLedger()
26+
if err != nil {
27+
// TODO: print a helpful message to stderr
28+
fmt.Println(err)
29+
// panic(err)
30+
}
31+
1132
return nil
1233
}

src/git-ledger/ledger.go

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"os"
55
"fmt"
66
"path"
7+
"errors"
8+
"strings"
79
"io/ioutil"
810

911
"github.com/jmalloc/grit/src/grit/pathutil"
@@ -24,20 +26,60 @@ func Path() string {
2426
return path.Join(home, ".git-ledger")
2527
}
2628

29+
func GetRecords() ([]Record, error) {
30+
var ledger Records
31+
32+
b, err := ioutil.ReadFile(Path())
33+
if err != nil {
34+
return ledger.Record, err
35+
}
36+
str := string(b)
37+
38+
if _, err := toml.Decode(str, &ledger); err != nil {
39+
return ledger.Record, err
40+
}
41+
return ledger.Record, err
42+
}
43+
44+
func GetBySlug(slug string) (Record, error) {
45+
var match Record
46+
var ledger Records
47+
48+
// TODO: use getrecords
49+
b, err := ioutil.ReadFile(Path())
50+
if err != nil {
51+
return match, err
52+
}
53+
str := string(b)
54+
55+
if _, err := toml.Decode(str, &ledger); err != nil {
56+
return match, err
57+
}
58+
59+
for _, r := range ledger.Record {
60+
if strings.Contains(r.Slug, slug) {
61+
return r, nil
62+
}
63+
}
64+
return match, errors.New(fmt.Sprintf("Unknown project: %s", slug))
65+
}
66+
67+
// fixme: remove duplicated code
2768
func (r Record) String() string {
2869
return fmt.Sprintf("[[Record]]\npath = \"%s\"\nslug = \"%s\"\n\n", r.Path, r.Slug)
2970
}
3071

31-
func (r Record) RemoveFromLedger() {
72+
// comparison by Path
73+
func (r Record) RemoveFromLedger() error {
3274
b, err := ioutil.ReadFile(Path())
3375
if err != nil {
34-
fmt.Println(err)
76+
return err
3577
}
3678
str := string(b)
3779

3880
var ledger Records
3981
if _, err := toml.Decode(str, &ledger); err != nil {
40-
panic(err)
82+
return err
4183
}
4284

4385
var content string
@@ -48,10 +90,10 @@ func (r Record) RemoveFromLedger() {
4890
}
4991

5092
ioutil.WriteFile(Path(), []byte(content), 0644)
51-
93+
return nil
5294
}
5395

54-
func (r Record) WriteToLedger() {
96+
func (r Record) AddToLedger() {
5597
f, err := os.OpenFile(Path(), os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
5698
if err != nil {
5799
panic(err)

0 commit comments

Comments
 (0)