Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
6da5b2fc
Commit
6da5b2fc
authored
Apr 09, 2015
by
Bas van Kervel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reformat code with goimports
parent
5304f430
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
94 additions
and
94 deletions
+94
-94
customflags.go
cmd/utils/customflags.go
+76
-76
customflags_test.go
cmd/utils/customflags_test.go
+17
-17
flags.go
cmd/utils/flags.go
+1
-1
No files found.
cmd/utils/customflags.go
View file @
6da5b2fc
package
utils
import
(
"path/filepath"
"os"
"strings"
"os/user"
"github.com/codegangsta/cli"
"flag"
"fmt"
"flag"
"fmt"
"os"
"os/user"
"path/filepath"
"strings"
"github.com/codegangsta/cli"
)
// Custom type which is registered in the flags library which cli uses for
// argument parsing. This allows us to expand Value to an absolute path when
// the argument is parsed
type
DirectoryString
struct
{
Value
string
Value
string
}
func
(
self
DirectoryString
)
String
()
string
{
return
self
.
Value
return
self
.
Value
}
func
(
self
DirectoryString
)
Set
(
value
string
)
error
{
self
.
Value
=
expandPath
(
value
)
return
nil
self
.
Value
=
expandPath
(
value
)
return
nil
}
// Custom cli.Flag type which expand the received string to an absolute path.
// e.g. ~/.ethereum -> /home/username/.ethereum
type
DirectoryFlag
struct
{
cli
.
GenericFlag
Name
string
Value
DirectoryString
Usage
string
EnvVar
string
cli
.
GenericFlag
Name
string
Value
DirectoryString
Usage
string
EnvVar
string
}
func
(
self
DirectoryFlag
)
String
()
string
{
var
fmtString
string
fmtString
=
"%s %v
\t
%v"
var
fmtString
string
fmtString
=
"%s %v
\t
%v"
if
len
(
self
.
Value
.
Value
)
>
0
{
fmtString
=
"%s
\"
%v
\"\t
%v"
}
else
{
fmtString
=
"%s %v
\t
%v"
}
if
len
(
self
.
Value
.
Value
)
>
0
{
fmtString
=
"%s
\"
%v
\"\t
%v"
}
else
{
fmtString
=
"%s %v
\t
%v"
}
return
withEnvHint
(
self
.
EnvVar
,
fmt
.
Sprintf
(
fmtString
,
prefixedNames
(
self
.
Name
),
self
.
Value
.
Value
,
self
.
Usage
))
return
withEnvHint
(
self
.
EnvVar
,
fmt
.
Sprintf
(
fmtString
,
prefixedNames
(
self
.
Name
),
self
.
Value
.
Value
,
self
.
Usage
))
}
func
eachName
(
longName
string
,
fn
func
(
string
))
{
parts
:=
strings
.
Split
(
longName
,
","
)
for
_
,
name
:=
range
parts
{
name
=
strings
.
Trim
(
name
,
" "
)
fn
(
name
)
}
parts
:=
strings
.
Split
(
longName
,
","
)
for
_
,
name
:=
range
parts
{
name
=
strings
.
Trim
(
name
,
" "
)
fn
(
name
)
}
}
// called by cli library, grabs variable from environment (if in env)
// and adds variable to flag set for parsing.
func
(
self
DirectoryFlag
)
Apply
(
set
*
flag
.
FlagSet
)
{
if
self
.
EnvVar
!=
""
{
for
_
,
envVar
:=
range
strings
.
Split
(
self
.
EnvVar
,
","
)
{
envVar
=
strings
.
TrimSpace
(
envVar
)
if
envVal
:=
os
.
Getenv
(
envVar
);
envVal
!=
""
{
self
.
Value
.
Value
=
envVal
break
}
}
}
eachName
(
self
.
Name
,
func
(
name
string
)
{
set
.
Var
(
self
.
Value
,
self
.
Name
,
"a: "
+
self
.
Usage
)
})
if
self
.
EnvVar
!=
""
{
for
_
,
envVar
:=
range
strings
.
Split
(
self
.
EnvVar
,
","
)
{
envVar
=
strings
.
TrimSpace
(
envVar
)
if
envVal
:=
os
.
Getenv
(
envVar
);
envVal
!=
""
{
self
.
Value
.
Value
=
envVal
break
}
}
}
eachName
(
self
.
Name
,
func
(
name
string
)
{
set
.
Var
(
self
.
Value
,
self
.
Name
,
"a: "
+
self
.
Usage
)
})
}
func
prefixFor
(
name
string
)
(
prefix
string
)
{
if
len
(
name
)
==
1
{
prefix
=
"-"
}
else
{
prefix
=
"--"
}
if
len
(
name
)
==
1
{
prefix
=
"-"
}
else
{
prefix
=
"--"
}
return
return
}
func
prefixedNames
(
fullName
string
)
(
prefixed
string
)
{
parts
:=
strings
.
Split
(
fullName
,
","
)
for
i
,
name
:=
range
parts
{
name
=
strings
.
Trim
(
name
,
" "
)
prefixed
+=
prefixFor
(
name
)
+
name
if
i
<
len
(
parts
)
-
1
{
prefixed
+=
", "
}
}
return
parts
:=
strings
.
Split
(
fullName
,
","
)
for
i
,
name
:=
range
parts
{
name
=
strings
.
Trim
(
name
,
" "
)
prefixed
+=
prefixFor
(
name
)
+
name
if
i
<
len
(
parts
)
-
1
{
prefixed
+=
", "
}
}
return
}
func
withEnvHint
(
envVar
,
str
string
)
string
{
envText
:=
""
if
envVar
!=
""
{
envText
=
fmt
.
Sprintf
(
" [$%s]"
,
strings
.
Join
(
strings
.
Split
(
envVar
,
","
),
", $"
))
}
return
str
+
envText
envText
:=
""
if
envVar
!=
""
{
envText
=
fmt
.
Sprintf
(
" [$%s]"
,
strings
.
Join
(
strings
.
Split
(
envVar
,
","
),
", $"
))
}
return
str
+
envText
}
func
(
self
DirectoryFlag
)
getName
()
string
{
return
self
.
Name
return
self
.
Name
}
func
(
self
*
DirectoryFlag
)
Set
(
value
string
)
{
self
.
Value
.
Value
=
value
self
.
Value
.
Value
=
value
}
// Expands a file path
...
...
@@ -118,16 +121,13 @@ func (self *DirectoryFlag) Set(value string) {
// 3. cleans the path, e.g. /a/b/../c -> /a/c
// Note, it has limitations, e.g. ~someuser/tmp will not be expanded
func
expandPath
(
p
string
)
string
{
if
strings
.
HasPrefix
(
p
,
"~/"
)
||
strings
.
HasPrefix
(
p
,
"~
\\
"
)
{
if
user
,
err
:=
user
.
Current
();
err
==
nil
{
if
err
==
nil
{
p
=
strings
.
Replace
(
p
,
"~"
,
user
.
HomeDir
,
1
)
}
}
}
return
filepath
.
Clean
(
os
.
ExpandEnv
(
p
))
if
strings
.
HasPrefix
(
p
,
"~/"
)
||
strings
.
HasPrefix
(
p
,
"~
\\
"
)
{
if
user
,
err
:=
user
.
Current
();
err
==
nil
{
if
err
==
nil
{
p
=
strings
.
Replace
(
p
,
"~"
,
user
.
HomeDir
,
1
)
}
}
}
return
filepath
.
Clean
(
os
.
ExpandEnv
(
p
))
}
cmd/utils/customflags_test.go
View file @
6da5b2fc
package
utils
import
(
"testing
"
"os
"
"os/user
"
"os
"
"os/user
"
"testing
"
)
func
TestPathExpansion
(
t
*
testing
.
T
)
{
user
,
_
:=
user
.
Current
()
user
,
_
:=
user
.
Current
()
tests
:=
map
[
string
]
string
{
"/home/someuser/tmp"
:
"/home/someuser/tmp"
,
"~/tmp"
:
user
.
HomeDir
+
"/tmp"
,
"$DDDXXX/a/b"
:
"/tmp/a/b"
,
"/a/b/"
:
"/a/b"
,
}
tests
:=
map
[
string
]
string
{
"/home/someuser/tmp"
:
"/home/someuser/tmp"
,
"~/tmp"
:
user
.
HomeDir
+
"/tmp"
,
"$DDDXXX/a/b"
:
"/tmp/a/b"
,
"/a/b/"
:
"/a/b"
,
}
os
.
Setenv
(
"DDDXXX"
,
"/tmp"
)
os
.
Setenv
(
"DDDXXX"
,
"/tmp"
)
for
test
,
expected
:=
range
tests
{
got
:=
expandPath
(
test
)
if
got
!=
expected
{
t
.
Errorf
(
"test %s, got %s, expected %s
\n
"
,
test
,
got
,
expected
)
}
}
for
test
,
expected
:=
range
tests
{
got
:=
expandPath
(
test
)
if
got
!=
expected
{
t
.
Errorf
(
"test %s, got %s, expected %s
\n
"
,
test
,
got
,
expected
)
}
}
}
cmd/utils/flags.go
View file @
6da5b2fc
...
...
@@ -69,7 +69,7 @@ func NewApp(version, usage string) *cli.App {
var
(
// General settings
DataDirFlag
=
DirectoryFlag
{
Name
:
"datadir"
,
Name
:
"datadir"
,
Usage
:
"Data directory to be used"
,
Value
:
DirectoryString
{
common
.
DefaultDataDir
()},
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment