diff --git a/cmd/admin.go b/cmd/admin.go index 4c4d6f9b66e37..5829501b4ff50 100644 --- a/cmd/admin.go +++ b/cmd/admin.go @@ -15,8 +15,8 @@ import ( "code.gitea.io/gitea/modules/auth/oauth2" "code.gitea.io/gitea/modules/generate" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/urfave/cli" ) diff --git a/cmd/convert.go b/cmd/convert.go index cb0510c722fc8..8493bdb014266 100644 --- a/cmd/convert.go +++ b/cmd/convert.go @@ -8,8 +8,8 @@ import ( "fmt" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/urfave/cli" ) diff --git a/cmd/migrate.go b/cmd/migrate.go index dde50a455f07f..4082ac6006934 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -7,8 +7,8 @@ package cmd import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/models/migrations" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/urfave/cli" ) diff --git a/cmd/serv.go b/cmd/serv.go index 2ea89757dba88..9f96acf672e11 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -17,10 +17,10 @@ import ( "time" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/pprof" "code.gitea.io/gitea/modules/private" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/dgrijalva/jwt-go" diff --git a/cmd/web.go b/cmd/web.go index d8bcba76d10cc..532db734f34a1 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -13,10 +13,10 @@ import ( "os" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers" "code.gitea.io/gitea/routers/routes" + "code.gitea.io/log" "github.com/Unknwon/com" context2 "github.com/gorilla/context" diff --git a/cmd/web_graceful.go b/cmd/web_graceful.go index 53f407ce9e345..44565fc4ffeda 100644 --- a/cmd/web_graceful.go +++ b/cmd/web_graceful.go @@ -10,7 +10,7 @@ import ( "crypto/tls" "net/http" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/facebookgo/grace/gracehttp" ) diff --git a/docs/content/doc/advanced/logging-documentation.en-us.md b/docs/content/doc/advanced/logging-documentation.en-us.md index 790e750084efd..4d4b6f6b18623 100644 --- a/docs/content/doc/advanced/logging-documentation.en-us.md +++ b/docs/content/doc/advanced/logging-documentation.en-us.md @@ -43,7 +43,7 @@ will log anything that is logged using the go logger at the INFO level. ### The "Default" logger -Calls to `log.Info`, `log.Debug`, `log.Error` etc. from the `code.gitea.io/gitea/modules/log` package will log to this logger. +Calls to `log.Info`, `log.Debug`, `log.Error` etc. from the `code.gitea.io/log` package will log to this logger. You can configure the outputs of this logger by setting the `MODE` value in the `[log]` section of the configuration. diff --git a/go.mod b/go.mod index b1a638ed74fb7..e7702c4067585 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,8 @@ module code.gitea.io/gitea go 1.12 require ( + code.gitea.io/log v0.0.0-20190608101221-52ddba89623c + gitea.com/xorm/gitea_log_bridge v0.0.0-20190527041858-1699849c7e28 github.com/BurntSushi/toml v0.3.1 // indirect github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 github.com/RoaringBitmap/roaring v0.4.7 // indirect @@ -54,9 +56,9 @@ require ( github.com/go-macaron/session v0.0.0-20190131233854-0a0a789bf193 github.com/go-macaron/toolbox v0.0.0-20180818072302-a77f45a7ce90 github.com/go-redis/redis v6.15.2+incompatible - github.com/go-sql-driver/mysql v1.4.0 + github.com/go-sql-driver/mysql v1.4.1 github.com/go-xorm/builder v0.3.3 - github.com/go-xorm/core v0.6.0 + github.com/go-xorm/core v0.6.2 github.com/go-xorm/xorm v0.0.0-20190116032649-a6300f2a45e0 github.com/gogits/chardet v0.0.0-20150115103509-2404f7772561 github.com/gogits/cron v0.0.0-20160810035002-7f3990acf183 @@ -81,7 +83,7 @@ require ( github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de // indirect github.com/lunny/nodb v0.0.0-20160621015157-fc1ef06ad4af // indirect github.com/markbates/goth v1.49.0 - github.com/mattn/go-isatty v0.0.7 + github.com/mattn/go-isatty v0.0.8 // indirect github.com/mattn/go-oci8 v0.0.0-20190320171441-14ba190cf52d // indirect github.com/mattn/go-sqlite3 v1.10.0 github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect diff --git a/go.sum b/go.sum index f6542fbe49dae..4bfd6eb44cfa4 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,9 @@ cloud.google.com/go v0.30.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +code.gitea.io/log v0.0.0-20190526010349-0560851a166a/go.mod h1:YOBHMQw/14CwuwNStgQyvnzoDJEO6ARjcSdD48QRzhM= +code.gitea.io/log v0.0.0-20190608101221-52ddba89623c h1:kdIAfVRLU+oku2e8k+UZcxYuffXWfxDoPs1HYkZzc3k= +code.gitea.io/log v0.0.0-20190608101221-52ddba89623c/go.mod h1:YOBHMQw/14CwuwNStgQyvnzoDJEO6ARjcSdD48QRzhM= +gitea.com/xorm/gitea_log_bridge v0.0.0-20190527041858-1699849c7e28 h1:Zk1DFvwO1MtrqM8e6jRoV2Iyv2HhJz6IzGqhEqajt/E= +gitea.com/xorm/gitea_log_bridge v0.0.0-20190527041858-1699849c7e28/go.mod h1:YSU13Ek0XHgbG9JOMCe7f4k1zlojVrnKBosYk/kQKZE= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 h1:UsHpWO0Elp6NaWVARdZHjiYwkhrspHVEGsyIKPb9OI8= @@ -124,6 +129,8 @@ github.com/go-xorm/builder v0.3.3 h1:v8grgrwOGv/iHXIEhIvOwHZIPLrpxRKSX8yWSMLFn/4 github.com/go-xorm/builder v0.3.3/go.mod h1:v8mE3MFBgtL+RGFNfUnAMUqqfk/Y4W5KuwCFQIEpQLk= github.com/go-xorm/core v0.6.0 h1:tp6hX+ku4OD9khFZS8VGBDRY3kfVCtelPfmkgCyHxL0= github.com/go-xorm/core v0.6.0/go.mod h1:d8FJ9Br8OGyQl12MCclmYBuBqqxsyeedpXciV5Myih8= +github.com/go-xorm/core v0.6.2 h1:EJLcSxf336POJr670wKB55Mah9f93xzvGYzNRgnT8/Y= +github.com/go-xorm/core v0.6.2/go.mod h1:bwPIfLdm/FzWgVUH8WPVlr+uJhscvNGFcaZKXsI3n2c= github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:9wScpmSP5A3Bk8V3XHWUcJmYTh+ZnlHVyc+A4oZYS3Y= github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM= github.com/go-xorm/xorm v0.0.0-20190116032649-a6300f2a45e0 h1:GBnJjWjp2SGXBZsyZfYksyp7QocvQwf9vZQ0NRN2FXM= @@ -223,6 +230,8 @@ github.com/markbates/goth v1.49.0 h1:qQ4Ti4WaqAxNAggOC+4s5M85sMVfMJwQn/Xkp73wfgI github.com/markbates/goth v1.49.0/go.mod h1:zZmAw0Es0Dpm7TT/4AdN14QrkiWLMrrU9Xei1o+/mdA= github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-oci8 v0.0.0-20190320171441-14ba190cf52d h1:m+dSK37rFf2fqppZhg15yI2IwC9BtucBiRwSDm9VL8g= github.com/mattn/go-oci8 v0.0.0-20190320171441-14ba190cf52d/go.mod h1:/M9VLO+lUPmxvoOK2PfWRZ8mTtB4q1Hy9lEGijv9Nr8= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -362,6 +371,7 @@ golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e h1:nFYrTHrdrAOpShe27kaFHjsqY golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190618155005-516e3c20635f h1:dHNZYIYdq2QuU6w73vZ/DzesPbVlZVYZTtTZmrnsbQ8= golang.org/x/sys v0.0.0-20190618155005-516e3c20635f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= @@ -376,6 +386,8 @@ golang.org/x/tools v0.0.0-20190618163018-fdf1049a943a/go.mod h1:/rFqwRUd4F7ZHNgw google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0 h1:S0iUepdCWODXRvtE+gcRDd15L+k+k1AiHlMiMjefH24= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 h1:nn6Zav2sOQHCFJHEspya8KqxhFwKci30UxHy3HXPTyQ= diff --git a/integrations/testlogger.go b/integrations/testlogger.go index 43a1471f66040..7410d5f878b45 100644 --- a/integrations/testlogger.go +++ b/integrations/testlogger.go @@ -12,7 +12,7 @@ import ( "strings" "testing" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) var prefix string diff --git a/main.go b/main.go index 30dbf2766224c..b922474d66afc 100644 --- a/main.go +++ b/main.go @@ -13,8 +13,8 @@ import ( "strings" "code.gitea.io/gitea/cmd" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" // register supported doc types _ "code.gitea.io/gitea/modules/markup/csv" diff --git a/models/access.go b/models/access.go index 3cdfc62f2179f..d4b31a8f35e33 100644 --- a/models/access.go +++ b/models/access.go @@ -8,7 +8,7 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // AccessMode specifies the users access mode diff --git a/models/action.go b/models/action.go index ee5d052509337..706ab77a73ac3 100644 --- a/models/action.go +++ b/models/action.go @@ -18,10 +18,10 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/builder" diff --git a/models/admin.go b/models/admin.go index 4480d1148050e..18ee02824b3a3 100644 --- a/models/admin.go +++ b/models/admin.go @@ -8,8 +8,8 @@ import ( "fmt" "os" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/models/branches.go b/models/branches.go index df3b69aa21888..c51f3aa01f383 100644 --- a/models/branches.go +++ b/models/branches.go @@ -9,9 +9,9 @@ import ( "time" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/models/consistency.go b/models/consistency.go index 0c279eaaf8528..f9fa3028fd9c8 100644 --- a/models/consistency.go +++ b/models/consistency.go @@ -39,7 +39,7 @@ func CheckConsistencyFor(t *testing.T, beansToCheck ...interface{}) { ptrToSliceValue := reflect.New(sliceType) ptrToSliceValue.Elem().Set(sliceValue) - assert.NoError(t, x.Where(bean).Find(ptrToSliceValue.Interface())) + assert.NoError(t, x.Table(bean).Find(ptrToSliceValue.Interface())) sliceValue = ptrToSliceValue.Elem() for i := 0; i < sliceValue.Len(); i++ { diff --git a/models/git_diff.go b/models/git_diff.go index a6ea7306d491f..7e51d313c96bc 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -22,9 +22,10 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/highlight" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "github.com/Unknwon/com" "github.com/sergi/go-diff/diffmatchpatch" "golang.org/x/net/html/charset" diff --git a/models/gpg_key.go b/models/gpg_key.go index 8300cdbd21410..80bece68a13c1 100644 --- a/models/gpg_key.go +++ b/models/gpg_key.go @@ -16,8 +16,8 @@ import ( "time" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/go-xorm/xorm" "github.com/keybase/go-crypto/openpgp" diff --git a/models/helper_directory.go b/models/helper_directory.go index 417402b41c327..edff48335dd8c 100644 --- a/models/helper_directory.go +++ b/models/helper_directory.go @@ -11,8 +11,8 @@ import ( "path/filepath" "time" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/models/issue.go b/models/issue.go index 27298b8a86d2f..0639bb741088c 100644 --- a/models/issue.go +++ b/models/issue.go @@ -13,10 +13,10 @@ import ( "strings" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/builder" diff --git a/models/issue_assignees.go b/models/issue_assignees.go index f6a2afe2c9a75..f1a1946d645a5 100644 --- a/models/issue_assignees.go +++ b/models/issue_assignees.go @@ -7,9 +7,9 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" - api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/log" + "github.com/go-xorm/xorm" ) diff --git a/models/issue_comment.go b/models/issue_comment.go index d75d9d7db1f6e..f852d51125d57 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -12,17 +12,16 @@ import ( "strings" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" + api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" + "github.com/Unknwon/com" "github.com/go-xorm/builder" "github.com/go-xorm/xorm" - - api "code.gitea.io/gitea/modules/structs" - - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/markup" - "code.gitea.io/gitea/modules/util" ) // CommentType defines whether a comment is just a simple comment, an action (like close) or a reference. diff --git a/models/issue_dependency.go b/models/issue_dependency.go index ffa972c1060b1..898368fa2001e 100644 --- a/models/issue_dependency.go +++ b/models/issue_dependency.go @@ -5,9 +5,9 @@ package models import ( - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) // IssueDependency represents an issue dependency diff --git a/models/issue_list.go b/models/issue_list.go index 4ddb32da1311d..ee9dbe5d26801 100644 --- a/models/issue_list.go +++ b/models/issue_list.go @@ -7,7 +7,7 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-xorm/builder" ) diff --git a/models/issue_mail.go b/models/issue_mail.go index 01a12b16d2a8e..ff00cb5b10648 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -8,11 +8,11 @@ package models import ( "fmt" - "github.com/Unknwon/com" - - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + + "github.com/Unknwon/com" ) func (issue *Issue) mailSubject() string { diff --git a/models/issue_milestone.go b/models/issue_milestone.go index f279dda195e7d..33830e3b68e6f 100644 --- a/models/issue_milestone.go +++ b/models/issue_milestone.go @@ -7,10 +7,11 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" + "github.com/go-xorm/xorm" ) diff --git a/models/lfs_lock.go b/models/lfs_lock.go index a27a6f495e3d0..df305ebfec470 100644 --- a/models/lfs_lock.go +++ b/models/lfs_lock.go @@ -11,8 +11,9 @@ import ( "strings" "time" - "code.gitea.io/gitea/modules/log" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/log" + "github.com/go-xorm/xorm" ) diff --git a/models/log.go b/models/log.go index 38d6caf07c979..cd70c0e757d1f 100644 --- a/models/log.go +++ b/models/log.go @@ -7,7 +7,7 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-xorm/core" ) diff --git a/models/login_source.go b/models/login_source.go index 8eefec4ae5873..e7e007c500d9c 100644 --- a/models/login_source.go +++ b/models/login_source.go @@ -14,15 +14,15 @@ import ( "regexp" "strings" - "github.com/Unknwon/com" - "github.com/go-xorm/core" - "github.com/go-xorm/xorm" - "code.gitea.io/gitea/modules/auth/ldap" "code.gitea.io/gitea/modules/auth/oauth2" "code.gitea.io/gitea/modules/auth/pam" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" + + "github.com/Unknwon/com" + "github.com/go-xorm/core" + "github.com/go-xorm/xorm" ) // LoginType represents an login type. diff --git a/models/mail.go b/models/mail.go index 2bb07607a4119..3bbde15c83ad5 100644 --- a/models/mail.go +++ b/models/mail.go @@ -11,11 +11,12 @@ import ( "path" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/mailer" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "gopkg.in/gomail.v2" ) diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index e8fb42c492ea7..29eacb181965a 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -16,14 +16,14 @@ import ( "strings" "time" + "code.gitea.io/gitea/modules/generate" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "github.com/Unknwon/com" "github.com/go-xorm/xorm" gouuid "github.com/satori/go.uuid" ini "gopkg.in/ini.v1" - - "code.gitea.io/gitea/modules/generate" - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/setting" ) const minDBVersion = 4 diff --git a/models/migrations/v20.go b/models/migrations/v20.go index ded99e09ce147..0809dcc3574ad 100644 --- a/models/migrations/v20.go +++ b/models/migrations/v20.go @@ -13,8 +13,8 @@ import ( "path/filepath" "strconv" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v27.go b/models/migrations/v27.go index e87c7ab68f582..7a4682221a33a 100644 --- a/models/migrations/v27.go +++ b/models/migrations/v27.go @@ -8,8 +8,8 @@ import ( "fmt" "time" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v28.go b/models/migrations/v28.go index a30cbf2afbe4f..375c579a56efe 100644 --- a/models/migrations/v28.go +++ b/models/migrations/v28.go @@ -11,8 +11,8 @@ import ( "strings" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v33.go b/models/migrations/v33.go index ae7612e68cdd7..0e869d381b58c 100644 --- a/models/migrations/v33.go +++ b/models/migrations/v33.go @@ -7,8 +7,8 @@ package migrations import ( "fmt" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v39.go b/models/migrations/v39.go index 1312cb33134b5..b860e88f3bdf7 100644 --- a/models/migrations/v39.go +++ b/models/migrations/v39.go @@ -9,7 +9,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v45.go b/models/migrations/v45.go index 92cb81781975c..698fdcba4a3b6 100644 --- a/models/migrations/v45.go +++ b/models/migrations/v45.go @@ -5,8 +5,8 @@ package migrations import ( - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v50.go b/models/migrations/v50.go index a15914f0ee60c..82c10c4d4e647 100644 --- a/models/migrations/v50.go +++ b/models/migrations/v50.go @@ -7,8 +7,8 @@ package migrations import ( "time" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v51.go b/models/migrations/v51.go index 85e903bbe7d5c..a930d7afa09b7 100644 --- a/models/migrations/v51.go +++ b/models/migrations/v51.go @@ -6,7 +6,7 @@ package migrations import ( "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v61.go b/models/migrations/v61.go index 8d9b7e2d23398..b528a5bcc7042 100644 --- a/models/migrations/v61.go +++ b/models/migrations/v61.go @@ -9,8 +9,8 @@ import ( "os" "path" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v68.go b/models/migrations/v68.go index d9e80ca80eb4f..53d9eaf6b7e92 100644 --- a/models/migrations/v68.go +++ b/models/migrations/v68.go @@ -9,7 +9,7 @@ import ( "regexp" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/migrations/v78.go b/models/migrations/v78.go index 310c479d01b74..01c102bfa1f39 100644 --- a/models/migrations/v78.go +++ b/models/migrations/v78.go @@ -8,7 +8,7 @@ import ( "fmt" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-xorm/core" "github.com/go-xorm/xorm" diff --git a/models/migrations/v85.go b/models/migrations/v85.go index d511628b8d544..32e55e0b1c830 100644 --- a/models/migrations/v85.go +++ b/models/migrations/v85.go @@ -7,13 +7,13 @@ package migrations import ( "fmt" - "github.com/go-xorm/core" - "github.com/go-xorm/xorm" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/generate" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" + + "github.com/go-xorm/core" + "github.com/go-xorm/xorm" ) func hashAppToken(x *xorm.Engine) error { diff --git a/models/models.go b/models/models.go index 5752a8edd6dcf..95be37bf8a256 100644 --- a/models/models.go +++ b/models/models.go @@ -18,11 +18,13 @@ import ( "code.gitea.io/gitea/modules/setting" - // Needed for the MySQL driver - _ "github.com/go-sql-driver/mysql" + bridge "gitea.com/xorm/gitea_log_bridge" "github.com/go-xorm/core" "github.com/go-xorm/xorm" + // Needed for the MySQL driver + _ "github.com/go-sql-driver/mysql" + // Needed for the Postgresql driver _ "github.com/lib/pq" @@ -263,7 +265,7 @@ func NewTestEngine(x *xorm.Engine) (err error) { } x.SetMapper(core.GonicMapper{}) - x.SetLogger(NewXORMLogger(!setting.ProdMode)) + x.SetLogger(bridge.NewGiteaLogger("xorm", !setting.ProdMode)) x.ShowSQL(!setting.ProdMode) return x.StoreEngine("InnoDB").Sync2(tables...) } @@ -276,15 +278,12 @@ func SetEngine() (err error) { } x.SetMapper(core.GonicMapper{}) - // WARNING: for serv command, MUST remove the output to os.stdout, - // so use log file to instead print to stdout. - x.SetLogger(NewXORMLogger(setting.LogSQL)) + x.SetLogger(bridge.NewGiteaLogger("xorm", setting.LogSQL)) x.ShowSQL(setting.LogSQL) if DbCfg.Type == "mysql" { x.SetMaxIdleConns(0) x.SetConnMaxLifetime(3 * time.Second) } - return nil } diff --git a/models/org.go b/models/org.go index 65002eadff148..964f66623e46b 100644 --- a/models/org.go +++ b/models/org.go @@ -11,8 +11,8 @@ import ( "os" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/structs" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/builder" diff --git a/models/org_team.go b/models/org_team.go index dcf07437403d3..7fe435d6392d3 100644 --- a/models/org_team.go +++ b/models/org_team.go @@ -11,8 +11,8 @@ import ( "sort" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/pull.go b/models/pull.go index 38976d37ecddd..eeac125c3204b 100644 --- a/models/pull.go +++ b/models/pull.go @@ -18,12 +18,12 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/xorm" @@ -190,7 +190,7 @@ func (pr *PullRequest) apiFormat(e Engine) *api.PullRequest { } } if baseBranch, err = pr.BaseRepo.GetBranch(pr.BaseBranch); err != nil { - log.Error("pr.BaseRepo.GetBranch[%d]: %v", pr.BaseBranch, err) + log.Error("pr.BaseRepo.GetBranch[%s]: %v", pr.BaseBranch, err) return nil } if baseCommit, err = baseBranch.GetCommit(); err != nil { @@ -198,7 +198,7 @@ func (pr *PullRequest) apiFormat(e Engine) *api.PullRequest { return nil } if headBranch, err = pr.HeadRepo.GetBranch(pr.HeadBranch); err != nil { - log.Error("pr.HeadRepo.GetBranch[%d]: %v", pr.HeadBranch, err) + log.Error("pr.HeadRepo.GetBranch[%s]: %v", pr.HeadBranch, err) return nil } if headCommit, err = headBranch.GetCommit(); err != nil { diff --git a/models/release.go b/models/release.go index 28a2891013582..397ad9c94e23e 100644 --- a/models/release.go +++ b/models/release.go @@ -10,11 +10,11 @@ import ( "strings" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/go-xorm/builder" ) diff --git a/models/repo.go b/models/repo.go index 215222e27941b..6aa67228c2989 100644 --- a/models/repo.go +++ b/models/repo.go @@ -27,7 +27,6 @@ import ( "code.gitea.io/gitea/modules/avatar" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/options" "code.gitea.io/gitea/modules/process" @@ -35,6 +34,7 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/builder" diff --git a/models/repo_branch.go b/models/repo_branch.go index dee6ef3d7e267..3bcc21cb379a6 100644 --- a/models/repo_branch.go +++ b/models/repo_branch.go @@ -9,7 +9,7 @@ import ( "fmt" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // CanCreateBranch returns true if repository meets the requirements for creating new branches. diff --git a/models/repo_indexer.go b/models/repo_indexer.go index 140ec66c0355c..725fb1e721ff9 100644 --- a/models/repo_indexer.go +++ b/models/repo_indexer.go @@ -12,8 +12,8 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/indexer" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/ethantkoenig/rupture" ) diff --git a/models/repo_mirror.go b/models/repo_mirror.go index 7579231d8cf52..cdf78133373df 100644 --- a/models/repo_mirror.go +++ b/models/repo_mirror.go @@ -12,11 +12,11 @@ import ( "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/xorm" diff --git a/models/repo_permission.go b/models/repo_permission.go index 25239f4dd4d6c..a9d5ffd7c0c3b 100644 --- a/models/repo_permission.go +++ b/models/repo_permission.go @@ -7,7 +7,7 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // Permission contains all the permissions related variables to a repository for a user diff --git a/models/repo_redirect.go b/models/repo_redirect.go index 8847a0889c424..f271471cb0fdf 100644 --- a/models/repo_redirect.go +++ b/models/repo_redirect.go @@ -5,8 +5,9 @@ package models import ( - "code.gitea.io/gitea/modules/log" "strings" + + "code.gitea.io/log" ) // RepoRedirect represents that a repo name should be redirected to another diff --git a/models/review.go b/models/review.go index 5f856fbd8973b..57d03aa909bc5 100644 --- a/models/review.go +++ b/models/review.go @@ -7,9 +7,9 @@ package models import ( "fmt" - "code.gitea.io/gitea/modules/log" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/go-xorm/builder" "github.com/go-xorm/core" diff --git a/models/ssh_key.go b/models/ssh_key.go index 15a10826d8ea1..03a743bc1d45f 100644 --- a/models/ssh_key.go +++ b/models/ssh_key.go @@ -19,10 +19,10 @@ import ( "sync" "time" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/builder" diff --git a/models/status.go b/models/status.go index 384f5693dcf56..e7810d4224f5d 100644 --- a/models/status.go +++ b/models/status.go @@ -10,10 +10,10 @@ import ( "strings" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/go-xorm/xorm" ) diff --git a/models/u2f.go b/models/u2f.go index 1224b4a5fbed9..ed59af62976f1 100644 --- a/models/u2f.go +++ b/models/u2f.go @@ -5,8 +5,8 @@ package models import ( - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/tstranex/u2f" ) diff --git a/models/unit.go b/models/unit.go index 9f5c8d3cbbf60..2dfece0ede12d 100644 --- a/models/unit.go +++ b/models/unit.go @@ -8,7 +8,7 @@ import ( "fmt" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // UnitType is Unit's Type diff --git a/models/update.go b/models/update.go index 3eb0990d3dea9..b67014bd16934 100644 --- a/models/update.go +++ b/models/update.go @@ -13,8 +13,8 @@ import ( "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) // env keys for git hooks need diff --git a/models/user.go b/models/user.go index 4dc9aec6504f0..89d01b432f518 100644 --- a/models/user.go +++ b/models/user.go @@ -25,11 +25,11 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/generate" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/builder" diff --git a/models/user_openid.go b/models/user_openid.go index 49edc1db218da..a3bf2003e50e4 100644 --- a/models/user_openid.go +++ b/models/user_openid.go @@ -8,7 +8,7 @@ import ( "errors" "code.gitea.io/gitea/modules/auth/openid" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) var ( diff --git a/models/webhook.go b/models/webhook.go index e3e11e59633f4..6601f0d717591 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -19,11 +19,12 @@ import ( "strings" "time" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" + "github.com/Unknwon/com" gouuid "github.com/satori/go.uuid" ) diff --git a/models/wiki.go b/models/wiki.go index 9ae3386333298..5b17923822859 100644 --- a/models/wiki.go +++ b/models/wiki.go @@ -12,8 +12,8 @@ import ( "strings" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/sync" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/modules/auth/auth.go b/modules/auth/auth.go index 2a2ee404928cb..14a389806bc8f 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -18,10 +18,10 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/validation" + "code.gitea.io/log" ) // IsAPIPath if URL is an api path diff --git a/modules/auth/ldap/ldap.go b/modules/auth/ldap/ldap.go index ddeaf12430e13..b93e9ad18dd0c 100644 --- a/modules/auth/ldap/ldap.go +++ b/modules/auth/ldap/ldap.go @@ -11,7 +11,7 @@ import ( "fmt" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ldap "gopkg.in/ldap.v3" ) diff --git a/modules/auth/oauth2/oauth2.go b/modules/auth/oauth2/oauth2.go index a2d7116211cf7..483a0e72d6c6b 100644 --- a/modules/auth/oauth2/oauth2.go +++ b/modules/auth/oauth2/oauth2.go @@ -8,8 +8,8 @@ import ( "math" "net/http" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-xorm/xorm" "github.com/lafriks/xormstore" diff --git a/modules/base/tool.go b/modules/base/tool.go index 4893abff71ddf..383b65a88dae4 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -29,9 +29,9 @@ import ( "unicode/utf8" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/Unknwon/i18n" diff --git a/modules/context/api.go b/modules/context/api.go index 9be3fb512cf3c..5efc0b31f7606 100644 --- a/modules/context/api.go +++ b/modules/context/api.go @@ -9,13 +9,12 @@ import ( "fmt" "strings" - "github.com/go-macaron/csrf" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "github.com/go-macaron/csrf" "gopkg.in/macaron.v1" ) diff --git a/modules/context/auth.go b/modules/context/auth.go index 772403bda9be9..716b1a8a66f8c 100644 --- a/modules/context/auth.go +++ b/modules/context/auth.go @@ -8,8 +8,9 @@ package context import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "github.com/go-macaron/csrf" macaron "gopkg.in/macaron.v1" ) diff --git a/modules/context/context.go b/modules/context/context.go index b7c77ac4605ee..b36ef1c5687c1 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -17,9 +17,10 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" + "github.com/Unknwon/com" "github.com/go-macaron/cache" "github.com/go-macaron/csrf" diff --git a/modules/context/panic.go b/modules/context/panic.go index 8ed91dea65f4a..7ca0db3f54a25 100644 --- a/modules/context/panic.go +++ b/modules/context/panic.go @@ -19,7 +19,8 @@ package context import ( "fmt" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" + macaron "gopkg.in/macaron.v1" ) diff --git a/modules/context/permission.go b/modules/context/permission.go index 6ac935686b4b4..f4ba70b454f87 100644 --- a/modules/context/permission.go +++ b/modules/context/permission.go @@ -6,7 +6,7 @@ package context import ( "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" macaron "gopkg.in/macaron.v1" ) diff --git a/modules/context/repo.go b/modules/context/repo.go index 096f3c0a5d216..1938b0e7b68b2 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -15,8 +15,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/Unknwon/com" "gopkg.in/editorconfig/editorconfig-core-go.v1" diff --git a/modules/cron/cron.go b/modules/cron/cron.go index 24457f5013090..e1c7bea02fdc6 100644 --- a/modules/cron/cron.go +++ b/modules/cron/cron.go @@ -7,11 +7,11 @@ package cron import ( "time" - "github.com/gogits/cron" - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + + "github.com/gogits/cron" ) var c = cron.New() diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go index ddc81097208b6..c569afbe41ec1 100644 --- a/modules/git/repo_compare.go +++ b/modules/git/repo_compare.go @@ -14,7 +14,7 @@ import ( "strings" "time" - logger "code.gitea.io/gitea/modules/log" + logger "code.gitea.io/log" ) // CompareInfo represents needed information for comparing references. diff --git a/modules/indexer/issues/indexer.go b/modules/indexer/issues/indexer.go index df8bfd6305912..dbf51b7d821a5 100644 --- a/modules/indexer/issues/indexer.go +++ b/modules/indexer/issues/indexer.go @@ -8,9 +8,9 @@ import ( "fmt" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) // IndexerData data stored in the issue indexer diff --git a/modules/indexer/issues/queue_disk.go b/modules/indexer/issues/queue_disk.go index e5ac2a79812ae..686e938989a61 100644 --- a/modules/indexer/issues/queue_disk.go +++ b/modules/indexer/issues/queue_disk.go @@ -8,7 +8,8 @@ import ( "encoding/json" "time" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" + "github.com/lunny/levelqueue" ) diff --git a/modules/indexer/issues/queue_redis.go b/modules/indexer/issues/queue_redis.go index aeccd7920ce8f..b25dc1950117a 100644 --- a/modules/indexer/issues/queue_redis.go +++ b/modules/indexer/issues/queue_redis.go @@ -11,7 +11,8 @@ import ( "strings" "time" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" + "github.com/go-redis/redis" ) diff --git a/modules/indexer/repo.go b/modules/indexer/repo.go index 287d23854b2d8..0d09341d29691 100644 --- a/modules/indexer/repo.go +++ b/modules/indexer/repo.go @@ -7,8 +7,8 @@ package indexer import ( "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/blevesearch/bleve" "github.com/blevesearch/bleve/analysis/analyzer/custom" diff --git a/modules/lfs/locks.go b/modules/lfs/locks.go index 4516ba01aee53..81dcf2f6e9b78 100644 --- a/modules/lfs/locks.go +++ b/modules/lfs/locks.go @@ -11,9 +11,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/log" ) //checkIsValidRequest check if it a valid request in case of bad request it write the response to ctx. diff --git a/modules/lfs/server.go b/modules/lfs/server.go index bf5355acfc3b1..1bc3e6f12bfc5 100644 --- a/modules/lfs/server.go +++ b/modules/lfs/server.go @@ -14,8 +14,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/dgrijalva/jwt-go" "gopkg.in/macaron.v1" diff --git a/modules/log/conn_test.go b/modules/log/conn_test.go deleted file mode 100644 index cc3d758fa98f9..0000000000000 --- a/modules/log/conn_test.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "fmt" - "io/ioutil" - "net" - "strings" - "sync" - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -func listenReadAndClose(t *testing.T, l net.Listener, expected string) { - conn, err := l.Accept() - assert.NoError(t, err) - defer conn.Close() - written, err := ioutil.ReadAll(conn) - - assert.NoError(t, err) - assert.Equal(t, expected, string(written)) -} - -func TestConnLogger(t *testing.T) { - var written []byte - - protocol := "tcp" - address := ":3099" - - l, err := net.Listen(protocol, address) - if err != nil { - t.Fatal(err) - } - defer l.Close() - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - - logger := NewConn() - connLogger := logger.(*ConnLogger) - - logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"reconnectOnMsg\":%t,\"reconnect\":%t,\"net\":\"%s\",\"addr\":\"%s\"}", prefix, level.String(), flags, true, true, protocol, address)) - - assert.Equal(t, flags, connLogger.Flags) - assert.Equal(t, level, connLogger.Level) - assert.Equal(t, level, logger.GetLevel()) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - var wg sync.WaitGroup - wg.Add(2) - go func() { - defer wg.Done() - listenReadAndClose(t, l, expected) - }() - go func() { - defer wg.Done() - err := logger.LogEvent(&event) - assert.NoError(t, err) - }() - wg.Wait() - - written = written[:0] - - event.level = WARN - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - wg.Add(2) - go func() { - defer wg.Done() - listenReadAndClose(t, l, expected) - }() - go func() { - defer wg.Done() - err := logger.LogEvent(&event) - assert.NoError(t, err) - }() - wg.Wait() - - logger.Close() -} - -func TestConnLoggerBadConfig(t *testing.T) { - logger := NewConn() - - err := logger.Init("{") - assert.Equal(t, "unexpected end of JSON input", err.Error()) - logger.Close() -} - -func TestConnLoggerCloseBeforeSend(t *testing.T) { - protocol := "tcp" - address := ":3099" - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - - logger := NewConn() - - logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"reconnectOnMsg\":%t,\"reconnect\":%t,\"net\":\"%s\",\"addr\":\"%s\"}", prefix, level.String(), flags, false, false, protocol, address)) - logger.Close() -} - -func TestConnLoggerFailConnect(t *testing.T) { - protocol := "tcp" - address := ":3099" - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - - logger := NewConn() - - logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"reconnectOnMsg\":%t,\"reconnect\":%t,\"net\":\"%s\",\"addr\":\"%s\"}", prefix, level.String(), flags, false, false, protocol, address)) - - assert.Equal(t, level, logger.GetLevel()) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - //dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - err := logger.LogEvent(&event) - assert.Error(t, err) - - logger.Close() -} - -func TestConnLoggerClose(t *testing.T) { - var written []byte - - protocol := "tcp" - address := ":3099" - - l, err := net.Listen(protocol, address) - if err != nil { - t.Fatal(err) - } - defer l.Close() - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - - logger := NewConn() - connLogger := logger.(*ConnLogger) - - logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"reconnectOnMsg\":%t,\"reconnect\":%t,\"net\":\"%s\",\"addr\":\"%s\"}", prefix, level.String(), flags, false, false, protocol, address)) - - assert.Equal(t, flags, connLogger.Flags) - assert.Equal(t, level, connLogger.Level) - assert.Equal(t, level, logger.GetLevel()) - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - var wg sync.WaitGroup - wg.Add(2) - go func() { - defer wg.Done() - err := logger.LogEvent(&event) - assert.NoError(t, err) - logger.Close() - }() - go func() { - defer wg.Done() - listenReadAndClose(t, l, expected) - }() - wg.Wait() - - logger = NewConn() - connLogger = logger.(*ConnLogger) - - logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"reconnectOnMsg\":%t,\"reconnect\":%t,\"net\":\"%s\",\"addr\":\"%s\"}", prefix, level.String(), flags, false, true, protocol, address)) - - assert.Equal(t, flags, connLogger.Flags) - assert.Equal(t, level, connLogger.Level) - assert.Equal(t, level, logger.GetLevel()) - - written = written[:0] - - event.level = WARN - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - wg.Add(2) - go func() { - defer wg.Done() - listenReadAndClose(t, l, expected) - }() - go func() { - defer wg.Done() - err := logger.LogEvent(&event) - assert.NoError(t, err) - logger.Close() - - }() - wg.Wait() - logger.Flush() - logger.Close() -} diff --git a/modules/log/console_test.go b/modules/log/console_test.go deleted file mode 100644 index a028b5b875ef2..0000000000000 --- a/modules/log/console_test.go +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "fmt" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -func TestConsoleLoggerBadConfig(t *testing.T) { - logger := NewConsoleLogger() - - err := logger.Init("{") - assert.Equal(t, "unexpected end of JSON input", err.Error()) - logger.Close() -} - -func TestConsoleLoggerMinimalConfig(t *testing.T) { - for _, level := range Levels() { - var written []byte - var closed bool - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - written = p - closed = close - }, - } - prefix := "" - flags := LstdFlags - - cw := NewConsoleLogger() - realCW := cw.(*ConsoleLogger) - cw.Init(fmt.Sprintf("{\"level\":\"%s\"}", level)) - nwc := realCW.out.(*nopWriteCloser) - nwc.w = c - - assert.Equal(t, flags, realCW.Flags) - assert.Equal(t, FromString(level), realCW.Level) - assert.Equal(t, FromString(level), cw.GetLevel()) - assert.Equal(t, prefix, realCW.Prefix) - assert.Equal(t, "", string(written)) - cw.Close() - assert.Equal(t, false, closed) - - } -} - -func TestConsoleLogger(t *testing.T) { - var written []byte - var closed bool - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - written = p - closed = close - }, - } - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - - cw := NewConsoleLogger() - realCW := cw.(*ConsoleLogger) - realCW.Colorize = false - nwc := realCW.out.(*nopWriteCloser) - nwc.w = c - - cw.Init(fmt.Sprintf("{\"expression\":\"FILENAME\",\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d}", prefix, level.String(), flags)) - - assert.Equal(t, flags, realCW.Flags) - assert.Equal(t, level, realCW.Level) - assert.Equal(t, level, cw.GetLevel()) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - cw.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = DEBUG - expected = "" - cw.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - - event.level = TRACE - expected = "" - cw.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - - nonMatchEvent := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FI_LENAME", - line: 1, - time: date, - } - event.level = INFO - expected = "" - cw.LogEvent(&nonMatchEvent) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - - event.level = WARN - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - cw.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - cw.Close() - assert.Equal(t, false, closed) -} diff --git a/modules/log/file_test.go b/modules/log/file_test.go deleted file mode 100644 index 38279315ab363..0000000000000 --- a/modules/log/file_test.go +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "compress/gzip" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -func TestFileLoggerFails(t *testing.T) { - tmpDir, err := ioutil.TempDir("", "TestFileLogger") - assert.NoError(t, err) - defer os.RemoveAll(tmpDir) - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - //filename := filepath.Join(tmpDir, "test.log") - - fileLogger := NewFileLogger() - //realFileLogger, ok := fileLogger.(*FileLogger) - //assert.Equal(t, true, ok) - - // Fail if there is bad json - err = fileLogger.Init("{") - assert.Error(t, err) - - // Fail if there is no filename - err = fileLogger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"filename\":\"%s\"}", prefix, level.String(), flags, "")) - assert.Error(t, err) - - // Fail if the file isn't a filename - err = fileLogger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"filename\":\"%s\"}", prefix, level.String(), flags, filepath.ToSlash(tmpDir))) - assert.Error(t, err) - -} - -func TestFileLogger(t *testing.T) { - tmpDir, err := ioutil.TempDir("", "TestFileLogger") - assert.NoError(t, err) - defer os.RemoveAll(tmpDir) - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - filename := filepath.Join(tmpDir, "test.log") - - fileLogger := NewFileLogger() - realFileLogger, ok := fileLogger.(*FileLogger) - assert.Equal(t, true, ok) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - - fileLogger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"filename\":\"%s\",\"maxsize\":%d,\"compress\":false}", prefix, level.String(), flags, filepath.ToSlash(filename), len(expected)*2)) - - assert.Equal(t, flags, realFileLogger.Flags) - assert.Equal(t, level, realFileLogger.Level) - assert.Equal(t, level, fileLogger.GetLevel()) - - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err := ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - event.level = DEBUG - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - event.level = TRACE - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - event.level = WARN - expected += fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - // Should rotate - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename + fmt.Sprintf(".%s.%03d", time.Now().Format("2006-01-02"), 1)) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - assert.Equal(t, expected, string(logData)) - - for num := 2; num <= 999; num++ { - file, err := os.OpenFile(filename+fmt.Sprintf(".%s.%03d", time.Now().Format("2006-01-02"), num), os.O_RDONLY|os.O_CREATE, 0666) - assert.NoError(t, err) - file.Close() - } - err = realFileLogger.DoRotate() - assert.Error(t, err) - - expected += fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - // Should fail to rotate - expected += fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - fileLogger.Close() -} - -func TestCompressFileLogger(t *testing.T) { - tmpDir, err := ioutil.TempDir("", "TestFileLogger") - assert.NoError(t, err) - defer os.RemoveAll(tmpDir) - - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - filename := filepath.Join(tmpDir, "test.log") - - fileLogger := NewFileLogger() - realFileLogger, ok := fileLogger.(*FileLogger) - assert.Equal(t, true, ok) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - - fileLogger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"filename\":\"%s\",\"maxsize\":%d,\"compress\":true}", prefix, level.String(), flags, filepath.ToSlash(filename), len(expected)*2)) - - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err := ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - event.level = WARN - expected += fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - fileLogger.LogEvent(&event) - fileLogger.Flush() - logData, err = ioutil.ReadFile(filename) - assert.NoError(t, err) - assert.Equal(t, expected, string(logData)) - - // Should rotate - fileLogger.LogEvent(&event) - fileLogger.Flush() - - for num := 2; num <= 999; num++ { - file, err := os.OpenFile(filename+fmt.Sprintf(".%s.%03d.gz", time.Now().Format("2006-01-02"), num), os.O_RDONLY|os.O_CREATE, 0666) - assert.NoError(t, err) - file.Close() - } - err = realFileLogger.DoRotate() - assert.Error(t, err) -} - -func TestCompressOldFile(t *testing.T) { - tmpDir, err := ioutil.TempDir("", "TestFileLogger") - assert.NoError(t, err) - defer os.RemoveAll(tmpDir) - fname := filepath.Join(tmpDir, "test") - nonGzip := filepath.Join(tmpDir, "test-nonGzip") - - f, err := os.OpenFile(fname, os.O_CREATE|os.O_WRONLY, 0660) - assert.NoError(t, err) - ng, err := os.OpenFile(nonGzip, os.O_CREATE|os.O_WRONLY, 0660) - assert.NoError(t, err) - - for i := 0; i < 999; i++ { - f.WriteString("This is a test file\n") - ng.WriteString("This is a test file\n") - } - f.Close() - ng.Close() - - err = compressOldLogFile(fname, -1) - assert.NoError(t, err) - - _, err = os.Lstat(fname + ".gz") - assert.NoError(t, err) - - f, err = os.Open(fname + ".gz") - assert.NoError(t, err) - zr, err := gzip.NewReader(f) - assert.NoError(t, err) - data, err := ioutil.ReadAll(zr) - assert.NoError(t, err) - original, err := ioutil.ReadFile(nonGzip) - assert.NoError(t, err) - assert.Equal(t, original, data) -} diff --git a/modules/log/flags.go b/modules/log/flags.go deleted file mode 100644 index 992fc62ddb6e8..0000000000000 --- a/modules/log/flags.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import "strings" - -// These flags define which text to prefix to each log entry generated -// by the Logger. Bits are or'ed together to control what's printed. -// There is no control over the order they appear (the order listed -// here) or the format they present (as described in the comments). -// The prefix is followed by a colon only if more than time is stated -// is specified. For example, flags Ldate | Ltime -// produce, 2009/01/23 01:23:23 message. -// The standard is: -// 2009/01/23 01:23:23 ...a/logger/c/d.go:23:runtime.Caller() [I]: message -const ( - Ldate = 1 << iota // the date in the local time zone: 2009/01/23 - Ltime // the time in the local time zone: 01:23:23 - Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime. - Llongfile // full file name and line number: /a/logger/c/d.go:23 - Lshortfile // final file name element and line number: d.go:23. overrides Llongfile - Lfuncname // function name of the caller: runtime.Caller() - Lshortfuncname // last part of the function name - LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone - Llevelinitial // Initial character of the provided level in brackets eg. [I] for info - Llevel // Provided level in brackets [INFO] - - // Last 20 characters of the filename - Lmedfile = Lshortfile | Llongfile - - // LstdFlags is the initial value for the standard logger - LstdFlags = Ldate | Ltime | Lmedfile | Lshortfuncname | Llevelinitial -) - -var flagFromString = map[string]int{ - "none": 0, - "date": Ldate, - "time": Ltime, - "microseconds": Lmicroseconds, - "longfile": Llongfile, - "shortfile": Lshortfile, - "funcname": Lfuncname, - "shortfuncname": Lshortfuncname, - "utc": LUTC, - "levelinitial": Llevelinitial, - "level": Llevel, - "medfile": Lmedfile, - "stdflags": LstdFlags, -} - -// FlagsFromString takes a comma separated list of flags and returns -// the flags for this string -func FlagsFromString(from string) int { - flags := 0 - for _, flag := range strings.Split(strings.ToLower(from), ",") { - f, ok := flagFromString[strings.TrimSpace(flag)] - if ok { - flags |= f - } - } - return flags -} diff --git a/modules/log/level_test.go b/modules/log/level_test.go deleted file mode 100644 index 40f6310bfda5a..0000000000000 --- a/modules/log/level_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "encoding/json" - "fmt" - "testing" - - "github.com/stretchr/testify/assert" -) - -type testLevel struct { - Level Level `json:"level"` -} - -func TestLevelMarshalUnmarshalJSON(t *testing.T) { - levelBytes, err := json.Marshal(testLevel{ - Level: INFO, - }) - assert.NoError(t, err) - assert.Equal(t, string(makeTestLevelBytes(INFO.String())), string(levelBytes)) - - var testLevel testLevel - err = json.Unmarshal(levelBytes, &testLevel) - assert.NoError(t, err) - assert.Equal(t, INFO, testLevel.Level) - - err = json.Unmarshal(makeTestLevelBytes(`FOFOO`), &testLevel) - assert.NoError(t, err) - assert.Equal(t, INFO, testLevel.Level) - - err = json.Unmarshal([]byte(fmt.Sprintf(`{"level":%d}`, 2)), &testLevel) - assert.NoError(t, err) - assert.Equal(t, INFO, testLevel.Level) - - err = json.Unmarshal([]byte(fmt.Sprintf(`{"level":%d}`, 10012)), &testLevel) - assert.NoError(t, err) - assert.Equal(t, INFO, testLevel.Level) - - err = json.Unmarshal([]byte(`{"level":{}}`), &testLevel) - assert.NoError(t, err) - assert.Equal(t, INFO, testLevel.Level) - - assert.Equal(t, INFO.String(), Level(1001).String()) - - err = json.Unmarshal([]byte(`{"level":{}`), &testLevel.Level) - assert.Error(t, err) -} - -func makeTestLevelBytes(level string) []byte { - return []byte(fmt.Sprintf(`{"level":"%s"}`, level)) -} diff --git a/modules/log/log_test.go b/modules/log/log_test.go deleted file mode 100644 index 9e3d7527b23dc..0000000000000 --- a/modules/log/log_test.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" -) - -func baseConsoleTest(t *testing.T, logger *Logger) (chan []byte, chan bool) { - written := make(chan []byte) - closed := make(chan bool) - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - written <- p - closed <- close - }, - } - m := logger.MultiChannelledLog - - channelledLog := m.GetEventLogger("console") - assert.NotEmpty(t, channelledLog) - realChanLog, ok := channelledLog.(*ChannelledLog) - assert.Equal(t, true, ok) - realCL, ok := realChanLog.loggerProvider.(*ConsoleLogger) - assert.Equal(t, true, ok) - assert.Equal(t, INFO, realCL.Level) - realCL.out = c - - format := "test: %s" - args := []interface{}{"A"} - - logger.Log(0, INFO, format, args...) - line := <-written - assert.Contains(t, string(line), fmt.Sprintf(format, args...)) - assert.Equal(t, false, <-closed) - - format = "test2: %s" - logger.Warn(format, args...) - line = <-written - - assert.Contains(t, string(line), fmt.Sprintf(format, args...)) - assert.Equal(t, false, <-closed) - - format = "testerror: %s" - logger.Error(format, args...) - line = <-written - assert.Contains(t, string(line), fmt.Sprintf(format, args...)) - assert.Equal(t, false, <-closed) - return written, closed -} - -func TestNewLoggerUnexported(t *testing.T) { - level := INFO - logger := newLogger("UNEXPORTED", 0) - err := logger.SetLogger("console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String())) - assert.NoError(t, err) - out := logger.MultiChannelledLog.GetEventLogger("console") - assert.NotEmpty(t, out) - chanlog, ok := out.(*ChannelledLog) - assert.Equal(t, true, ok) - assert.Equal(t, "console", chanlog.provider) - assert.Equal(t, INFO, logger.GetLevel()) - baseConsoleTest(t, logger) -} - -func TestNewLoggger(t *testing.T) { - level := INFO - logger := NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String())) - - assert.Equal(t, INFO, GetLevel()) - assert.Equal(t, false, IsTrace()) - assert.Equal(t, false, IsDebug()) - assert.Equal(t, true, IsInfo()) - assert.Equal(t, true, IsWarn()) - assert.Equal(t, true, IsError()) - - written, closed := baseConsoleTest(t, logger) - - format := "test: %s" - args := []interface{}{"A"} - - Log(0, INFO, format, args...) - line := <-written - assert.Contains(t, string(line), fmt.Sprintf(format, args...)) - assert.Equal(t, false, <-closed) - - Info(format, args...) - line = <-written - assert.Contains(t, string(line), fmt.Sprintf(format, args...)) - assert.Equal(t, false, <-closed) - - go DelLogger("console") - line = <-written - assert.Equal(t, "", string(line)) - assert.Equal(t, true, <-closed) -} - -func TestNewLogggerRecreate(t *testing.T) { - level := INFO - NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String())) - - assert.Equal(t, INFO, GetLevel()) - assert.Equal(t, false, IsTrace()) - assert.Equal(t, false, IsDebug()) - assert.Equal(t, true, IsInfo()) - assert.Equal(t, true, IsWarn()) - assert.Equal(t, true, IsError()) - - format := "test: %s" - args := []interface{}{"A"} - - Log(0, INFO, format, args...) - - NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String())) - - assert.Equal(t, INFO, GetLevel()) - assert.Equal(t, false, IsTrace()) - assert.Equal(t, false, IsDebug()) - assert.Equal(t, true, IsInfo()) - assert.Equal(t, true, IsWarn()) - assert.Equal(t, true, IsError()) - - Log(0, INFO, format, args...) - - assert.Panics(t, func() { - NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"`, level.String())) - }) - - go DelLogger("console") - - // We should be able to redelete without a problem - go DelLogger("console") - -} - -func TestNewNamedLogger(t *testing.T) { - level := INFO - err := NewNamedLogger("test", 0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String())) - assert.NoError(t, err) - logger := NamedLoggers["test"] - assert.Equal(t, level, logger.GetLevel()) - - written, closed := baseConsoleTest(t, logger) - go DelNamedLogger("test") - line := <-written - assert.Equal(t, "", string(line)) - assert.Equal(t, true, <-closed) -} diff --git a/modules/log/smtp_test.go b/modules/log/smtp_test.go deleted file mode 100644 index 216d55521549a..0000000000000 --- a/modules/log/smtp_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "fmt" - "net/smtp" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -func TestSMTPLogger(t *testing.T) { - prefix := "TestPrefix " - level := INFO - flags := LstdFlags | LUTC | Lfuncname - username := "testuser" - password := "testpassword" - host := "testhost" - subject := "testsubject" - sendTos := []string{"testto1", "testto2"} - - logger := NewSMTPLogger() - smtpLogger, ok := logger.(*SMTPLogger) - assert.Equal(t, true, ok) - - err := logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"username\":\"%s\",\"password\":\"%s\",\"host\":\"%s\",\"subject\":\"%s\",\"sendTos\":[\"%s\",\"%s\"]}", prefix, level.String(), flags, username, password, host, subject, sendTos[0], sendTos[1])) - assert.NoError(t, err) - - assert.Equal(t, flags, smtpLogger.Flags) - assert.Equal(t, level, smtpLogger.Level) - assert.Equal(t, level, logger.GetLevel()) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - - var envToHost string - var envFrom string - var envTo []string - var envMsg []byte - smtpLogger.sendMailFn = func(addr string, a smtp.Auth, from string, to []string, msg []byte) error { - envToHost = addr - envFrom = from - envTo = to - envMsg = msg - return nil - } - - err = logger.LogEvent(&event) - assert.NoError(t, err) - assert.Equal(t, host, envToHost) - assert.Equal(t, username, envFrom) - assert.Equal(t, sendTos, envTo) - assert.Contains(t, string(envMsg), expected) - - logger.Flush() - - event.level = WARN - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - err = logger.LogEvent(&event) - assert.NoError(t, err) - assert.Equal(t, host, envToHost) - assert.Equal(t, username, envFrom) - assert.Equal(t, sendTos, envTo) - assert.Contains(t, string(envMsg), expected) - - logger.Close() -} diff --git a/modules/log/writer_test.go b/modules/log/writer_test.go deleted file mode 100644 index 886dd58fb38fd..0000000000000 --- a/modules/log/writer_test.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package log - -import ( - "fmt" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -type CallbackWriteCloser struct { - callback func([]byte, bool) -} - -func (c CallbackWriteCloser) Write(p []byte) (int, error) { - c.callback(p, false) - return len(p), nil -} - -func (c CallbackWriteCloser) Close() error { - c.callback(nil, true) - return nil -} - -func TestBaseLogger(t *testing.T) { - var written []byte - var closed bool - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - written = p - closed = close - }, - } - prefix := "TestPrefix " - b := WriterLogger{ - out: c, - Level: INFO, - Flags: LstdFlags | LUTC, - Prefix: prefix, - } - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) - - dateString := date.UTC().Format("2006/01/02 15:04:05") - - event := Event{ - level: INFO, - msg: "TEST MSG", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - assert.Equal(t, INFO, b.GetLevel()) - - expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = DEBUG - expected = "" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - - event.level = TRACE - expected = "" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - - event.level = WARN - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = ERROR - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = CRITICAL - expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - b.Close() - assert.Equal(t, true, closed) -} - -func TestBaseLoggerDated(t *testing.T) { - var written []byte - var closed bool - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - written = p - closed = close - }, - } - prefix := "" - b := WriterLogger{ - out: c, - Level: WARN, - Flags: Ldate | Ltime | Lmicroseconds | Lshortfile | Llevel, - Prefix: prefix, - } - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 115, location) - - dateString := date.Format("2006/01/02 15:04:05.000000") - - event := Event{ - level: WARN, - msg: "TEST MESSAGE TEST\n", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - assert.Equal(t, WARN, b.GetLevel()) - - expected := fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = INFO - expected = "" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = ERROR - expected = fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = DEBUG - expected = "" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = CRITICAL - expected = fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg) - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.level = TRACE - expected = "" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - b.Close() - assert.Equal(t, true, closed) -} - -func TestBaseLoggerMultiLineNoFlagsRegexp(t *testing.T) { - var written []byte - var closed bool - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - written = p - closed = close - }, - } - prefix := "" - b := WriterLogger{ - Level: DEBUG, - StacktraceLevel: ERROR, - Flags: -1, - Prefix: prefix, - Expression: "FILENAME", - } - b.NewWriterLogger(c) - - location, _ := time.LoadLocation("EST") - - date := time.Date(2019, time.January, 13, 22, 3, 30, 115, location) - - event := Event{ - level: DEBUG, - msg: "TEST\nMESSAGE\nTEST", - caller: "CALLER", - filename: "FULL/FILENAME", - line: 1, - time: date, - } - - assert.Equal(t, DEBUG, b.GetLevel()) - - expected := "TEST\n\tMESSAGE\n\tTEST\n" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.filename = "ELSEWHERE" - - b.LogEvent(&event) - assert.Equal(t, "", string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event.caller = "FILENAME" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - - event = Event{ - level: DEBUG, - msg: "TEST\nFILENAME\nTEST", - caller: "CALLER", - filename: "FULL/ELSEWHERE", - line: 1, - time: date, - } - expected = "TEST\n\tFILENAME\n\tTEST\n" - b.LogEvent(&event) - assert.Equal(t, expected, string(written)) - assert.Equal(t, false, closed) - written = written[:0] - -} - -func TestBrokenRegexp(t *testing.T) { - var closed bool - - c := CallbackWriteCloser{ - callback: func(p []byte, close bool) { - closed = close - }, - } - - b := WriterLogger{ - Level: DEBUG, - StacktraceLevel: ERROR, - Flags: -1, - Prefix: prefix, - Expression: "\\", - } - b.NewWriterLogger(c) - assert.Empty(t, b.regexp) - b.Close() - assert.Equal(t, true, closed) -} diff --git a/modules/mailer/mailer.go b/modules/mailer/mailer.go index d19ae7b2f42ee..eb2ba204d743e 100644 --- a/modules/mailer/mailer.go +++ b/modules/mailer/mailer.go @@ -18,8 +18,8 @@ import ( "time" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/jaytaylor/html2text" "gopkg.in/gomail.v2" diff --git a/modules/markup/external/external.go b/modules/markup/external/external.go index 02cf61be16198..2236a1bfa2ec5 100644 --- a/modules/markup/external/external.go +++ b/modules/markup/external/external.go @@ -13,9 +13,9 @@ import ( "runtime" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) // RegisterParsers registers all supported third part parsers according settings diff --git a/modules/markup/markup.go b/modules/markup/markup.go index dc43b533c022a..9e42e4962144c 100644 --- a/modules/markup/markup.go +++ b/modules/markup/markup.go @@ -8,7 +8,7 @@ import ( "path/filepath" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // Init initialize regexps for markdown parsing diff --git a/modules/markup/orgmode/orgmode.go b/modules/markup/orgmode/orgmode.go index f63155201ed9c..6ce5d6b92a73f 100644 --- a/modules/markup/orgmode/orgmode.go +++ b/modules/markup/orgmode/orgmode.go @@ -5,9 +5,9 @@ package markup import ( - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/markdown" + "code.gitea.io/log" "github.com/chaseadamsio/goorgeous" "github.com/russross/blackfriday" diff --git a/modules/migrations/gitea.go b/modules/migrations/gitea.go index 4e930fa8318ab..72c90dd6fa00f 100644 --- a/modules/migrations/gitea.go +++ b/modules/migrations/gitea.go @@ -18,10 +18,10 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/migrations/base" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" gouuid "github.com/satori/go.uuid" ) diff --git a/modules/migrations/github.go b/modules/migrations/github.go index 6847787aceff9..7a757195741fc 100644 --- a/modules/migrations/github.go +++ b/modules/migrations/github.go @@ -12,8 +12,8 @@ import ( "net/url" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/migrations/base" + "code.gitea.io/log" "github.com/google/go-github/v24/github" "golang.org/x/oauth2" diff --git a/modules/migrations/migrate.go b/modules/migrations/migrate.go index 4b1229f9495c0..233e0a3f3f82f 100644 --- a/modules/migrations/migrate.go +++ b/modules/migrations/migrate.go @@ -9,8 +9,8 @@ import ( "fmt" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/migrations/base" + "code.gitea.io/log" ) // MigrateOptions is equal to base.MigrateOptions diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go index 66614b2c20c7e..440dda35f062d 100644 --- a/modules/notification/indexer/indexer.go +++ b/modules/notification/indexer/indexer.go @@ -7,8 +7,8 @@ package indexer import ( "code.gitea.io/gitea/models" issue_indexer "code.gitea.io/gitea/modules/indexer/issues" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification/base" + "code.gitea.io/log" ) type indexerNotifier struct { diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go index 9d0db4f415197..c4592127e0e7b 100644 --- a/modules/notification/mail/mail.go +++ b/modules/notification/mail/mail.go @@ -6,8 +6,8 @@ package mail import ( "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification/base" + "code.gitea.io/log" ) type mailNotifier struct { diff --git a/modules/notification/ui/ui.go b/modules/notification/ui/ui.go index 22089158f5b72..624866b0ec1c3 100644 --- a/modules/notification/ui/ui.go +++ b/modules/notification/ui/ui.go @@ -7,8 +7,8 @@ package ui import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification/base" + "code.gitea.io/log" ) type ( diff --git a/modules/pprof/pprof.go b/modules/pprof/pprof.go index 80ad67be3a81b..782b0dcb8b15c 100644 --- a/modules/pprof/pprof.go +++ b/modules/pprof/pprof.go @@ -10,7 +10,7 @@ import ( "runtime" "runtime/pprof" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // DumpMemProfileForUsername dumps a memory profile at pprofDataPath as memprofile__ diff --git a/modules/pull/lfs.go b/modules/pull/lfs.go index 77890667d63d1..0bb731c5eaca1 100644 --- a/modules/pull/lfs.go +++ b/modules/pull/lfs.go @@ -17,7 +17,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/lfs" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // LFSPush pushes lfs objects referred to in new commits in the head repository from the base repository diff --git a/modules/pull/merge.go b/modules/pull/merge.go index e12ede81d630d..b223e8808f9a4 100644 --- a/modules/pull/merge.go +++ b/modules/pull/merge.go @@ -18,10 +18,10 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) // Merge merges pull request to base repository. diff --git a/modules/repofiles/temp_repo.go b/modules/repofiles/temp_repo.go index ec35628676fcf..ff999e0252cf0 100644 --- a/modules/repofiles/temp_repo.go +++ b/modules/repofiles/temp_repo.go @@ -17,9 +17,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) // TemporaryUploadRepository is a type to wrap our upload repositories as a shallow clone diff --git a/modules/repofiles/update.go b/modules/repofiles/update.go index f011017a5e87a..2e45c07ae6b06 100644 --- a/modules/repofiles/update.go +++ b/modules/repofiles/update.go @@ -10,16 +10,16 @@ import ( "path" "strings" - "golang.org/x/net/html/charset" - "golang.org/x/text/transform" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/lfs" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" + "code.gitea.io/log" + + "golang.org/x/net/html/charset" + "golang.org/x/text/transform" ) // IdentityOptions for a person's identity like an author or committer diff --git a/modules/setting/cache.go b/modules/setting/cache.go index babb62baeae14..84508c54a9f4a 100644 --- a/modules/setting/cache.go +++ b/modules/setting/cache.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // Cache represents cache settings diff --git a/modules/setting/cors.go b/modules/setting/cors.go index c1c3bfb813499..4d2ff3314493e 100644 --- a/modules/setting/cors.go +++ b/modules/setting/cors.go @@ -7,7 +7,7 @@ package setting import ( "time" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" "github.com/go-macaron/cors" ) diff --git a/modules/setting/cron.go b/modules/setting/cron.go index c544c6c22878e..2162f47e535bd 100644 --- a/modules/setting/cron.go +++ b/modules/setting/cron.go @@ -7,7 +7,7 @@ package setting import ( "time" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) var ( diff --git a/modules/setting/git.go b/modules/setting/git.go index 4163f1039d4ee..26753f53f09a6 100644 --- a/modules/setting/git.go +++ b/modules/setting/git.go @@ -8,7 +8,7 @@ import ( "time" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" version "github.com/mcuadros/go-version" ) diff --git a/modules/setting/log.go b/modules/setting/log.go index 5e2d2d769d701..0500ab517ccdf 100644 --- a/modules/setting/log.go +++ b/modules/setting/log.go @@ -12,7 +12,7 @@ import ( "path/filepath" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ini "gopkg.in/ini.v1" ) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 3101ed54528ba..f71a0dc3680f3 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -7,7 +7,8 @@ package setting import ( "net/mail" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" + shellquote "github.com/kballard/go-shellquote" ) diff --git a/modules/setting/markup.go b/modules/setting/markup.go index 41f3cdd3a199d..57f807509e8db 100644 --- a/modules/setting/markup.go +++ b/modules/setting/markup.go @@ -8,7 +8,7 @@ import ( "regexp" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // ExternalMarkupParsers represents the external markup parsers diff --git a/modules/setting/repository.go b/modules/setting/repository.go index 98e3d6e82624d..3619e602068a5 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -9,7 +9,8 @@ import ( "path/filepath" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" + "github.com/Unknwon/com" ) diff --git a/modules/setting/session.go b/modules/setting/session.go index 313c3c76b5a47..80a85b82cfc6e 100644 --- a/modules/setting/session.go +++ b/modules/setting/session.go @@ -10,7 +10,7 @@ import ( "path/filepath" "strings" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" // This ensures that VirtualSessionProvider is available _ "code.gitea.io/gitea/modules/session" diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 43a61aa7faeed..6a0f88c407d70 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -23,9 +23,9 @@ import ( "code.gitea.io/gitea/modules/generate" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" _ "code.gitea.io/gitea/modules/minwinsvc" // import minwinsvc for windows services "code.gitea.io/gitea/modules/user" + "code.gitea.io/log" "github.com/Unknwon/cae/zip" "github.com/Unknwon/com" diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index c5251ef23aca1..d4d89005fa7c1 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -18,12 +18,12 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" - "golang.org/x/crypto/ssh" - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + + "github.com/Unknwon/com" + "golang.org/x/crypto/ssh" ) func cleanCommand(cmd string) string { diff --git a/modules/templates/dynamic.go b/modules/templates/dynamic.go index d7c04ccb09d8d..90bfac2102fc4 100644 --- a/modules/templates/dynamic.go +++ b/modules/templates/dynamic.go @@ -12,8 +12,9 @@ import ( "path" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "github.com/Unknwon/com" "gopkg.in/macaron.v1" ) diff --git a/modules/templates/helper.go b/modules/templates/helper.go index c4551bb4be4da..b59a20be4147b 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -20,13 +20,12 @@ import ( "strings" "time" - "code.gitea.io/gitea/modules/util" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "golang.org/x/net/html/charset" "golang.org/x/text/transform" diff --git a/modules/templates/static.go b/modules/templates/static.go index 3aabe17e4fcb0..4aa0e74a05e8e 100644 --- a/modules/templates/static.go +++ b/modules/templates/static.go @@ -15,8 +15,9 @@ import ( "path" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + "github.com/Unknwon/com" "gopkg.in/macaron.v1" ) diff --git a/modules/util/url.go b/modules/util/url.go index 263255fcd3d6d..eca40a36cfd61 100644 --- a/modules/util/url.go +++ b/modules/util/url.go @@ -9,8 +9,8 @@ import ( "path" "strings" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) // PathEscapeSegments escapes segments of a path while not escaping forward slash diff --git a/routers/admin/auths.go b/routers/admin/auths.go index 40b7df108d9b5..dce6277eaadb6 100644 --- a/routers/admin/auths.go +++ b/routers/admin/auths.go @@ -13,8 +13,8 @@ import ( "code.gitea.io/gitea/modules/auth/oauth2" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/go-xorm/core" diff --git a/routers/admin/notice.go b/routers/admin/notice.go index d2c067c143bfd..719d769c47d75 100644 --- a/routers/admin/notice.go +++ b/routers/admin/notice.go @@ -9,8 +9,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/routers/admin/repos.go b/routers/admin/repos.go index d345c8e76ab03..589f1d1942d3e 100644 --- a/routers/admin/repos.go +++ b/routers/admin/repos.go @@ -8,9 +8,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers" + "code.gitea.io/log" ) const ( diff --git a/routers/admin/users.go b/routers/admin/users.go index 8a99de01c207b..3cc055148838a 100644 --- a/routers/admin/users.go +++ b/routers/admin/users.go @@ -13,9 +13,9 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers" + "code.gitea.io/log" ) const ( diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index 6dc3b0325b1e9..d9b1036cc5743 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -8,11 +8,11 @@ package admin import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/user" + "code.gitea.io/log" ) func parseLoginSource(ctx *context.APIContext, u *models.User, sourceID int64, loginName string) { diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 2268c1be38e05..2c09734953aac 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -63,7 +63,6 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/routers/api/v1/admin" @@ -72,6 +71,7 @@ import ( "code.gitea.io/gitea/routers/api/v1/repo" _ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation "code.gitea.io/gitea/routers/api/v1/user" + "code.gitea.io/log" "github.com/go-macaron/binding" "github.com/go-macaron/cors" diff --git a/routers/api/v1/convert/convert.go b/routers/api/v1/convert/convert.go index 80c0811aedc0d..22cb99ad47a61 100644 --- a/routers/api/v1/convert/convert.go +++ b/routers/api/v1/convert/convert.go @@ -10,10 +10,10 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index d99c9a00c99ae..1ccb23eb82401 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -13,11 +13,11 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/pull" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) // ListPullRequests returns a list of all PRs diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 26cfff51ce76b..5e618074ca378 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -13,13 +13,12 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/migrations" "code.gitea.io/gitea/modules/setting" + api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers/api/v1/convert" - - api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/log" ) var searchOrderByMap = map[string]map[string]models.SearchOrderBy{ diff --git a/routers/home.go b/routers/home.go index dbe27bd425c34..9cefbe4e131fa 100644 --- a/routers/home.go +++ b/routers/home.go @@ -12,11 +12,11 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/search" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers/user" + "code.gitea.io/log" ) const ( diff --git a/routers/init.go b/routers/init.go index e431260687e8d..4766a326739f5 100644 --- a/routers/init.go +++ b/routers/init.go @@ -15,12 +15,12 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/highlight" issue_indexer "code.gitea.io/gitea/modules/indexer/issues" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/mailer" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/external" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/ssh" + "code.gitea.io/log" macaron "gopkg.in/macaron.v1" ) diff --git a/routers/install.go b/routers/install.go index c95abebea76c2..a6239fe57618b 100644 --- a/routers/install.go +++ b/routers/install.go @@ -11,18 +11,18 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" - "gopkg.in/ini.v1" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/generate" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/user" + "code.gitea.io/log" + + "github.com/Unknwon/com" + "github.com/go-xorm/xorm" + "gopkg.in/ini.v1" ) const ( diff --git a/routers/org/members.go b/routers/org/members.go index d65bc2a00844a..cd54f04bf0a8d 100644 --- a/routers/org/members.go +++ b/routers/org/members.go @@ -5,13 +5,13 @@ package org import ( - "github.com/Unknwon/com" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" + + "github.com/Unknwon/com" ) const ( diff --git a/routers/org/org.go b/routers/org/org.go index 3821b32216e77..9276bd99ea052 100644 --- a/routers/org/org.go +++ b/routers/org/org.go @@ -12,8 +12,8 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) const ( diff --git a/routers/org/setting.go b/routers/org/setting.go index 0526a96e6fa87..9bd305b48550f 100644 --- a/routers/org/setting.go +++ b/routers/org/setting.go @@ -12,10 +12,10 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" userSetting "code.gitea.io/gitea/routers/user/setting" + "code.gitea.io/log" ) const ( diff --git a/routers/org/teams.go b/routers/org/teams.go index f662bd92e2ccf..84949f70d9e1f 100644 --- a/routers/org/teams.go +++ b/routers/org/teams.go @@ -9,14 +9,14 @@ import ( "path" "strings" - "github.com/Unknwon/com" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/routers/utils" + "code.gitea.io/log" + + "github.com/Unknwon/com" ) const ( diff --git a/routers/private/hook.go b/routers/private/hook.go index 3da5e38edb50b..0a576630cd7e1 100644 --- a/routers/private/hook.go +++ b/routers/private/hook.go @@ -13,10 +13,10 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" "code.gitea.io/gitea/modules/repofiles" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" macaron "gopkg.in/macaron.v1" ) diff --git a/routers/private/push_update.go b/routers/private/push_update.go deleted file mode 100644 index 733490ce1cd75..0000000000000 --- a/routers/private/push_update.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2017 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package private - -import ( - "encoding/json" - "strings" - - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/repofiles" - - macaron "gopkg.in/macaron.v1" -) - -// PushUpdate update public key updates -func PushUpdate(ctx *macaron.Context) { - var opt models.PushUpdateOptions - if err := json.NewDecoder(ctx.Req.Request.Body).Decode(&opt); err != nil { - ctx.JSON(500, map[string]interface{}{ - "err": err.Error(), - }) - return - } - - branch := strings.TrimPrefix(opt.RefFullName, git.BranchPrefix) - if len(branch) == 0 || opt.PusherID <= 0 { - ctx.Error(404) - log.Trace("PushUpdate: branch or secret is empty, or pusher ID is not valid") - return - } - - repo, err := models.GetRepositoryByOwnerAndName(opt.RepoUserName, opt.RepoName) - if err != nil { - ctx.JSON(500, map[string]interface{}{ - "err": err.Error(), - }) - return - } - - err = repofiles.PushUpdate(repo, branch, opt) - if err != nil { - if models.IsErrUserNotExist(err) { - ctx.Error(404) - } else { - ctx.JSON(500, map[string]interface{}{ - "err": err.Error(), - }) - } - return - } - ctx.Status(202) -} diff --git a/routers/private/serv.go b/routers/private/serv.go index 90579a3dcce16..efad868af880b 100644 --- a/routers/private/serv.go +++ b/routers/private/serv.go @@ -11,9 +11,9 @@ import ( "strings" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" macaron "gopkg.in/macaron.v1" ) diff --git a/routers/repo/attachment.go b/routers/repo/attachment.go index 8913e630150cc..f79f466c9cb20 100644 --- a/routers/repo/attachment.go +++ b/routers/repo/attachment.go @@ -11,8 +11,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) func renderAttachmentSettings(ctx *context.Context) { diff --git a/routers/repo/blame.go b/routers/repo/blame.go index 2b2f45f0bb9f1..59157d66a378c 100644 --- a/routers/repo/blame.go +++ b/routers/repo/blame.go @@ -14,15 +14,14 @@ import ( "strings" "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/highlight" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/branch.go b/routers/repo/branch.go index 05d64fb4c8d0e..411b43d2bc087 100644 --- a/routers/repo/branch.go +++ b/routers/repo/branch.go @@ -13,9 +13,9 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/repofiles" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 4dbedea2a08d2..fa618a2799e70 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -13,9 +13,9 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/templates" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/compare.go b/routers/repo/compare.go index a85084791d371..e256ebfe8f2da 100644 --- a/routers/repo/compare.go +++ b/routers/repo/compare.go @@ -12,8 +12,8 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/download.go b/routers/repo/download.go index 2da8b109ca957..8bc6be37aaffe 100644 --- a/routers/repo/download.go +++ b/routers/repo/download.go @@ -15,7 +15,7 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/lfs" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // ServeData download file from io.Reader diff --git a/routers/repo/editor.go b/routers/repo/editor.go index 062ecfebf777b..4e9ee05e499bc 100644 --- a/routers/repo/editor.go +++ b/routers/repo/editor.go @@ -16,11 +16,11 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/repofiles" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/templates" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/http.go b/routers/repo/http.go index 30722094489f0..a8060a616d414 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -22,9 +22,9 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) // HTTP implmentation git smart HTTP protocol @@ -205,6 +205,7 @@ func HTTP(ctx *context.Context) { token.UpdatedUnix = util.TimeStampNow() if err = models.UpdateAccessToken(token); err != nil { ctx.ServerError("UpdateAccessToken", err) + return } } else if !models.IsErrAccessTokenNotExist(err) && !models.IsErrAccessTokenEmpty(err) { log.Error("GetAccessTokenBySha: %v", err) diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 3904d29532fde..07cbba5b833ec 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -20,12 +20,12 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" issue_indexer "code.gitea.io/gitea/modules/indexer/issues" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/routers/repo/issue_label.go b/routers/repo/issue_label.go index cae6535c799bd..9fb28e4d581a8 100644 --- a/routers/repo/issue_label.go +++ b/routers/repo/issue_label.go @@ -9,7 +9,7 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/issue_watch.go b/routers/repo/issue_watch.go index eae663495ae6e..fc3f5d6c848de 100644 --- a/routers/repo/issue_watch.go +++ b/routers/repo/issue_watch.go @@ -11,7 +11,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // IssueWatch sets issue watching diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 36b0d047b1019..e30293fb56637 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -18,11 +18,11 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/pull" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/routers/repo/pull_review.go b/routers/repo/pull_review.go index 7576ebe90bbf6..93ac2af6a8de0 100644 --- a/routers/repo/pull_review.go +++ b/routers/repo/pull_review.go @@ -10,8 +10,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" + "code.gitea.io/log" ) // CreateCodeComment will create a code comment including an pending review if required diff --git a/routers/repo/release.go b/routers/repo/release.go index fdef533f10525..416a8b140a828 100644 --- a/routers/repo/release.go +++ b/routers/repo/release.go @@ -12,9 +12,9 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 49483a64e4e25..2f94d4f042c2e 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -15,10 +15,10 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/migrations" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" ) diff --git a/routers/repo/setting.go b/routers/repo/setting.go index 757295069e90c..ba403aa3915b1 100644 --- a/routers/repo/setting.go +++ b/routers/repo/setting.go @@ -22,11 +22,11 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/validation" "code.gitea.io/gitea/routers/utils" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/setting_protected_branch.go b/routers/repo/setting_protected_branch.go index b5a115b6a464d..76ee281a88aee 100644 --- a/routers/repo/setting_protected_branch.go +++ b/routers/repo/setting_protected_branch.go @@ -13,8 +13,8 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) // ProtectedBranch render the page to protect the repository diff --git a/routers/repo/topic.go b/routers/repo/topic.go index 4a1194bc2dceb..b379479a49a15 100644 --- a/routers/repo/topic.go +++ b/routers/repo/topic.go @@ -9,7 +9,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/log" ) // TopicsPost response for creating repository diff --git a/routers/repo/view.go b/routers/repo/view.go index edaf24017ce6d..af1ac2c7b87a1 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -20,10 +20,10 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/highlight" "code.gitea.io/gitea/modules/lfs" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/templates" + "code.gitea.io/log" ) const ( diff --git a/routers/repo/wiki.go b/routers/repo/wiki.go index 43149c034061b..4d63abdb44f2d 100644 --- a/routers/repo/wiki.go +++ b/routers/repo/wiki.go @@ -16,10 +16,10 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" ) const ( diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 744088a9d7b1e..891363facbc4b 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -18,7 +18,6 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/gzip" "code.gitea.io/gitea/modules/lfs" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/metrics" "code.gitea.io/gitea/modules/options" "code.gitea.io/gitea/modules/public" @@ -34,6 +33,7 @@ import ( "code.gitea.io/gitea/routers/repo" "code.gitea.io/gitea/routers/user" userSetting "code.gitea.io/gitea/routers/user/setting" + "code.gitea.io/log" "github.com/go-macaron/binding" "github.com/go-macaron/cache" diff --git a/routers/user/auth.go b/routers/user/auth.go index 0731e34675613..08b273d220789 100644 --- a/routers/user/auth.go +++ b/routers/user/auth.go @@ -16,10 +16,10 @@ import ( "code.gitea.io/gitea/modules/auth/oauth2" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/recaptcha" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/go-macaron/captcha" "github.com/markbates/goth" diff --git a/routers/user/auth_openid.go b/routers/user/auth_openid.go index f98c07acd79f8..f80ccffbbd549 100644 --- a/routers/user/auth_openid.go +++ b/routers/user/auth_openid.go @@ -14,9 +14,9 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/generate" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/recaptcha" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/go-macaron/captcha" ) diff --git a/routers/user/home.go b/routers/user/home.go index 9ccd5bdb2681c..ad31c2093bce4 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -14,9 +14,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/keybase/go-crypto/openpgp" diff --git a/routers/user/oauth.go b/routers/user/oauth.go index 924bac8ef6c49..67671515ad7de 100644 --- a/routers/user/oauth.go +++ b/routers/user/oauth.go @@ -7,7 +7,6 @@ package user import ( "encoding/base64" "fmt" - "github.com/go-macaron/binding" "net/url" "strings" @@ -15,11 +14,12 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/log" "github.com/dgrijalva/jwt-go" + "github.com/go-macaron/binding" ) const ( diff --git a/routers/user/setting/account.go b/routers/user/setting/account.go index 3fd6a8db5ee0a..b277e7a3f8243 100644 --- a/routers/user/setting/account.go +++ b/routers/user/setting/account.go @@ -10,8 +10,8 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) const ( diff --git a/routers/user/setting/oauth2.go b/routers/user/setting/oauth2.go index 265e32642b016..c130f77b56bd1 100644 --- a/routers/user/setting/oauth2.go +++ b/routers/user/setting/oauth2.go @@ -11,8 +11,8 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) const ( diff --git a/routers/user/setting/profile.go b/routers/user/setting/profile.go index 163bc869b4a16..a7ead58632503 100644 --- a/routers/user/setting/profile.go +++ b/routers/user/setting/profile.go @@ -15,8 +15,8 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" "github.com/Unknwon/com" "github.com/Unknwon/i18n" diff --git a/routers/user/setting/security_openid.go b/routers/user/setting/security_openid.go index 6813765f6f336..943484a768be1 100644 --- a/routers/user/setting/security_openid.go +++ b/routers/user/setting/security_openid.go @@ -9,8 +9,8 @@ import ( "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/auth/openid" "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/log" ) // OpenIDPost response for change user's openid diff --git a/vendor/code.gitea.io/log/.drone.yml b/vendor/code.gitea.io/log/.drone.yml new file mode 100644 index 0000000000000..2370efd530f1c --- /dev/null +++ b/vendor/code.gitea.io/log/.drone.yml @@ -0,0 +1,14 @@ +kind: pipeline +name: default + +steps: +- name: test + image: golang:1.10 + commands: + - go get -t -d -v ./... + - go build -v + - go test -v -race -coverprofile=coverage.txt -covermode=atomic + when: + event: + - pull_request + - push \ No newline at end of file diff --git a/vendor/code.gitea.io/log/README.md b/vendor/code.gitea.io/log/README.md new file mode 100644 index 0000000000000..70a7d6f33a8cb --- /dev/null +++ b/vendor/code.gitea.io/log/README.md @@ -0,0 +1 @@ +# Don't Use, Just An Experiment Project \ No newline at end of file diff --git a/modules/log/colors.go b/vendor/code.gitea.io/log/colors.go similarity index 98% rename from modules/log/colors.go rename to vendor/code.gitea.io/log/colors.go index c29741634f5e1..0ec8ce4ba86da 100644 --- a/modules/log/colors.go +++ b/vendor/code.gitea.io/log/colors.go @@ -208,7 +208,7 @@ normalLoop: if i > lasti { written, err := c.w.Write(bytes[lasti:i]) - totalWritten += written + totalWritten = totalWritten + written if err != nil { return totalWritten, err } @@ -243,7 +243,7 @@ normalLoop: if bytes[j] == 'm' { if c.mode == allowColor { written, err := c.w.Write(bytes[i : j+1]) - totalWritten += written + totalWritten = totalWritten + written if err != nil { return totalWritten, err } @@ -278,7 +278,7 @@ func ColorSprintf(format string, args ...interface{}) string { } return fmt.Sprintf(format, v...) } - return format + return fmt.Sprintf(format) } // ColorFprintf will write to the provided writer similar to ColorSprintf @@ -290,7 +290,7 @@ func ColorFprintf(w io.Writer, format string, args ...interface{}) (int, error) } return fmt.Fprintf(w, format, v...) } - return fmt.Fprint(w, format) + return fmt.Fprintf(w, format) } // ColorFormatted structs provide their own colored string when formatted with ColorSprintf diff --git a/modules/log/colors_router.go b/vendor/code.gitea.io/log/colors_router.go similarity index 100% rename from modules/log/colors_router.go rename to vendor/code.gitea.io/log/colors_router.go diff --git a/vendor/code.gitea.io/log/configuration.go b/vendor/code.gitea.io/log/configuration.go new file mode 100644 index 0000000000000..9f42f9f7e116c --- /dev/null +++ b/vendor/code.gitea.io/log/configuration.go @@ -0,0 +1,99 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package log + +import ( + "encoding/json" + "fmt" + "io/ioutil" +) + +type ourConfig struct { + name string + bufferLen int64 + subname string + provider string + config string +} + +// ConfigureFromFile configures logging from a provided file +func ConfigureFromFile(filename string) error { + bytes, err := ioutil.ReadFile(filename) + if err != nil { + return err + } + return ConfigureFromBytes(bytes) +} + +// ConfigureFromBytes configures logging from provided []byte +func ConfigureFromBytes(config []byte) error { + configs := []ourConfig{} + configMap := make(map[string]interface{}) + + err := json.Unmarshal(config, &configMap) + if err != nil { + return err + } + + defaultBufferLen, ok := configMap["DEFAULT_BUFFER_LEN"].(int64) + if !ok || defaultBufferLen == 0 { + defaultBufferLen = 1000 + } + + for name, loggerconfigInterface := range configMap { + if name == "DEFAULT_BUFFER_LEN" { + continue + } + loggerconfig, ok := loggerconfigInterface.(map[string]interface{}) + if !ok { + return &ErrBadConfig{ + message: fmt.Sprintf("Bad configuration for %s", name), + } + } + for subname, subloggerconfigInterface := range loggerconfig { + subloggerconfig, ok := subloggerconfigInterface.(map[string]interface{}) + if !ok { + return &ErrBadConfig{ + message: fmt.Sprintf("Bad configuration for %s:%s", name, subname), + } + } + bufferLen, ok := loggerconfig["bufferLen"].(int64) + if !ok || bufferLen == 0 { + bufferLen = defaultBufferLen + } + provider, ok := subloggerconfig["provider"].(string) + if !ok || provider == "" { + provider = subname + } + subconfigInterface, ok := subloggerconfig["config"] + + subconfig, err := json.Marshal(subconfigInterface) + if err != nil { + return &ErrBadConfig{ + message: fmt.Sprintf("Bad configuration for %s:%s, provider %s: %v", name, subname, provider, err), + } + } + configs = append(configs, ourConfig{ + name: name, + subname: subname, + bufferLen: bufferLen, + provider: provider, + config: string(subconfig), + }) + } + } + if len(configs) == 0 { + return &ErrBadConfig{ + message: fmt.Sprintf("Bad configuration. No loggers."), + } + } + for _, c := range configs { + err = NewNamedLogger(c.name, c.bufferLen, c.subname, c.provider, c.config) + if err != nil { + return err + } + } + return nil +} diff --git a/modules/log/conn.go b/vendor/code.gitea.io/log/conn.go similarity index 97% rename from modules/log/conn.go rename to vendor/code.gitea.io/log/conn.go index 88166645265d9..bd76855168820 100644 --- a/modules/log/conn.go +++ b/vendor/code.gitea.io/log/conn.go @@ -67,10 +67,7 @@ func (i *connWriter) connect() error { } if tcpConn, ok := conn.(*net.TCPConn); ok { - err = tcpConn.SetKeepAlive(true) - if err != nil { - return err - } + tcpConn.SetKeepAlive(true) } i.innerWriter = conn diff --git a/modules/log/console.go b/vendor/code.gitea.io/log/console.go similarity index 89% rename from modules/log/console.go rename to vendor/code.gitea.io/log/console.go index 6cfca8a7335d5..3e4a42089d5ed 100644 --- a/modules/log/console.go +++ b/vendor/code.gitea.io/log/console.go @@ -54,11 +54,21 @@ func (log *ConsoleLogger) Init(config string) error { if err != nil { return err } + configMap := map[string]interface{}{} + _ = json.Unmarshal([]byte(config), &configMap) + _, has := configMap["colorize"] + if log.Stderr { + if !has { + log.Colorize = CanColorStderr + } log.NewWriterLogger(&nopWriteCloser{ w: os.Stderr, }) } else { + if !has { + log.Colorize = CanColorStdout + } log.NewWriterLogger(log.out) } return nil diff --git a/modules/log/console_windows.go b/vendor/code.gitea.io/log/console_windows.go similarity index 100% rename from modules/log/console_windows.go rename to vendor/code.gitea.io/log/console_windows.go diff --git a/modules/log/errors.go b/vendor/code.gitea.io/log/errors.go similarity index 100% rename from modules/log/errors.go rename to vendor/code.gitea.io/log/errors.go diff --git a/modules/log/event.go b/vendor/code.gitea.io/log/event.go similarity index 99% rename from modules/log/event.go rename to vendor/code.gitea.io/log/event.go index 37efa3c2306aa..2ec1f9587d54d 100644 --- a/modules/log/event.go +++ b/vendor/code.gitea.io/log/event.go @@ -79,7 +79,7 @@ func (l *ChannelledLog) Start() { return } l.loggerProvider.Flush() - case <-l.close: + case _, _ = <-l.close: l.closeLogger() return } @@ -104,6 +104,7 @@ func (l *ChannelledLog) closeLogger() { l.loggerProvider.Flush() l.loggerProvider.Close() l.closed <- true + return } // Close this ChannelledLog @@ -227,6 +228,7 @@ func (m *MultiChannelledLog) closeLoggers() { } m.mutex.Unlock() m.closed <- true + return } // Start processing the MultiChannelledLog diff --git a/modules/log/file.go b/vendor/code.gitea.io/log/file.go similarity index 98% rename from modules/log/file.go rename to vendor/code.gitea.io/log/file.go index 877820b8bea4e..cdda85d626ffa 100644 --- a/modules/log/file.go +++ b/vendor/code.gitea.io/log/file.go @@ -223,7 +223,7 @@ func compressOldLogFile(fname string, compressionLevel int) error { func (log *FileLogger) deleteOldLog() { dir := filepath.Dir(log.Filename) - _ = filepath.Walk(dir, func(path string, info os.FileInfo, err error) (returnErr error) { + filepath.Walk(dir, func(path string, info os.FileInfo, err error) (returnErr error) { defer func() { if r := recover(); r != nil { returnErr = fmt.Errorf("Unable to delete old log '%s', error: %+v", path, r) @@ -246,7 +246,7 @@ func (log *FileLogger) deleteOldLog() { // there are no buffering messages in file logger in memory. // flush file means sync file from disk. func (log *FileLogger) Flush() { - _ = log.mw.fd.Sync() + log.mw.fd.Sync() } // GetName returns the default name for this implementation diff --git a/vendor/code.gitea.io/log/flags.go b/vendor/code.gitea.io/log/flags.go new file mode 100644 index 0000000000000..56f06f4eecec8 --- /dev/null +++ b/vendor/code.gitea.io/log/flags.go @@ -0,0 +1,108 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package log + +import ( + "encoding/json" + "strings" +) + +// Flags represents the logging flags for a logger +type Flags int + +// These flags define which text to prefix to each log entry generated +// by the Logger. Bits are or'ed together to control what's printed. +// There is no control over the order they appear (the order listed +// here) or the format they present (as described in the comments). +// The prefix is followed by a colon only if more than time is stated +// is specified. For example, flags Ldate | Ltime +// produce, 2009/01/23 01:23:23 message. +// The standard is: +// 2009/01/23 01:23:23 ...a/logger/c/d.go:23:runtime.Caller() [I]: message +const ( + Ldate Flags = 1 << iota // the date in the local time zone: 2009/01/23 + Ltime // the time in the local time zone: 01:23:23 + Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime. + Llongfile // full file name and line number: /a/logger/c/d.go:23 + Lshortfile // final file name element and line number: d.go:23. overrides Llongfile + Lfuncname // function name of the caller: runtime.Caller() + Lshortfuncname // last part of the function name + LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone + Llevelinitial // Initial character of the provided level in brackets eg. [I] for info + Llevel // Provided level in brackets [INFO] + + // Last 20 characters of the filename + Lmedfile = Lshortfile | Llongfile + + // LstdFlags is the initial value for the standard logger + LstdFlags = Ldate | Ltime | Lmedfile | Lshortfuncname | Llevelinitial +) + +var flagOrder = []string{ + "date", + "time", + "microseconds", + "longfile", + "shortfile", + "funcname", + "shortfuncname", + "utc", + "levelinitial", + "level", +} + +// UnmarshalJSON converts a series of bytes to a flag +func (f *Flags) UnmarshalJSON(b []byte) error { + // OK first of all try an int + var i int + if err := json.Unmarshal(b, &i); err == nil { + *f = Flags(i) + return nil + } + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + *f = FlagsFromString(s) + return nil +} + +// MarshalJSON converts Flags to JSON +func (f Flags) MarshalJSON() ([]byte, error) { + stringFlags := []string{} + w := f + if w&LstdFlags == LstdFlags { + stringFlags = append(stringFlags, "stdflags") + w = w ^ LstdFlags + } + if w&Lmedfile == Lmedfile { + stringFlags = append(stringFlags, "medfile") + w = w ^ Lmedfile + } + for i, k := range flagOrder { + v := Flags(1 << uint64(i)) + if w&v == v && v != 0 { + stringFlags = append(stringFlags, k) + } + } + if len(stringFlags) == 0 { + stringFlags = append(stringFlags, "none") + } + return json.Marshal(strings.Join(stringFlags, ", ")) +} + +// FlagsFromString takes a comma separated list of flags and returns +// the flags for this string +func FlagsFromString(from string) Flags { + flags := Flags(0) + for _, flag := range strings.Split(strings.ToLower(from), ",") { + for f, k := range flagOrder { + if k == strings.TrimSpace(flag) { + flags = flags | Flags(1< 0 { + l.showSQL = show[0] + } else { + l.showSQL = true + } +} + +// IsShowSQL if record SQL +func (l *GiteaLogBridge) IsShowSQL() bool { + return l.showSQL +} diff --git a/vendor/gitea.com/xorm/gitea_log_bridge/go.mod b/vendor/gitea.com/xorm/gitea_log_bridge/go.mod new file mode 100644 index 0000000000000..118593a173c20 --- /dev/null +++ b/vendor/gitea.com/xorm/gitea_log_bridge/go.mod @@ -0,0 +1,8 @@ +module gitea.com/xorm/gitea_log_bridge + +go 1.12 + +require ( + code.gitea.io/log v0.0.0-20190526010349-0560851a166a + github.com/go-xorm/core v0.6.2 +) diff --git a/vendor/gitea.com/xorm/gitea_log_bridge/go.sum b/vendor/gitea.com/xorm/gitea_log_bridge/go.sum new file mode 100644 index 0000000000000..b42bec9726cf3 --- /dev/null +++ b/vendor/gitea.com/xorm/gitea_log_bridge/go.sum @@ -0,0 +1,25 @@ +code.gitea.io/log v0.0.0-20190526010349-0560851a166a h1:c1wd1bb9rP28jMyXa0X19yrnX0Ux/zoOlv4j/fhwi8Y= +code.gitea.io/log v0.0.0-20190526010349-0560851a166a/go.mod h1:YOBHMQw/14CwuwNStgQyvnzoDJEO6ARjcSdD48QRzhM= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-xorm/core v0.6.2 h1:EJLcSxf336POJr670wKB55Mah9f93xzvGYzNRgnT8/Y= +github.com/go-xorm/core v0.6.2/go.mod h1:bwPIfLdm/FzWgVUH8WPVlr+uJhscvNGFcaZKXsI3n2c= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872 h1:cGjJzUd8RgBw428LXP65YXni0aiGNA4Bl+ls8SmLOm8= +golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= diff --git a/vendor/github.com/go-xorm/core/cache.go b/vendor/github.com/go-xorm/core/cache.go index 8f9531da94012..dc4992dfb112a 100644 --- a/vendor/github.com/go-xorm/core/cache.go +++ b/vendor/github.com/go-xorm/core/cache.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/circle.yml b/vendor/github.com/go-xorm/core/circle.yml deleted file mode 100644 index e6a05be2727fe..0000000000000 --- a/vendor/github.com/go-xorm/core/circle.yml +++ /dev/null @@ -1,15 +0,0 @@ -dependencies: - override: - # './...' is a relative pattern which means all subdirectories - - go get -t -d -v ./... - - go build -v - -database: - override: - - mysql -u root -e "CREATE DATABASE core_test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" - -test: - override: - # './...' is a relative pattern which means all subdirectories - - go test -v -race - - go test -v -race --dbtype=sqlite3 diff --git a/vendor/github.com/go-xorm/core/column.go b/vendor/github.com/go-xorm/core/column.go index 20912b713c419..40d8f9268d727 100644 --- a/vendor/github.com/go-xorm/core/column.go +++ b/vendor/github.com/go-xorm/core/column.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( @@ -41,6 +45,7 @@ type Column struct { Comment string } +// NewColumn creates a new column func NewColumn(name, fieldName string, sqlType SQLType, len1, len2 int, nullable bool) *Column { return &Column{ Name: name, @@ -66,7 +71,7 @@ func NewColumn(name, fieldName string, sqlType SQLType, len1, len2 int, nullable } } -// generate column description string according dialect +// String generate column description string according dialect func (col *Column) String(d Dialect) string { sql := d.QuoteStr() + col.Name + d.QuoteStr() + " " @@ -94,6 +99,7 @@ func (col *Column) String(d Dialect) string { return sql } +// StringNoPk generate column description string according dialect without primary keys func (col *Column) StringNoPk(d Dialect) string { sql := d.QuoteStr() + col.Name + d.QuoteStr() + " " @@ -114,12 +120,13 @@ func (col *Column) StringNoPk(d Dialect) string { return sql } -// return col's filed of struct's value +// ValueOf returns column's filed of struct's value func (col *Column) ValueOf(bean interface{}) (*reflect.Value, error) { dataStruct := reflect.Indirect(reflect.ValueOf(bean)) return col.ValueOfV(&dataStruct) } +// ValueOfV returns column's filed of struct's value accept reflevt value func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) { var fieldValue reflect.Value fieldPath := strings.Split(col.FieldName, ".") diff --git a/vendor/github.com/go-xorm/core/converstion.go b/vendor/github.com/go-xorm/core/converstion.go index 18522fbeebd9f..9703c36e08561 100644 --- a/vendor/github.com/go-xorm/core/converstion.go +++ b/vendor/github.com/go-xorm/core/converstion.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core // Conversion is an interface. A type implements Conversion will according diff --git a/vendor/github.com/go-xorm/core/db.go b/vendor/github.com/go-xorm/core/db.go index 9969fa4313493..3e50a14795da9 100644 --- a/vendor/github.com/go-xorm/core/db.go +++ b/vendor/github.com/go-xorm/core/db.go @@ -1,9 +1,13 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( + "context" "database/sql" "database/sql/driver" - "errors" "fmt" "reflect" "regexp" @@ -68,6 +72,7 @@ type cacheStruct struct { idx int } +// DB is a wrap of sql.DB with extra contents type DB struct { *sql.DB Mapper IMapper @@ -75,6 +80,7 @@ type DB struct { reflectCacheMutex sync.RWMutex } +// Open opens a database func Open(driverName, dataSourceName string) (*DB, error) { db, err := sql.Open(driverName, dataSourceName) if err != nil { @@ -87,6 +93,7 @@ func Open(driverName, dataSourceName string) (*DB, error) { }, nil } +// FromDB creates a DB from a sql.DB func FromDB(db *sql.DB) *DB { return &DB{ DB: db, @@ -108,8 +115,9 @@ func (db *DB) reflectNew(typ reflect.Type) reflect.Value { return cs.value.Index(cs.idx).Addr() } -func (db *DB) Query(query string, args ...interface{}) (*Rows, error) { - rows, err := db.DB.Query(query, args...) +// QueryContext overwrites sql.DB.QueryContext +func (db *DB) QueryContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { + rows, err := db.DB.QueryContext(ctx, query, args...) if err != nil { if rows != nil { rows.Close() @@ -119,161 +127,69 @@ func (db *DB) Query(query string, args ...interface{}) (*Rows, error) { return &Rows{rows, db}, nil } -func (db *DB) QueryMap(query string, mp interface{}) (*Rows, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return db.Query(query, args...) +// Query overwrites sql.DB.Query +func (db *DB) Query(query string, args ...interface{}) (*Rows, error) { + return db.QueryContext(context.Background(), query, args...) } -func (db *DB) QueryStruct(query string, st interface{}) (*Rows, error) { - query, args, err := StructToSlice(query, st) +func (db *DB) QueryMapContext(ctx context.Context, query string, mp interface{}) (*Rows, error) { + query, args, err := MapToSlice(query, mp) if err != nil { return nil, err } - return db.Query(query, args...) + return db.QueryContext(ctx, query, args...) } -func (db *DB) QueryRow(query string, args ...interface{}) *Row { - rows, err := db.Query(query, args...) - if err != nil { - return &Row{nil, err} - } - return &Row{rows, nil} -} - -func (db *DB) QueryRowMap(query string, mp interface{}) *Row { - query, args, err := MapToSlice(query, mp) - if err != nil { - return &Row{nil, err} - } - return db.QueryRow(query, args...) +func (db *DB) QueryMap(query string, mp interface{}) (*Rows, error) { + return db.QueryMapContext(context.Background(), query, mp) } -func (db *DB) QueryRowStruct(query string, st interface{}) *Row { +func (db *DB) QueryStructContext(ctx context.Context, query string, st interface{}) (*Rows, error) { query, args, err := StructToSlice(query, st) - if err != nil { - return &Row{nil, err} - } - return db.QueryRow(query, args...) -} - -type Stmt struct { - *sql.Stmt - db *DB - names map[string]int -} - -func (db *DB) Prepare(query string) (*Stmt, error) { - names := make(map[string]int) - var i int - query = re.ReplaceAllStringFunc(query, func(src string) string { - names[src[1:]] = i - i += 1 - return "?" - }) - - stmt, err := db.DB.Prepare(query) if err != nil { return nil, err } - return &Stmt{stmt, db, names}, nil -} - -func (s *Stmt) ExecMap(mp interface{}) (sql.Result, error) { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() - } - return s.Stmt.Exec(args...) + return db.QueryContext(ctx, query, args...) } -func (s *Stmt) ExecStruct(st interface{}) (sql.Result, error) { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().FieldByName(k).Interface() - } - return s.Stmt.Exec(args...) +func (db *DB) QueryStruct(query string, st interface{}) (*Rows, error) { + return db.QueryStructContext(context.Background(), query, st) } -func (s *Stmt) Query(args ...interface{}) (*Rows, error) { - rows, err := s.Stmt.Query(args...) +func (db *DB) QueryRowContext(ctx context.Context, query string, args ...interface{}) *Row { + rows, err := db.QueryContext(ctx, query, args...) if err != nil { - return nil, err + return &Row{nil, err} } - return &Rows{rows, s.db}, nil + return &Row{rows, nil} } -func (s *Stmt) QueryMap(mp interface{}) (*Rows, error) { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() - } - - return s.Query(args...) +func (db *DB) QueryRow(query string, args ...interface{}) *Row { + return db.QueryRowContext(context.Background(), query, args...) } -func (s *Stmt) QueryStruct(st interface{}) (*Rows, error) { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().FieldByName(k).Interface() +func (db *DB) QueryRowMapContext(ctx context.Context, query string, mp interface{}) *Row { + query, args, err := MapToSlice(query, mp) + if err != nil { + return &Row{nil, err} } - - return s.Query(args...) + return db.QueryRowContext(ctx, query, args...) } -func (s *Stmt) QueryRow(args ...interface{}) *Row { - rows, err := s.Query(args...) - return &Row{rows, err} +func (db *DB) QueryRowMap(query string, mp interface{}) *Row { + return db.QueryRowMapContext(context.Background(), query, mp) } -func (s *Stmt) QueryRowMap(mp interface{}) *Row { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return &Row{nil, errors.New("mp should be a map's pointer")} - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() +func (db *DB) QueryRowStructContext(ctx context.Context, query string, st interface{}) *Row { + query, args, err := StructToSlice(query, st) + if err != nil { + return &Row{nil, err} } - - return s.QueryRow(args...) + return db.QueryRowContext(ctx, query, args...) } -func (s *Stmt) QueryRowStruct(st interface{}) *Row { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return &Row{nil, errors.New("st should be a struct's pointer")} - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().FieldByName(k).Interface() - } - - return s.QueryRow(args...) +func (db *DB) QueryRowStruct(query string, st interface{}) *Row { + return db.QueryRowStructContext(context.Background(), query, st) } var ( @@ -282,120 +198,26 @@ var ( // insert into (name) values (?) // insert into (name) values (?name) -func (db *DB) ExecMap(query string, mp interface{}) (sql.Result, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return db.DB.Exec(query, args...) -} - -func (db *DB) ExecStruct(query string, st interface{}) (sql.Result, error) { - query, args, err := StructToSlice(query, st) - if err != nil { - return nil, err - } - return db.DB.Exec(query, args...) -} - -type EmptyScanner struct { -} - -func (EmptyScanner) Scan(src interface{}) error { - return nil -} - -type Tx struct { - *sql.Tx - db *DB -} - -func (db *DB) Begin() (*Tx, error) { - tx, err := db.DB.Begin() - if err != nil { - return nil, err - } - return &Tx{tx, db}, nil -} - -func (tx *Tx) Prepare(query string) (*Stmt, error) { - names := make(map[string]int) - var i int - query = re.ReplaceAllStringFunc(query, func(src string) string { - names[src[1:]] = i - i += 1 - return "?" - }) - - stmt, err := tx.Tx.Prepare(query) - if err != nil { - return nil, err - } - return &Stmt{stmt, tx.db, names}, nil -} - -func (tx *Tx) Stmt(stmt *Stmt) *Stmt { - // TODO: - return stmt -} - -func (tx *Tx) ExecMap(query string, mp interface{}) (sql.Result, error) { +func (db *DB) ExecMapContext(ctx context.Context, query string, mp interface{}) (sql.Result, error) { query, args, err := MapToSlice(query, mp) if err != nil { return nil, err } - return tx.Tx.Exec(query, args...) -} - -func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, error) { - query, args, err := StructToSlice(query, st) - if err != nil { - return nil, err - } - return tx.Tx.Exec(query, args...) -} - -func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) { - rows, err := tx.Tx.Query(query, args...) - if err != nil { - return nil, err - } - return &Rows{rows, tx.db}, nil + return db.DB.ExecContext(ctx, query, args...) } -func (tx *Tx) QueryMap(query string, mp interface{}) (*Rows, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return tx.Query(query, args...) +func (db *DB) ExecMap(query string, mp interface{}) (sql.Result, error) { + return db.ExecMapContext(context.Background(), query, mp) } -func (tx *Tx) QueryStruct(query string, st interface{}) (*Rows, error) { +func (db *DB) ExecStructContext(ctx context.Context, query string, st interface{}) (sql.Result, error) { query, args, err := StructToSlice(query, st) if err != nil { return nil, err } - return tx.Query(query, args...) -} - -func (tx *Tx) QueryRow(query string, args ...interface{}) *Row { - rows, err := tx.Query(query, args...) - return &Row{rows, err} -} - -func (tx *Tx) QueryRowMap(query string, mp interface{}) *Row { - query, args, err := MapToSlice(query, mp) - if err != nil { - return &Row{nil, err} - } - return tx.QueryRow(query, args...) + return db.DB.ExecContext(ctx, query, args...) } -func (tx *Tx) QueryRowStruct(query string, st interface{}) *Row { - query, args, err := StructToSlice(query, st) - if err != nil { - return &Row{nil, err} - } - return tx.QueryRow(query, args...) +func (db *DB) ExecStruct(query string, st interface{}) (sql.Result, error) { + return db.ExecStructContext(context.Background(), query, st) } diff --git a/vendor/github.com/go-xorm/core/dialect.go b/vendor/github.com/go-xorm/core/dialect.go index c288a0847837f..5d35a4f11d980 100644 --- a/vendor/github.com/go-xorm/core/dialect.go +++ b/vendor/github.com/go-xorm/core/dialect.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/driver.go b/vendor/github.com/go-xorm/core/driver.go index 0f1020b403ba8..ceef4ba61822e 100644 --- a/vendor/github.com/go-xorm/core/driver.go +++ b/vendor/github.com/go-xorm/core/driver.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core type Driver interface { diff --git a/vendor/github.com/go-xorm/core/error.go b/vendor/github.com/go-xorm/core/error.go index 640e6036e6681..63ea53e466c11 100644 --- a/vendor/github.com/go-xorm/core/error.go +++ b/vendor/github.com/go-xorm/core/error.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import "errors" diff --git a/vendor/github.com/go-xorm/core/filter.go b/vendor/github.com/go-xorm/core/filter.go index 35b0ece676484..6aeed4244c1ea 100644 --- a/vendor/github.com/go-xorm/core/filter.go +++ b/vendor/github.com/go-xorm/core/filter.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/go.mod b/vendor/github.com/go-xorm/core/go.mod index 70c86bcbc8338..b68392bb926b9 100644 --- a/vendor/github.com/go-xorm/core/go.mod +++ b/vendor/github.com/go-xorm/core/go.mod @@ -1 +1,7 @@ -module "github.com/go-xorm/core" +module github.com/go-xorm/core + +require ( + github.com/go-sql-driver/mysql v1.4.1 + github.com/mattn/go-sqlite3 v1.10.0 + google.golang.org/appengine v1.4.0 // indirect +) diff --git a/vendor/github.com/go-xorm/core/go.sum b/vendor/github.com/go-xorm/core/go.sum new file mode 100644 index 0000000000000..8f20f8bc9017f --- /dev/null +++ b/vendor/github.com/go-xorm/core/go.sum @@ -0,0 +1,9 @@ +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= diff --git a/vendor/github.com/go-xorm/core/ilogger.go b/vendor/github.com/go-xorm/core/ilogger.go index c8d78496054c7..348ab88f4f0f0 100644 --- a/vendor/github.com/go-xorm/core/ilogger.go +++ b/vendor/github.com/go-xorm/core/ilogger.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core type LogLevel int diff --git a/vendor/github.com/go-xorm/core/index.go b/vendor/github.com/go-xorm/core/index.go index 9aa1b7ac99ba3..ac97b6850530f 100644 --- a/vendor/github.com/go-xorm/core/index.go +++ b/vendor/github.com/go-xorm/core/index.go @@ -1,8 +1,11 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( "fmt" - "sort" "strings" ) @@ -46,11 +49,16 @@ func (index *Index) Equal(dst *Index) bool { if len(index.Cols) != len(dst.Cols) { return false } - sort.StringSlice(index.Cols).Sort() - sort.StringSlice(dst.Cols).Sort() for i := 0; i < len(index.Cols); i++ { - if index.Cols[i] != dst.Cols[i] { + var found bool + for j := 0; j < len(dst.Cols); j++ { + if index.Cols[i] == dst.Cols[j] { + found = true + break + } + } + if !found { return false } } diff --git a/vendor/github.com/go-xorm/core/mapper.go b/vendor/github.com/go-xorm/core/mapper.go index bb72a156624ee..ec44ea0db9b74 100644 --- a/vendor/github.com/go-xorm/core/mapper.go +++ b/vendor/github.com/go-xorm/core/mapper.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/pk.go b/vendor/github.com/go-xorm/core/pk.go index 1810dd944be44..05a7672d86b35 100644 --- a/vendor/github.com/go-xorm/core/pk.go +++ b/vendor/github.com/go-xorm/core/pk.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/rows.go b/vendor/github.com/go-xorm/core/rows.go index 580de4f9c669c..2b046d84cc7d4 100644 --- a/vendor/github.com/go-xorm/core/rows.go +++ b/vendor/github.com/go-xorm/core/rows.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/scan.go b/vendor/github.com/go-xorm/core/scan.go index b7c159b2740c1..897b534159ed1 100644 --- a/vendor/github.com/go-xorm/core/scan.go +++ b/vendor/github.com/go-xorm/core/scan.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( @@ -53,3 +57,10 @@ func convertTime(dest *NullTime, src interface{}) error { } return nil } + +type EmptyScanner struct { +} + +func (EmptyScanner) Scan(src interface{}) error { + return nil +} diff --git a/vendor/github.com/go-xorm/core/stmt.go b/vendor/github.com/go-xorm/core/stmt.go new file mode 100644 index 0000000000000..20ee202b9b743 --- /dev/null +++ b/vendor/github.com/go-xorm/core/stmt.go @@ -0,0 +1,165 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package core + +import ( + "context" + "database/sql" + "errors" + "reflect" +) + +type Stmt struct { + *sql.Stmt + db *DB + names map[string]int +} + +func (db *DB) PrepareContext(ctx context.Context, query string) (*Stmt, error) { + names := make(map[string]int) + var i int + query = re.ReplaceAllStringFunc(query, func(src string) string { + names[src[1:]] = i + i += 1 + return "?" + }) + + stmt, err := db.DB.PrepareContext(ctx, query) + if err != nil { + return nil, err + } + return &Stmt{stmt, db, names}, nil +} + +func (db *DB) Prepare(query string) (*Stmt, error) { + return db.PrepareContext(context.Background(), query) +} + +func (s *Stmt) ExecMapContext(ctx context.Context, mp interface{}) (sql.Result, error) { + vv := reflect.ValueOf(mp) + if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { + return nil, errors.New("mp should be a map's pointer") + } + + args := make([]interface{}, len(s.names)) + for k, i := range s.names { + args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() + } + return s.Stmt.ExecContext(ctx, args...) +} + +func (s *Stmt) ExecMap(mp interface{}) (sql.Result, error) { + return s.ExecMapContext(context.Background(), mp) +} + +func (s *Stmt) ExecStructContext(ctx context.Context, st interface{}) (sql.Result, error) { + vv := reflect.ValueOf(st) + if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { + return nil, errors.New("mp should be a map's pointer") + } + + args := make([]interface{}, len(s.names)) + for k, i := range s.names { + args[i] = vv.Elem().FieldByName(k).Interface() + } + return s.Stmt.ExecContext(ctx, args...) +} + +func (s *Stmt) ExecStruct(st interface{}) (sql.Result, error) { + return s.ExecStructContext(context.Background(), st) +} + +func (s *Stmt) QueryContext(ctx context.Context, args ...interface{}) (*Rows, error) { + rows, err := s.Stmt.QueryContext(ctx, args...) + if err != nil { + return nil, err + } + return &Rows{rows, s.db}, nil +} + +func (s *Stmt) Query(args ...interface{}) (*Rows, error) { + return s.QueryContext(context.Background(), args...) +} + +func (s *Stmt) QueryMapContext(ctx context.Context, mp interface{}) (*Rows, error) { + vv := reflect.ValueOf(mp) + if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { + return nil, errors.New("mp should be a map's pointer") + } + + args := make([]interface{}, len(s.names)) + for k, i := range s.names { + args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() + } + + return s.QueryContext(ctx, args...) +} + +func (s *Stmt) QueryMap(mp interface{}) (*Rows, error) { + return s.QueryMapContext(context.Background(), mp) +} + +func (s *Stmt) QueryStructContext(ctx context.Context, st interface{}) (*Rows, error) { + vv := reflect.ValueOf(st) + if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { + return nil, errors.New("mp should be a map's pointer") + } + + args := make([]interface{}, len(s.names)) + for k, i := range s.names { + args[i] = vv.Elem().FieldByName(k).Interface() + } + + return s.Query(args...) +} + +func (s *Stmt) QueryStruct(st interface{}) (*Rows, error) { + return s.QueryStructContext(context.Background(), st) +} + +func (s *Stmt) QueryRowContext(ctx context.Context, args ...interface{}) *Row { + rows, err := s.QueryContext(ctx, args...) + return &Row{rows, err} +} + +func (s *Stmt) QueryRow(args ...interface{}) *Row { + return s.QueryRowContext(context.Background(), args...) +} + +func (s *Stmt) QueryRowMapContext(ctx context.Context, mp interface{}) *Row { + vv := reflect.ValueOf(mp) + if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { + return &Row{nil, errors.New("mp should be a map's pointer")} + } + + args := make([]interface{}, len(s.names)) + for k, i := range s.names { + args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() + } + + return s.QueryRowContext(ctx, args...) +} + +func (s *Stmt) QueryRowMap(mp interface{}) *Row { + return s.QueryRowMapContext(context.Background(), mp) +} + +func (s *Stmt) QueryRowStructContext(ctx context.Context, st interface{}) *Row { + vv := reflect.ValueOf(st) + if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { + return &Row{nil, errors.New("st should be a struct's pointer")} + } + + args := make([]interface{}, len(s.names)) + for k, i := range s.names { + args[i] = vv.Elem().FieldByName(k).Interface() + } + + return s.QueryRowContext(ctx, args...) +} + +func (s *Stmt) QueryRowStruct(st interface{}) *Row { + return s.QueryRowStructContext(context.Background(), st) +} diff --git a/vendor/github.com/go-xorm/core/table.go b/vendor/github.com/go-xorm/core/table.go index b5d079404c8eb..d129e60f8b914 100644 --- a/vendor/github.com/go-xorm/core/table.go +++ b/vendor/github.com/go-xorm/core/table.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( diff --git a/vendor/github.com/go-xorm/core/tx.go b/vendor/github.com/go-xorm/core/tx.go new file mode 100644 index 0000000000000..a56b70063eb9f --- /dev/null +++ b/vendor/github.com/go-xorm/core/tx.go @@ -0,0 +1,153 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package core + +import ( + "context" + "database/sql" +) + +type Tx struct { + *sql.Tx + db *DB +} + +func (db *DB) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) { + tx, err := db.DB.BeginTx(ctx, opts) + if err != nil { + return nil, err + } + return &Tx{tx, db}, nil +} + +func (db *DB) Begin() (*Tx, error) { + tx, err := db.DB.Begin() + if err != nil { + return nil, err + } + return &Tx{tx, db}, nil +} + +func (tx *Tx) PrepareContext(ctx context.Context, query string) (*Stmt, error) { + names := make(map[string]int) + var i int + query = re.ReplaceAllStringFunc(query, func(src string) string { + names[src[1:]] = i + i += 1 + return "?" + }) + + stmt, err := tx.Tx.PrepareContext(ctx, query) + if err != nil { + return nil, err + } + return &Stmt{stmt, tx.db, names}, nil +} + +func (tx *Tx) Prepare(query string) (*Stmt, error) { + return tx.PrepareContext(context.Background(), query) +} + +func (tx *Tx) StmtContext(ctx context.Context, stmt *Stmt) *Stmt { + stmt.Stmt = tx.Tx.StmtContext(ctx, stmt.Stmt) + return stmt +} + +func (tx *Tx) Stmt(stmt *Stmt) *Stmt { + return tx.StmtContext(context.Background(), stmt) +} + +func (tx *Tx) ExecMapContext(ctx context.Context, query string, mp interface{}) (sql.Result, error) { + query, args, err := MapToSlice(query, mp) + if err != nil { + return nil, err + } + return tx.Tx.ExecContext(ctx, query, args...) +} + +func (tx *Tx) ExecMap(query string, mp interface{}) (sql.Result, error) { + return tx.ExecMapContext(context.Background(), query, mp) +} + +func (tx *Tx) ExecStructContext(ctx context.Context, query string, st interface{}) (sql.Result, error) { + query, args, err := StructToSlice(query, st) + if err != nil { + return nil, err + } + return tx.Tx.ExecContext(ctx, query, args...) +} + +func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, error) { + return tx.ExecStructContext(context.Background(), query, st) +} + +func (tx *Tx) QueryContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { + rows, err := tx.Tx.QueryContext(ctx, query, args...) + if err != nil { + return nil, err + } + return &Rows{rows, tx.db}, nil +} + +func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) { + return tx.QueryContext(context.Background(), query, args...) +} + +func (tx *Tx) QueryMapContext(ctx context.Context, query string, mp interface{}) (*Rows, error) { + query, args, err := MapToSlice(query, mp) + if err != nil { + return nil, err + } + return tx.QueryContext(ctx, query, args...) +} + +func (tx *Tx) QueryMap(query string, mp interface{}) (*Rows, error) { + return tx.QueryMapContext(context.Background(), query, mp) +} + +func (tx *Tx) QueryStructContext(ctx context.Context, query string, st interface{}) (*Rows, error) { + query, args, err := StructToSlice(query, st) + if err != nil { + return nil, err + } + return tx.QueryContext(ctx, query, args...) +} + +func (tx *Tx) QueryStruct(query string, st interface{}) (*Rows, error) { + return tx.QueryStructContext(context.Background(), query, st) +} + +func (tx *Tx) QueryRowContext(ctx context.Context, query string, args ...interface{}) *Row { + rows, err := tx.QueryContext(ctx, query, args...) + return &Row{rows, err} +} + +func (tx *Tx) QueryRow(query string, args ...interface{}) *Row { + return tx.QueryRowContext(context.Background(), query, args...) +} + +func (tx *Tx) QueryRowMapContext(ctx context.Context, query string, mp interface{}) *Row { + query, args, err := MapToSlice(query, mp) + if err != nil { + return &Row{nil, err} + } + return tx.QueryRowContext(ctx, query, args...) +} + +func (tx *Tx) QueryRowMap(query string, mp interface{}) *Row { + return tx.QueryRowMapContext(context.Background(), query, mp) +} + +func (tx *Tx) QueryRowStructContext(ctx context.Context, query string, st interface{}) *Row { + query, args, err := StructToSlice(query, st) + if err != nil { + return &Row{nil, err} + } + return tx.QueryRowContext(ctx, query, args...) +} + +func (tx *Tx) QueryRowStruct(query string, st interface{}) *Row { + return tx.QueryRowStructContext(context.Background(), query, st) +} diff --git a/vendor/github.com/go-xorm/core/type.go b/vendor/github.com/go-xorm/core/type.go index 5cbf93057306e..8164953602e94 100644 --- a/vendor/github.com/go-xorm/core/type.go +++ b/vendor/github.com/go-xorm/core/type.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package core import ( @@ -71,6 +75,7 @@ var ( Char = "CHAR" Varchar = "VARCHAR" + NChar = "NCHAR" NVarchar = "NVARCHAR" TinyText = "TINYTEXT" Text = "TEXT" @@ -84,12 +89,15 @@ var ( Date = "DATE" DateTime = "DATETIME" + SmallDateTime = "SMALLDATETIME" Time = "TIME" TimeStamp = "TIMESTAMP" TimeStampz = "TIMESTAMPZ" Decimal = "DECIMAL" Numeric = "NUMERIC" + Money = "MONEY" + SmallMoney = "SMALLMONEY" Real = "REAL" Float = "FLOAT" @@ -127,6 +135,7 @@ var ( Jsonb: TEXT_TYPE, Char: TEXT_TYPE, + NChar: TEXT_TYPE, Varchar: TEXT_TYPE, NVarchar: TEXT_TYPE, TinyText: TEXT_TYPE, @@ -143,12 +152,15 @@ var ( Time: TIME_TYPE, TimeStamp: TIME_TYPE, TimeStampz: TIME_TYPE, + SmallDateTime: TIME_TYPE, Decimal: NUMERIC_TYPE, Numeric: NUMERIC_TYPE, Real: NUMERIC_TYPE, Float: NUMERIC_TYPE, Double: NUMERIC_TYPE, + Money: NUMERIC_TYPE, + SmallMoney: NUMERIC_TYPE, Binary: BLOB_TYPE, VarBinary: BLOB_TYPE, @@ -295,15 +307,15 @@ func SQLType2Type(st SQLType) reflect.Type { return reflect.TypeOf(float32(1)) case Double: return reflect.TypeOf(float64(1)) - case Char, Varchar, NVarchar, TinyText, Text, NText, MediumText, LongText, Enum, Set, Uuid, Clob, SysName: + case Char, NChar, Varchar, NVarchar, TinyText, Text, NText, MediumText, LongText, Enum, Set, Uuid, Clob, SysName: return reflect.TypeOf("") case TinyBlob, Blob, LongBlob, Bytea, Binary, MediumBlob, VarBinary, UniqueIdentifier: return reflect.TypeOf([]byte{}) case Bool: return reflect.TypeOf(true) - case DateTime, Date, Time, TimeStamp, TimeStampz: + case DateTime, Date, Time, TimeStamp, TimeStampz, SmallDateTime: return reflect.TypeOf(c_TIME_DEFAULT) - case Decimal, Numeric: + case Decimal, Numeric, Money, SmallMoney: return reflect.TypeOf("") default: return reflect.TypeOf("") diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go index f02849c56f220..ff714a37615b9 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_others.go +++ b/vendor/github.com/mattn/go-isatty/isatty_others.go @@ -1,4 +1,4 @@ -// +build appengine js +// +build appengine js nacl package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_linux.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go similarity index 95% rename from vendor/github.com/mattn/go-isatty/isatty_linux.go rename to vendor/github.com/mattn/go-isatty/isatty_tcgets.go index 4f8af465206ec..453b025d0df02 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_linux.go +++ b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux aix // +build !appengine // +build !android diff --git a/vendor/google.golang.org/appengine/internal/api.go b/vendor/google.golang.org/appengine/internal/api.go index 16f87c5d3787b..bbc1cb9c34551 100644 --- a/vendor/google.golang.org/appengine/internal/api.go +++ b/vendor/google.golang.org/appengine/internal/api.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. // +build !appengine -// +build go1.7 package internal @@ -130,7 +129,13 @@ func handleHTTP(w http.ResponseWriter, r *http.Request) { flushes++ } c.pendingLogs.Unlock() - go c.flushLog(false) + flushed := make(chan struct{}) + go func() { + defer close(flushed) + // Force a log flush, because with very short requests we + // may not ever flush logs. + c.flushLog(true) + }() w.Header().Set(logFlushHeader, strconv.Itoa(flushes)) // Avoid nil Write call if c.Write is never called. @@ -140,6 +145,9 @@ func handleHTTP(w http.ResponseWriter, r *http.Request) { if c.outBody != nil { w.Write(c.outBody) } + // Wait for the last flush to complete before returning, + // otherwise the security ticket will not be valid. + <-flushed } func executeRequestSafely(c *context, r *http.Request) { @@ -571,7 +579,10 @@ func logf(c *context, level int64, format string, args ...interface{}) { Level: &level, Message: &s, }) - log.Print(logLevelName[level] + ": " + s) + // Only duplicate log to stderr if not running on App Engine second generation + if !IsSecondGen() { + log.Print(logLevelName[level] + ": " + s) + } } // flushLog attempts to flush any pending logs to the appserver. diff --git a/vendor/google.golang.org/appengine/internal/api_pre17.go b/vendor/google.golang.org/appengine/internal/api_pre17.go deleted file mode 100644 index 028b4f056e0d3..0000000000000 --- a/vendor/google.golang.org/appengine/internal/api_pre17.go +++ /dev/null @@ -1,682 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -// +build !appengine -// +build !go1.7 - -package internal - -import ( - "bytes" - "errors" - "fmt" - "io/ioutil" - "log" - "net" - "net/http" - "net/url" - "os" - "runtime" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/golang/protobuf/proto" - netcontext "golang.org/x/net/context" - - basepb "google.golang.org/appengine/internal/base" - logpb "google.golang.org/appengine/internal/log" - remotepb "google.golang.org/appengine/internal/remote_api" -) - -const ( - apiPath = "/rpc_http" - defaultTicketSuffix = "/default.20150612t184001.0" -) - -var ( - // Incoming headers. - ticketHeader = http.CanonicalHeaderKey("X-AppEngine-API-Ticket") - dapperHeader = http.CanonicalHeaderKey("X-Google-DapperTraceInfo") - traceHeader = http.CanonicalHeaderKey("X-Cloud-Trace-Context") - curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace") - userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP") - remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr") - - // Outgoing headers. - apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint") - apiEndpointHeaderValue = []string{"app-engine-apis"} - apiMethodHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Method") - apiMethodHeaderValue = []string{"/VMRemoteAPI.CallRemoteAPI"} - apiDeadlineHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Deadline") - apiContentType = http.CanonicalHeaderKey("Content-Type") - apiContentTypeValue = []string{"application/octet-stream"} - logFlushHeader = http.CanonicalHeaderKey("X-AppEngine-Log-Flush-Count") - - apiHTTPClient = &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - Dial: limitDial, - }, - } - - defaultTicketOnce sync.Once - defaultTicket string -) - -func apiURL() *url.URL { - host, port := "appengine.googleapis.internal", "10001" - if h := os.Getenv("API_HOST"); h != "" { - host = h - } - if p := os.Getenv("API_PORT"); p != "" { - port = p - } - return &url.URL{ - Scheme: "http", - Host: host + ":" + port, - Path: apiPath, - } -} - -func handleHTTP(w http.ResponseWriter, r *http.Request) { - c := &context{ - req: r, - outHeader: w.Header(), - apiURL: apiURL(), - } - stopFlushing := make(chan int) - - ctxs.Lock() - ctxs.m[r] = c - ctxs.Unlock() - defer func() { - ctxs.Lock() - delete(ctxs.m, r) - ctxs.Unlock() - }() - - // Patch up RemoteAddr so it looks reasonable. - if addr := r.Header.Get(userIPHeader); addr != "" { - r.RemoteAddr = addr - } else if addr = r.Header.Get(remoteAddrHeader); addr != "" { - r.RemoteAddr = addr - } else { - // Should not normally reach here, but pick a sensible default anyway. - r.RemoteAddr = "127.0.0.1" - } - // The address in the headers will most likely be of these forms: - // 123.123.123.123 - // 2001:db8::1 - // net/http.Request.RemoteAddr is specified to be in "IP:port" form. - if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil { - // Assume the remote address is only a host; add a default port. - r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80") - } - - // Start goroutine responsible for flushing app logs. - // This is done after adding c to ctx.m (and stopped before removing it) - // because flushing logs requires making an API call. - go c.logFlusher(stopFlushing) - - executeRequestSafely(c, r) - c.outHeader = nil // make sure header changes aren't respected any more - - stopFlushing <- 1 // any logging beyond this point will be dropped - - // Flush any pending logs asynchronously. - c.pendingLogs.Lock() - flushes := c.pendingLogs.flushes - if len(c.pendingLogs.lines) > 0 { - flushes++ - } - c.pendingLogs.Unlock() - go c.flushLog(false) - w.Header().Set(logFlushHeader, strconv.Itoa(flushes)) - - // Avoid nil Write call if c.Write is never called. - if c.outCode != 0 { - w.WriteHeader(c.outCode) - } - if c.outBody != nil { - w.Write(c.outBody) - } -} - -func executeRequestSafely(c *context, r *http.Request) { - defer func() { - if x := recover(); x != nil { - logf(c, 4, "%s", renderPanic(x)) // 4 == critical - c.outCode = 500 - } - }() - - http.DefaultServeMux.ServeHTTP(c, r) -} - -func renderPanic(x interface{}) string { - buf := make([]byte, 16<<10) // 16 KB should be plenty - buf = buf[:runtime.Stack(buf, false)] - - // Remove the first few stack frames: - // this func - // the recover closure in the caller - // That will root the stack trace at the site of the panic. - const ( - skipStart = "internal.renderPanic" - skipFrames = 2 - ) - start := bytes.Index(buf, []byte(skipStart)) - p := start - for i := 0; i < skipFrames*2 && p+1 < len(buf); i++ { - p = bytes.IndexByte(buf[p+1:], '\n') + p + 1 - if p < 0 { - break - } - } - if p >= 0 { - // buf[start:p+1] is the block to remove. - // Copy buf[p+1:] over buf[start:] and shrink buf. - copy(buf[start:], buf[p+1:]) - buf = buf[:len(buf)-(p+1-start)] - } - - // Add panic heading. - head := fmt.Sprintf("panic: %v\n\n", x) - if len(head) > len(buf) { - // Extremely unlikely to happen. - return head - } - copy(buf[len(head):], buf) - copy(buf, head) - - return string(buf) -} - -var ctxs = struct { - sync.Mutex - m map[*http.Request]*context - bg *context // background context, lazily initialized - // dec is used by tests to decorate the netcontext.Context returned - // for a given request. This allows tests to add overrides (such as - // WithAppIDOverride) to the context. The map is nil outside tests. - dec map[*http.Request]func(netcontext.Context) netcontext.Context -}{ - m: make(map[*http.Request]*context), -} - -// context represents the context of an in-flight HTTP request. -// It implements the appengine.Context and http.ResponseWriter interfaces. -type context struct { - req *http.Request - - outCode int - outHeader http.Header - outBody []byte - - pendingLogs struct { - sync.Mutex - lines []*logpb.UserAppLogLine - flushes int - } - - apiURL *url.URL -} - -var contextKey = "holds a *context" - -// fromContext returns the App Engine context or nil if ctx is not -// derived from an App Engine context. -func fromContext(ctx netcontext.Context) *context { - c, _ := ctx.Value(&contextKey).(*context) - return c -} - -func withContext(parent netcontext.Context, c *context) netcontext.Context { - ctx := netcontext.WithValue(parent, &contextKey, c) - if ns := c.req.Header.Get(curNamespaceHeader); ns != "" { - ctx = withNamespace(ctx, ns) - } - return ctx -} - -func toContext(c *context) netcontext.Context { - return withContext(netcontext.Background(), c) -} - -func IncomingHeaders(ctx netcontext.Context) http.Header { - if c := fromContext(ctx); c != nil { - return c.req.Header - } - return nil -} - -func ReqContext(req *http.Request) netcontext.Context { - return WithContext(netcontext.Background(), req) -} - -func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { - ctxs.Lock() - c := ctxs.m[req] - d := ctxs.dec[req] - ctxs.Unlock() - - if d != nil { - parent = d(parent) - } - - if c == nil { - // Someone passed in an http.Request that is not in-flight. - // We panic here rather than panicking at a later point - // so that stack traces will be more sensible. - log.Panic("appengine: NewContext passed an unknown http.Request") - } - return withContext(parent, c) -} - -// DefaultTicket returns a ticket used for background context or dev_appserver. -func DefaultTicket() string { - defaultTicketOnce.Do(func() { - if IsDevAppServer() { - defaultTicket = "testapp" + defaultTicketSuffix - return - } - appID := partitionlessAppID() - escAppID := strings.Replace(strings.Replace(appID, ":", "_", -1), ".", "_", -1) - majVersion := VersionID(nil) - if i := strings.Index(majVersion, "."); i > 0 { - majVersion = majVersion[:i] - } - defaultTicket = fmt.Sprintf("%s/%s.%s.%s", escAppID, ModuleName(nil), majVersion, InstanceID()) - }) - return defaultTicket -} - -func BackgroundContext() netcontext.Context { - ctxs.Lock() - defer ctxs.Unlock() - - if ctxs.bg != nil { - return toContext(ctxs.bg) - } - - // Compute background security ticket. - ticket := DefaultTicket() - - ctxs.bg = &context{ - req: &http.Request{ - Header: http.Header{ - ticketHeader: []string{ticket}, - }, - }, - apiURL: apiURL(), - } - - // TODO(dsymonds): Wire up the shutdown handler to do a final flush. - go ctxs.bg.logFlusher(make(chan int)) - - return toContext(ctxs.bg) -} - -// RegisterTestRequest registers the HTTP request req for testing, such that -// any API calls are sent to the provided URL. It returns a closure to delete -// the registration. -// It should only be used by aetest package. -func RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) { - c := &context{ - req: req, - apiURL: apiURL, - } - ctxs.Lock() - defer ctxs.Unlock() - if _, ok := ctxs.m[req]; ok { - log.Panic("req already associated with context") - } - if _, ok := ctxs.dec[req]; ok { - log.Panic("req already associated with context") - } - if ctxs.dec == nil { - ctxs.dec = make(map[*http.Request]func(netcontext.Context) netcontext.Context) - } - ctxs.m[req] = c - ctxs.dec[req] = decorate - - return req, func() { - ctxs.Lock() - delete(ctxs.m, req) - delete(ctxs.dec, req) - ctxs.Unlock() - } -} - -var errTimeout = &CallError{ - Detail: "Deadline exceeded", - Code: int32(remotepb.RpcError_CANCELLED), - Timeout: true, -} - -func (c *context) Header() http.Header { return c.outHeader } - -// Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status -// codes do not permit a response body (nor response entity headers such as -// Content-Length, Content-Type, etc). -func bodyAllowedForStatus(status int) bool { - switch { - case status >= 100 && status <= 199: - return false - case status == 204: - return false - case status == 304: - return false - } - return true -} - -func (c *context) Write(b []byte) (int, error) { - if c.outCode == 0 { - c.WriteHeader(http.StatusOK) - } - if len(b) > 0 && !bodyAllowedForStatus(c.outCode) { - return 0, http.ErrBodyNotAllowed - } - c.outBody = append(c.outBody, b...) - return len(b), nil -} - -func (c *context) WriteHeader(code int) { - if c.outCode != 0 { - logf(c, 3, "WriteHeader called multiple times on request.") // error level - return - } - c.outCode = code -} - -func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) { - hreq := &http.Request{ - Method: "POST", - URL: c.apiURL, - Header: http.Header{ - apiEndpointHeader: apiEndpointHeaderValue, - apiMethodHeader: apiMethodHeaderValue, - apiContentType: apiContentTypeValue, - apiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)}, - }, - Body: ioutil.NopCloser(bytes.NewReader(body)), - ContentLength: int64(len(body)), - Host: c.apiURL.Host, - } - if info := c.req.Header.Get(dapperHeader); info != "" { - hreq.Header.Set(dapperHeader, info) - } - if info := c.req.Header.Get(traceHeader); info != "" { - hreq.Header.Set(traceHeader, info) - } - - tr := apiHTTPClient.Transport.(*http.Transport) - - var timedOut int32 // atomic; set to 1 if timed out - t := time.AfterFunc(timeout, func() { - atomic.StoreInt32(&timedOut, 1) - tr.CancelRequest(hreq) - }) - defer t.Stop() - defer func() { - // Check if timeout was exceeded. - if atomic.LoadInt32(&timedOut) != 0 { - err = errTimeout - } - }() - - hresp, err := apiHTTPClient.Do(hreq) - if err != nil { - return nil, &CallError{ - Detail: fmt.Sprintf("service bridge HTTP failed: %v", err), - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - defer hresp.Body.Close() - hrespBody, err := ioutil.ReadAll(hresp.Body) - if hresp.StatusCode != 200 { - return nil, &CallError{ - Detail: fmt.Sprintf("service bridge returned HTTP %d (%q)", hresp.StatusCode, hrespBody), - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - if err != nil { - return nil, &CallError{ - Detail: fmt.Sprintf("service bridge response bad: %v", err), - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - return hrespBody, nil -} - -func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { - if ns := NamespaceFromContext(ctx); ns != "" { - if fn, ok := NamespaceMods[service]; ok { - fn(in, ns) - } - } - - if f, ctx, ok := callOverrideFromContext(ctx); ok { - return f(ctx, service, method, in, out) - } - - // Handle already-done contexts quickly. - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - - c := fromContext(ctx) - if c == nil { - // Give a good error message rather than a panic lower down. - return errNotAppEngineContext - } - - // Apply transaction modifications if we're in a transaction. - if t := transactionFromContext(ctx); t != nil { - if t.finished { - return errors.New("transaction context has expired") - } - applyTransaction(in, &t.transaction) - } - - // Default RPC timeout is 60s. - timeout := 60 * time.Second - if deadline, ok := ctx.Deadline(); ok { - timeout = deadline.Sub(time.Now()) - } - - data, err := proto.Marshal(in) - if err != nil { - return err - } - - ticket := c.req.Header.Get(ticketHeader) - // Use a test ticket under test environment. - if ticket == "" { - if appid := ctx.Value(&appIDOverrideKey); appid != nil { - ticket = appid.(string) + defaultTicketSuffix - } - } - // Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver. - if ticket == "" { - ticket = DefaultTicket() - } - req := &remotepb.Request{ - ServiceName: &service, - Method: &method, - Request: data, - RequestId: &ticket, - } - hreqBody, err := proto.Marshal(req) - if err != nil { - return err - } - - hrespBody, err := c.post(hreqBody, timeout) - if err != nil { - return err - } - - res := &remotepb.Response{} - if err := proto.Unmarshal(hrespBody, res); err != nil { - return err - } - if res.RpcError != nil { - ce := &CallError{ - Detail: res.RpcError.GetDetail(), - Code: *res.RpcError.Code, - } - switch remotepb.RpcError_ErrorCode(ce.Code) { - case remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED: - ce.Timeout = true - } - return ce - } - if res.ApplicationError != nil { - return &APIError{ - Service: *req.ServiceName, - Detail: res.ApplicationError.GetDetail(), - Code: *res.ApplicationError.Code, - } - } - if res.Exception != nil || res.JavaException != nil { - // This shouldn't happen, but let's be defensive. - return &CallError{ - Detail: "service bridge returned exception", - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - return proto.Unmarshal(res.Response, out) -} - -func (c *context) Request() *http.Request { - return c.req -} - -func (c *context) addLogLine(ll *logpb.UserAppLogLine) { - // Truncate long log lines. - // TODO(dsymonds): Check if this is still necessary. - const lim = 8 << 10 - if len(*ll.Message) > lim { - suffix := fmt.Sprintf("...(length %d)", len(*ll.Message)) - ll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix) - } - - c.pendingLogs.Lock() - c.pendingLogs.lines = append(c.pendingLogs.lines, ll) - c.pendingLogs.Unlock() -} - -var logLevelName = map[int64]string{ - 0: "DEBUG", - 1: "INFO", - 2: "WARNING", - 3: "ERROR", - 4: "CRITICAL", -} - -func logf(c *context, level int64, format string, args ...interface{}) { - if c == nil { - panic("not an App Engine context") - } - s := fmt.Sprintf(format, args...) - s = strings.TrimRight(s, "\n") // Remove any trailing newline characters. - c.addLogLine(&logpb.UserAppLogLine{ - TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3), - Level: &level, - Message: &s, - }) - log.Print(logLevelName[level] + ": " + s) -} - -// flushLog attempts to flush any pending logs to the appserver. -// It should not be called concurrently. -func (c *context) flushLog(force bool) (flushed bool) { - c.pendingLogs.Lock() - // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious. - n, rem := 0, 30<<20 - for ; n < len(c.pendingLogs.lines); n++ { - ll := c.pendingLogs.lines[n] - // Each log line will require about 3 bytes of overhead. - nb := proto.Size(ll) + 3 - if nb > rem { - break - } - rem -= nb - } - lines := c.pendingLogs.lines[:n] - c.pendingLogs.lines = c.pendingLogs.lines[n:] - c.pendingLogs.Unlock() - - if len(lines) == 0 && !force { - // Nothing to flush. - return false - } - - rescueLogs := false - defer func() { - if rescueLogs { - c.pendingLogs.Lock() - c.pendingLogs.lines = append(lines, c.pendingLogs.lines...) - c.pendingLogs.Unlock() - } - }() - - buf, err := proto.Marshal(&logpb.UserAppLogGroup{ - LogLine: lines, - }) - if err != nil { - log.Printf("internal.flushLog: marshaling UserAppLogGroup: %v", err) - rescueLogs = true - return false - } - - req := &logpb.FlushRequest{ - Logs: buf, - } - res := &basepb.VoidProto{} - c.pendingLogs.Lock() - c.pendingLogs.flushes++ - c.pendingLogs.Unlock() - if err := Call(toContext(c), "logservice", "Flush", req, res); err != nil { - log.Printf("internal.flushLog: Flush RPC: %v", err) - rescueLogs = true - return false - } - return true -} - -const ( - // Log flushing parameters. - flushInterval = 1 * time.Second - forceFlushInterval = 60 * time.Second -) - -func (c *context) logFlusher(stop <-chan int) { - lastFlush := time.Now() - tick := time.NewTicker(flushInterval) - for { - select { - case <-stop: - // Request finished. - tick.Stop() - return - case <-tick.C: - force := time.Now().Sub(lastFlush) > forceFlushInterval - if c.flushLog(force) { - lastFlush = time.Now() - } - } - } -} - -func ContextForTesting(req *http.Request) netcontext.Context { - return toContext(&context{req: req}) -} diff --git a/vendor/google.golang.org/appengine/internal/identity.go b/vendor/google.golang.org/appengine/internal/identity.go index d538701ab3b2b..9b4134e425732 100644 --- a/vendor/google.golang.org/appengine/internal/identity.go +++ b/vendor/google.golang.org/appengine/internal/identity.go @@ -4,11 +4,52 @@ package internal -import netcontext "golang.org/x/net/context" +import ( + "os" -// These functions are implementations of the wrapper functions -// in ../appengine/identity.go. See that file for commentary. + netcontext "golang.org/x/net/context" +) +var ( + // This is set to true in identity_classic.go, which is behind the appengine build tag. + // The appengine build tag is set for the first generation runtimes (<= Go 1.9) but not + // the second generation runtimes (>= Go 1.11), so this indicates whether we're on a + // first-gen runtime. See IsStandard below for the second-gen check. + appengineStandard bool + + // This is set to true in identity_flex.go, which is behind the appenginevm build tag. + appengineFlex bool +) + +// AppID is the implementation of the wrapper function of the same name in +// ../identity.go. See that file for commentary. func AppID(c netcontext.Context) string { return appID(FullyQualifiedAppID(c)) } + +// IsStandard is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsStandard() bool { + // appengineStandard will be true for first-gen runtimes (<= Go 1.9) but not + // second-gen (>= Go 1.11). + return appengineStandard || IsSecondGen() +} + +// IsStandard is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsSecondGen() bool { + // Second-gen runtimes set $GAE_ENV so we use that to check if we're on a second-gen runtime. + return os.Getenv("GAE_ENV") == "standard" +} + +// IsFlex is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsFlex() bool { + return appengineFlex +} + +// IsAppEngine is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsAppEngine() bool { + return IsStandard() || IsFlex() +} diff --git a/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/google.golang.org/appengine/internal/identity_classic.go index b59603f13293e..4e979f45e34d5 100644 --- a/vendor/google.golang.org/appengine/internal/identity_classic.go +++ b/vendor/google.golang.org/appengine/internal/identity_classic.go @@ -12,6 +12,10 @@ import ( netcontext "golang.org/x/net/context" ) +func init() { + appengineStandard = true +} + func DefaultVersionHostname(ctx netcontext.Context) string { c := fromContext(ctx) if c == nil { diff --git a/vendor/google.golang.org/appengine/internal/identity_flex.go b/vendor/google.golang.org/appengine/internal/identity_flex.go new file mode 100644 index 0000000000000..d5e2e7b5e3f8c --- /dev/null +++ b/vendor/google.golang.org/appengine/internal/identity_flex.go @@ -0,0 +1,11 @@ +// Copyright 2018 Google LLC. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appenginevm + +package internal + +func init() { + appengineFlex = true +} diff --git a/vendor/google.golang.org/appengine/internal/main.go b/vendor/google.golang.org/appengine/internal/main.go index 49036163c2b0a..1e765312fd180 100644 --- a/vendor/google.golang.org/appengine/internal/main.go +++ b/vendor/google.golang.org/appengine/internal/main.go @@ -11,5 +11,6 @@ import ( ) func Main() { + MainPath = "" appengine_internal.Main() } diff --git a/vendor/google.golang.org/appengine/internal/main_common.go b/vendor/google.golang.org/appengine/internal/main_common.go new file mode 100644 index 0000000000000..357dce4dd0129 --- /dev/null +++ b/vendor/google.golang.org/appengine/internal/main_common.go @@ -0,0 +1,7 @@ +package internal + +// MainPath stores the file path of the main package. On App Engine Standard +// using Go version 1.9 and below, this will be unset. On App Engine Flex and +// App Engine Standard second-gen (Go 1.11 and above), this will be the +// filepath to package main. +var MainPath string diff --git a/vendor/google.golang.org/appengine/internal/main_vm.go b/vendor/google.golang.org/appengine/internal/main_vm.go index 822e784a458d9..ddb79a333879a 100644 --- a/vendor/google.golang.org/appengine/internal/main_vm.go +++ b/vendor/google.golang.org/appengine/internal/main_vm.go @@ -12,9 +12,12 @@ import ( "net/http" "net/url" "os" + "path/filepath" + "runtime" ) func Main() { + MainPath = filepath.Dir(findMainPath()) installHealthChecker(http.DefaultServeMux) port := "8080" @@ -31,6 +34,24 @@ func Main() { } } +// Find the path to package main by looking at the root Caller. +func findMainPath() string { + pc := make([]uintptr, 100) + n := runtime.Callers(2, pc) + frames := runtime.CallersFrames(pc[:n]) + for { + frame, more := frames.Next() + // Tests won't have package main, instead they have testing.tRunner + if frame.Function == "main.main" || frame.Function == "testing.tRunner" { + return frame.File + } + if !more { + break + } + } + return "" +} + func installHealthChecker(mux *http.ServeMux) { // If no health check handler has been installed by this point, add a trivial one. const healthPath = "/_ah/health" diff --git a/vendor/modules.txt b/vendor/modules.txt index e7f91d5bc2d12..b5853dc9a278f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,3 +1,7 @@ +# code.gitea.io/log v0.0.0-20190608101221-52ddba89623c +code.gitea.io/log +# gitea.com/xorm/gitea_log_bridge v0.0.0-20190527041858-1699849c7e28 +gitea.com/xorm/gitea_log_bridge # github.com/BurntSushi/toml v0.3.1 github.com/BurntSushi/toml # github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 @@ -147,11 +151,11 @@ github.com/go-redis/redis/internal/hashtag github.com/go-redis/redis/internal/pool github.com/go-redis/redis/internal/proto github.com/go-redis/redis/internal/util -# github.com/go-sql-driver/mysql v1.4.0 => github.com/go-sql-driver/mysql v0.0.0-20181218123637-c45f530f8e7f +# github.com/go-sql-driver/mysql v1.4.1 => github.com/go-sql-driver/mysql v0.0.0-20181218123637-c45f530f8e7f github.com/go-sql-driver/mysql # github.com/go-xorm/builder v0.3.3 github.com/go-xorm/builder -# github.com/go-xorm/core v0.6.0 +# github.com/go-xorm/core v0.6.2 github.com/go-xorm/core # github.com/go-xorm/xorm v0.0.0-20190116032649-a6300f2a45e0 github.com/go-xorm/xorm @@ -237,7 +241,7 @@ github.com/markbates/goth/providers/gitlab github.com/markbates/goth/providers/gplus github.com/markbates/goth/providers/openidConnect github.com/markbates/goth/providers/twitter -# github.com/mattn/go-isatty v0.0.7 +# github.com/mattn/go-isatty v0.0.8 github.com/mattn/go-isatty # github.com/mattn/go-sqlite3 v1.10.0 github.com/mattn/go-sqlite3 @@ -371,8 +375,8 @@ golang.org/x/net/internal/socks golang.org/x/oauth2 golang.org/x/oauth2/internal # golang.org/x/sys v0.0.0-20190618155005-516e3c20635f -golang.org/x/sys/windows golang.org/x/sys/windows/svc +golang.org/x/sys/windows golang.org/x/sys/unix golang.org/x/sys/cpu # golang.org/x/text v0.3.2 @@ -396,7 +400,7 @@ golang.org/x/text/internal/language/compact golang.org/x/text/internal/utf8internal golang.org/x/text/runes golang.org/x/text/internal/tag -# google.golang.org/appengine v1.2.0 +# google.golang.org/appengine v1.4.0 google.golang.org/appengine/cloudsql google.golang.org/appengine/urlfetch google.golang.org/appengine/internal