1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-29 01:12:24 +08:00

Merge pull request #2581 from RealImage/default-config

Implements repository initialization with default config
This commit is contained in:
Jeromy Johnson
2016-05-05 10:10:59 -07:00
2 changed files with 85 additions and 7 deletions

View File

@ -1,6 +1,7 @@
package main
import (
"encoding/json"
"errors"
"fmt"
"io"
@ -30,7 +31,9 @@ at ~/.ipfs. To change the repo location, set the $IPFS_PATH environment variable
export IPFS_PATH=/path/to/ipfsrepo
`,
},
Arguments: []cmds.Argument{
cmds.FileArg("default-config", false, false, "Initialize with the given configuration.").EnableStdin(),
},
Options: []cmds.Option{
cmds.IntOption("bits", "b", fmt.Sprintf("Number of bits to use in the generated RSA private key (defaults to %d)", nBitsForKeypairDefault)),
cmds.BoolOption("empty-repo", "e", "Don't add and pin help files to the local storage."),
@ -77,7 +80,24 @@ at ~/.ipfs. To change the repo location, set the $IPFS_PATH environment variable
nBitsForKeypair = nBitsForKeypairDefault
}
if err := doInit(os.Stdout, req.InvocContext().ConfigRoot, empty, nBitsForKeypair); err != nil {
var conf *config.Config
f := req.Files()
if f != nil {
confFile, err := f.NextFile()
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
conf = &config.Config{}
if err := json.NewDecoder(confFile).Decode(conf); err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
}
if err := doInit(os.Stdout, req.InvocContext().ConfigRoot, empty, nBitsForKeypair, conf); err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
@ -89,10 +109,10 @@ Reinitializing would overwrite your keys.
`)
func initWithDefaults(out io.Writer, repoRoot string) error {
return doInit(out, repoRoot, false, nBitsForKeypairDefault)
return doInit(out, repoRoot, false, nBitsForKeypairDefault, nil)
}
func doInit(out io.Writer, repoRoot string, empty bool, nBitsForKeypair int) error {
func doInit(out io.Writer, repoRoot string, empty bool, nBitsForKeypair int, conf *config.Config) error {
if _, err := fmt.Fprintf(out, "initializing ipfs node at %s\n", repoRoot); err != nil {
return err
}
@ -105,9 +125,12 @@ func doInit(out io.Writer, repoRoot string, empty bool, nBitsForKeypair int) err
return errRepoExists
}
conf, err := config.Init(out, nBitsForKeypair)
if err != nil {
return err
if conf == nil {
var err error
conf, err = config.Init(out, nBitsForKeypair)
if err != nil {
return err
}
}
if err := fsrepo.Init(repoRoot, conf); err != nil {

View File

@ -0,0 +1,55 @@
#!/bin/sh
#
# Copyright (c) 2014 Christian Couder
# MIT Licensed; see the LICENSE file in this repository.
#
test_description="Test init command with default config"
. lib/test-lib.sh
cfg_key="Addresses.API"
cfg_val="/ip4/0.0.0.0/tcp/5001"
# test that init succeeds
test_expect_success "ipfs init succeeds" '
export IPFS_PATH="$(pwd)/.ipfs" &&
echo "IPFS_PATH: \"$IPFS_PATH\"" &&
BITS="2048" &&
ipfs init --bits="$BITS" >actual_init ||
test_fsh cat actual_init
'
test_expect_success ".ipfs/config has been created" '
test -f "$IPFS_PATH"/config ||
test_fsh ls -al .ipfs
'
test_expect_success "ipfs config succeeds" '
ipfs config $cfg_flags "$cfg_key" "$cfg_val"
'
test_expect_success "ipfs read config succeeds" '
IPFS_DEFAULT_CONFIG=$(cat "$IPFS_PATH"/config)
'
test_expect_success "clean up ipfs dir" '
rm -rf "$IPFS_PATH"
'
test_expect_success "ipfs init default config succeeds" '
echo $IPFS_DEFAULT_CONFIG | ipfs init >actual_init ||
test_fsh cat actual_init
'
test_expect_success "ipfs config output looks good" '
echo "$cfg_val" >expected &&
ipfs config "$cfg_key" >actual &&
test_cmp expected actual
'
test_launch_ipfs_daemon
test_kill_ipfs_daemon
test_done