Skip to content
This repository was archived by the owner on Sep 9, 2020. It is now read-only.

Commit 5bba6bd

Browse files
committed
Move lock diff to TOML
* Expanded diff test case to verify that multiple projects are formatted properly
1 parent 38e79aa commit 5bba6bd

File tree

5 files changed

+113
-75
lines changed

5 files changed

+113
-75
lines changed
Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,31 @@
11
Memo: 595716d270828e763c811ef79c9c41f85b1d1bfbdfe85280036405c03772206c -> 2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e
2-
Add: [
3-
{
4-
"name": "github.com/stuff/realthing",
5-
"version": "2.0.0",
6-
"revision": "1f02e52d6bac308da54ab84a234c58a98ca82347",
7-
"packages": [
8-
"."
9-
]
10-
}
11-
]
12-
Remove: [
13-
{
14-
"name": "github.com/stuff/placeholder",
15-
"version": "2.0.0",
16-
"revision": "6694017eeb4e20fd277b049bf29dba4895c97234",
17-
"packages": [
18-
"."
19-
]
20-
}
21-
]
22-
Modify: [
23-
{
24-
"name": "github.com/foo/bar",
25-
"source": "+ http://github.example.com/foo/bar",
26-
"version": "+ 1.2.0",
27-
"branch": "- master",
28-
"revision": "f24338400f072ef18125ae0fbe6b06fe6d1783e7 -> 2a3a211e171803acb82d1d5d42ceb53228f51751",
29-
"packages": [
30-
"- placeholder",
31-
"+ thing"
32-
]
33-
}
34-
]
2+
3+
Add:
4+
[[projects]]
5+
name = "github.com/sdboyer/deptest"
6+
packages = ["."]
7+
revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf"
8+
version = "v1.0.0"
9+
10+
[[projects]]
11+
name = "github.com/stuff/realthing"
12+
packages = ["."]
13+
revision = "1f02e52d6bac308da54ab84a234c58a98ca82347"
14+
version = "2.0.0"
15+
16+
Remove:
17+
[[projects]]
18+
name = "github.com/stuff/placeholder"
19+
packages = ["."]
20+
revision = "6694017eeb4e20fd277b049bf29dba4895c97234"
21+
version = "2.0.0"
22+
23+
Modify:
24+
[[projects]]
25+
branch = "- master"
26+
name = "github.com/foo/bar"
27+
packages = ["- placeholder","+ thing"]
28+
revision = "f24338400f072ef18125ae0fbe6b06fe6d1783e7 -> 2a3a211e171803acb82d1d5d42ceb53228f51751"
29+
source = "+ http://github.example.com/foo/bar"
30+
version = "+ 1.2.0"
31+

testdata/txn_writer/original_lock.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ memo = "595716d270828e763c811ef79c9c41f85b1d1bfbdfe85280036405c03772206c"
66
revision = "f24338400f072ef18125ae0fbe6b06fe6d1783e7"
77
packages = ["placeholder", "util"]
88

9-
[[packages]]
9+
[[projects]]
1010
name = "github.com/stuff/placeholder"
1111
version = "2.0.0"
1212
revision = "6694017eeb4e20fd277b049bf29dba4895c97234"

testdata/txn_writer/updated_lock.toml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@ memo = "2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e"
77
revision = "2a3a211e171803acb82d1d5d42ceb53228f51751"
88
packages = ["thing","util"]
99

10-
[[packages]]
10+
[[projects]]
1111
name = "github.com/stuff/realthing"
1212
version = "2.0.0"
1313
revision = "1f02e52d6bac308da54ab84a234c58a98ca82347"
1414
packages = ["."]
15+
16+
[[projects]]
17+
name = "github.com/sdboyer/deptest"
18+
packages = ["."]
19+
revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf"
20+
version = "v1.0.0"

txn_writer.go

Lines changed: 66 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ package dep
77
import (
88
"bytes"
99
"encoding/hex"
10-
"encoding/json"
1110
"fmt"
1211
"io/ioutil"
1312
"os"
1413
"path/filepath"
1514
"sort"
1615
"strings"
1716

17+
"github.com/pelletier/go-toml"
1818
"github.com/pkg/errors"
1919
"github.com/sdboyer/gps"
2020
)
@@ -67,40 +67,40 @@ func (diff *LockDiff) Format() (string, error) {
6767
var buf bytes.Buffer
6868

6969
if diff.HashDiff != nil {
70-
buf.WriteString(fmt.Sprintf("Memo: %s\n", diff.HashDiff))
70+
buf.WriteString(fmt.Sprintf("Memo: %s\n\n", diff.HashDiff))
7171
}
7272

73-
if len(diff.Add) > 0 {
74-
buf.WriteString("Add: ")
73+
writeDiffs := func(diffs []LockedProjectDiff) error {
74+
for i := 0; i < len(diffs); i++ {
75+
chunk, err := diffs[i].MarshalTOML()
76+
if err != nil {
77+
return err
78+
}
79+
buf.WriteString(chunk)
80+
}
81+
buf.WriteString("\n")
82+
return nil
83+
}
7584

76-
enc := json.NewEncoder(&buf)
77-
enc.SetIndent("", " ")
78-
enc.SetEscapeHTML(false)
79-
err := enc.Encode(diff.Add)
85+
if len(diff.Add) > 0 {
86+
buf.WriteString("Add:")
87+
err := writeDiffs(diff.Add)
8088
if err != nil {
8189
return "", errors.Wrap(err, "Unable to format LockDiff.Add")
8290
}
8391
}
8492

8593
if len(diff.Remove) > 0 {
86-
buf.WriteString("Remove: ")
87-
88-
enc := json.NewEncoder(&buf)
89-
enc.SetIndent("", " ")
90-
enc.SetEscapeHTML(false)
91-
err := enc.Encode(diff.Remove)
94+
buf.WriteString("Remove:")
95+
err := writeDiffs(diff.Remove)
9296
if err != nil {
9397
return "", errors.Wrap(err, "Unable to format LockDiff.Remove")
9498
}
9599
}
96100

97101
if len(diff.Modify) > 0 {
98-
buf.WriteString("Modify: ")
99-
100-
enc := json.NewEncoder(&buf)
101-
enc.SetIndent("", " ")
102-
enc.SetEscapeHTML(false)
103-
err := enc.Encode(diff.Modify)
102+
buf.WriteString("Modify:")
103+
err := writeDiffs(diff.Modify)
104104
if err != nil {
105105
return "", errors.Wrap(err, "Unable to format LockDiff.Modify")
106106
}
@@ -113,12 +113,52 @@ func (diff *LockDiff) Format() (string, error) {
113113
// Fields are only populated when there is a difference, otherwise they are empty.
114114
// TODO(carolynvs) this should be moved to gps
115115
type LockedProjectDiff struct {
116-
Name gps.ProjectRoot `json:"name"`
117-
Source *StringDiff `json:"source,omitempty"`
118-
Version *StringDiff `json:"version,omitempty"`
119-
Branch *StringDiff `json:"branch,omitempty"`
120-
Revision *StringDiff `json:"revision,omitempty"`
121-
Packages []StringDiff `json:"packages,omitempty"`
116+
Name gps.ProjectRoot
117+
Source *StringDiff
118+
Version *StringDiff
119+
Branch *StringDiff
120+
Revision *StringDiff
121+
Packages []StringDiff
122+
}
123+
124+
func (diff *LockedProjectDiff) MarshalTOML() (string, error) {
125+
prj := make(map[string]interface{})
126+
prj["name"] = string(diff.Name)
127+
128+
if diff.Source != nil {
129+
prj["source"] = diff.Source.String()
130+
}
131+
132+
if diff.Version != nil {
133+
prj["version"] = diff.Version.String()
134+
}
135+
136+
if diff.Branch != nil {
137+
prj["branch"] = diff.Branch.String()
138+
}
139+
140+
if diff.Revision != nil {
141+
prj["revision"] = diff.Revision.String()
142+
}
143+
144+
if len(diff.Packages) > 0 {
145+
p := make([]interface{}, len(diff.Packages))
146+
for i := 0; i < len(diff.Packages); i++ {
147+
p[i] = diff.Packages[i].String()
148+
}
149+
prj["packages"] = p
150+
}
151+
152+
m := make(map[string]interface{})
153+
m["projects"] = []map[string]interface{}{prj}
154+
155+
t, err := toml.TreeFromMap(m)
156+
if err != nil {
157+
return "", errors.Wrap(err, "Unable to marshal lock diff to TOML tree")
158+
}
159+
160+
result, err := t.ToTomlString()
161+
return result, errors.Wrap(err, "Unable to marshal lock diff to TOML string")
122162
}
123163

124164
type StringDiff struct {
@@ -142,15 +182,6 @@ func (diff StringDiff) String() string {
142182
return diff.Current
143183
}
144184

145-
func (diff StringDiff) MarshalJSON() ([]byte, error) {
146-
var buf bytes.Buffer
147-
enc := json.NewEncoder(&buf)
148-
enc.SetEscapeHTML(false)
149-
err := enc.Encode(diff.String())
150-
151-
return buf.Bytes(), err
152-
}
153-
154185
// VendorBehavior defines when the vendor directory should be written.
155186
type VendorBehavior int
156187

txn_writer_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -518,12 +518,16 @@ func TestSafeWriter_DiffLocks(t *testing.T) {
518518
t.Fatalf("Expected the lock diff to contain the updated hash: expected %s, got %s", pc.Project.Lock.Memo, updatedLock.Memo)
519519
}
520520

521-
if len(diff.Add) != 1 {
522-
t.Fatalf("Expected the lock diff to contain 1 added project, got %d", len(diff.Add))
521+
if len(diff.Add) != 2 {
522+
t.Fatalf("Expected the lock diff to contain 2 added projects, got %d", len(diff.Add))
523523
} else {
524-
add := diff.Add[0]
525-
if add.Name != "github.com/stuff/realthing" {
526-
t.Errorf("expected new project github.com/stuff/realthing, got %s", add.Name)
524+
add1 := diff.Add[0]
525+
if add1.Name != "github.com/sdboyer/deptest" {
526+
t.Errorf("expected new project[0] github.com/sdboyer/deptest, got %s", add1.Name)
527+
}
528+
add2 := diff.Add[1]
529+
if add2.Name != "github.com/stuff/realthing" {
530+
t.Errorf("expected new project[1] github.com/stuff/realthing, got %s", add2.Name)
527531
}
528532
}
529533

0 commit comments

Comments
 (0)