diff options
author | Santiago M. Mola <santi@mola.io> | 2016-12-19 23:36:44 +0100 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2016-12-19 23:36:44 +0100 |
commit | 90d67bb648ae32d5b1a0f7b1af011da6dfb24315 (patch) | |
tree | fc8c14e82974be6ff49e842328ec3206ebf1b4c2 /plumbing/protocol | |
parent | 725ade0de6f60549e65cc4d94094b1f5ed48587f (diff) | |
download | go-git-90d67bb648ae32d5b1a0f7b1af011da6dfb24315.tar.gz |
remote: add Push (#178)
* remote: add Push.
* add Push method to Remote.
* add method Push to Repository.
* examples: add push example.
* requested changes
* add tests, fixes
Diffstat (limited to 'plumbing/protocol')
-rw-r--r-- | plumbing/protocol/packp/report_status.go | 29 | ||||
-rw-r--r-- | plumbing/protocol/packp/report_status_test.go | 19 |
2 files changed, 33 insertions, 15 deletions
diff --git a/plumbing/protocol/packp/report_status.go b/plumbing/protocol/packp/report_status.go index ead4bb6..29c1a4c 100644 --- a/plumbing/protocol/packp/report_status.go +++ b/plumbing/protocol/packp/report_status.go @@ -26,9 +26,19 @@ func NewReportStatus() *ReportStatus { return &ReportStatus{} } -// Ok returns true if the report status reported no error. -func (s *ReportStatus) Ok() bool { - return s.UnpackStatus == ok +// Error returns the first error if any. +func (s *ReportStatus) Error() error { + if s.UnpackStatus != ok { + return fmt.Errorf("unpack error: %s", s.UnpackStatus) + } + + for _, s := range s.CommandStatuses { + if err := s.Error(); err != nil { + return err + } + } + + return nil } // Encode writes the report status to a writer. @@ -135,14 +145,19 @@ type CommandStatus struct { Status string } -// Ok returns true if the command status reported no error. -func (s *CommandStatus) Ok() bool { - return s.Status == ok +// Error returns the error, if any. +func (s *CommandStatus) Error() error { + if s.Status == ok { + return nil + } + + return fmt.Errorf("command error on %s: %s", + s.ReferenceName.String(), s.Status) } func (s *CommandStatus) encode(w io.Writer) error { e := pktline.NewEncoder(w) - if s.Ok() { + if s.Error() == nil { return e.Encodef("ok %s\n", s.ReferenceName.String()) } diff --git a/plumbing/protocol/packp/report_status_test.go b/plumbing/protocol/packp/report_status_test.go index 168d25b..1c3fa81 100644 --- a/plumbing/protocol/packp/report_status_test.go +++ b/plumbing/protocol/packp/report_status_test.go @@ -13,22 +13,25 @@ type ReportStatusSuite struct{} var _ = Suite(&ReportStatusSuite{}) -func (s *ReportStatusSuite) TestOk(c *C) { +func (s *ReportStatusSuite) TestError(c *C) { rs := NewReportStatus() rs.UnpackStatus = "ok" - c.Assert(rs.Ok(), Equals, true) + c.Assert(rs.Error(), IsNil) rs.UnpackStatus = "OK" - c.Assert(rs.Ok(), Equals, false) + c.Assert(rs.Error(), ErrorMatches, "unpack error: OK") rs.UnpackStatus = "" - c.Assert(rs.Ok(), Equals, false) + c.Assert(rs.Error(), ErrorMatches, "unpack error: ") + + cs := &CommandStatus{ReferenceName: plumbing.ReferenceName("ref")} + rs.UnpackStatus = "ok" + rs.CommandStatuses = append(rs.CommandStatuses, cs) - cs := &CommandStatus{} cs.Status = "ok" - c.Assert(cs.Ok(), Equals, true) + c.Assert(rs.Error(), IsNil) cs.Status = "OK" - c.Assert(cs.Ok(), Equals, false) + c.Assert(rs.Error(), ErrorMatches, "command error on ref: OK") cs.Status = "" - c.Assert(cs.Ok(), Equals, false) + c.Assert(rs.Error(), ErrorMatches, "command error on ref: ") } func (s *ReportStatusSuite) testEncodeDecodeOk(c *C, rs *ReportStatus, lines ...string) { |