Skip to content

Commit 52142b6

Browse files
committed
runtime metadata Compare add storage support
1 parent 9fe0caf commit 52142b6

2 files changed

Lines changed: 56 additions & 3 deletions

File tree

types/compare.go

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ type MetadataCompareResult struct {
1414
}
1515

1616
type ModuleChanges struct {
17-
Calls *ChangesList `json:"calls,omitempty"`
18-
Events *ChangesList `json:"events,omitempty"`
17+
Calls *ChangesList `json:"calls,omitempty"`
18+
Events *ChangesList `json:"events,omitempty"`
19+
Storage *ChangesList `json:"storage,omitempty"`
1920
}
2021

2122
type ChangesList struct {
@@ -56,6 +57,15 @@ func (m *MetadataTag) Compare(dest *MetadataTag) *MetadataCompareResult {
5657
return nil
5758
}
5859

60+
var getStorageByName = func(name string, storageItems []MetadataStorage) *MetadataStorage {
61+
for _, item := range storageItems {
62+
if item.Name == name {
63+
return &item
64+
}
65+
}
66+
return nil
67+
}
68+
5969
var buildCallArgs = func(call MetadataCalls) string {
6070
var args []string
6171
for _, arg := range call.Args {
@@ -68,6 +78,10 @@ func (m *MetadataTag) Compare(dest *MetadataTag) *MetadataCompareResult {
6878
return fmt.Sprintf("%s(%s)", event.Name, strings.Join(event.Args, ","))
6979
}
7080

81+
var buildStorageArgs = func(moduleName string, storage MetadataStorage) string {
82+
return fmt.Sprintf("%s.%s: %s", moduleName, storage.Name, storage.Type.TypeValue())
83+
}
84+
7185
var result MetadataCompareResult
7286
result.ModuleChanges = make(map[string]ModuleChanges)
7387
for _, module := range m.Modules {
@@ -141,7 +155,30 @@ func (m *MetadataTag) Compare(dest *MetadataTag) *MetadataCompareResult {
141155
if Events.New != nil || Events.Changes != nil {
142156
moduleChanges.Events = &Events
143157
}
144-
if (moduleChanges.Calls != nil && (len(moduleChanges.Calls.Changes) > 0 || len(moduleChanges.Calls.New) > 0)) || (moduleChanges.Events != nil && (len(moduleChanges.Events.Changes) > 0 || len(moduleChanges.Events.New) > 0)) {
158+
159+
// check storage
160+
storage := ChangesList{}
161+
for _, storageItem := range module.Storage {
162+
destStorage := getStorageByName(storageItem.Name, destModule.Storage)
163+
if destStorage == nil {
164+
storage.New = append(storage.New, fmt.Sprintf("%s.%s", module.Name, storageItem.Name))
165+
continue
166+
}
167+
168+
if !Eq(storageItem.Type.TypeValue(), destStorage.Type.TypeValue()) {
169+
storage.Changes = append(storage.Changes, CompareChanges{
170+
Prev: buildStorageArgs(module.Name, *destStorage),
171+
Current: buildStorageArgs(module.Name, storageItem),
172+
})
173+
}
174+
}
175+
if storage.New != nil || storage.Changes != nil {
176+
moduleChanges.Storage = &storage
177+
}
178+
179+
if (moduleChanges.Calls != nil && (len(moduleChanges.Calls.Changes) > 0 || len(moduleChanges.Calls.New) > 0)) ||
180+
(moduleChanges.Events != nil && (len(moduleChanges.Events.Changes) > 0 || len(moduleChanges.Events.New) > 0)) ||
181+
(moduleChanges.Storage != nil && (len(moduleChanges.Storage.Changes) > 0 || len(moduleChanges.Storage.New) > 0)) {
145182
result.ModuleChanges[module.Name] = moduleChanges
146183
}
147184

types/metadata.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,22 @@ type StorageType struct {
4141
NMapType *NMapType `json:"n_map_type,omitempty"`
4242
}
4343

44+
func (s *StorageType) TypeValue() string {
45+
switch s.Origin {
46+
case "MapType":
47+
return s.MapType.Value
48+
case "DoubleMapType":
49+
return s.DoubleMapType.Value
50+
case "Map":
51+
return s.NMapType.Value
52+
default:
53+
if s.PlainType != nil {
54+
return *s.PlainType
55+
}
56+
return ""
57+
}
58+
}
59+
4460
type MapType struct {
4561
Key string `json:"key"`
4662
Key2 string `json:"key2,omitempty"`

0 commit comments

Comments
 (0)