From 600c703ef4e4adaee000fb78df2283721a408a96 Mon Sep 17 00:00:00 2001
From: dragon <ExplodingFKL@gmail.com>
Date: Mon, 26 Aug 2024 10:45:24 +0800
Subject: [PATCH] Fix arch OptDepends version check and add gzip compression

---
 modules/packages/arch/metadata.go      | 8 ++++++--
 modules/packages/arch/metadata_test.go | 2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/modules/packages/arch/metadata.go b/modules/packages/arch/metadata.go
index 8fba53e58b..069d7e8c7f 100644
--- a/modules/packages/arch/metadata.go
+++ b/modules/packages/arch/metadata.go
@@ -39,11 +39,12 @@ const (
 var (
 	reName   = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+$`)
 	reVer    = regexp.MustCompile(`^[a-zA-Z0-9:_.+]+-+[0-9]+$`)
-	reOptDep = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+$|^[a-zA-Z0-9@._+-]+(:.*)`)
-	rePkgVer = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+$|^[a-zA-Z0-9@._+-]+(>.*)|^[a-zA-Z0-9@._+-]+(<.*)|^[a-zA-Z0-9@._+-]+(=.*)`)
+	rePkgVer = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+([<>]?=?[a-zA-Z0-9@._+-]+)?$`)
+	reOptDep = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+([<>]?=?[a-zA-Z0-9@._+-]+)?(:.*)?$`)
 
 	magicZSTD = []byte{0x28, 0xB5, 0x2F, 0xFD}
 	magicXZ   = []byte{0xFD, 0x37, 0x7A, 0x58, 0x5A}
+	magicGZ   = []byte{0x1F, 0x8B}
 )
 
 type Package struct {
@@ -111,6 +112,9 @@ func ParsePackage(r *packages.HashedBuffer) (*Package, error) {
 	} else if bytes.Equal(header[:len(magicXZ)], magicXZ) {
 		tarballType = "xz"
 		tarball = archiver.NewTarXz()
+	} else if bytes.Equal(header[:len(magicGZ)], magicGZ) {
+		tarballType = "gz"
+		tarball = archiver.NewTarGz()
 	} else {
 		return nil, errors.New("not supported compression")
 	}
diff --git a/modules/packages/arch/metadata_test.go b/modules/packages/arch/metadata_test.go
index bd4c2a9ad8..c328c76744 100644
--- a/modules/packages/arch/metadata_test.go
+++ b/modules/packages/arch/metadata_test.go
@@ -199,7 +199,7 @@ func TestValidatePackageSpec(t *testing.T) {
 				Provides:     []string{"abc", "def"},
 				License:      []string{"GPL"},
 				Depends:      []string{"go", "gpg=1", "curl>=3", "git<=7"},
-				OptDepends:   []string{"git: something", "make"},
+				OptDepends:   []string{"git: something", "make", "llvm<=17: not support llvm 18+"},
 				MakeDepends:  []string{"chrom"},
 				CheckDepends: []string{"bariy"},
 				Backup:       []string{"etc/pacman.d/filo"},