From d5cba68b58b1f3af86c47e64d52fdf86cb02a76f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20R=C3=B6hl?= <Thomas.Roehl@googlemail.com>
Date: Tue, 29 Apr 2025 16:48:05 +0200
Subject: [PATCH] Remove hostlist, now in cc-lib

---
 pkg/hostlist/hostlist.go      | 125 ---------------------------------
 pkg/hostlist/hostlist_test.go | 126 ----------------------------------
 2 files changed, 251 deletions(-)
 delete mode 100644 pkg/hostlist/hostlist.go
 delete mode 100644 pkg/hostlist/hostlist_test.go

diff --git a/pkg/hostlist/hostlist.go b/pkg/hostlist/hostlist.go
deleted file mode 100644
index 6ed5ae0..0000000
--- a/pkg/hostlist/hostlist.go
+++ /dev/null
@@ -1,125 +0,0 @@
-package hostlist
-
-import (
-	"fmt"
-	"regexp"
-	"sort"
-	"strconv"
-	"strings"
-)
-
-func Expand(in string) (result []string, err error) {
-
-	// Create ranges regular expression
-	reStNumber := "[[:digit:]]+"
-	reStRange := reStNumber + "-" + reStNumber
-	reStOptionalNumberOrRange := "(" + reStNumber + ",|" + reStRange + ",)*"
-	reStNumberOrRange := "(" + reStNumber + "|" + reStRange + ")"
-	reStBraceLeft := "[[]"
-	reStBraceRight := "[]]"
-	reStRanges := reStBraceLeft +
-		reStOptionalNumberOrRange +
-		reStNumberOrRange +
-		reStBraceRight
-	reRanges := regexp.MustCompile(reStRanges)
-
-	// Create host list regular expression
-	reStDNSChars := "[a-zA-Z0-9-]+"
-	reStPrefix := "^(" + reStDNSChars + ")"
-	reStOptionalSuffix := "(" + reStDNSChars + ")?"
-	re := regexp.MustCompile(reStPrefix + "([[][0-9,-]+[]])?" + reStOptionalSuffix)
-
-	// Remove all delimiters from the input
-	in = strings.TrimLeft(in, ", ")
-
-	for len(in) > 0 {
-		if v := re.FindStringSubmatch(in); v != nil {
-
-			// Remove matched part from the input
-			lenPrefix := len(v[0])
-			in = in[lenPrefix:]
-
-			// Remove all delimiters from the input
-			in = strings.TrimLeft(in, ", ")
-
-			// matched prefix, range and suffix
-			hlPrefix := v[1]
-			hlRanges := v[2]
-			hlSuffix := v[3]
-
-			// Single node without ranges
-			if hlRanges == "" {
-				result = append(result, hlPrefix)
-				continue
-			}
-
-			// Node with ranges
-			if v := reRanges.FindStringSubmatch(hlRanges); v != nil {
-
-				// Remove braces
-				hlRanges = hlRanges[1 : len(hlRanges)-1]
-
-				// Split host ranges at ,
-				for _, hlRange := range strings.Split(hlRanges, ",") {
-
-					// Split host range at -
-					RangeStartEnd := strings.Split(hlRange, "-")
-
-					// Range is only a single number
-					if len(RangeStartEnd) == 1 {
-						result = append(result, hlPrefix+RangeStartEnd[0]+hlSuffix)
-						continue
-					}
-
-					// Range has a start and an end
-					widthRangeStart := len(RangeStartEnd[0])
-					widthRangeEnd := len(RangeStartEnd[1])
-					iStart, _ := strconv.ParseUint(RangeStartEnd[0], 10, 64)
-					iEnd, _ := strconv.ParseUint(RangeStartEnd[1], 10, 64)
-					if iStart > iEnd {
-						return nil, fmt.Errorf("single range start is greater than end: %s", hlRange)
-					}
-
-					// Create print format string for range numbers
-					doPadding := widthRangeStart == widthRangeEnd
-					widthPadding := widthRangeStart
-					var formatString string
-					if doPadding {
-						formatString = "%0" + fmt.Sprint(widthPadding) + "d"
-					} else {
-						formatString = "%d"
-					}
-					formatString = hlPrefix + formatString + hlSuffix
-
-					// Add nodes from this range
-					for i := iStart; i <= iEnd; i++ {
-						result = append(result, fmt.Sprintf(formatString, i))
-					}
-				}
-			} else {
-				return nil, fmt.Errorf("not at hostlist range: %s", hlRanges)
-			}
-		} else {
-			return nil, fmt.Errorf("not a hostlist: %s", in)
-		}
-	}
-
-	if result != nil {
-		// sort
-		sort.Strings(result)
-
-		// uniq
-		previous := 1
-		for current := 1; current < len(result); current++ {
-			if result[current-1] != result[current] {
-				if previous != current {
-					result[previous] = result[current]
-				}
-				previous++
-			}
-		}
-		result = result[:previous]
-	}
-
-	return
-}
diff --git a/pkg/hostlist/hostlist_test.go b/pkg/hostlist/hostlist_test.go
deleted file mode 100644
index d5c57ad..0000000
--- a/pkg/hostlist/hostlist_test.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package hostlist
-
-import (
-	"testing"
-)
-
-func TestExpand(t *testing.T) {
-
-	// Compare two slices of strings
-	equal := func(a, b []string) bool {
-		if len(a) != len(b) {
-			return false
-		}
-		for i, v := range a {
-			if v != b[i] {
-				return false
-			}
-		}
-		return true
-	}
-
-	type testDefinition struct {
-		input          string
-		resultExpected []string
-		errorExpected  bool
-	}
-
-	expandTests := []testDefinition{
-		{
-			// Single node
-			input:          "n1",
-			resultExpected: []string{"n1"},
-			errorExpected:  false,
-		},
-		{
-			// Single node, duplicated
-			input:          "n1,n1",
-			resultExpected: []string{"n1"},
-			errorExpected:  false,
-		},
-		{
-			// Single node with padding
-			input:          "n[01]",
-			resultExpected: []string{"n01"},
-			errorExpected:  false,
-		},
-		{
-			// Single node with suffix
-			input:          "n[01]-p",
-			resultExpected: []string{"n01-p"},
-			errorExpected:  false,
-		},
-		{
-			// Multiple nodes with a single range
-			input:          "n[1-2]",
-			resultExpected: []string{"n1", "n2"},
-			errorExpected:  false,
-		},
-		{
-			// Multiple nodes with a single range and a single index
-			input:          "n[1-2,3]",
-			resultExpected: []string{"n1", "n2", "n3"},
-			errorExpected:  false,
-		},
-		{
-			// Multiple nodes with different prefixes
-			input:          "n[1-2],m[1,2]",
-			resultExpected: []string{"m1", "m2", "n1", "n2"},
-			errorExpected:  false,
-		},
-		{
-			// Multiple nodes with different suffixes
-			input:          "n[1-2]-p,n[1,2]-q",
-			resultExpected: []string{"n1-p", "n1-q", "n2-p", "n2-q"},
-			errorExpected:  false,
-		},
-		{
-			// Multiple nodes with and without node ranges
-			input:          " n09, n[01-04,06-07,09] , , n10,n04",
-			resultExpected: []string{"n01", "n02", "n03", "n04", "n06", "n07", "n09", "n10"},
-			errorExpected:  false,
-		},
-		{
-			// Forbidden DNS character
-			input:          "n@",
-			resultExpected: []string{},
-			errorExpected:  true,
-		},
-		{
-			// Forbidden range
-			input:          "n[1-2-2,3]",
-			resultExpected: []string{},
-			errorExpected:  true,
-		},
-		{
-			// Forbidden range limits
-			input:          "n[2-1]",
-			resultExpected: []string{},
-			errorExpected:  true,
-		},
-	}
-
-	for _, expandTest := range expandTests {
-		result, err := Expand(expandTest.input)
-
-		hasError := err != nil
-		if hasError != expandTest.errorExpected && hasError {
-			t.Errorf("Expand('%s') failed: unexpected error '%v'",
-				expandTest.input, err)
-			continue
-		}
-		if hasError != expandTest.errorExpected && !hasError {
-			t.Errorf("Expand('%s') did not fail as expected: got result '%+v'",
-				expandTest.input, result)
-			continue
-		}
-		if !hasError && !equal(result, expandTest.resultExpected) {
-			t.Errorf("Expand('%s') failed: got result '%+v', expected result '%v'",
-				expandTest.input, result, expandTest.resultExpected)
-			continue
-		}
-
-		t.Logf("Checked hostlist.Expand('%s'): result = '%+v', err = '%v'",
-			expandTest.input, result, err)
-	}
-}