Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
m0_67397764
soar
提交
84a67026
S
soar
项目概览
m0_67397764
/
soar
与 Fork 源项目一致
Fork自
Xiaomi / soar
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
soar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
84a67026
编写于
12月 28, 2018
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use go-sql-driver's DSN format
compatibly with old version(<0.10.0)
上级
ba091b08
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
791 addition
and
84 deletion
+791
-84
common/config.go
common/config.go
+121
-44
common/config_test.go
common/config_test.go
+15
-1
common/example_test.go
common/example_test.go
+8
-9
common/testdata/TestParseDSN.golden
common/testdata/TestParseDSN.golden
+638
-18
database/mysql.go
database/mysql.go
+1
-8
env/env.go
env/env.go
+3
-3
genver.sh
genver.sh
+5
-1
未找到文件。
common/config.go
浏览文件 @
84a67026
...
@@ -29,7 +29,9 @@ import (
...
@@ -29,7 +29,9 @@ import (
"regexp"
"regexp"
"runtime"
"runtime"
"strings"
"strings"
"time"
"github.com/go-sql-driver/mysql"
"gopkg.in/yaml.v2"
"gopkg.in/yaml.v2"
)
)
...
@@ -138,20 +140,8 @@ type Configuration struct {
...
@@ -138,20 +140,8 @@ type Configuration struct {
// Config 默认设置
// Config 默认设置
var
Config
=
&
Configuration
{
var
Config
=
&
Configuration
{
OnlineDSN
:
&
Dsn
{
OnlineDSN
:
newDSN
(
nil
),
Net
:
"tcp"
,
TestDSN
:
newDSN
(
nil
),
Schema
:
"information_schema"
,
Charset
:
"utf8mb4"
,
Disable
:
true
,
Version
:
99999
,
},
TestDSN
:
&
Dsn
{
Net
:
"tcp"
,
Schema
:
"information_schema"
,
Charset
:
"utf8mb4"
,
Disable
:
true
,
Version
:
99999
,
},
AllowOnlineAsTest
:
false
,
AllowOnlineAsTest
:
false
,
DropTestTemporary
:
true
,
DropTestTemporary
:
true
,
CleanupTestDatabase
:
false
,
CleanupTestDatabase
:
false
,
...
@@ -236,25 +226,104 @@ var Config = &Configuration{
...
@@ -236,25 +226,104 @@ var Config = &Configuration{
// Dsn Data source name
// Dsn Data source name
type
Dsn
struct
{
type
Dsn
struct
{
Net
string
`yaml:"net"`
User
string
`yaml:"user"`
// Usernames
Addr
string
`yaml:"addr"`
Password
string
`yaml:"password"`
// Password (requires User)
Schema
string
`yaml:"schema"`
Net
string
`yaml:"net"`
// Network type
Addr
string
`yaml:"addr"`
// Network address (requires Net)
// 数据库用户名和密码可以通过系统环境变量的形式赋值
Schema
string
`yaml:"schema"`
// Database name
User
string
`yaml:"user"`
Charset
string
`yaml:"charset"`
// SET NAMES charset
Password
string
`yaml:"password"`
Collation
string
`yaml:"collation"`
// Connection collation
Charset
string
`yaml:"charset"`
Loc
string
`yaml:"loc"`
// Location for time.Time values
Disable
bool
`yaml:"disable"`
TLS
string
`yaml:"tls"`
// TLS configuration name
ServerPubKey
string
`yaml:"server-public-key"`
// Server public key name
MaxAllowedPacket
int
`ymal:"max-allowed-packet"`
// Max packet size allowed
Params
map
[
string
]
string
`yaml:"params"`
// Other Connection parameters, `SET param=val`, `SET NAMES charset`
Timeout
int
`yaml:"timeout"`
// Dial timeout
ReadTimeout
int
`yaml:"read-timeout"`
// I/O read timeout
WriteTimeout
int
`yaml:"write-timeout"`
// I/O write timeout
AllowNativePasswords
bool
`yaml:"allow-native-passwords"`
// Allows the native password authentication method
AllowOldPasswords
bool
`yaml:"allow-old-passwords"`
// Allows the old insecure password method
Disable
bool
`yaml:"disable"`
Version
int
`yaml:"-"`
// 版本自动检查,不可配置
}
Timeout
int
`yaml:"timeout"`
// newDSN create default Dsn struct
ReadTimeout
int
`yaml:"read-timeout"`
func
newDSN
(
cfg
*
mysql
.
Config
)
*
Dsn
{
WriteTimeout
int
`yaml:"write-timeout"`
dsn
:=
&
Dsn
{
Net
:
"tcp"
,
Schema
:
"information_schema"
,
Charset
:
"utf8"
,
AllowNativePasswords
:
true
,
Params
:
make
(
map
[
string
]
string
),
MaxAllowedPacket
:
4
<<
20
,
// 4 MiB
// Disable: true,
Version
:
99999
,
}
if
cfg
==
nil
{
return
dsn
}
dsn
.
User
=
cfg
.
User
dsn
.
Password
=
cfg
.
Passwd
dsn
.
Net
=
cfg
.
Net
dsn
.
Addr
=
cfg
.
Addr
dsn
.
Schema
=
cfg
.
DBName
dsn
.
Params
=
make
(
map
[
string
]
string
)
for
k
,
v
:=
range
cfg
.
Params
{
dsn
.
Params
[
k
]
=
v
}
if
_
,
ok
:=
cfg
.
Params
[
"charset"
];
ok
{
dsn
.
Charset
=
cfg
.
Params
[
"charset"
]
}
dsn
.
Collation
=
cfg
.
Collation
dsn
.
Loc
=
cfg
.
Loc
.
String
()
dsn
.
MaxAllowedPacket
=
cfg
.
MaxAllowedPacket
dsn
.
ServerPubKey
=
cfg
.
ServerPubKey
dsn
.
TLS
=
cfg
.
TLSConfig
dsn
.
Timeout
=
int
(
cfg
.
Timeout
/
time
.
Second
)
dsn
.
ReadTimeout
=
int
(
cfg
.
ReadTimeout
/
time
.
Second
)
dsn
.
WriteTimeout
=
int
(
cfg
.
WriteTimeout
/
time
.
Second
)
dsn
.
AllowNativePasswords
=
cfg
.
AllowNativePasswords
dsn
.
AllowOldPasswords
=
cfg
.
AllowOldPasswords
return
dsn
}
Version
int
`yaml:"-"`
// 版本自动检查,不可配置
// newMySQLConfig convert Dsn to go-sql-drive Config
func
(
env
*
Dsn
)
newMySQLConifg
()
(
*
mysql
.
Config
,
error
)
{
var
err
error
dsn
:=
mysql
.
NewConfig
()
dsn
.
User
=
env
.
User
dsn
.
Passwd
=
env
.
Password
dsn
.
Net
=
env
.
Net
dsn
.
Addr
=
env
.
Addr
dsn
.
DBName
=
env
.
Schema
dsn
.
Params
=
make
(
map
[
string
]
string
)
for
k
,
v
:=
range
env
.
Params
{
dsn
.
Params
[
k
]
=
v
}
dsn
.
Params
[
"charset"
]
=
env
.
Charset
dsn
.
Collation
=
env
.
Collation
dsn
.
Loc
,
err
=
time
.
LoadLocation
(
env
.
Loc
)
if
err
!=
nil
{
return
nil
,
err
}
dsn
.
MaxAllowedPacket
=
env
.
MaxAllowedPacket
dsn
.
ServerPubKey
=
env
.
ServerPubKey
dsn
.
TLSConfig
=
env
.
TLS
dsn
.
Timeout
=
time
.
Duration
(
env
.
Timeout
)
*
time
.
Second
dsn
.
ReadTimeout
=
time
.
Duration
(
env
.
ReadTimeout
)
*
time
.
Second
dsn
.
WriteTimeout
=
time
.
Duration
(
env
.
WriteTimeout
)
*
time
.
Second
dsn
.
AllowNativePasswords
=
env
.
AllowNativePasswords
dsn
.
AllowOldPasswords
=
env
.
AllowOldPasswords
return
dsn
,
err
}
}
// 解析命令行DSN输入
// 解析命令行DSN输入
func
parseDSN
(
odbc
string
,
d
*
Dsn
)
*
Dsn
{
func
parseDSN
(
odbc
string
,
d
*
Dsn
)
*
Dsn
{
dsn
:=
newDSN
(
nil
)
var
addr
,
user
,
password
,
schema
,
charset
string
var
addr
,
user
,
password
,
schema
,
charset
string
if
odbc
==
FormatDSN
(
d
)
{
if
odbc
==
FormatDSN
(
d
)
{
return
d
return
d
...
@@ -340,30 +409,38 @@ func parseDSN(odbc string, d *Dsn) *Dsn {
...
@@ -340,30 +409,38 @@ func parseDSN(odbc string, d *Dsn) *Dsn {
schema
=
"information_schema"
schema
=
"information_schema"
}
}
// 默认
utf8mb4
使用字符集
// 默认
utf8
使用字符集
if
charset
==
""
{
if
charset
==
""
{
charset
=
"utf8
mb4
"
charset
=
"utf8"
}
}
dsn
:=
&
Dsn
{
dsn
.
Addr
=
addr
Addr
:
addr
,
dsn
.
User
=
user
User
:
user
,
dsn
.
Password
=
password
Password
:
password
,
dsn
.
Schema
=
schema
Schema
:
schema
,
dsn
.
Charset
=
charset
Charset
:
charset
,
Disable
:
false
,
Version
:
999
,
}
return
dsn
return
dsn
}
}
// ParseDSN compatible with old version soar < 0.11.0
func
ParseDSN
(
odbc
string
,
d
*
Dsn
)
*
Dsn
{
cfg
,
err
:=
mysql
.
ParseDSN
(
odbc
)
if
err
!=
nil
{
return
parseDSN
(
odbc
,
d
)
}
return
newDSN
(
cfg
)
}
// FormatDSN 格式化打印DSN
// FormatDSN 格式化打印DSN
func
FormatDSN
(
env
*
Dsn
)
string
{
func
FormatDSN
(
env
*
Dsn
)
string
{
if
env
==
nil
||
env
.
Disable
{
if
env
==
nil
||
env
.
Disable
{
return
""
return
""
}
}
// username:password@ip:port/schema?charset=xxx
dsn
,
err
:=
env
.
newMySQLConifg
()
return
fmt
.
Sprintf
(
"%s:%s@%s/%s?charset=%s"
,
env
.
User
,
env
.
Password
,
env
.
Addr
,
env
.
Schema
,
env
.
Charset
)
if
err
!=
nil
{
return
""
}
return
dsn
.
FormatDSN
()
}
}
// SoarVersion soar version information
// SoarVersion soar version information
...
@@ -485,8 +562,8 @@ func readCmdFlags() error {
...
@@ -485,8 +562,8 @@ func readCmdFlags() error {
_
=
flag
.
String
(
"config"
,
""
,
"Config file path"
)
_
=
flag
.
String
(
"config"
,
""
,
"Config file path"
)
// +++++++++++++++测试环境+++++++++++++++++
// +++++++++++++++测试环境+++++++++++++++++
onlineDSN
:=
flag
.
String
(
"online-dsn"
,
FormatDSN
(
Config
.
OnlineDSN
),
"OnlineDSN, 线上环境数据库配置, username:password@
ip:port
/schema"
)
onlineDSN
:=
flag
.
String
(
"online-dsn"
,
FormatDSN
(
Config
.
OnlineDSN
),
"OnlineDSN, 线上环境数据库配置, username:password@
tcp(ip:port)
/schema"
)
testDSN
:=
flag
.
String
(
"test-dsn"
,
FormatDSN
(
Config
.
TestDSN
),
"TestDSN, 测试环境数据库配置, username:password@
ip:port
/schema"
)
testDSN
:=
flag
.
String
(
"test-dsn"
,
FormatDSN
(
Config
.
TestDSN
),
"TestDSN, 测试环境数据库配置, username:password@
tcp(ip:port)
/schema"
)
allowOnlineAsTest
:=
flag
.
Bool
(
"allow-online-as-test"
,
Config
.
AllowOnlineAsTest
,
"AllowOnlineAsTest, 允许线上环境也可以当作测试环境"
)
allowOnlineAsTest
:=
flag
.
Bool
(
"allow-online-as-test"
,
Config
.
AllowOnlineAsTest
,
"AllowOnlineAsTest, 允许线上环境也可以当作测试环境"
)
dropTestTemporary
:=
flag
.
Bool
(
"drop-test-temporary"
,
Config
.
DropTestTemporary
,
"DropTestTemporary, 是否清理测试环境产生的临时库表"
)
dropTestTemporary
:=
flag
.
Bool
(
"drop-test-temporary"
,
Config
.
DropTestTemporary
,
"DropTestTemporary, 是否清理测试环境产生的临时库表"
)
cleanupTestDatabase
:=
flag
.
Bool
(
"cleanup-test-database"
,
Config
.
CleanupTestDatabase
,
"单次运行清理历史1小时前残余的测试库。"
)
cleanupTestDatabase
:=
flag
.
Bool
(
"cleanup-test-database"
,
Config
.
CleanupTestDatabase
,
"单次运行清理历史1小时前残余的测试库。"
)
...
@@ -569,8 +646,8 @@ func readCmdFlags() error {
...
@@ -569,8 +646,8 @@ func readCmdFlags() error {
}
}
flag
.
Parse
()
flag
.
Parse
()
Config
.
OnlineDSN
=
p
arseDSN
(
*
onlineDSN
,
Config
.
OnlineDSN
)
Config
.
OnlineDSN
=
P
arseDSN
(
*
onlineDSN
,
Config
.
OnlineDSN
)
Config
.
TestDSN
=
p
arseDSN
(
*
testDSN
,
Config
.
TestDSN
)
Config
.
TestDSN
=
P
arseDSN
(
*
testDSN
,
Config
.
TestDSN
)
Config
.
AllowOnlineAsTest
=
*
allowOnlineAsTest
Config
.
AllowOnlineAsTest
=
*
allowOnlineAsTest
Config
.
DropTestTemporary
=
*
dropTestTemporary
Config
.
DropTestTemporary
=
*
dropTestTemporary
Config
.
CleanupTestDatabase
=
*
cleanupTestDatabase
Config
.
CleanupTestDatabase
=
*
cleanupTestDatabase
...
...
common/config_test.go
浏览文件 @
84a67026
...
@@ -63,6 +63,7 @@ func TestReadConfigFile(t *testing.T) {
...
@@ -63,6 +63,7 @@ func TestReadConfigFile(t *testing.T) {
func
TestParseDSN
(
t
*
testing
.
T
)
{
func
TestParseDSN
(
t
*
testing
.
T
)
{
Log
.
Debug
(
"Entering function: %s"
,
GetFunctionName
())
Log
.
Debug
(
"Entering function: %s"
,
GetFunctionName
())
var
dsns
=
[]
string
{
var
dsns
=
[]
string
{
// version < 0.11.0
""
,
""
,
"user:password@hostname:3307/database"
,
"user:password@hostname:3307/database"
,
"user:password@hostname:3307/database?charset=utf8"
,
"user:password@hostname:3307/database?charset=utf8"
,
...
@@ -81,11 +82,24 @@ func TestParseDSN(t *testing.T) {
...
@@ -81,11 +82,24 @@ func TestParseDSN(t *testing.T) {
"@:3307/database"
,
"@:3307/database"
,
":3307/database"
,
":3307/database"
,
"/database"
,
"/database"
,
// go-sql-driver dsn
"user@unix(/path/to/socket)/dbname"
,
"root:pw@unix(/tmp/mysql.sock)/myDatabase?loc=Local"
,
"user:password@tcp(localhost:5555)/dbname?tls=skip-verify&autocommit=true"
,
"user:password@/dbname?sql_mode=TRADITIONAL"
,
"user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname?timeout=90s&collation=utf8mb4_unicode_ci"
,
"id:password@tcp(your-amazonaws-uri.com:3306)/dbname"
,
"user@cloudsql(project-id:instance-name)/dbname"
,
"user@cloudsql(project-id:regionname:instance-name)/dbname"
,
"user:password@tcp/dbname?charset=utf8mb4,utf8&sys_var=esc%40ped"
,
"user:password@/dbname"
,
"user:password@/"
,
}
}
err
:=
GoldenDiff
(
func
()
{
err
:=
GoldenDiff
(
func
()
{
for
_
,
dsn
:=
range
dsns
{
for
_
,
dsn
:=
range
dsns
{
pretty
.
Println
(
parseDSN
(
dsn
,
nil
))
pretty
.
Println
(
dsn
)
pretty
.
Println
(
ParseDSN
(
dsn
,
nil
))
}
}
},
t
.
Name
(),
update
)
},
t
.
Name
(),
update
)
if
nil
!=
err
{
if
nil
!=
err
{
...
...
common/example_test.go
浏览文件 @
84a67026
...
@@ -20,19 +20,18 @@ import "fmt"
...
@@ -20,19 +20,18 @@ import "fmt"
func
ExampleFormatDSN
()
{
func
ExampleFormatDSN
()
{
Log
.
Debug
(
"Entering function: %s"
,
GetFunctionName
())
Log
.
Debug
(
"Entering function: %s"
,
GetFunctionName
())
dsxExp
:=
&
Dsn
{
dsxExp
:=
newDSN
(
nil
)
Addr
:
"127.0.0.1:3306"
,
dsxExp
.
Addr
=
"127.0.0.1:3306"
Schema
:
"mysql"
,
dsxExp
.
Schema
=
"mysql"
User
:
"root"
,
dsxExp
.
User
=
"root"
Password
:
"1t'sB1g3rt"
,
dsxExp
.
Password
=
"1t'sB1g3rt"
Charset
:
"utf8mb4"
,
dsxExp
.
Charset
=
"utf8mb4"
Disable
:
false
,
dsxExp
.
Disable
=
false
}
// 根据 &dsn 生成 dsnStr
// 根据 &dsn 生成 dsnStr
fmt
.
Println
(
FormatDSN
(
dsxExp
))
fmt
.
Println
(
FormatDSN
(
dsxExp
))
// Output: root:1t'sB1g3rt@
127.0.0.1:3306
/mysql?charset=utf8mb4
// Output: root:1t'sB1g3rt@
tcp(127.0.0.1:3306)
/mysql?charset=utf8mb4
Log
.
Debug
(
"Exiting function: %s"
,
GetFunctionName
())
Log
.
Debug
(
"Exiting function: %s"
,
GetFunctionName
())
}
}
...
...
common/testdata/TestParseDSN.golden
浏览文件 @
84a67026
此差异已折叠。
点击以展开。
database/mysql.go
浏览文件 @
84a67026
...
@@ -53,14 +53,7 @@ type QueryResult struct {
...
@@ -53,14 +53,7 @@ type QueryResult struct {
// NewConnector 创建新连接
// NewConnector 创建新连接
func
NewConnector
(
dsn
*
common
.
Dsn
)
(
*
Connector
,
error
)
{
func
NewConnector
(
dsn
*
common
.
Dsn
)
(
*
Connector
,
error
)
{
conn
,
err
:=
sql
.
Open
(
"mysql"
,
fmt
.
Sprintf
(
"%s:%s@%s(%s)/%s?parseTime=true&charset=%s"
,
conn
,
err
:=
sql
.
Open
(
"mysql"
,
common
.
FormatDSN
(
dsn
))
dsn
.
User
,
dsn
.
Password
,
dsn
.
Net
,
dsn
.
Addr
,
dsn
.
Schema
,
dsn
.
Charset
,
))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
env/env.go
浏览文件 @
84a67026
...
@@ -73,7 +73,7 @@ func BuildEnv() (*VirtualEnv, *database.Connector) {
...
@@ -73,7 +73,7 @@ func BuildEnv() (*VirtualEnv, *database.Connector) {
// 连接线上环境
// 连接线上环境
// 如果未配置线上环境线测试环境配置为线上环境
// 如果未配置线上环境线测试环境配置为线上环境
if
common
.
Config
.
OnlineDSN
.
Add
r
==
""
{
if
common
.
Config
.
OnlineDSN
.
Use
r
==
""
{
common
.
Log
.
Warn
(
"BuildEnv AllowOnlineAsTest: OnlineDSN not config, use TestDSN: %s:********@%s/%s as OnlineDSN"
,
common
.
Log
.
Warn
(
"BuildEnv AllowOnlineAsTest: OnlineDSN not config, use TestDSN: %s:********@%s/%s as OnlineDSN"
,
vEnv
.
User
,
vEnv
.
Addr
,
vEnv
.
Database
)
vEnv
.
User
,
vEnv
.
Addr
,
vEnv
.
Database
)
common
.
Config
.
OnlineDSN
=
common
.
Config
.
TestDSN
common
.
Config
.
OnlineDSN
=
common
.
Config
.
TestDSN
...
@@ -235,7 +235,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string
...
@@ -235,7 +235,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string
case
*
sqlparser
.
Use
:
case
*
sqlparser
.
Use
:
// 如果是use语句,则更改基础环配置
// 如果是use语句,则更改基础环配置
if
_
,
ok
:=
meta
[
stmt
.
DBName
.
String
()];
!
ok
{
if
_
,
ok
:=
meta
[
stmt
.
DBName
.
String
()];
!
ok
{
// 如果USE了一个线上环境不存在的数据库,将创建该数据库
,字符集默认utf8mb4
// 如果USE了一个线上环境不存在的数据库,将创建该数据库
meta
[
stmt
.
DBName
.
String
()]
=
common
.
NewDB
(
stmt
.
DBName
.
String
())
meta
[
stmt
.
DBName
.
String
()]
=
common
.
NewDB
(
stmt
.
DBName
.
String
())
rEnv
.
Database
=
stmt
.
DBName
.
String
()
rEnv
.
Database
=
stmt
.
DBName
.
String
()
...
@@ -367,7 +367,7 @@ func (vEnv *VirtualEnv) createDatabase(rEnv *database.Connector) error {
...
@@ -367,7 +367,7 @@ func (vEnv *VirtualEnv) createDatabase(rEnv *database.Connector) error {
ddl
,
err
:=
rEnv
.
ShowCreateDatabase
(
rEnv
.
Database
)
ddl
,
err
:=
rEnv
.
ShowCreateDatabase
(
rEnv
.
Database
)
if
err
!=
nil
{
if
err
!=
nil
{
common
.
Log
.
Warning
(
"createDatabase, rEnv.ShowCreateDatabase Error : %v"
,
err
)
common
.
Log
.
Warning
(
"createDatabase, rEnv.ShowCreateDatabase Error : %v"
,
err
)
ddl
=
fmt
.
Sprintf
(
"create database `%s` character set
utf8mb4"
,
rEnv
.
Database
)
ddl
=
fmt
.
Sprintf
(
"create database `%s` character set
%s"
,
rEnv
.
Database
,
rEnv
.
Charset
)
}
}
ddl
=
strings
.
Replace
(
ddl
,
rEnv
.
Database
,
dbHash
,
-
1
)
ddl
=
strings
.
Replace
(
ddl
,
rEnv
.
Database
,
dbHash
,
-
1
)
...
...
genver.sh
浏览文件 @
84a67026
#!/bin/bash
#!/bin/bash
## Generate Repository Version
## Generate Repository Version
version
=
"
$(
git log
--date
=
iso
--pretty
=
format:
"%cd"
-1
)
$(
git describe
--tags
--always
)
"
tag
=
"
$(
git describe
--tags
--always
)
"
version
=
"
$(
git log
--date
=
iso
--pretty
=
format:
"%cd"
-1
)
${
tag
}
"
if
[
"X
${
version
}
"
==
"X"
]
;
then
if
[
"X
${
version
}
"
==
"X"
]
;
then
version
=
"not a git repo"
version
=
"not a git repo"
tag
=
"not a git repo"
fi
fi
git_dirty
=
$(
git diff
--no-ext-diff
2>/dev/null |
wc
-l
)
git_dirty
=
$(
git diff
--no-ext-diff
2>/dev/null |
wc
-l
)
...
@@ -29,3 +31,5 @@ const (
...
@@ -29,3 +31,5 @@ const (
DevPath = "
${
dev_path
}
"
DevPath = "
${
dev_path
}
"
)
)
EOF
EOF
echo
"
${
tag
}
"
|
awk
-F
'-'
'{print $1}'
>
VERSION
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录