MCPcopy Index your code
hub / github.com/hpcloud/tail / waitForChanges

Method waitForChanges

tail.go:338–381  ·  view source on GitHub ↗

waitForChanges waits until the file has been appended, deleted, moved or truncated. When moved or deleted - the file will be reopened if ReOpen is true. Truncated files are always reopened.

()

Source from the content-addressed store, hash-verified

336// moved or truncated. When moved or deleted - the file will be
337// reopened if ReOpen is true. Truncated files are always reopened.
338func (tail *Tail) waitForChanges() error {
339 if tail.changes == nil {
340 pos, err := tail.file.Seek(0, os.SEEK_CUR)
341 if err != nil {
342 return err
343 }
344 tail.changes, err = tail.watcher.ChangeEvents(&tail.Tomb, pos)
345 if err != nil {
346 return err
347 }
348 }
349
350 select {
351 case <-tail.changes.Modified:
352 return nil
353 case <-tail.changes.Deleted:
354 tail.changes = nil
355 if tail.ReOpen {
356 // XXX: we must not log from a library.
357 tail.Logger.Printf("Re-opening moved/deleted file %s ...", tail.Filename)
358 if err := tail.reopen(); err != nil {
359 return err
360 }
361 tail.Logger.Printf("Successfully reopened %s", tail.Filename)
362 tail.openReader()
363 return nil
364 } else {
365 tail.Logger.Printf("Stopping tail as file no longer exists: %s", tail.Filename)
366 return ErrStop
367 }
368 case <-tail.changes.Truncated:
369 // Always reopen truncated files (Follow is true)
370 tail.Logger.Printf("Re-opening truncated file %s ...", tail.Filename)
371 if err := tail.reopen(); err != nil {
372 return err
373 }
374 tail.Logger.Printf("Successfully reopened truncated %s", tail.Filename)
375 tail.openReader()
376 return nil
377 case <-tail.Dying():
378 return ErrStop
379 }
380 panic("unreachable")
381}
382
383func (tail *Tail) openReader() {
384 if tail.MaxLineSize > 0 {

Callers 1

tailFileSyncMethod · 0.95

Calls 4

reopenMethod · 0.95
openReaderMethod · 0.95
PrintfMethod · 0.80
ChangeEventsMethod · 0.65

Tested by

no test coverage detected