Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-unixfs
Commits
f223aef4
Commit
f223aef4
authored
Sep 29, 2014
by
Juan Batiz-Benet
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #126 from mildred/master
Rework config file location
parents
68f1a1a2
832d84ef
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
90 additions
and
41 deletions
+90
-41
cmd/ipfs/config.go
cmd/ipfs/config.go
+6
-2
cmd/ipfs/init.go
cmd/ipfs/init.go
+26
-16
cmd/ipfs/ipfs.go
cmd/ipfs/ipfs.go
+16
-4
config/config.go
config/config.go
+42
-19
No files found.
cmd/ipfs/config.go
View file @
f223aef4
...
...
@@ -44,8 +44,12 @@ func init() {
func
configCmd
(
c
*
commander
.
Command
,
inp
[]
string
)
error
{
// todo: implement --config filename flag.
filename
,
err
:=
config
.
Filename
(
""
)
confdir
,
err
:=
getConfigDir
(
c
.
Parent
)
if
err
!=
nil
{
return
err
}
filename
,
err
:=
config
.
Filename
(
confdir
)
if
err
!=
nil
{
return
err
}
...
...
cmd/ipfs/init.go
View file @
f223aef4
...
...
@@ -2,6 +2,7 @@ package main
import
(
"encoding/base64"
"path/filepath"
"errors"
"os"
...
...
@@ -29,6 +30,7 @@ func init() {
cmdIpfsInit
.
Flag
.
Int
(
"b"
,
4096
,
"number of bits for keypair"
)
cmdIpfsInit
.
Flag
.
String
(
"p"
,
""
,
"passphrase for encrypting keys"
)
cmdIpfsInit
.
Flag
.
Bool
(
"f"
,
false
,
"force overwrite of existing config"
)
cmdIpfsInit
.
Flag
.
String
(
"d"
,
""
,
"Change default datastore location"
)
}
func
initCmd
(
c
*
commander
.
Command
,
inp
[]
string
)
error
{
...
...
@@ -36,19 +38,18 @@ func initCmd(c *commander.Command, inp []string) error {
if
err
!=
nil
{
return
err
}
if
configpath
==
""
{
configpath
,
err
=
u
.
TildeExpansion
(
"~/.go-ipfs"
)
if
err
!=
nil
{
return
err
}
}
u
.
POut
(
"initializing ipfs node at %s
\n
"
,
configpath
)
filename
,
err
:=
config
.
Filename
(
configpath
+
"/config"
)
filename
,
err
:=
config
.
Filename
(
configpath
)
if
err
!=
nil
{
return
errors
.
New
(
"Couldn't get home directory path"
)
}
dspath
,
ok
:=
c
.
Flag
.
Lookup
(
"d"
)
.
Value
.
Get
()
.
(
string
)
if
!
ok
{
return
errors
.
New
(
"failed to parse datastore flag"
)
}
fi
,
err
:=
os
.
Lstat
(
filename
)
force
,
ok
:=
c
.
Flag
.
Lookup
(
"f"
)
.
Value
.
Get
()
.
(
bool
)
if
!
ok
{
...
...
@@ -62,13 +63,27 @@ func initCmd(c *commander.Command, inp []string) error {
cfg
:=
new
(
config
.
Config
)
cfg
.
Datastore
=
config
.
Datastore
{}
dspath
,
err
:=
u
.
TildeExpansion
(
"~/.go-ipfs/datastore"
)
if
err
!=
nil
{
return
err
if
len
(
dspath
)
==
0
{
dspath
,
err
=
config
.
DataStorePath
(
""
)
if
err
!=
nil
{
return
err
}
}
cfg
.
Datastore
.
Path
=
dspath
cfg
.
Datastore
.
Type
=
"leveldb"
// Construct the data store if missing
if
err
:=
os
.
MkdirAll
(
dspath
,
os
.
ModePerm
);
err
!=
nil
{
return
err
}
// Check the directory is writeable
if
f
,
err
:=
os
.
Create
(
filepath
.
Join
(
dspath
,
"._check_writeable"
));
err
==
nil
{
os
.
Remove
(
f
.
Name
())
}
else
{
return
errors
.
New
(
"Datastore '"
+
dspath
+
"' is not writeable"
)
}
cfg
.
Identity
=
config
.
Identity
{}
// setup the node addresses.
...
...
@@ -114,12 +129,7 @@ func initCmd(c *commander.Command, inp []string) error {
},
}
path
,
err
:=
u
.
TildeExpansion
(
config
.
DefaultConfigFilePath
)
if
err
!=
nil
{
return
err
}
err
=
config
.
WriteConfigFile
(
path
,
cfg
)
err
=
config
.
WriteConfigFile
(
filename
,
cfg
)
if
err
!=
nil
{
return
err
}
...
...
cmd/ipfs/ipfs.go
View file @
f223aef4
...
...
@@ -53,7 +53,11 @@ Use "ipfs help <command>" for more information about a command.
}
func
init
()
{
CmdIpfs
.
Flag
.
String
(
"c"
,
config
.
DefaultPathRoot
,
"specify config directory"
)
config
,
err
:=
config
.
PathRoot
()
if
err
!=
nil
{
config
=
""
}
CmdIpfs
.
Flag
.
String
(
"c"
,
config
,
"specify config directory"
)
}
func
ipfsCmd
(
c
*
commander
.
Command
,
args
[]
string
)
error
{
...
...
@@ -74,7 +78,12 @@ func main() {
}
func
localNode
(
confdir
string
,
online
bool
)
(
*
core
.
IpfsNode
,
error
)
{
cfg
,
err
:=
config
.
Load
(
confdir
+
"/config"
)
filename
,
err
:=
config
.
Filename
(
confdir
)
if
err
!=
nil
{
return
nil
,
err
}
cfg
,
err
:=
config
.
Load
(
filename
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -83,16 +92,19 @@ func localNode(confdir string, online bool) (*core.IpfsNode, error) {
}
// Gets the config "-c" flag from the command, or returns
// the
empty string
// the
default configuration root directory
func
getConfigDir
(
c
*
commander
.
Command
)
(
string
,
error
)
{
conf
:=
c
.
Flag
.
Lookup
(
"c"
)
.
Value
.
Get
()
if
conf
==
nil
{
return
""
,
nil
return
config
.
PathRoot
()
}
confStr
,
ok
:=
conf
.
(
string
)
if
!
ok
{
return
""
,
errors
.
New
(
"failed to retrieve config flag value."
)
}
if
len
(
confStr
)
==
0
{
return
config
.
PathRoot
()
}
return
u
.
TildeExpansion
(
confStr
)
}
config/config.go
View file @
f223aef4
...
...
@@ -6,6 +6,7 @@ import (
"encoding/base64"
"errors"
"os"
"path/filepath"
u
"github.com/jbenet/go-ipfs/util"
)
...
...
@@ -42,11 +43,48 @@ type Config struct {
Bootstrap
[]
*
BootstrapPeer
// local nodes's bootstrap peers
}
// DefaultPathRoot is the default parth for the IPFS node's root dir.
const
DefaultPathRoot
=
"~/.go-ipfs"
const
DefaultConfigFile
=
"config"
const
DefaultDataStoreDirectory
=
"datastore"
const
EnvDir
=
"IPFS_DIR"
// PathRoot returns the default configuration root directory
func
PathRoot
()
(
string
,
error
)
{
dir
:=
os
.
Getenv
(
EnvDir
)
var
err
error
if
len
(
dir
)
==
0
{
dir
,
err
=
u
.
TildeExpansion
(
DefaultPathRoot
)
}
return
dir
,
err
}
// Path returns the path `extension` relative to the configuration root. If an
// empty string is provided for `configroot`, the default root is used.
func
Path
(
configroot
,
extension
string
)
(
string
,
error
)
{
if
len
(
configroot
)
==
0
{
dir
,
err
:=
PathRoot
()
if
err
!=
nil
{
return
""
,
err
}
else
{
return
filepath
.
Join
(
dir
,
extension
),
nil
}
}
else
{
return
filepath
.
Join
(
configroot
,
extension
),
nil
}
}
// DataStorePath returns the default data store path given a configuration root
// (set an empty string to have the default configuration root)
func
DataStorePath
(
configroot
string
)
(
string
,
error
)
{
return
Path
(
configroot
,
DefaultDataStoreDirectory
);
}
// DefaultConfigFilePath points to the ipfs node config file.
const
DefaultConfigFilePath
=
DefaultPathRoot
+
"/config"
// Filename returns the configuration file path given a configuration root
// directory. If the configuration root directory is empty, use the default one
func
Filename
(
configroot
string
)
(
string
,
error
)
{
return
Path
(
configroot
,
DefaultConfigFile
);
}
// DecodePrivateKey is a helper to decode the users PrivateKey
func
(
i
*
Identity
)
DecodePrivateKey
(
passphrase
string
)
(
crypto
.
PrivateKey
,
error
)
{
...
...
@@ -60,30 +98,15 @@ func (i *Identity) DecodePrivateKey(passphrase string) (crypto.PrivateKey, error
return
x509
.
ParsePKCS1PrivateKey
(
pkb
)
}
// Filename returns the proper tilde expanded config filename.
func
Filename
(
filename
string
)
(
string
,
error
)
{
if
len
(
filename
)
==
0
{
filename
=
DefaultConfigFilePath
}
// tilde expansion on config file
return
u
.
TildeExpansion
(
filename
)
}
// Load reads given file and returns the read config, or error.
func
Load
(
filename
string
)
(
*
Config
,
error
)
{
filename
,
err
:=
Filename
(
filename
)
if
err
!=
nil
{
return
nil
,
err
}
// if nothing is there, fail. User must run 'ipfs init'
if
_
,
err
:=
os
.
Stat
(
filename
);
os
.
IsNotExist
(
err
)
{
return
nil
,
errors
.
New
(
"ipfs not initialized, please run 'ipfs init'"
)
}
var
cfg
Config
err
=
ReadConfigFile
(
filename
,
&
cfg
)
err
:
=
ReadConfigFile
(
filename
,
&
cfg
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
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