WriteTo saves stanza back to stream, modifying itself on the fly
(w *bufio.Writer, isSource, isRelease, isInstaller bool)
| 164 | |
| 165 | // WriteTo saves stanza back to stream, modifying itself on the fly |
| 166 | func (s Stanza) WriteTo(w *bufio.Writer, isSource, isRelease, isInstaller bool) error { |
| 167 | canonicalOrder := canonicalOrderBinary |
| 168 | if isSource { |
| 169 | canonicalOrder = canonicalOrderSource |
| 170 | } |
| 171 | if isRelease { |
| 172 | canonicalOrder = canonicalOrderRelease |
| 173 | } |
| 174 | if isInstaller { |
| 175 | canonicalOrder = canonicalOrderInstaller |
| 176 | } |
| 177 | |
| 178 | for _, field := range canonicalOrder { |
| 179 | value, ok := s[field] |
| 180 | if ok { |
| 181 | delete(s, field) |
| 182 | err := writeField(w, field, value, isRelease) |
| 183 | if err != nil { |
| 184 | return err |
| 185 | } |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | // no extra fields in installer |
| 190 | if !isInstaller { |
| 191 | // Print extra fields in deterministic order (alphabetical) |
| 192 | keys := make([]string, len(s)) |
| 193 | i := 0 |
| 194 | for field := range s { |
| 195 | keys[i] = field |
| 196 | i++ |
| 197 | } |
| 198 | sort.Strings(keys) |
| 199 | for _, field := range keys { |
| 200 | err := writeField(w, field, s[field], isRelease) |
| 201 | if err != nil { |
| 202 | return err |
| 203 | } |
| 204 | } |
| 205 | } |
| 206 | |
| 207 | return nil |
| 208 | } |
| 209 | |
| 210 | // Parsing errors |
| 211 | var ( |