Encode transforms a Tree into a plumbing.EncodedObject. The tree entries must be sorted by name.
(o plumbing.EncodedObject)
| 385 | // Encode transforms a Tree into a plumbing.EncodedObject. |
| 386 | // The tree entries must be sorted by name. |
| 387 | func (t *Tree) Encode(o plumbing.EncodedObject) (err error) { |
| 388 | o.SetType(plumbing.TreeObject) |
| 389 | w, err := o.Writer() |
| 390 | if err != nil { |
| 391 | return err |
| 392 | } |
| 393 | |
| 394 | defer ioutil.CheckClose(w, &err) |
| 395 | |
| 396 | if !sort.IsSorted(TreeEntrySorter(t.Entries)) { |
| 397 | return ErrEntriesNotSorted |
| 398 | } |
| 399 | |
| 400 | for _, entry := range t.Entries { |
| 401 | if strings.IndexByte(entry.Name, 0) != -1 { |
| 402 | return fmt.Errorf("malformed filename %q", entry.Name) |
| 403 | } |
| 404 | if _, err = fmt.Fprintf(w, "%o %s", entry.Mode, entry.Name); err != nil { |
| 405 | return err |
| 406 | } |
| 407 | |
| 408 | if _, err = w.Write([]byte{0x00}); err != nil { |
| 409 | return err |
| 410 | } |
| 411 | |
| 412 | if _, err = w.Write(entry.Hash[:]); err != nil { |
| 413 | return err |
| 414 | } |
| 415 | } |
| 416 | |
| 417 | return err |
| 418 | } |
| 419 | |
| 420 | // Diff returns a list of changes between this tree and the provided one |
| 421 | func (t *Tree) Diff(to *Tree) (Changes, error) { |