The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7883
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === This was bundled in PR #7786 due to #7784. The package has since moved to a more stable import path (github.com/fvbommel/sortorder). See fvbommel/util#7 Signed-off-by: Frits van Bommel <fvbom...@gmail.com>
From 810d202cb66600cbca592caa868abefdfcd0033f Mon Sep 17 00:00:00 2001 From: Frits van Bommel <fvbom...@gmail.com> Date: Thu, 17 Sep 2020 13:19:26 +0200 Subject: [PATCH] lxc: Unbundle sortorder This was bundled in PR #7786 due to #7784. The package has since moved to a more stable import path (github.com/fvbommel/sortorder). See fvbommel/util#7 Signed-off-by: Frits van Bommel <fvbom...@gmail.com> --- lxc/utils.go | 9 +++--- lxc/utils_sortorder.go | 69 ------------------------------------------ 2 files changed, 5 insertions(+), 73 deletions(-) delete mode 100644 lxc/utils_sortorder.go diff --git a/lxc/utils.go b/lxc/utils.go index 844d93315f..a5e5091c51 100644 --- a/lxc/utils.go +++ b/lxc/utils.go @@ -7,6 +7,7 @@ import ( "sort" "strings" + "github.com/fvbommel/sortorder" "github.com/pkg/errors" lxd "github.com/lxc/lxd/client" @@ -41,7 +42,7 @@ func (a stringList) Less(i, j int) bool { return true } - return NaturalLess(a[i][x], a[j][x]) + return sortorder.NaturalLess(a[i][x], a[j][x]) } // Instance name sorting @@ -64,7 +65,7 @@ func (a byName) Less(i, j int) bool { return true } - return NaturalLess(a[i][0], a[j][0]) + return sortorder.NaturalLess(a[i][0], a[j][0]) } // Storage volume sorting @@ -84,7 +85,7 @@ func (a byNameAndType) Less(i, j int) bool { jType := strings.Split(a[j][0], " ")[0] if iType != jType { - return NaturalLess(a[i][0], a[j][0]) + return sortorder.NaturalLess(a[i][0], a[j][0]) } if a[i][1] == "" { @@ -95,7 +96,7 @@ func (a byNameAndType) Less(i, j int) bool { return true } - return NaturalLess(a[i][1], a[j][1]) + return sortorder.NaturalLess(a[i][1], a[j][1]) } // Batch operations diff --git a/lxc/utils_sortorder.go b/lxc/utils_sortorder.go deleted file mode 100644 index 28c82c92a9..0000000000 --- a/lxc/utils_sortorder.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -// This is copied from https://github.com/fvbommel/util/blob/master/sortorder/natsort.go -// As this is the only function we need from this repository and its -// download link is often unreliable, we are directly copying the function -// here. -// -// Source repository license: MIT - -// NaturalLess compares two strings using natural ordering. This means that e.g. -// "abc2" < "abc12". -// -// Non-digit sequences and numbers are compared separately. The former are -// compared bytewise, while the latter are compared numerically (except that -// the number of leading zeros is used as a tie-breaker, so e.g. "2" < "02") -// -// Limitation: only ASCII digits (0-9) are considered. -func NaturalLess(str1, str2 string) bool { - idx1, idx2 := 0, 0 - for idx1 < len(str1) && idx2 < len(str2) { - c1, c2 := str1[idx1], str2[idx2] - dig1, dig2 := isdigit(c1), isdigit(c2) - switch { - case dig1 != dig2: // Digits before other characters. - return dig1 // True if LHS is a digit, false if the RHS is one. - case !dig1: // && !dig2, because dig1 == dig2 - // UTF-8 compares bytewise-lexicographically, no need to decode - // codepoints. - if c1 != c2 { - return c1 < c2 - } - idx1++ - idx2++ - default: // Digits - // Eat zeros. - for ; idx1 < len(str1) && str1[idx1] == '0'; idx1++ { - } - for ; idx2 < len(str2) && str2[idx2] == '0'; idx2++ { - } - // Eat all digits. - nonZero1, nonZero2 := idx1, idx2 - for ; idx1 < len(str1) && isdigit(str1[idx1]); idx1++ { - } - for ; idx2 < len(str2) && isdigit(str2[idx2]); idx2++ { - } - // If lengths of numbers with non-zero prefix differ, the shorter - // one is less. - if len1, len2 := idx1-nonZero1, idx2-nonZero2; len1 != len2 { - return len1 < len2 - } - // If they're equal, string comparison is correct. - if nr1, nr2 := str1[nonZero1:idx1], str2[nonZero2:idx2]; nr1 != nr2 { - return nr1 < nr2 - } - // Otherwise, the one with less zeros is less. - // Because everything up to the number is equal, comparing the index - // after the zeros is sufficient. - if nonZero1 != nonZero2 { - return nonZero1 < nonZero2 - } - } - // They're identical so far, so continue comparing. - } - // So far they are identical. At least one is ended. If the other continues, - // it sorts last. - return len(str1) < len(str2) -} - -func isdigit(b byte) bool { return '0' <= b && b <= '9' }
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel