This is an automated email from the ASF dual-hosted git repository.

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/master by this push:
     new a43526d  chore(logging): move log colouring definition to runtime
a43526d is described below

commit a43526d366378b0bda02d88b44fc97ead01ca315
Author: lburgazzoli <lburgazz...@gmail.com>
AuthorDate: Sat Oct 13 18:39:19 2018 +0200

    chore(logging): move log colouring definition to runtime
---
 Gopkg.lock                                         |  13 --
 pkg/util/log/util.go                               |  21 +--
 runtime/jvm/src/main/resources/log4j2.properties   |   2 +-
 vendor/github.com/arsham/blush/LICENSE             |  21 ---
 vendor/github.com/arsham/blush/blush/blush.go      | 188 --------------------
 vendor/github.com/arsham/blush/blush/colour.go     | 196 ---------------------
 vendor/github.com/arsham/blush/blush/doc.go        |  30 ----
 vendor/github.com/arsham/blush/blush/errors.go     |  16 --
 vendor/github.com/arsham/blush/blush/find.go       | 168 ------------------
 .../arsham/blush/internal/reader/reader.go         | 150 ----------------
 .../github.com/arsham/blush/internal/tools/dir.go  | 118 -------------
 .../arsham/blush/internal/tools/strings.go         |  20 ---
 12 files changed, 2 insertions(+), 941 deletions(-)

diff --git a/Gopkg.lock b/Gopkg.lock
index 26413b2..0c22817 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -26,18 +26,6 @@
   revision = "de5bf2ad457846296e2031421a34e2568e304e35"
 
 [[projects]]
-  digest = "1:69ebf3eaf09a9528d0fa78baecf58a816acd73b6b500eb714c54b9d8a01cff0c"
-  name = "github.com/arsham/blush"
-  packages = [
-    "blush",
-    "internal/reader",
-    "internal/tools",
-  ]
-  pruneopts = "NUT"
-  revision = "a87294e47998d46b608c76cecb35b712103ad45b"
-  version = "v0.5.3"
-
-[[projects]]
   branch = "master"
   digest = "1:707ebe952a8b3d00b343c01536c79c73771d100f63ec6babeaed5c79e2b8a8dd"
   name = "github.com/beorn7/perks"
@@ -751,7 +739,6 @@
   analyzer-name = "dep"
   analyzer-version = 1
   input-imports = [
-    "github.com/arsham/blush/blush",
     "github.com/fatih/structs",
     "github.com/mitchellh/mapstructure",
     "github.com/openshift/api/apps/v1",
diff --git a/pkg/util/log/util.go b/pkg/util/log/util.go
index 05a83db..c32ae15 100644
--- a/pkg/util/log/util.go
+++ b/pkg/util/log/util.go
@@ -25,7 +25,6 @@ import (
        "os"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
-       "github.com/arsham/blush/blush"
 )
 
 // Print prints integrations logs to the stdout
@@ -33,25 +32,7 @@ func Print(ctx context.Context, integration 
*v1alpha1.Integration) error {
        scraper := NewSelectorScraper(integration.Namespace, 
"camel.apache.org/integration="+integration.Name)
        reader := scraper.Start(ctx)
 
-       b := &blush.Blush{
-               Finders: []blush.Finder{
-                       blush.NewExact("FATAL", blush.Red),
-                       blush.NewExact("ERROR", blush.Red),
-                       blush.NewExact("WARN", blush.Yellow),
-                       blush.NewExact("INFO", blush.Green),
-                       blush.NewExact("DEBUG", blush.Colour{
-                               Foreground: blush.RGB{R: 170, G: 170, B: 170},
-                               Background: blush.NoRGB,
-                       }),
-                       blush.NewExact("TRACE", blush.Colour{
-                               Foreground: blush.RGB{R: 170, G: 170, B: 170},
-                               Background: blush.NoRGB,
-                       }),
-               },
-               Reader: ioutil.NopCloser(reader),
-       }
-
-       if _, err := io.Copy(os.Stdout, b); err != nil {
+       if _, err := io.Copy(os.Stdout, ioutil.NopCloser(reader)); err != nil {
                fmt.Println(err.Error())
        }
 
diff --git a/runtime/jvm/src/main/resources/log4j2.properties 
b/runtime/jvm/src/main/resources/log4j2.properties
index 9d5f10e..9f0f4b1 100644
--- a/runtime/jvm/src/main/resources/log4j2.properties
+++ b/runtime/jvm/src/main/resources/log4j2.properties
@@ -1,7 +1,7 @@
 appender.console.type = Console
 appender.console.name = console
 appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] 
%c{1} - %msg%n
+appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} 
%highlight{%-5level} [%t] %c{1} - %msg%n
 
 rootLogger.level = INFO
 rootLogger.appenderRef.stdout.ref = console
\ No newline at end of file
diff --git a/vendor/github.com/arsham/blush/LICENSE 
b/vendor/github.com/arsham/blush/LICENSE
deleted file mode 100644
index 03bc557..0000000
--- a/vendor/github.com/arsham/blush/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 Arsham Shirvani
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/arsham/blush/blush/blush.go 
b/vendor/github.com/arsham/blush/blush/blush.go
deleted file mode 100644
index 1e194a7..0000000
--- a/vendor/github.com/arsham/blush/blush/blush.go
+++ /dev/null
@@ -1,188 +0,0 @@
-package blush
-
-import (
-       "bufio"
-       "io"
-
-       "github.com/arsham/blush/internal/reader"
-)
-
-type mode int
-
-const (
-       // Separator string between name of the reader and the contents.
-       Separator = ": "
-
-       // DefaultLineCache is minimum lines to cache.
-       DefaultLineCache = 50
-
-       // DefaultCharCache is minimum characters to cache for each line. This 
is in
-       // effect only if Read() function is used.
-       DefaultCharCache = 1000
-
-       readMode mode = iota
-       writeToMode
-)
-
-// Blush reads from reader and matches against all finders. If NoCut is true,
-// any unmatched lines are printed as well. If WithFileName is true, blush will
-// write the filename before it writes the output. Read and WriteTo will return
-// ErrReadWriteMix if both Read and WriteTo are called on the same object. See
-// package docs for more details.
-type Blush struct {
-       Finders      []Finder
-       Reader       io.ReadCloser
-       LineCache    uint
-       CharCache    uint
-       NoCut        bool // do not cut out non-matched lines.
-       WithFileName bool
-       closed       bool
-       readLineCh   chan []byte
-       readCh       chan byte
-       mode         mode
-}
-
-// Read creates a goroutine on first invocation to read from the underlying
-// reader. It is considerably slower than WriteTo as it reads the bytes one by
-// one in order to produce the results, therefore you should use WriteTo
-// directly or use io.Copy() on blush.
-func (b *Blush) Read(p []byte) (n int, err error) {
-       if b.closed {
-               return 0, ErrClosed
-       }
-       if b.mode == writeToMode {
-               return 0, ErrReadWriteMix
-       }
-       if b.mode != readMode {
-               if err = b.setup(readMode); err != nil {
-                       return 0, err
-               }
-       }
-       for n = 0; n < cap(p); n++ {
-               c, ok := <-b.readCh
-               if !ok {
-                       return n, io.EOF
-               }
-               p[n] = c
-       }
-       return n, err
-}
-
-// WriteTo writes matches to w. It returns an error if the writer is nil or
-// there are not paths defined or there is no files found in the Reader.
-func (b *Blush) WriteTo(w io.Writer) (int64, error) {
-       if b.closed {
-               return 0, ErrClosed
-       }
-       if b.mode == readMode {
-               return 0, ErrReadWriteMix
-       }
-       if b.mode != writeToMode {
-               if err := b.setup(writeToMode); err != nil {
-                       return 0, err
-               }
-       }
-       var total int
-       if w == nil {
-               return 0, ErrNoWriter
-       }
-       for line := range b.readLineCh {
-               if n, err := w.Write(line); err != nil {
-                       return int64(n), err
-               }
-               total += len(line)
-       }
-       return int64(total), nil
-}
-
-func (b *Blush) setup(m mode) error {
-       if b.Reader == nil {
-               return reader.ErrNoReader
-       }
-       if len(b.Finders) < 1 {
-               return ErrNoFinder
-       }
-
-       b.mode = m
-       if b.LineCache == 0 {
-               b.LineCache = DefaultLineCache
-       }
-       if b.CharCache == 0 {
-               b.CharCache = DefaultCharCache
-       }
-       b.readLineCh = make(chan []byte, b.LineCache)
-       b.readCh = make(chan byte, b.CharCache)
-       go b.readLines()
-       if m == readMode {
-               go b.transfer()
-       }
-       return nil
-}
-
-func (b Blush) decorate(input string) (string, bool) {
-       str, ok := lookInto(b.Finders, input)
-       if ok || b.NoCut {
-               var prefix string
-               if b.WithFileName {
-                       prefix = fileName(b.Reader)
-               }
-               return prefix + str, true
-       }
-       return "", false
-}
-
-func (b Blush) readLines() {
-       var (
-               ok bool
-               sc = bufio.NewReader(b.Reader)
-       )
-       for {
-               line, err := sc.ReadString('\n')
-               if line, ok = b.decorate(line); ok {
-                       b.readLineCh <- []byte(line)
-               }
-               if err != nil {
-                       break
-               }
-       }
-       close(b.readLineCh)
-}
-
-func (b Blush) transfer() {
-       for line := range b.readLineCh {
-               for _, c := range line {
-                       b.readCh <- c
-               }
-       }
-       close(b.readCh)
-}
-
-// Close closes the reader and returns whatever error it returns.
-func (b *Blush) Close() error {
-       b.closed = true
-       return b.Reader.Close()
-}
-
-// lookInto returns a new decorated line if any of the finders decorate it, or
-// the given line as it is.
-func lookInto(f []Finder, line string) (string, bool) {
-       var found bool
-       for _, a := range f {
-               if s, ok := a.Find(line); ok {
-                       line = s
-                       found = true
-               }
-       }
-       return line, found
-}
-
-// fileName returns an empty string if it could not query the fileName from r.
-func fileName(r io.Reader) string {
-       type namer interface {
-               FileName() string
-       }
-       if o, ok := r.(namer); ok {
-               return o.FileName() + Separator
-       }
-       return ""
-}
diff --git a/vendor/github.com/arsham/blush/blush/colour.go 
b/vendor/github.com/arsham/blush/blush/colour.go
deleted file mode 100644
index f2459cb..0000000
--- a/vendor/github.com/arsham/blush/blush/colour.go
+++ /dev/null
@@ -1,196 +0,0 @@
-package blush
-
-import (
-       "fmt"
-       "strconv"
-       "strings"
-)
-
-// BgLevel is the colour value of R, G, or B when the colour is shown in the
-// background.
-const BgLevel = 70
-
-// These are colour settings. NoRGB results in no colouring in the terminal.
-var (
-       NoRGB     = RGB{-1, -1, -1}
-       FgRed     = RGB{255, 0, 0}
-       FgBlue    = RGB{0, 0, 255}
-       FgGreen   = RGB{0, 255, 0}
-       FgBlack   = RGB{0, 0, 0}
-       FgWhite   = RGB{255, 255, 255}
-       FgCyan    = RGB{0, 255, 255}
-       FgMagenta = RGB{255, 0, 255}
-       FgYellow  = RGB{255, 255, 0}
-       BgRed     = RGB{BgLevel, 0, 0}
-       BgBlue    = RGB{0, 0, BgLevel}
-       BgGreen   = RGB{0, BgLevel, 0}
-       BgBlack   = RGB{0, 0, 0}
-       BgWhite   = RGB{BgLevel, BgLevel, BgLevel}
-       BgCyan    = RGB{0, BgLevel, BgLevel}
-       BgMagenta = RGB{BgLevel, 0, BgLevel}
-       BgYellow  = RGB{BgLevel, BgLevel, 0}
-)
-
-// Some stock colours. There will be no colouring when NoColour is used.
-var (
-       NoColour = Colour{NoRGB, NoRGB}
-       Red      = Colour{FgRed, NoRGB}
-       Blue     = Colour{FgBlue, NoRGB}
-       Green    = Colour{FgGreen, NoRGB}
-       Black    = Colour{FgBlack, NoRGB}
-       White    = Colour{FgWhite, NoRGB}
-       Cyan     = Colour{FgCyan, NoRGB}
-       Magenta  = Colour{FgMagenta, NoRGB}
-       Yellow   = Colour{FgYellow, NoRGB}
-)
-
-//DefaultColour is the default colour if no colour is set via arguments.
-var DefaultColour = Blue
-
-// RGB represents colours that can be printed in terminals. R, G and B should 
be
-// between 0 and 255.
-type RGB struct {
-       R, G, B int
-}
-
-// Colour is a pair of RGB colours for foreground and background.
-type Colour struct {
-       Foreground RGB
-       Background RGB
-}
-
-// Colourise wraps the input between colours.
-func Colourise(input string, c Colour) string {
-       if c.Background == NoRGB && c.Foreground == NoRGB {
-               return input
-       }
-
-       var fg, bg string
-       if c.Foreground != NoRGB {
-               fg = foreground(c.Foreground)
-       }
-       if c.Background != NoRGB {
-               bg = background(c.Background)
-       }
-       return fg + bg + input + unformat()
-}
-
-func foreground(c RGB) string {
-       return fmt.Sprintf("\033[38;5;%dm", colour(c.R, c.G, c.B))
-}
-
-func background(c RGB) string {
-       return fmt.Sprintf("\033[48;5;%dm", colour(c.R, c.G, c.B))
-}
-
-func unformat() string {
-       return "\033[0m"
-}
-
-func colour(red, green, blue int) int {
-       return 16 + baseColor(red, 36) + baseColor(green, 6) + baseColor(blue, 
1)
-}
-
-func baseColor(value int, factor int) int {
-       return int(6*float64(value)/256) * factor
-}
-
-func colorFromArg(colour string) Colour {
-       if strings.HasPrefix(colour, "#") {
-               return hexColour(colour)
-       }
-       if grouping.MatchString(colour) {
-               if c := colourGroup(colour); c != NoColour {
-                       return c
-               }
-       }
-       return stockColour(colour)
-}
-
-func colourGroup(colour string) Colour {
-       g := grouping.FindStringSubmatch(colour)
-       group, err := strconv.Atoi(g[2])
-       if err != nil {
-               return NoColour
-       }
-       c := stockColour(g[1])
-       switch group % 8 {
-       case 0:
-               c.Background = BgRed
-       case 1:
-               c.Background = BgBlue
-       case 2:
-               c.Background = BgGreen
-       case 3:
-               c.Background = BgBlack
-       case 4:
-               c.Background = BgWhite
-       case 5:
-               c.Background = BgCyan
-       case 6:
-               c.Background = BgMagenta
-       case 7:
-               c.Background = BgYellow
-       }
-       return c
-}
-
-func stockColour(colour string) Colour {
-       c := DefaultColour
-       switch colour {
-       case "r", "red":
-               c = Red
-       case "b", "blue":
-               c = Blue
-       case "g", "green":
-               c = Green
-       case "bl", "black":
-               c = Black
-       case "w", "white":
-               c = White
-       case "cy", "cyan":
-               c = Cyan
-       case "mg", "magenta":
-               c = Magenta
-       case "yl", "yellow":
-               c = Yellow
-       case "no-colour", "no-color":
-               c = NoColour
-       }
-       return c
-}
-
-func hexColour(colour string) Colour {
-       var r, g, b int
-       colour = strings.TrimPrefix(colour, "#")
-       switch len(colour) {
-       case 3:
-               c := strings.Split(colour, "")
-               r = getInt(c[0] + c[0])
-               g = getInt(c[1] + c[1])
-               b = getInt(c[2] + c[2])
-       case 6:
-               c := strings.Split(colour, "")
-               r = getInt(c[0] + c[1])
-               g = getInt(c[2] + c[3])
-               b = getInt(c[4] + c[5])
-       default:
-               return DefaultColour
-       }
-       for _, n := range []int{r, g, b} {
-               if n < 0 {
-                       return DefaultColour
-               }
-       }
-       return Colour{RGB{R: r, G: g, B: b}, NoRGB}
-}
-
-// getInt returns a number between 0-255 from a hex code. If the hex is not
-// between 00 and ff, it returns -1.
-func getInt(hex string) int {
-       d, err := strconv.ParseInt("0x"+hex, 0, 64)
-       if err != nil || d > 255 || d < 0 {
-               return -99
-       }
-       return int(d)
-}
diff --git a/vendor/github.com/arsham/blush/blush/doc.go 
b/vendor/github.com/arsham/blush/blush/doc.go
deleted file mode 100644
index 7bc2b0f..0000000
--- a/vendor/github.com/arsham/blush/blush/doc.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Package blush reads from a given io.Reader line by line and looks for
-// patterns.
-//
-// Blush struct has a Reader property which can be Stdin in case of it being
-// shell's pipe, or any type that implements io.ReadCloser. If NoCut is set to
-// true, it will show all lines despite being not matched. You cannot call
-// Read() and WriteTo() on the same object. Blush will return ErrReadWriteMix 
on
-// the second consequent call. The first time Read/WriteTo is called, it will
-// start a goroutine and reads up to LineCache lines from Reader. If the Read()
-// is in use, it starts a goroutine that reads up to CharCache bytes from the
-// line cache and fills up the given buffer.
-//
-// The hex number should be in 3 or 6 part format (#aaaaaa or #aaa) and each
-// part will be translated to a number value between 0 and 255 when creating 
the
-// Colour instance. If any of hex parts are not between 00 and ff, it creates
-// the DefaultColour value.
-//
-// Important Notes
-//
-// The Read() method could be slow in case of huge inspections. It is
-// recommended to avoid it and use WriteTo() instead; io.Copy() can take care 
of
-// that for you.
-//
-// When WriteTo() is called with an unavailable or un-writeable writer, there
-// will be no further checks until it tries to write into it. If the Write
-// encounters any errors regarding writes, it will return the amount if writes
-// and stops its search.
-//
-// There always will be a newline after each read.
-package blush
diff --git a/vendor/github.com/arsham/blush/blush/errors.go 
b/vendor/github.com/arsham/blush/blush/errors.go
deleted file mode 100644
index da18717..0000000
--- a/vendor/github.com/arsham/blush/blush/errors.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package blush
-
-import "errors"
-
-// ErrNoWriter is returned if a nil object is passed to the WriteTo method.
-var ErrNoWriter = errors.New("no writer defined")
-
-// ErrNoFinder is returned if there is no finder passed to Blush.
-var ErrNoFinder = errors.New("no finders defined")
-
-// ErrClosed is returned if the reader is closed and you try to read from it.
-var ErrClosed = errors.New("reader already closed")
-
-// ErrReadWriteMix is returned when the Read and WriteTo are called on the same
-// object.
-var ErrReadWriteMix = errors.New("you cannot mix Read and WriteTo calls")
diff --git a/vendor/github.com/arsham/blush/blush/find.go 
b/vendor/github.com/arsham/blush/blush/find.go
deleted file mode 100644
index 5e4af29..0000000
--- a/vendor/github.com/arsham/blush/blush/find.go
+++ /dev/null
@@ -1,168 +0,0 @@
-package blush
-
-import (
-       "fmt"
-       "regexp"
-       "strings"
-)
-
-var (
-       isRegExp = regexp.MustCompile(`[\^\$\.\{\}\[\]\*\?]`)
-       // grouping is used for matching colour groups (b1, etc.).
-       grouping = regexp.MustCompile("^([[:alpha:]]+)([[:digit:]]+)$")
-)
-
-// Finder finds texts based on a plain text or regexp logic. If it doesn't find
-// any match, it will return an empty string. It might decorate the match with 
a
-// given instruction.
-type Finder interface {
-       Find(string) (string, bool)
-}
-
-// NewLocator returns a Rx object if search is a valid regexp, otherwise it
-// returns Exact or Iexact. If insensitive is true, the match will be case
-// insensitive. The colour argument can be in short form (b) or long form
-// (blue). If it cannot find the colour, it will fall-back to DefaultColour. 
The
-// colour also can be in hex format, which should be started with a pound sign
-// (#666).
-func NewLocator(colour, search string, insensitive bool) Finder {
-       c := colorFromArg(colour)
-       if !isRegExp.Match([]byte(search)) {
-               if insensitive {
-                       return NewIexact(search, c)
-               }
-               return NewExact(search, c)
-       }
-
-       decore := fmt.Sprintf("(%s)", search)
-       if insensitive {
-               decore = fmt.Sprintf("(?i)%s", decore)
-               if o, err := regexp.Compile(decore); err == nil {
-                       return NewRx(o, c)
-               }
-               return NewIexact(search, c)
-       }
-
-       if o, err := regexp.Compile(decore); err == nil {
-               return NewRx(o, c)
-       }
-       return NewExact(search, c)
-}
-
-// Exact looks for the exact word in the string.
-type Exact struct {
-       s      string
-       colour Colour
-}
-
-// NewExact returns a new instance of the Exact.
-func NewExact(s string, c Colour) Exact {
-       return Exact{
-               s:      s,
-               colour: c,
-       }
-}
-
-// Find looks for the exact string. Any strings it finds will be decorated with
-// the given Colour.
-func (e Exact) Find(input string) (string, bool) {
-       if strings.Contains(input, e.s) {
-               return e.colourise(input, e.colour), true
-       }
-       return "", false
-}
-
-func (e Exact) colourise(input string, c Colour) string {
-       if c == NoColour {
-               return input
-       }
-       return strings.Replace(input, e.s, Colourise(e.s, c), -1)
-}
-
-// Colour returns the Colour property.
-func (e Exact) Colour() Colour {
-       return e.colour
-}
-
-// String will returned the colourised contents.
-func (e Exact) String() string {
-       return e.colourise(e.s, e.colour)
-}
-
-// Iexact is like Exact but case insensitive.
-type Iexact struct {
-       s      string
-       colour Colour
-}
-
-// NewIexact returns a new instance of the Iexact.
-func NewIexact(s string, c Colour) Iexact {
-       return Iexact{
-               s:      s,
-               colour: c,
-       }
-}
-
-// Find looks for the exact string. Any strings it finds will be decorated with
-// the given Colour.
-func (i Iexact) Find(input string) (string, bool) {
-       if strings.Contains(strings.ToLower(input), strings.ToLower(i.s)) {
-               return i.colourise(input, i.colour), true
-       }
-       return "", false
-}
-
-func (i Iexact) colourise(input string, c Colour) string {
-       if c == NoColour {
-               return input
-       }
-       index := strings.Index(strings.ToLower(input), strings.ToLower(i.s))
-       end := len(i.s) + index
-       match := input[index:end]
-       return strings.Replace(input, match, Colourise(match, c), -1)
-}
-
-// Colour returns the Colour property.
-func (i Iexact) Colour() Colour {
-       return i.colour
-}
-
-// String will returned the colourised contents.
-func (i Iexact) String() string {
-       return i.colourise(i.s, i.colour)
-}
-
-// Rx is the regexp implementation of the Locator.
-type Rx struct {
-       *regexp.Regexp
-       colour Colour
-}
-
-// NewRx returns a new instance of the Rx.
-func NewRx(r *regexp.Regexp, c Colour) Rx {
-       return Rx{
-               Regexp: r,
-               colour: c,
-       }
-}
-
-// Find looks for the string matching `r` regular expression. Any strings it
-// finds will be decorated with the given Colour.
-func (r Rx) Find(input string) (string, bool) {
-       if r.MatchString(input) {
-               return r.colourise(input, r.colour), true
-       }
-       return "", false
-}
-
-func (r Rx) colourise(input string, c Colour) string {
-       if c == NoColour {
-               return input
-       }
-       return r.ReplaceAllString(input, Colourise("$1", c))
-}
-
-// Colour returns the Colour property.
-func (r Rx) Colour() Colour {
-       return r.colour
-}
diff --git a/vendor/github.com/arsham/blush/internal/reader/reader.go 
b/vendor/github.com/arsham/blush/internal/reader/reader.go
deleted file mode 100644
index 9f2b258..0000000
--- a/vendor/github.com/arsham/blush/internal/reader/reader.go
+++ /dev/null
@@ -1,150 +0,0 @@
-package reader
-
-import (
-       "io"
-       "io/ioutil"
-       "os"
-
-       "github.com/arsham/blush/internal/tools"
-       "github.com/pkg/errors"
-)
-
-// ErrNoReader is returned if there is no reader defined.
-var ErrNoReader = errors.New("no input")
-
-// MultiReader holds one or more io.ReadCloser and reads their contents when
-// Read() method is called in order. The reader is loaded lazily if it is a
-// file to prevent the system going out of file descriptors.
-type MultiReader struct {
-       readers     []*container
-       currentName string
-}
-
-// NewMultiReader creates an instance of the MultiReader and passes it to all
-// input functions.
-func NewMultiReader(input ...Conf) (*MultiReader, error) {
-       m := &MultiReader{
-               readers: make([]*container, 0),
-       }
-       for _, c := range input {
-               if c == nil {
-                       return nil, ErrNoReader
-               }
-               err := c(m)
-               if err != nil {
-                       return nil, err
-               }
-       }
-       return m, nil
-}
-
-// Conf is used to configure the MultiReader.
-type Conf func(*MultiReader) error
-
-// WithReader adds the {name,r} reader to the MultiReader. If name is empty, 
the
-// key will not be written in the output. You can provide as many empty names 
as
-// you need.
-func WithReader(name string, r io.ReadCloser) Conf {
-       return func(m *MultiReader) error {
-               if r == nil {
-                       return errors.Wrap(ErrNoReader, "WithReader")
-               }
-               c := &container{
-                       get: func() (io.ReadCloser, error) {
-                               m.currentName = name
-                               return r, nil
-                       },
-               }
-               m.readers = append(m.readers, c)
-               return nil
-       }
-}
-
-// WithPaths searches through the path and adds any files it finds to the
-// MultiReader. Each path will become its reader's name in the process. It
-// returns an error if any of given files are not found. It ignores any files
-// that cannot be read or opened.
-func WithPaths(paths []string, recursive bool) Conf {
-       return func(m *MultiReader) error {
-               if paths == nil {
-                       return errors.Wrap(ErrNoReader, "WithPaths: nil paths")
-               }
-               if len(paths) == 0 {
-                       return errors.Wrap(ErrNoReader, "WithPaths: empty 
paths")
-               }
-               files, err := tools.Files(recursive, paths...)
-               if err != nil {
-                       return errors.Wrap(err, "WithPaths")
-               }
-               for _, name := range files {
-                       name := name
-                       c := &container{
-                               get: func() (io.ReadCloser, error) {
-                                       m.currentName = name
-                                       f, err := os.Open(name)
-                                       return f, err
-                               },
-                       }
-                       m.readers = append(m.readers, c)
-               }
-               return nil
-       }
-}
-
-// Read is almost the exact implementation of io.MultiReader but keeps track of
-// reader names. It closes each reader once they report they are exhausted, and
-// it will happen on the next read.
-func (m *MultiReader) Read(b []byte) (n int, err error) {
-       for len(m.readers) > 0 {
-               if len(m.readers) == 1 {
-                       if r, ok := m.readers[0].r.(*MultiReader); ok {
-                               m.readers = r.readers
-                               continue
-                       }
-               }
-               n, err = m.readers[0].Read(b)
-               if err == io.EOF {
-                       m.readers[0].r.Close()
-                       c := &container{r: ioutil.NopCloser(nil)}
-                       m.readers[0] = c
-                       m.readers = m.readers[1:]
-               }
-               if n > 0 || err != io.EOF {
-                       if err == io.EOF && len(m.readers) > 0 {
-                               err = nil
-                       }
-                       return
-               }
-       }
-       m.currentName = ""
-       return 0, io.EOF
-}
-
-// Close does nothing.
-func (m *MultiReader) Close() error { return nil }
-
-// FileName returns the current reader's name.
-func (m *MultiReader) FileName() string {
-       return m.currentName
-}
-
-// container takes care of opening the reader on demand. This is particularly
-// useful when searching in thousands of files, because we want to open them on
-// demand, otherwise the system gets out of file descriptors.
-type container struct {
-       r    io.ReadCloser
-       open bool
-       get  func() (io.ReadCloser, error)
-}
-
-func (c *container) Read(b []byte) (int, error) {
-       if !c.open {
-               var err error
-               c.r, err = c.get()
-               if err != nil {
-                       return 0, err
-               }
-               c.open = true
-       }
-       return c.r.Read(b)
-}
diff --git a/vendor/github.com/arsham/blush/internal/tools/dir.go 
b/vendor/github.com/arsham/blush/internal/tools/dir.go
deleted file mode 100644
index a77a4ae..0000000
--- a/vendor/github.com/arsham/blush/internal/tools/dir.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Package tools contains common tools used throughout this application.
-package tools
-
-import (
-       "errors"
-       "io"
-       "io/ioutil"
-       "os"
-       "path"
-       "path/filepath"
-)
-
-// Files returns all files found in paths. If recursive is false, it only
-// returns the immediate files in the paths.
-func Files(recursive bool, paths ...string) ([]string, error) {
-       var (
-               fileList []string
-               fn       = files
-       )
-       if recursive {
-               fn = rfiles
-       }
-
-       for _, p := range paths {
-               f, err := fn(p)
-               if err != nil {
-                       return nil, err
-               }
-               fileList = append(fileList, f...)
-       }
-       if len(fileList) == 0 {
-               return nil, errors.New("no files found")
-       }
-       fileList = unique(fileList)
-       fileList = nonBinary(fileList)
-       return fileList, nil
-}
-
-func unique(fileList []string) []string {
-       var (
-               ret  []string
-               seen = make(map[string]struct{}, len(fileList))
-       )
-       for _, f := range fileList {
-               if _, ok := seen[f]; ok {
-                       continue
-               }
-               seen[f] = struct{}{}
-               ret = append(ret, f)
-       }
-       return ret
-}
-
-func nonBinary(fileList []string) []string {
-       var (
-               ret []string
-       )
-       for _, f := range fileList {
-               if isPlainText(f) {
-                       ret = append(ret, f)
-               }
-       }
-       return ret
-}
-
-func rfiles(location string) ([]string, error) {
-       fileList := []string{}
-       err := filepath.Walk(location, func(location string, f os.FileInfo, err 
error) error {
-               if os.IsPermission(err) {
-                       return nil
-               }
-               if err != nil {
-                       return err
-               }
-               if !f.IsDir() {
-                       fileList = append(fileList, location)
-               }
-               return nil
-       })
-       if err != nil {
-               return nil, err
-       }
-       return fileList, nil
-}
-
-func files(location string) ([]string, error) {
-       if s, err := os.Stat(location); err == nil && !s.IsDir() {
-               return []string{location}, nil
-       }
-       fileList := []string{}
-       files, err := ioutil.ReadDir(location)
-       if err != nil {
-               return nil, err
-       }
-       for _, f := range files {
-               if !f.IsDir() {
-                       p := path.Join(location, f.Name())
-                       fileList = append(fileList, p)
-               }
-       }
-       return fileList, nil
-}
-
-// TODO: we should ignore the line in search stage instead.
-func isPlainText(name string) bool {
-       f, err := os.Open(name)
-       if err != nil {
-               return false
-       }
-       defer f.Close()
-       header := make([]byte, 512)
-       _, err = f.Read(header)
-       if err != nil && err != io.EOF {
-               return false
-       }
-
-       return IsPlainText(string(header))
-}
diff --git a/vendor/github.com/arsham/blush/internal/tools/strings.go 
b/vendor/github.com/arsham/blush/internal/tools/strings.go
deleted file mode 100644
index c61533b..0000000
--- a/vendor/github.com/arsham/blush/internal/tools/strings.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package tools
-
-import (
-       "unicode"
-)
-
-// IsPlainText returns false if at least one of the runes in the input is not
-// represented as a plain text in a file. Null is an exception.
-func IsPlainText(input string) bool {
-       for _, r := range input {
-               switch r {
-               case 0, '\n', '\t', '\r':
-                       continue
-               }
-               if r > unicode.MaxASCII || !unicode.IsPrint(r) {
-                       return false
-               }
-       }
-       return true
-}

Reply via email to