summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go.mod25
-rw-r--r--go.sum36
-rw-r--r--populatePackagePB.go33
-rw-r--r--wit.go26
4 files changed, 112 insertions, 8 deletions
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..59a8ef7
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,25 @@
+module go.wit.com/lib/debian
+
+go 1.24.1
+
+require (
+ github.com/go-cmd/cmd v1.4.3
+ go.wit.com/lib/config v0.0.12
+ go.wit.com/lib/fhelp v0.0.31
+ go.wit.com/lib/protobuf/zoopb v0.0.77
+ go.wit.com/log v0.25.1
+ golang.org/x/sys v0.36.0
+)
+
+require (
+ github.com/google/uuid v1.6.0 // indirect
+ go.wit.com/gui v0.25.5 // indirect
+ go.wit.com/lib/cobol v0.0.14 // indirect
+ go.wit.com/lib/gui/shell v0.22.34 // indirect
+ go.wit.com/lib/protobuf/guipb v0.0.18 // indirect
+ go.wit.com/lib/protobuf/httppb v0.0.11 // indirect
+ go.wit.com/widget v1.1.30 // indirect
+ golang.org/x/term v0.35.0 // indirect
+ golang.org/x/text v0.29.0 // indirect
+ google.golang.org/protobuf v1.36.10 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..43cacbb
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,36 @@
+github.com/go-cmd/cmd v1.4.3 h1:6y3G+3UqPerXvPcXvj+5QNPHT02BUw7p6PsqRxLNA7Y=
+github.com/go-cmd/cmd v1.4.3/go.mod h1:u3hxg/ry+D5kwh8WvUkHLAMe2zQCaXd00t35WfQaOFk=
+github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
+github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+go.wit.com/gui v0.25.5 h1:aFxRWXOr6gKJP0ubIOqrjvnsRYvvMEnHk29vad8jYqQ=
+go.wit.com/gui v0.25.5/go.mod h1:fpjTlkB6wVak26bDg/HUFp1lcqQbrwbJQ/LDc8iEDYU=
+go.wit.com/lib/cobol v0.0.14 h1:JfpME5DtTjIC/kU9a68tInCYb7Hv2k5SSmx09GfBcys=
+go.wit.com/lib/cobol v0.0.14/go.mod h1:BCpLE7IBG8BjwUUwF/Vxd92xDO3uYhtmdt8LtDRy0oM=
+go.wit.com/lib/config v0.0.12 h1:WW59b+33WFixH0R2xYrsJ7QvMjAhkPtOJsP6uqphBlU=
+go.wit.com/lib/config v0.0.12/go.mod h1:vJNVUhopWbreQdYIEBkoYB5TVwwrJKOcdXdCwEaM0XY=
+go.wit.com/lib/fhelp v0.0.31 h1:JYMkVWM6j4lTcN5pp4JUfd+e026YuPZkg8GncrMSHFA=
+go.wit.com/lib/fhelp v0.0.31/go.mod h1:mMGTl1/JAOzDXWrsgVISO/eSGpjNd4Oq4+40RZn3UjU=
+go.wit.com/lib/gui/shell v0.22.34 h1:pjtSdJFovA13bot4/xg5b4XjVmPd+r+q1n7ElOFAnLU=
+go.wit.com/lib/gui/shell v0.22.34/go.mod h1:aRDwKXKXkZaO4y/0KPe1lhKQCXpyi8hXgUEOrHhzpAI=
+go.wit.com/lib/protobuf/guipb v0.0.18 h1:t6eHo581/lZW2drRinfIPd3ik2RYJPvIR7qnC5Pre1c=
+go.wit.com/lib/protobuf/guipb v0.0.18/go.mod h1:sJot6ptBr+W1wVCZ9L4VYkgJMLl5E7aEaMPfSBUBB80=
+go.wit.com/lib/protobuf/httppb v0.0.11 h1:RQ7D3GAhnPDNNl9Er0s6gUZ9VhHkxBl0cRS69WivSvw=
+go.wit.com/lib/protobuf/httppb v0.0.11/go.mod h1:lQxDKrqQzaZTEQMte4Iv/DU9lrz4FvIhyKyO0Cv7JIQ=
+go.wit.com/lib/protobuf/zoopb v0.0.77 h1:nr3K3VEyHzP7iauGGg3XnGDwvuGwgzxzPcDf2ukIIbE=
+go.wit.com/lib/protobuf/zoopb v0.0.77/go.mod h1:8Lf2hU3jKyUYqIT8nUBhbYe4+IVBZ/8rfdW1kfohu24=
+go.wit.com/log v0.25.1 h1:74WVf9NSN6z5jc2oSbA1ehxdZ7V/NBXTk5t0jIoaTMg=
+go.wit.com/log v0.25.1/go.mod h1:XE4lTfAibWgwBJksIk7u3IEJ8xcBvNhnlewYAQGj2Ew=
+go.wit.com/widget v1.1.30 h1:O/dIG7QtDrZkR5P6f8JAMyevBiMXSun9vL6F0KFAWV8=
+go.wit.com/widget v1.1.30/go.mod h1:wj7TpAr2gk7Poa+v8XQkH1aidnTdgAa/a8GxrMtcztw=
+golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
+golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
+golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
+golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
+golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
+google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
diff --git a/populatePackagePB.go b/populatePackagePB.go
new file mode 100644
index 0000000..10fb4f2
--- /dev/null
+++ b/populatePackagePB.go
@@ -0,0 +1,33 @@
+package debian
+
+import (
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/reflect/protoreflect"
+)
+
+func setString(pb proto.Message, varname string, val string) bool {
+ msg := pb.ProtoReflect() // This is the entry point to the reflection API.
+
+ descriptor := msg.Descriptor() // Get the message's descriptor, which contains metadata about its fields.
+
+ fieldName := protoreflect.Name(varname)
+ fieldDescriptor := descriptor.Fields().ByName(fieldName)
+
+ if fieldDescriptor == nil {
+ return false
+ }
+
+ if fieldDescriptor.Kind() != protoreflect.StringKind {
+ // The field exists but is not a string, so we can't return it as one.
+ return false
+ }
+
+ valueToSet := protoreflect.ValueOfString(varname)
+
+ // 6. If the field exists and is a string, get its value.
+ // The value is returned as a protoreflect.Value.
+ msg.Set(fieldDescriptor, valueToSet)
+
+ // 7. Convert the protoreflect.Value to a native Go string.
+ return true
+}
diff --git a/wit.go b/wit.go
index 10d1f52..df713fc 100644
--- a/wit.go
+++ b/wit.go
@@ -7,6 +7,7 @@ import (
"go.wit.com/lib/fhelp"
"go.wit.com/lib/protobuf/zoopb"
+ "go.wit.com/log"
)
// obviously a hack at this point
@@ -54,13 +55,14 @@ func scanPackageListFile(m *zoopb.Machine, filename string) error {
for scanner.Scan() {
line := scanner.Text()
if line == "" {
- p := parsePackageInfo(debInfo)
+ p, namemap := parsePackageInfo(debInfo)
+ log.Info(len(namemap))
AddIfNewer(m.Wit, p)
debInfo = ""
}
debInfo += line + "\n"
}
- p := parsePackageInfo(debInfo)
+ p, _ := parsePackageInfo(debInfo)
m.Wit.Append(p)
return nil
}
@@ -87,17 +89,20 @@ func (m *Machine) addPackage(name string, version string, filename string) {
*/
// parses dpkg -s foo.deb
-func parsePackageInfo(lines string) *zoopb.Package {
+func parsePackageInfo(lines string) (*zoopb.Package, map[string]string) {
var name string
var version string
var filename string
var gopath string
+ var last string
+ namemap := make(map[string]string)
for _, line := range strings.Split(lines, "\n") {
if line == "" {
continue
}
if strings.HasPrefix(line, " ") {
+ namemap[last] += line + "\n"
// these are usually Description: lines
continue
}
@@ -107,19 +112,24 @@ func parsePackageInfo(lines string) *zoopb.Package {
}
line = strings.TrimSpace(line)
parts := strings.Split(line, " ")
+ if len(parts) == 1 {
+ namemap[parts[0]] = ""
+ }
if len(parts) < 2 {
continue
}
- if parts[0] == "Package:" {
+ last = parts[0]
+ namemap[last] = strings.Join(parts[1:], " ") + "\n"
+ if last == "Package:" {
name = parts[1]
}
- if parts[0] == "Version:" {
+ if last == "Version:" {
version = parts[1]
}
- if parts[0] == "Filename:" {
+ if last == "Filename:" {
filename = strings.Join(parts[1:], " ")
}
- if parts[0] == "GoPath:" {
+ if last == "GoPath:" {
gopath = parts[1]
}
}
@@ -131,5 +141,5 @@ func parsePackageInfo(lines string) *zoopb.Package {
SrcPath: gopath,
}
- return &p
+ return &p, namemap
}