mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-20 11:42:43 +00:00
Fix config_diff panics when old config or new config is empty
Fixes #190
This commit is contained in:
parent
c3b742c2a8
commit
45099fc7d3
@ -53,34 +53,43 @@ func diffMirrorConfig(oldList, newList []mirrorConfig) []mirrorCfgTrans {
|
|||||||
sort.Sort(sortableMirrorList(oList))
|
sort.Sort(sortableMirrorList(oList))
|
||||||
sort.Sort(sortableMirrorList(nList))
|
sort.Sort(sortableMirrorList(nList))
|
||||||
|
|
||||||
// insert a tail node to both lists
|
if len(oList) != 0 && len(nList) != 0 {
|
||||||
// as the maximum node
|
// insert a tail node to both lists
|
||||||
lastOld, lastNew := oList[len(oList)-1], nList[len(nList)-1]
|
// as the maximum node
|
||||||
maxName := lastOld.Name
|
lastOld, lastNew := oList[len(oList)-1], nList[len(nList)-1]
|
||||||
if lastNew.Name > lastOld.Name {
|
maxName := lastOld.Name
|
||||||
maxName = lastNew.Name
|
if lastNew.Name > lastOld.Name {
|
||||||
}
|
maxName = lastNew.Name
|
||||||
Nil := mirrorConfig{Name: "~" + maxName}
|
}
|
||||||
if Nil.Name <= maxName {
|
Nil := mirrorConfig{Name: "~" + maxName}
|
||||||
panic("Nil.Name should be larger than maxName")
|
if Nil.Name <= maxName {
|
||||||
}
|
panic("Nil.Name should be larger than maxName")
|
||||||
oList, nList = append(oList, Nil), append(nList, Nil)
|
}
|
||||||
|
oList, nList = append(oList, Nil), append(nList, Nil)
|
||||||
|
|
||||||
// iterate over both lists to find the difference
|
// iterate over both lists to find the difference
|
||||||
for i, j := 0, 0; i < len(oList) && j < len(nList); {
|
for i, j := 0, 0; i < len(oList) && j < len(nList); {
|
||||||
o, n := oList[i], nList[j]
|
o, n := oList[i], nList[j]
|
||||||
if n.Name < o.Name {
|
if n.Name < o.Name {
|
||||||
operations = append(operations, mirrorCfgTrans{diffAdd, n})
|
operations = append(operations, mirrorCfgTrans{diffAdd, n})
|
||||||
j++
|
j++
|
||||||
} else if o.Name < n.Name {
|
} else if o.Name < n.Name {
|
||||||
operations = append(operations, mirrorCfgTrans{diffDelete, o})
|
operations = append(operations, mirrorCfgTrans{diffDelete, o})
|
||||||
i++
|
i++
|
||||||
} else {
|
} else {
|
||||||
if !reflect.DeepEqual(o, n) {
|
if !reflect.DeepEqual(o, n) {
|
||||||
operations = append(operations, mirrorCfgTrans{diffModify, n})
|
operations = append(operations, mirrorCfgTrans{diffModify, n})
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
j++
|
||||||
}
|
}
|
||||||
i++
|
}
|
||||||
j++
|
} else {
|
||||||
|
for i := 0; i < len(oList); i++ {
|
||||||
|
operations = append(operations, mirrorCfgTrans{diffDelete, oList[i]})
|
||||||
|
}
|
||||||
|
for i := 0; i < len(nList); i++ {
|
||||||
|
operations = append(operations, mirrorCfgTrans{diffAdd, nList[i]})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user