diff options
Diffstat (limited to 'xmake/core/package/addon.lua')
| -rw-r--r-- | xmake/core/package/addon.lua | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/xmake/core/package/addon.lua b/xmake/core/package/addon.lua index 4a4c8f50a..8787ab73a 100644 --- a/xmake/core/package/addon.lua +++ b/xmake/core/package/addon.lua @@ -183,7 +183,7 @@ end function addon._parents(name) local dirname = addon.dirname(name) local parents - for otherdirname, entry in pairs(addon._registry()) do + for otherdirname, entry in table.orderpairs(addon._registry()) do if otherdirname ~= dirname then for _, addoninfo in pairs(entry.versions or {}) do if table.contains(addoninfo.deps or {}, dirname) then @@ -194,9 +194,6 @@ function addon._parents(name) end end end - if parents then - table.sort(parents) - end return parents end @@ -487,13 +484,8 @@ end -- get all the installed versions of the given addon, e.g. {"1.0.2", "1.0.3"} function addon.versions(name) - local versions = {} local addoninfo = addon._registry()[addon.dirname(name)] - for version, _ in pairs(addoninfo and addoninfo.versions or {}) do - table.insert(versions, version) - end - table.sort(versions) - return versions + return table.orderkeys(addoninfo and addoninfo.versions or {}) end -- get all installed addons, only the active version of each addon @@ -581,7 +573,9 @@ end -- function addon.payloadinfos(kind) local payloadinfos = {} - for name, addoninfo in pairs(addon.addons()) do + -- @note we need to iterate them in a deterministic order, the load order matters, + -- e.g. the first plugin wins if two addons provide the same task name + for name, addoninfo in table.orderpairs(addon.addons()) do if table.contains(addoninfo.payloads or {}, kind) then table.insert(payloadinfos, { name = name, @@ -589,7 +583,6 @@ function addon.payloadinfos(kind) dir = path.join(addon.installdir(), name, addoninfo.version, kind)}) end end - table.sort(payloadinfos, function (a, b) return a.name < b.name end) return payloadinfos end |
