From f09515867d9062d6d7b9c7a0ee731f85fdb2050a Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Thu, 16 Aug 2018 01:53:53 -0400 Subject: [PATCH 01/13] #157: clean BOM, allowing CSV files to display correctly --- Gopkg.toml | 4 ++++ pkg/gui/view_helpers.go | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Gopkg.toml b/Gopkg.toml index a47fe5e93..ea5472df0 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -40,3 +40,7 @@ [[constraint]] name = "gopkg.in/src-d/go-git.v4" revision = "43d17e14b714665ab5bc2ecc220b6740779d733f" + +[[constraint]] + branch = "master" + name = "https://github.com/spkg/bom" diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 331e27975..3f6f1ac4d 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -7,6 +7,7 @@ import ( "time" "github.com/jesseduffield/gocui" + "github.com/spkg/bom" ) var cyclableViews = []string{"files", "branches", "commits", "stash"} @@ -191,7 +192,7 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { return nil } v.Clear() - fmt.Fprint(v, s) + fmt.Fprint(v, bom.Clean(s)) v.Wrap = true return nil }) From 3a31b84d1ab8a99ae04ebb6c17ca26710182b724 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Thu, 16 Aug 2018 02:00:34 -0400 Subject: [PATCH 02/13] add BOM test generator --- test/repos/bom.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/repos/bom.sh diff --git a/test/repos/bom.sh b/test/repos/bom.sh new file mode 100644 index 000000000..f198e8c29 --- /dev/null +++ b/test/repos/bom.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -ex; rm -rf repo; mkdir repo; cd repo + +git init + +cat <> bomtest.txt A,B,C,D,E +F,G,H,I,J +K,L,M,N,O +P,Q,R,S,T +U,V,W,X,Y +Z,1,2,3,4 +EOT From 74d81ae0806c87da8b9e504dd581c574e7396ee3 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Thu, 16 Aug 2018 07:10:25 -0400 Subject: [PATCH 03/13] [rebase] Fix errors; update dependencies Argument must be []byte not string Don't commit bomtest.txt --- Gopkg.lock | 97 ++++++---------------- Gopkg.toml | 2 +- pkg/gui/view_helpers.go | 2 +- test/repos/bom.sh | 3 +- vendor/github.com/spkg/bom/LICENSE.md | 21 +++++ vendor/github.com/spkg/bom/bom.go | 39 +++++++++ vendor/github.com/spkg/bom/discard_go14.go | 12 +++ vendor/github.com/spkg/bom/discard_go15.go | 10 +++ 8 files changed, 113 insertions(+), 73 deletions(-) create mode 100644 vendor/github.com/spkg/bom/LICENSE.md create mode 100644 vendor/github.com/spkg/bom/bom.go create mode 100644 vendor/github.com/spkg/bom/discard_go14.go create mode 100644 vendor/github.com/spkg/bom/discard_go15.go diff --git a/Gopkg.lock b/Gopkg.lock index 7b167c7d8..288f8ba4d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,23 +2,18 @@ [[projects]] - digest = "1:b2339e83ce9b5c4f79405f949429a7f68a9a904fed903c672aac1e7ceb7f5f02" name = "github.com/Sirupsen/logrus" packages = ["."] - pruneopts = "NUT" revision = "3e01752db0189b9157070a0e1668a620f9a85da2" version = "v1.0.6" [[projects]] - digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] - pruneopts = "NUT" revision = "346938d642f2ec3594ed81d874461961cd0faa76" version = "v1.1.0" [[projects]] - digest = "1:de4a74b504df31145ffa8ca0c4edbffa2f3eb7f466753962184611b618fa5981" name = "github.com/emirpasic/gods" packages = [ "containers", @@ -26,148 +21,133 @@ "lists/arraylist", "trees", "trees/binaryheap", - "utils", + "utils" ] - pruneopts = "NUT" revision = "f6c17b524822278a87e3b3bd809fec33b51f5b46" version = "v1.9.0" [[projects]] - digest = "1:ade392a843b2035effb4b4a2efa2c3bab3eb29b992e98bacf9c898b0ecb54e45" name = "github.com/fatih/color" packages = ["."] - pruneopts = "NUT" revision = "5b77d2a35fb0ede96d138fc9a99f5c9b6aef11b4" version = "v1.7.0" [[projects]] branch = "master" - digest = "1:4a8ed9b8cf22bd03bee5d74179fa06a282e4a73b6de949f7a865ff56cd2537e0" name = "github.com/golang-collections/collections" packages = ["stack"] - pruneopts = "NUT" revision = "604e922904d35e97f98a774db7881f049cd8d970" [[projects]] branch = "master" - digest = "1:62fe3a7ea2050ecbd753a71889026f83d73329337ada66325cbafd5dea5f713d" name = "github.com/jbenet/go-context" packages = ["io"] - pruneopts = "NUT" revision = "d14ea06fba99483203c19d92cfcd13ebe73135f4" [[projects]] branch = "master" - digest = "1:c9a848b0484a72da2dae28957b4f67501fe27fa38bc73f4713e454353c0a4a60" name = "github.com/jesseduffield/gocui" packages = ["."] - pruneopts = "NUT" revision = "432b7f6215f81ef1aaa1b2d9b69887822923cf79" [[projects]] - digest = "1:8021af4dcbd531ae89433c8c3a6520e51064114aaf8eb1724c3cf911c497c9ba" + name = "github.com/jesseduffield/lazygit" + packages = [ + "pkg/app", + "pkg/commands", + "pkg/config", + "pkg/git", + "pkg/gui", + "pkg/utils" + ] + revision = "db140842f3c10921153b3e19e66dd72b39fa00f8" + version = "v0.1.61" + +[[projects]] name = "github.com/kevinburke/ssh_config" packages = ["."] - pruneopts = "NUT" revision = "9fc7bb800b555d63157c65a904c86a2cc7b4e795" version = "0.4" [[projects]] - digest = "1:08c231ec84231a7e23d67e4b58f975e1423695a32467a362ee55a803f9de8061" name = "github.com/mattn/go-colorable" packages = ["."] - pruneopts = "NUT" revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072" version = "v0.0.9" [[projects]] - digest = "1:bc4f7eec3b7be8c6cb1f0af6c1e3333d5bb71072951aaaae2f05067b0803f287" name = "github.com/mattn/go-isatty" packages = ["."] - pruneopts = "NUT" revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" version = "v0.0.3" [[projects]] - digest = "1:cb591533458f6eb6e2c1065ff3eac6b50263d7847deb23fc9f79b25bc608970e" name = "github.com/mattn/go-runewidth" packages = ["."] - pruneopts = "NUT" revision = "9e777a8366cce605130a531d2cd6363d07ad7317" version = "v0.0.2" [[projects]] - digest = "1:a25c9a6b41e100f4ce164db80260f2b687095ba9d8b46a1d6072d3686cc020db" name = "github.com/mgutz/str" packages = ["."] - pruneopts = "NUT" revision = "968bf66e3da857419e4f6e71b2d5c9ae95682dc4" version = "v1.2.0" [[projects]] branch = "master" - digest = "1:a4df73029d2c42fabcb6b41e327d2f87e685284ec03edf76921c267d9cfc9c23" name = "github.com/mitchellh/go-homedir" packages = ["."] - pruneopts = "NUT" revision = "58046073cbffe2f25d425fe1331102f55cf719de" [[projects]] branch = "master" - digest = "1:34d9354c2c5d916c05864327553047df59fc10e86ff1f408e4136eba0a25a5ec" name = "github.com/nsf/termbox-go" packages = ["."] - pruneopts = "NUT" revision = "5c94acc5e6eb520f1bcd183974e01171cc4c23b3" [[projects]] - digest = "1:cf254277d898b713195cc6b4a3fac8bf738b9f1121625df27843b52b267eec6c" name = "github.com/pelletier/go-buffruneio" packages = ["."] - pruneopts = "NUT" revision = "c37440a7cf42ac63b919c752ca73a85067e05992" version = "v0.2.0" [[projects]] - digest = "1:d917313f309bda80d27274d53985bc65651f81a5b66b820749ac7f8ef061fd04" name = "github.com/sergi/go-diff" packages = ["diffmatchpatch"] - pruneopts = "NUT" revision = "1744e2970ca51c86172c8190fadad617561ed6e7" version = "v1.0.0" [[projects]] - digest = "1:ccca1dcd18bc54e23b517a3c5babeff2e3924a7d8fc1932162225876cfe4bfb0" + branch = "master" + name = "github.com/spkg/bom" + packages = ["."] + revision = "59b7046e48ad6bac800c5e1dd5142282cbfcf154" + +[[projects]] name = "github.com/src-d/gcfg" packages = [ ".", "scanner", "token", - "types", + "types" ] - pruneopts = "NUT" revision = "f187355171c936ac84a82793659ebb4936bc1c23" version = "v1.3.0" [[projects]] - digest = "1:cd5ffc5bda4e0296ab3e4de90dbb415259c78e45e7fab13694b14cde8ab74541" name = "github.com/tcnksm/go-gitconfig" packages = ["."] - pruneopts = "NUT" revision = "d154598bacbf4501c095a309753c5d4af66caa81" version = "v0.1.2" [[projects]] - digest = "1:3148cb3478c26a92b4c1a18abb9428234b281e278af6267840721a24b6cbc6a3" name = "github.com/xanzy/ssh-agent" packages = ["."] - pruneopts = "NUT" revision = "640f0ab560aeb89d523bb6ac322b1244d5c3796c" version = "v0.2.0" [[projects]] branch = "master" - digest = "1:dfcb1b2db354cafa48fc3cdafe4905a08bec4a9757919ab07155db0ca23855b4" name = "golang.org/x/crypto" packages = [ "cast5", @@ -186,32 +166,26 @@ "ssh", "ssh/agent", "ssh/knownhosts", - "ssh/terminal", + "ssh/terminal" ] - pruneopts = "NUT" revision = "de0752318171da717af4ce24d0a2e8626afaeb11" [[projects]] branch = "master" - digest = "1:76ee51c3f468493aff39dbacc401e8831fbb765104cbf613b89bef01cf4bad70" name = "golang.org/x/net" packages = ["context"] - pruneopts = "NUT" revision = "c39426892332e1bb5ec0a434a079bf82f5d30c54" [[projects]] branch = "master" - digest = "1:ec76a40fbfda0c329ee58f4e3b14b4279a939efce89eca020e934e2e5234eddd" name = "golang.org/x/sys" packages = [ "unix", - "windows", + "windows" ] - pruneopts = "NUT" revision = "98c5dad5d1a0e8a73845ecc8897d0bd56586511d" [[projects]] - digest = "1:8029e9743749d4be5bc9f7d42ea1659471767860f0cdc34d37c3111bd308a295" name = "golang.org/x/text" packages = [ "internal/gen", @@ -219,28 +193,24 @@ "internal/ucd", "transform", "unicode/cldr", - "unicode/norm", + "unicode/norm" ] - pruneopts = "NUT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] - digest = "1:47a697b155f5214ff14e68e39ce9c2e8d93e1fb035ae5ba7e247d044e0ce64e3" name = "gopkg.in/src-d/go-billy.v4" packages = [ ".", "helper/chroot", "helper/polyfill", "osfs", - "util", + "util" ] - pruneopts = "NUT" revision = "83cf655d40b15b427014d7875d10850f96edba14" version = "v4.2.0" [[projects]] - digest = "1:e66078da2bd6e53c72518d7f6ae0c3c8c7f34c0df12c39435ce34a6bce165525" name = "gopkg.in/src-d/go-git.v4" packages = [ ".", @@ -282,32 +252,19 @@ "utils/merkletrie/filesystem", "utils/merkletrie/index", "utils/merkletrie/internal/frame", - "utils/merkletrie/noder", + "utils/merkletrie/noder" ] - pruneopts = "NUT" revision = "43d17e14b714665ab5bc2ecc220b6740779d733f" [[projects]] - digest = "1:b233ad4ec87ac916e7bf5e678e98a2cb9e8b52f6de6ad3e11834fc7a71b8e3bf" name = "gopkg.in/warnings.v0" packages = ["."] - pruneopts = "NUT" revision = "ec4a0fea49c7b46c2aeb0b51aac55779c607e52b" version = "v0.1.2" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/Sirupsen/logrus", - "github.com/davecgh/go-spew/spew", - "github.com/fatih/color", - "github.com/golang-collections/collections/stack", - "github.com/jesseduffield/gocui", - "github.com/mgutz/str", - "github.com/tcnksm/go-gitconfig", - "gopkg.in/src-d/go-git.v4", - "gopkg.in/src-d/go-git.v4/plumbing", - ] + inputs-digest = "3f40b7e57ce53b6c2b95ff995adab776197c0e110228dc1befef0d14dcefd229" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index ea5472df0..1f0b03cee 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -43,4 +43,4 @@ [[constraint]] branch = "master" - name = "https://github.com/spkg/bom" + name = "github.com/spkg/bom" diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 3f6f1ac4d..c13ac24a7 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -192,7 +192,7 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { return nil } v.Clear() - fmt.Fprint(v, bom.Clean(s)) + fmt.Fprint(v, bom.Clean([]byte(s))) v.Wrap = true return nil }) diff --git a/test/repos/bom.sh b/test/repos/bom.sh index f198e8c29..9599f80e6 100644 --- a/test/repos/bom.sh +++ b/test/repos/bom.sh @@ -3,7 +3,8 @@ set -ex; rm -rf repo; mkdir repo; cd repo git init -cat <> bomtest.txt A,B,C,D,E +cat <> bomtest.txt +A,B,C,D,E F,G,H,I,J K,L,M,N,O P,Q,R,S,T diff --git a/vendor/github.com/spkg/bom/LICENSE.md b/vendor/github.com/spkg/bom/LICENSE.md new file mode 100644 index 000000000..931b189e4 --- /dev/null +++ b/vendor/github.com/spkg/bom/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 John Jeffery + +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/spkg/bom/bom.go b/vendor/github.com/spkg/bom/bom.go new file mode 100644 index 000000000..93b811c6d --- /dev/null +++ b/vendor/github.com/spkg/bom/bom.go @@ -0,0 +1,39 @@ +// Package bom is used to clean up UTF-8 Byte Order Marks. +package bom + +import ( + "bufio" + "io" +) + +const ( + bom0 = 0xef + bom1 = 0xbb + bom2 = 0xbf +) + +// Clean returns b with the 3 byte BOM stripped off the front if it is present. +// If the BOM is not present, then b is returned. +func Clean(b []byte) []byte { + if len(b) >= 3 && + b[0] == bom0 && + b[1] == bom1 && + b[2] == bom2 { + return b[3:] + } + return b +} + +// NewReader returns an io.Reader that will skip over initial UTF-8 byte order marks. +func NewReader(r io.Reader) io.Reader { + buf := bufio.NewReader(r) + b, err := buf.Peek(3) + if err != nil { + // not enough bytes + return buf + } + if b[0] == bom0 && b[1] == bom1 && b[2] == bom2 { + discardBytes(buf, 3) + } + return buf +} diff --git a/vendor/github.com/spkg/bom/discard_go14.go b/vendor/github.com/spkg/bom/discard_go14.go new file mode 100644 index 000000000..782cd0624 --- /dev/null +++ b/vendor/github.com/spkg/bom/discard_go14.go @@ -0,0 +1,12 @@ +// +build !go1.5 + +package bom + +import "bufio" + +func discardBytes(buf *bufio.Reader, n int) { + // cannot use the buf.Discard method as it was introduced in Go 1.5 + for i := 0; i < n; i++ { + buf.ReadByte() + } +} diff --git a/vendor/github.com/spkg/bom/discard_go15.go b/vendor/github.com/spkg/bom/discard_go15.go new file mode 100644 index 000000000..2d17d5c5e --- /dev/null +++ b/vendor/github.com/spkg/bom/discard_go15.go @@ -0,0 +1,10 @@ +// +build go1.5 + +package bom + +import "bufio" + +func discardBytes(buf *bufio.Reader, n int) { + // the Discard method was introduced in Go 1.5 + buf.Discard(n) +} From 018b43163ced1646f45eae7ad0438800e6fbe489 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sat, 18 Aug 2018 02:20:10 -0400 Subject: [PATCH 04/13] synchronize deps --- Gopkg.lock | 136 +++++++++++++++++------------------------------------ 1 file changed, 44 insertions(+), 92 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 17bc8748c..f13823275 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -9,14 +9,11 @@ [[projects]] branch = "master" - digest = "1:cd7ba2b29e93e2a8384e813dfc80ebb0f85d9214762e6ca89bb55a58092eab87" name = "github.com/cloudfoundry/jibber_jabber" packages = ["."] - pruneopts = "NUT" revision = "bcc4c8345a21301bf47c032ff42dd1aae2fe3027" [[projects]] - digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] revision = "346938d642f2ec3594ed81d874461961cd0faa76" @@ -42,10 +39,8 @@ version = "v1.7.0" [[projects]] - digest = "1:1b91ae0dc69a41d4c2ed23ea5cffb721ea63f5037ca4b81e6d6771fbb8f45129" name = "github.com/fsnotify/fsnotify" packages = ["."] - pruneopts = "NUT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" version = "v1.4.7" @@ -57,7 +52,6 @@ [[projects]] branch = "master" - digest = "1:11c6c696067d3127ecf332b10f89394d386d9083f82baf71f40f2da31841a009" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -69,14 +63,12 @@ "hcl/token", "json/parser", "json/scanner", - "json/token", + "json/token" ] - pruneopts = "NUT" revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" [[projects]] branch = "master" - digest = "1:62fe3a7ea2050ecbd753a71889026f83d73329337ada66325cbafd5dea5f713d" name = "github.com/jbenet/go-context" packages = ["io"] revision = "d14ea06fba99483203c19d92cfcd13ebe73135f4" @@ -95,10 +87,11 @@ "pkg/config", "pkg/git", "pkg/gui", + "pkg/i18n", "pkg/utils" ] - revision = "db140842f3c10921153b3e19e66dd72b39fa00f8" - version = "v0.1.61" + revision = "3f5c1a4243f350390f6ff9553da1c84745fc2bd7" + version = "v0.1.66" [[projects]] name = "github.com/kevinburke/ssh_config" @@ -107,15 +100,12 @@ version = "0.4" [[projects]] - digest = "1:d244f8666a838fe6ad70ec8fe77f50ebc29fdc3331a2729ba5886bef8435d10d" name = "github.com/magiconair/properties" packages = ["."] - pruneopts = "NUT" revision = "c2353362d570a7bfa228149c62842019201cfb71" version = "v1.8.0" [[projects]] - digest = "1:08c231ec84231a7e23d67e4b58f975e1423695a32467a362ee55a803f9de8061" name = "github.com/mattn/go-colorable" packages = ["."] revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072" @@ -147,21 +137,17 @@ [[projects]] branch = "master" - digest = "1:5fe20cfe4ef484c237cec9f947b2a6fa90bad4b8610fd014f0e4211e13d82d5d" name = "github.com/mitchellh/mapstructure" packages = ["."] - pruneopts = "NUT" revision = "f15292f7a699fcc1a38a80977f80a046874ba8ac" [[projects]] - digest = "1:2c34c77bf3ec848da26e48af58fc511ed52750961fa848399d122882b8890928" name = "github.com/nicksnyder/go-i18n" packages = [ "v2/i18n", "v2/internal", - "v2/internal/plural", + "v2/internal/plural" ] - pruneopts = "NUT" revision = "a16b91a3ba80db3a2301c70d1d302d42251c9079" version = "v2.0.0-beta.5" @@ -178,20 +164,55 @@ version = "v0.2.0" [[projects]] - digest = "1:51ea800cff51752ff68e12e04106f5887b4daec6f9356721238c28019f0b42db" name = "github.com/pelletier/go-toml" packages = ["."] - pruneopts = "NUT" revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" [[projects]] - digest = "1:d917313f309bda80d27274d53985bc65651f81a5b66b820749ac7f8ef061fd04" name = "github.com/sergi/go-diff" packages = ["diffmatchpatch"] revision = "1744e2970ca51c86172c8190fadad617561ed6e7" version = "v1.0.0" +[[projects]] + name = "github.com/shibukawa/configdir" + packages = ["."] + revision = "e180dbdc8da04c4fa04272e875ce64949f38bd3e" + +[[projects]] + name = "github.com/spf13/afero" + packages = [ + ".", + "mem" + ] + revision = "787d034dfe70e44075ccc060d346146ef53270ad" + version = "v1.1.1" + +[[projects]] + name = "github.com/spf13/cast" + packages = ["."] + revision = "8965335b8c7107321228e3e3702cab9832751bac" + version = "v1.2.0" + +[[projects]] + branch = "master" + name = "github.com/spf13/jwalterweatherman" + packages = ["."] + revision = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2" + +[[projects]] + name = "github.com/spf13/pflag" + packages = ["."] + revision = "9a97c102cda95a86cec2345a6f09f55a939babf5" + version = "v1.0.2" + +[[projects]] + name = "github.com/spf13/viper" + packages = ["."] + revision = "907c19d40d9a6c9bb55f040ff4ae45271a4754b9" + version = "v1.1.0" + [[projects]] branch = "master" name = "github.com/spkg/bom" @@ -199,57 +220,6 @@ revision = "59b7046e48ad6bac800c5e1dd5142282cbfcf154" [[projects]] - digest = "1:41618aee8828e62dfe62d44f579c06892d0e98907d1c6d5bcd83bfe8536ec5a3" - name = "github.com/shibukawa/configdir" - packages = ["."] - pruneopts = "NUT" - revision = "e180dbdc8da04c4fa04272e875ce64949f38bd3e" - -[[projects]] - digest = "1:330e9062b308ac597e28485699c02223bd052437a6eed32a173c9227dcb9d95a" - name = "github.com/spf13/afero" - packages = [ - ".", - "mem", - ] - pruneopts = "NUT" - revision = "787d034dfe70e44075ccc060d346146ef53270ad" - version = "v1.1.1" - -[[projects]] - digest = "1:3fa7947ca83b98ae553590d993886e845a4bff19b7b007e869c6e0dd3b9da9cd" - name = "github.com/spf13/cast" - packages = ["."] - pruneopts = "NUT" - revision = "8965335b8c7107321228e3e3702cab9832751bac" - version = "v1.2.0" - -[[projects]] - branch = "master" - digest = "1:f29f83301ed096daed24a90f4af591b7560cb14b9cc3e1827abbf04db7269ab5" - name = "github.com/spf13/jwalterweatherman" - packages = ["."] - pruneopts = "NUT" - revision = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2" - -[[projects]] - digest = "1:e3707aeaccd2adc89eba6c062fec72116fe1fc1ba71097da85b4d8ae1668a675" - name = "github.com/spf13/pflag" - packages = ["."] - pruneopts = "NUT" - revision = "9a97c102cda95a86cec2345a6f09f55a939babf5" - version = "v1.0.2" - -[[projects]] - digest = "1:454979540e2a1582f375a17c106cf4e11e3bcac4baffb4af23e515c87f87de13" - name = "github.com/spf13/viper" - packages = ["."] - pruneopts = "NUT" - revision = "907c19d40d9a6c9bb55f040ff4ae45271a4754b9" - version = "v1.1.0" - -[[projects]] - digest = "1:ccca1dcd18bc54e23b517a3c5babeff2e3924a7d8fc1932162225876cfe4bfb0" name = "github.com/src-d/gcfg" packages = [ ".", @@ -312,7 +282,6 @@ revision = "98c5dad5d1a0e8a73845ecc8897d0bd56586511d" [[projects]] - digest = "1:a95288ef1ef4dfad6cba7fe30843e1683f71bc28c912ca1ba3f6a539d44db739" name = "golang.org/x/text" packages = [ "internal/gen", @@ -392,31 +361,14 @@ version = "v0.1.2" [[projects]] - digest = "1:7c95b35057a0ff2e19f707173cc1a947fa43a6eb5c4d300d196ece0334046082" name = "gopkg.in/yaml.v2" packages = ["."] - pruneopts = "NUT" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/Sirupsen/logrus", - "github.com/cloudfoundry/jibber_jabber", - "github.com/davecgh/go-spew/spew", - "github.com/fatih/color", - "github.com/golang-collections/collections/stack", - "github.com/jesseduffield/gocui", - "github.com/mgutz/str", - "github.com/nicksnyder/go-i18n/v2/i18n", - "github.com/shibukawa/configdir", - "github.com/spf13/viper", - "github.com/tcnksm/go-gitconfig", - "golang.org/x/text/language", - "gopkg.in/src-d/go-git.v4", - "gopkg.in/src-d/go-git.v4/plumbing", - ] + inputs-digest = "5f2c359c480939c540907b265eb58d98dd1bb892e44b21e93cba861d79100203" solver-name = "gps-cdcl" solver-version = 1 From cdc6d45fa49097ccae25ccdf55512387f9f79ac9 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 02:19:19 -0400 Subject: [PATCH 05/13] view_helpers.go: replace \r with \r\n --- pkg/gui/view_helpers.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index b870508b1..f6b567911 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -218,7 +218,9 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { return nil } v.Clear() - fmt.Fprint(v, bom.Clean([]byte(s))) + output := string(bom.Clean([]byte(s))) + strings.Replace(output, "\r", "\r\n", -1) + fmt.Fprint(v, output) v.Wrap = true return nil }) From b46d174f706a5a66307111a55eabf1b64dd39c12 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 02:21:33 -0400 Subject: [PATCH 06/13] view_helpers.go: don't ignore return value --- pkg/gui/view_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index f6b567911..5a46fc383 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -219,7 +219,7 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { } v.Clear() output := string(bom.Clean([]byte(s))) - strings.Replace(output, "\r", "\r\n", -1) + output = strings.Replace(output, "\r", "\r\n", -1) fmt.Fprint(v, output) v.Wrap = true return nil From cea736e6e92bb0c37b61af15da9c261b79eb3c9b Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 07:20:50 -0400 Subject: [PATCH 07/13] Factor out into NormalizeLinefeeds; add tests --- pkg/gui/view_helpers.go | 4 ++-- pkg/utils/utils.go | 6 ++++++ pkg/utils/utils_test.go | 34 ++++++++++++++++++++++++++++++++++ test/repos/bom.sh | 12 ++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 pkg/utils/utils_test.go diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 5a46fc383..c99609e3a 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -7,6 +7,7 @@ import ( "time" "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/utils" "github.com/spkg/bom" ) @@ -218,8 +219,7 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { return nil } v.Clear() - output := string(bom.Clean([]byte(s))) - output = strings.Replace(output, "\r", "\r\n", -1) + output := utils.NormalizeLinefeeds(string(bom.Clean([]byte(s)))) fmt.Fprint(v, output) v.Wrap = true return nil diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 68438246a..d53ddc6dd 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -63,3 +63,9 @@ func TrimTrailingNewline(str string) string { } return str } + +func NormalizeLinefeeds(str string) string { + str = strings.Replace(str, "\r\n", "\n", -1) + str = strings.Replace(str, "\r", "\n", -1) + return str +} diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go new file mode 100644 index 000000000..3a9f6817b --- /dev/null +++ b/pkg/utils/utils_test.go @@ -0,0 +1,34 @@ +package utils + +import "testing" + +var testCases = []struct { + Input []byte + Expected []byte +}{ + { + // \r\n + Input: []byte{97, 115, 100, 102, 13, 10}, + Expected: []byte{97, 115, 100, 102, 10}, + }, + { + // \r + Input: []byte{97, 115, 100, 102, 13}, + Expected: []byte{97, 115, 100, 102, 10}, + }, + { + // \n + Input: []byte{97, 115, 100, 102, 10}, + Expected: []byte{97, 115, 100, 102, 10}, + }, + +} + +func TestNormalizeLinefeeds(t *testing.T) { + + for _, tc := range testCases { + if NormalizeLinefeeds(string(tc.Input)) != string(tc.Expected) { + t.Error("Error") + } + } +} diff --git a/test/repos/bom.sh b/test/repos/bom.sh index 9599f80e6..e8642491a 100644 --- a/test/repos/bom.sh +++ b/test/repos/bom.sh @@ -3,6 +3,18 @@ set -ex; rm -rf repo; mkdir repo; cd repo git init +cat <> windowslf.txt +asdf +asdf +EOT + +unix2dos windowslf.txt + +cat <> linuxlf.txt +asdf +asdf +EOT + cat <> bomtest.txt A,B,C,D,E F,G,H,I,J From 766197de9dd19fe743b21efe751c52db3e99aa3e Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 08:48:03 -0400 Subject: [PATCH 08/13] NormalizeLinefeeds removes rather than converts Window/Mac style lf's --- pkg/gui/view_helpers.go | 3 ++- pkg/utils/utils.go | 5 +++-- pkg/utils/utils_test.go | 20 ++++++++++---------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index c99609e3a..d6d10c780 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -219,7 +219,8 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { return nil } v.Clear() - output := utils.NormalizeLinefeeds(string(bom.Clean([]byte(s)))) + output := string(bom.Clean([]byte(s))) + output = utils.NormalizeLinefeeds(s) fmt.Fprint(v, output) v.Wrap = true return nil diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 37e76d78a..f56ea8884 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -64,9 +64,10 @@ func TrimTrailingNewline(str string) string { return str } +// NormalizeLinefeeds - Removes all Windows and Mac style line feeds func NormalizeLinefeeds(str string) string { - str = strings.Replace(str, "\r\n", "\n", -1) - str = strings.Replace(str, "\r", "\n", -1) + str = strings.Replace(str, "\r\n", "", -1) + str = strings.Replace(str, "\r", "", -1) return str } diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index 3a9f6817b..22a9c82dc 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -3,32 +3,32 @@ package utils import "testing" var testCases = []struct { - Input []byte + Input []byte Expected []byte }{ { // \r\n - Input: []byte{97, 115, 100, 102, 13, 10}, - Expected: []byte{97, 115, 100, 102, 10}, + Input: []byte{97, 115, 100, 102, 13, 10}, + Expected: []byte{97, 115, 100, 102}, }, { // \r - Input: []byte{97, 115, 100, 102, 13}, - Expected: []byte{97, 115, 100, 102, 10}, + Input: []byte{97, 115, 100, 102, 13}, + Expected: []byte{97, 115, 100, 102}, }, { // \n - Input: []byte{97, 115, 100, 102, 10}, + Input: []byte{97, 115, 100, 102, 10}, Expected: []byte{97, 115, 100, 102, 10}, }, - } func TestNormalizeLinefeeds(t *testing.T) { - for _, tc := range testCases { - if NormalizeLinefeeds(string(tc.Input)) != string(tc.Expected) { - t.Error("Error") + input := NormalizeLinefeeds(string(tc.Input)) + expected := string(tc.Expected) + if input != expected { + t.Error("Expected " + expected + ", got " + input) } } } From e8b12a086c94f29b8fdcd1b2197b332834e13ca6 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 08:52:08 -0400 Subject: [PATCH 09/13] Fix ineffectual assignment --- pkg/gui/view_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index d6d10c780..dc669146b 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -220,7 +220,7 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error { } v.Clear() output := string(bom.Clean([]byte(s))) - output = utils.NormalizeLinefeeds(s) + output = utils.NormalizeLinefeeds(output) fmt.Fprint(v, output) v.Wrap = true return nil From 108815c790bc92e96ddf53ec3cf5b5afc71fd2b4 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 23:31:26 -0400 Subject: [PATCH 10/13] Add missing brace --- pkg/utils/utils_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index ffc753fd4..047ed9fb9 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -110,4 +110,5 @@ func TestNormalizeLinefeeds(t *testing.T) { if input != expected { t.Error("Expected " + expected + ", got " + input) } + } } From f1a4a7e1ff6499adf512ecd1b623f77a61ad8d5f Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 23:34:58 -0400 Subject: [PATCH 11/13] synchronize deps --- Gopkg.lock | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index c94fb69ad..6efc5a34e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -79,20 +79,6 @@ packages = ["."] revision = "432b7f6215f81ef1aaa1b2d9b69887822923cf79" -[[projects]] - name = "github.com/jesseduffield/lazygit" - packages = [ - "pkg/app", - "pkg/commands", - "pkg/config", - "pkg/git", - "pkg/gui", - "pkg/i18n", - "pkg/utils" - ] - revision = "3f5c1a4243f350390f6ff9553da1c84745fc2bd7" - version = "v0.1.66" - [[projects]] name = "github.com/kevinburke/ssh_config" packages = ["."] @@ -170,15 +156,12 @@ version = "v1.2.0" [[projects]] - digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] - pruneopts = "NUT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] - digest = "1:d917313f309bda80d27274d53985bc65651f81a5b66b820749ac7f8ef061fd04" name = "github.com/sergi/go-diff" packages = ["diffmatchpatch"] revision = "1744e2970ca51c86172c8190fadad617561ed6e7" @@ -240,15 +223,12 @@ version = "v1.3.0" [[projects]] - digest = "1:bacb8b590716ab7c33f2277240972c9582d389593ee8d66fc10074e0508b8126" name = "github.com/stretchr/testify" packages = ["assert"] - pruneopts = "NUT" revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" version = "v1.2.2" [[projects]] - digest = "1:cd5ffc5bda4e0296ab3e4de90dbb415259c78e45e7fab13694b14cde8ab74541" name = "github.com/tcnksm/go-gitconfig" packages = ["."] revision = "d154598bacbf4501c095a309753c5d4af66caa81" @@ -387,22 +367,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/Sirupsen/logrus", - "github.com/cloudfoundry/jibber_jabber", - "github.com/davecgh/go-spew/spew", - "github.com/fatih/color", - "github.com/golang-collections/collections/stack", - "github.com/jesseduffield/gocui", - "github.com/mgutz/str", - "github.com/nicksnyder/go-i18n/v2/i18n", - "github.com/shibukawa/configdir", - "github.com/spf13/viper", - "github.com/stretchr/testify/assert", - "github.com/tcnksm/go-gitconfig", - "golang.org/x/text/language", - "gopkg.in/src-d/go-git.v4", - "gopkg.in/src-d/go-git.v4/plumbing", - ] + inputs-digest = "52d66c52c1720308d826a43918b77f13a47f5cc782e315cf84a8a7f7aa6baa73" solver-name = "gps-cdcl" solver-version = 1 From 5dd049eb821f25573ba63b70dc7c08587444f5f8 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Sun, 19 Aug 2018 23:39:57 -0400 Subject: [PATCH 12/13] Convert test to use new library --- pkg/utils/utils_test.go | 51 +++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index 047ed9fb9..2d5a25fcd 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -82,33 +82,30 @@ func TestTrimTrailingNewline(t *testing.T) { } } -var testCases = []struct { - Input []byte - Expected []byte -}{ - { - // \r\n - Input: []byte{97, 115, 100, 102, 13, 10}, - Expected: []byte{97, 115, 100, 102}, - }, - { - // \r - Input: []byte{97, 115, 100, 102, 13}, - Expected: []byte{97, 115, 100, 102}, - }, - { - // \n - Input: []byte{97, 115, 100, 102, 10}, - Expected: []byte{97, 115, 100, 102, 10}, - }, -} - func TestNormalizeLinefeeds(t *testing.T) { - for _, tc := range testCases { - input := NormalizeLinefeeds(string(tc.Input)) - expected := string(tc.Expected) - if input != expected { - t.Error("Expected " + expected + ", got " + input) - } + type scenario struct { + byteArray []byte + expected []byte + } + var scenarios = []scenario{ + { + // \r\n + []byte{97, 115, 100, 102, 13, 10}, + []byte{97, 115, 100, 102}, + }, + { + // \r + []byte{97, 115, 100, 102, 13}, + []byte{97, 115, 100, 102}, + }, + { + // \n + []byte{97, 115, 100, 102, 10}, + []byte{97, 115, 100, 102, 10}, + }, + } + + for _, s := range scenarios { + assert.EqualValues(t, string(s.expected), NormalizeLinefeeds(string(s.byteArray))) } } From 45fea837713e3f471813596209cd78398df115fc Mon Sep 17 00:00:00 2001 From: Tommy Nguyen Date: Mon, 20 Aug 2018 09:16:35 -0400 Subject: [PATCH 13/13] Convert \r\n to \n; don't depend on unix2dos --- pkg/utils/utils.go | 2 +- pkg/utils/utils_test.go | 7 ++++++- test/repos/bom.sh | 6 ++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index f56ea8884..511de1af1 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -66,7 +66,7 @@ func TrimTrailingNewline(str string) string { // NormalizeLinefeeds - Removes all Windows and Mac style line feeds func NormalizeLinefeeds(str string) string { - str = strings.Replace(str, "\r\n", "", -1) + str = strings.Replace(str, "\r\n", "\n", -1) str = strings.Replace(str, "\r", "", -1) return str } diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index 2d5a25fcd..46b264945 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -91,7 +91,12 @@ func TestNormalizeLinefeeds(t *testing.T) { { // \r\n []byte{97, 115, 100, 102, 13, 10}, - []byte{97, 115, 100, 102}, + []byte{97, 115, 100, 102, 10}, + }, + { + // bash\r\nblah + []byte{97, 115, 100, 102, 13, 10, 97, 115, 100, 102}, + []byte{97, 115, 100, 102, 10, 97, 115, 100, 102}, }, { // \r diff --git a/test/repos/bom.sh b/test/repos/bom.sh index e8642491a..190f501a1 100644 --- a/test/repos/bom.sh +++ b/test/repos/bom.sh @@ -4,12 +4,10 @@ set -ex; rm -rf repo; mkdir repo; cd repo git init cat <> windowslf.txt -asdf -asdf +asdf +asdf EOT -unix2dos windowslf.txt - cat <> linuxlf.txt asdf asdf