@@ -59,6 +59,21 @@ func (n *Netrc) FindMachine(name string) (*Machine, error) {
5959 return def , nil
6060}
6161
62+ // MarshalText implements the encoding.TextMarshaler interface to encode a
63+ // Netrc into text format.
64+ func (n * Netrc ) MarshalText () (text []byte , err error ) {
65+ for i := range n .tokens {
66+ text = append (text , n .tokens [i ].rawkind ... )
67+ switch n .tokens [i ].kind {
68+ case tkMacdef :
69+ text = append (text , ' ' )
70+ text = append (text , n .tokens [i ].macroName ... )
71+ }
72+ text = append (text , n .tokens [i ].rawvalue ... )
73+ }
74+ return
75+ }
76+
6277// Machine contains information about a remote machine.
6378type Machine struct {
6479 Name string
@@ -141,8 +156,8 @@ func scanTokensKeepPrefix(data []byte, atEOF bool) (advance int, token []byte, e
141156 break
142157 }
143158 }
144- if atEOF && len (data ) == 0 {
145- return 0 , nil , nil
159+ if atEOF && len (data ) == 0 || start == len ( data ) {
160+ return len ( data ), data , nil
146161 }
147162 if len (data ) > start && data [start ] == '#' {
148163 return scanLinesKeepPrefix (data , atEOF )
@@ -232,7 +247,6 @@ func parse(r io.Reader, pos int) (*Netrc, error) {
232247 // if macro rawvalue + rawb would contain \n\n, then macro def is over
233248 currentMacro .value = string (bytes .TrimLeft (currentMacro .rawvalue , "\r \n " ))
234249 nrc .macros [currentMacro .macroName ] = currentMacro .value
235- nrc .tokens = append (nrc .tokens , currentMacro )
236250 currentMacro = nil
237251 }
238252
@@ -288,8 +302,6 @@ func parse(r io.Reader, pos int) (*Netrc, error) {
288302 return nil , & Error {pos , err .Error ()}
289303 }
290304 t .value = m .Account
291- case tkComment :
292- // read whole line
293305 }
294306
295307 nrc .tokens = append (nrc .tokens , t )
0 commit comments