FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
CovenantSQL/utils/exec.go at develop · sourcecreative/CovenantSQL · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
sourcecreative
/
CovenantSQL
Public
forked from
CovenantSQL/CovenantSQL
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
CovenantSQL
/
utils
/
exec.go
Copy path
More file actions
More file actions
Latest commit
History
History
History
106 lines (93 loc) · 2.66 KB
Breadcrumbs
CovenantSQL
/
utils
/
exec.go
Copy path
File metadata and controls
106 lines (93 loc) · 2.66 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
* Copyright 2018 The CovenantSQL Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
utils
import
(
"io"
"os"
"os/exec"
"path/filepath"
"runtime"
"github.com/CovenantSQL/CovenantSQL/utils/log"
)
// FJ is short for filepath.Join.
var
FJ
=
filepath
.
Join
// CMD is the struct holding exec.Cmd and log path.
type
CMD
struct
{
Cmd
*
exec.
Cmd
LogPath
string
LogFD
*
os.
File
}
// GetProjectSrcDir gets the src code root.
func
GetProjectSrcDir
()
string
{
_
,
testFile
,
_
,
_
:=
runtime
.
Caller
(
0
)
return
FJ
(
filepath
.
Dir
(
testFile
),
"../"
)
}
// RunCommand runs a command and capture its output to a log file,
// if toStd is true also output to stdout and stderr.
func
RunCommand
(
bin
string
,
args
[]
string
,
processName
string
,
workingDir
string
,
logDir
string
,
toStd
bool
) (
err
error
) {
cmd
,
err
:=
RunCommandNB
(
bin
,
args
,
processName
,
workingDir
,
logDir
,
toStd
)
if
err
!=
nil
{
log
.
WithFields
(log.
Fields
{
"bin"
:
bin
,
"args"
:
args
,
"process"
:
processName
,
}).
WithError
(
err
).
Error
(
"start command failed"
)
return
}
defer
func
() {
_
=
cmd
.
LogFD
.
Close
()
}()
err
=
cmd
.
Cmd
.
Wait
()
if
err
!=
nil
{
log
.
WithFields
(log.
Fields
{
"path"
:
cmd
.
Cmd
.
Path
,
"args"
:
cmd
.
Cmd
.
Args
,
}).
WithError
(
err
).
Error
(
"wait command failed"
)
return
}
return
}
// RunCommandNB starts a non-blocking command.
func
RunCommandNB
(
bin
string
,
args
[]
string
,
processName
string
,
workingDir
string
,
logDir
string
,
toStd
bool
) (
cmd
*
CMD
,
err
error
) {
cmd
=
new
(
CMD
)
err
=
os
.
Chdir
(
workingDir
)
if
err
!=
nil
{
log
.
WithField
(
"wd"
,
workingDir
).
Error
(
"change working dir failed"
)
return
}
cmd
.
LogPath
=
FJ
(
logDir
,
processName
+
".log"
)
cmd
.
LogFD
,
err
=
os
.
Create
(
cmd
.
LogPath
)
if
err
!=
nil
{
log
.
WithField
(
"path"
,
cmd
.
LogPath
).
WithError
(
err
).
Error
(
"create log file failed"
)
return
}
cmd
.
Cmd
=
exec
.
Command
(
bin
,
args
...
)
if
toStd
{
cmd
.
Cmd
.
Stdout
=
io
.
MultiWriter
(
os
.
Stdout
,
cmd
.
LogFD
)
cmd
.
Cmd
.
Stderr
=
io
.
MultiWriter
(
os
.
Stderr
,
cmd
.
LogFD
)
}
else
{
cmd
.
Cmd
.
Stdout
=
cmd
.
LogFD
cmd
.
Cmd
.
Stderr
=
cmd
.
LogFD
}
err
=
cmd
.
Cmd
.
Start
()
if
err
!=
nil
{
log
.
WithError
(
err
).
Error
(
"cmd.Start() failed"
)
_
=
cmd
.
LogFD
.
Close
()
cmd
=
nil
return
}
return
}
Back
|
FazBrowse Home
|
New Git URL