diff options
| -rw-r--r-- | go.mod | 25 | ||||
| -rw-r--r-- | go.sum | 36 | ||||
| -rw-r--r-- | populatePackagePB.go | 33 | ||||
| -rw-r--r-- | wit.go | 26 |
4 files changed, 112 insertions, 8 deletions
@@ -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 +) @@ -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 +} @@ -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 } |
