diff --git a/go.mod b/go.mod
index 24fa888..fb64965 100644
--- a/go.mod
+++ b/go.mod
@@ -6,6 +6,7 @@ require (
github.com/AlecAivazis/survey/v2 v2.3.6
github.com/PuerkitoBio/purell v1.2.0
github.com/alecthomas/chroma/v2 v2.4.0
+ github.com/anacrolix/log v0.14.0
github.com/anacrolix/torrent v1.51.3
github.com/charmbracelet/bubbles v0.14.0
github.com/charmbracelet/bubbletea v0.23.1
@@ -26,7 +27,8 @@ require (
github.com/vmihailenco/msgpack/v5 v5.3.5
go.elara.ws/logger v0.0.0-20230421022458-e80700db2090
go.elara.ws/translate v0.0.0-20230421025926-32ccfcd110e6
- golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b
+ go.elara.ws/vercmp v0.0.0-20230622214216-0b2b067575c4
+ golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
golang.org/x/sys v0.7.0
golang.org/x/text v0.9.0
google.golang.org/protobuf v1.28.1
@@ -53,7 +55,6 @@ require (
github.com/anacrolix/envpprof v1.2.1 // indirect
github.com/anacrolix/generics v0.0.0-20230428105757-683593396d68 // indirect
github.com/anacrolix/go-libutp v1.2.0 // indirect
- github.com/anacrolix/log v0.14.0 // indirect
github.com/anacrolix/missinggo v1.3.0 // indirect
github.com/anacrolix/missinggo/perf v1.0.0 // indirect
github.com/anacrolix/missinggo/v2 v2.7.0 // indirect
diff --git a/go.sum b/go.sum
index d174557..285df54 100644
--- a/go.sum
+++ b/go.sum
@@ -72,8 +72,6 @@ github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgw
github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.10.0/go.mod h1:s5yBP/j046fm9odtUTbHOfDUq/zh1W8OkPpJtnX0oQI=
github.com/anacrolix/log v0.10.1-0.20220123034749-3920702c17f8/go.mod h1:GmnE2c0nvz8pOIPUSC9Rawgefy1sDXqposC2wgtBZE4=
-github.com/anacrolix/log v0.13.2-0.20230518105052-6aef2c4c91f1 h1:Yo4XQhmdmrkB4RGP7RWvl8U+og2rCBsNqoJFTew0plk=
-github.com/anacrolix/log v0.13.2-0.20230518105052-6aef2c4c91f1/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY=
github.com/anacrolix/log v0.14.0 h1:mYhTSemILe/Z8tIxbGdTIWWpPspI8W/fhZHpoFbDaL0=
github.com/anacrolix/log v0.14.0/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY=
github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62 h1:P04VG6Td13FHMgS5ZBcJX23NPC/fiC4cp9bXwYujdYM=
@@ -106,8 +104,6 @@ github.com/anacrolix/sync v0.4.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DC
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8=
-github.com/anacrolix/torrent v1.51.2 h1:7UWUElt7rCVZlFF/VMaBOoZfpNtaMDj1zfvgsoX17LA=
-github.com/anacrolix/torrent v1.51.2/go.mod h1:yCbMnw1IpltDstasqpZploAMnJrkXNjZFjo7XdDYUDY=
github.com/anacrolix/torrent v1.51.3 h1:Rj5LNfT2/IucClxyskD5klaepNQorSeWHChP+y/xYU8=
github.com/anacrolix/torrent v1.51.3/go.mod h1:t9v92CO5xOCvmg+Qfn3XcBbXVhN9Xg6xID2d565IhVo=
github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/UziniAhJR2OZ9Ox5kOY2053tBbbqUPYA=
@@ -560,6 +556,8 @@ go.elara.ws/logger v0.0.0-20230421022458-e80700db2090 h1:RVC8XvWo6Yw4HUshqx4TSzu
go.elara.ws/logger v0.0.0-20230421022458-e80700db2090/go.mod h1:qng49owViqsW5Aey93lwBXONw20oGbJIoLVscB16mPM=
go.elara.ws/translate v0.0.0-20230421025926-32ccfcd110e6 h1:4xCBxLPBn3Y2DuIcj8zQ1tQOFLrpu6tEIGUWn/Q6zPM=
go.elara.ws/translate v0.0.0-20230421025926-32ccfcd110e6/go.mod h1:NmfCFqwq7X/aqa/ZVkIysj17JyMEY4Bb5E921kMswNo=
+go.elara.ws/vercmp v0.0.0-20230622214216-0b2b067575c4 h1:Ep54XceQlKhcCHl9awG+wWP4kz4kIP3c3Lzw/Gc/zwY=
+go.elara.ws/vercmp v0.0.0-20230622214216-0b2b067575c4/go.mod h1:/7PNW7nFnDR5W7UXZVc04gdVLR/wBNgkm33KgIz0OBk=
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
@@ -584,8 +582,8 @@ golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b h1:SCE/18RnFsLrjydh/R/s5EVvHoZprqEQUuoxK8q2Pc4=
-golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
+golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc=
+golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
diff --git a/internal/repos/pull.go b/internal/repos/pull.go
index ce7dca2..d9c52cf 100644
--- a/internal/repos/pull.go
+++ b/internal/repos/pull.go
@@ -42,7 +42,7 @@ import (
"go.elara.ws/lure/internal/shutils"
"go.elara.ws/lure/internal/shutils/decoder"
"go.elara.ws/lure/internal/types"
- "go.elara.ws/lure/vercmp"
+ "go.elara.ws/vercmp"
"mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax"
diff --git a/upgrade.go b/upgrade.go
index 1fb9706..fa6e512 100644
--- a/upgrade.go
+++ b/upgrade.go
@@ -28,7 +28,7 @@ import (
"go.elara.ws/lure/internal/db"
"go.elara.ws/lure/internal/repos"
"go.elara.ws/lure/manager"
- "go.elara.ws/lure/vercmp"
+ "go.elara.ws/vercmp"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
)
diff --git a/vercmp/vercmp.go b/vercmp/vercmp.go
deleted file mode 100644
index 4a0b290..0000000
--- a/vercmp/vercmp.go
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * LURE - Linux User REpository
- * Copyright (C) 2023 Arsen Musayelyan
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package vercmp
-
-import (
- _ "embed"
- "strconv"
- "strings"
-
- "golang.org/x/exp/slices"
-)
-
-// Compare compares two version strings.
-// It returns 1 if v1 is greater,
-// 0 if the versions are equal,
-// and -1 if v2 is greater
-func Compare(v1, v2 string) int {
- if v1 == v2 {
- return 0
- }
-
- return sepVerCmp(sepLabel(v1), sepLabel(v2))
-}
-
-func sepVerCmp(e1, e2 []string) int {
- if slices.Equal(e1, e2) {
- return 0
- }
-
- // proc stores the amount of elements processed
- proc := 0
-
- for i := 0; i < len(e1); i++ {
- proc++
-
- if i >= len(e2) {
- return 1
- }
-
- elem1 := e1[i]
- elem2 := e2[i]
-
- if elem1 == elem2 {
- continue
- }
-
- if isNumElem(elem1) && isNumElem(elem2) {
- elem1v, err := strconv.ParseInt(elem1, 10, 64)
- if err != nil {
- // error should never happen due to isNumElem()
- panic(err)
- }
-
- elem2v, err := strconv.ParseInt(elem2, 10, 64)
- if err != nil {
- // error should never happen due to isNumElem()
- panic(err)
- }
-
- if elem1v > elem2v {
- return 1
- } else if elem1v < elem2v {
- return -1
- }
- } else if isNumElem(elem1) && isAlphaElem(elem2) {
- return 1
- } else if isAlphaElem(elem1) && isNumElem(elem2) {
- return -1
- } else if isAlphaElem(elem1) && isAlphaElem(elem2) {
- if elem1 > elem2 {
- return 1
- } else if elem1 < elem2 {
- return -1
- }
- }
- }
-
- if proc < len(e2) {
- return -1
- }
-
- return 0
-}
-
-func sepLabel(label string) []string {
- const (
- other = iota
- alpha
- num
- )
-
- var (
- curType uint8
- out []string
- sb strings.Builder
- )
-
- for _, char := range label {
- if isNum(char) {
- if curType != num && curType != other {
- out = append(out, sb.String())
- sb.Reset()
- }
-
- sb.WriteRune(char)
- curType = num
- } else if isAlpha(char) {
- if curType != alpha && curType != other {
- out = append(out, sb.String())
- sb.Reset()
- }
-
- sb.WriteRune(char)
- curType = alpha
- } else {
- if curType != other {
- out = append(out, sb.String())
- sb.Reset()
- }
- curType = other
- }
- }
-
- if sb.Len() != 0 {
- out = append(out, sb.String())
- }
-
- return out
-}
-
-func isNumElem(s string) bool {
- // Check only the first rune as all elements
- // should consist of the same type of rune
- return isNum([]rune(s[:1])[0])
-}
-
-func isNum(r rune) bool {
- return r >= '0' && r <= '9'
-}
-
-func isAlphaElem(s string) bool {
- // Check only the first rune as all elements
- // should consist of the same type of rune
- return isAlpha([]rune(s[:1])[0])
-}
-
-func isAlpha(r rune) bool {
- return (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z')
-}
diff --git a/vercmp/vercmp_test.go b/vercmp/vercmp_test.go
deleted file mode 100644
index 1ba50a2..0000000
--- a/vercmp/vercmp_test.go
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * LURE - Linux User REpository
- * Copyright (C) 2023 Arsen Musayelyan
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package vercmp
-
-import (
- "testing"
-
- "golang.org/x/exp/slices"
-)
-
-func TestSepLabel(t *testing.T) {
- type item struct {
- label string
- expected []string
- }
-
- table := []item{
- {"2.0.1", []string{"2", "0", "1"}},
- {"v0.0.1", []string{"v", "0", "0", "1"}},
- {"2xFg33.+f.5", []string{"2", "xFg", "33", "f", "5"}},
- }
-
- for _, it := range table {
- t.Run(it.label, func(t *testing.T) {
- s := sepLabel(it.label)
- if !slices.Equal(s, it.expected) {
- t.Errorf("Expected %v, got %v", it.expected, s)
- }
- })
- }
-}
-
-func TestVerCmp(t *testing.T) {
- type item struct {
- v1, v2 string
- expected int
- }
-
- table := []item{
- {"1.0010", "1.9", 1},
- {"1.05", "1.5", 0},
- {"1.0", "1", 1},
- {"1", "1.0", -1},
- {"2.50", "2.5", 1},
- {"FC5", "fc4", -1},
- {"2a", "2.0", -1},
- {"1.0", "1.fc4", 1},
- {"3.0.0_fc", "3.0.0.fc", 0},
- {"4.1__", "4.1+", 0},
- }
-
- for _, it := range table {
- t.Run(it.v1+"/"+it.v2, func(t *testing.T) {
- c := Compare(it.v1, it.v2)
- if c != it.expected {
- t.Errorf("Expected %d, got %d", it.expected, c)
- }
-
- // Ensure opposite comparison gives opposite value
- c = -Compare(it.v2, it.v1)
- if c != it.expected {
- t.Errorf("Expected %d, got %d (opposite)", it.expected, c)
- }
- })
- }
-}