PackageQuery returns query that every package should match to be included
()
| 168 | |
| 169 | // PackageQuery returns query that every package should match to be included |
| 170 | func (c *Changes) PackageQuery() PackageQuery { |
| 171 | var archQuery PackageQuery = &FieldQuery{Field: "$Architecture", Relation: VersionEqual, Value: ""} |
| 172 | for _, arch := range c.Architectures { |
| 173 | archQuery = &OrQuery{L: &FieldQuery{Field: "$Architecture", Relation: VersionEqual, Value: arch}, R: archQuery} |
| 174 | } |
| 175 | |
| 176 | // if c.Source is empty, this would never match |
| 177 | sourceQuery := &AndQuery{ |
| 178 | L: &FieldQuery{Field: "$PackageType", Relation: VersionEqual, Value: ArchitectureSource}, |
| 179 | R: &FieldQuery{Field: "Name", Relation: VersionEqual, Value: c.Source}, |
| 180 | } |
| 181 | |
| 182 | var binaryQuery PackageQuery |
| 183 | if len(c.Binary) > 0 { |
| 184 | binaryQuery = &FieldQuery{Field: "Name", Relation: VersionEqual, Value: c.Binary[0]} |
| 185 | // matching debug ddeb packages, they're not present in the Binary field |
| 186 | var ddebQuery PackageQuery = &FieldQuery{Field: "Name", Relation: VersionEqual, Value: fmt.Sprintf("%s-dbgsym", c.Binary[0])} |
| 187 | |
| 188 | for _, binary := range c.Binary[1:] { |
| 189 | binaryQuery = &OrQuery{ |
| 190 | L: &FieldQuery{Field: "Name", Relation: VersionEqual, Value: binary}, |
| 191 | R: binaryQuery, |
| 192 | } |
| 193 | ddebQuery = &OrQuery{ |
| 194 | L: &FieldQuery{Field: "Name", Relation: VersionEqual, Value: fmt.Sprintf("%s-dbgsym", binary)}, |
| 195 | R: ddebQuery, |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | binaryQuery = &OrQuery{ |
| 200 | L: binaryQuery, |
| 201 | R: ddebQuery, |
| 202 | } |
| 203 | |
| 204 | binaryQuery = &AndQuery{ |
| 205 | L: &NotQuery{Q: &FieldQuery{Field: "$PackageType", Relation: VersionEqual, Value: ArchitectureSource}}, |
| 206 | R: binaryQuery} |
| 207 | } |
| 208 | |
| 209 | var nameQuery PackageQuery |
| 210 | if binaryQuery == nil { |
| 211 | nameQuery = sourceQuery |
| 212 | } else { |
| 213 | nameQuery = &OrQuery{L: sourceQuery, R: binaryQuery} |
| 214 | } |
| 215 | |
| 216 | return &AndQuery{L: archQuery, R: nameQuery} |
| 217 | } |
| 218 | |
| 219 | // GetField implements PackageLike interface |
| 220 | func (c *Changes) GetField(field string) string { |
no outgoing calls