mirror of
https://github.com/ipfs/kubo.git
synced 2025-07-03 13:00:37 +08:00
cmds: nicer error on no mountpoint
This commit is contained in:
@ -4,10 +4,11 @@ package commands
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
cmds "github.com/jbenet/go-ipfs/commands"
|
cmds "github.com/jbenet/go-ipfs/commands"
|
||||||
"github.com/jbenet/go-ipfs/config"
|
config "github.com/jbenet/go-ipfs/config"
|
||||||
core "github.com/jbenet/go-ipfs/core"
|
core "github.com/jbenet/go-ipfs/core"
|
||||||
ipns "github.com/jbenet/go-ipfs/fuse/ipns"
|
ipns "github.com/jbenet/go-ipfs/fuse/ipns"
|
||||||
rofs "github.com/jbenet/go-ipfs/fuse/readonly"
|
rofs "github.com/jbenet/go-ipfs/fuse/readonly"
|
||||||
@ -17,6 +18,9 @@ import (
|
|||||||
// TODO is this non-deterministic?
|
// TODO is this non-deterministic?
|
||||||
const mountTimeout = time.Second
|
const mountTimeout = time.Second
|
||||||
|
|
||||||
|
// fuseNoDirectory used to check the returning fuse error
|
||||||
|
const fuseNoDirectory = "fusermount: failed to access mountpoint"
|
||||||
|
|
||||||
var mountCmd = &cmds.Command{
|
var mountCmd = &cmds.Command{
|
||||||
Helptext: cmds.HelpText{
|
Helptext: cmds.HelpText{
|
||||||
Tagline: "Mounts IPFS to the filesystem (read-only)",
|
Tagline: "Mounts IPFS to the filesystem (read-only)",
|
||||||
@ -25,7 +29,7 @@ Mount ipfs at a read-only mountpoint on the OS (default: /ipfs and /ipns).
|
|||||||
All ipfs objects will be accessible under that directory. Note that the
|
All ipfs objects will be accessible under that directory. Note that the
|
||||||
root will not be listable, as it is virtual. Access known paths directly.
|
root will not be listable, as it is virtual. Access known paths directly.
|
||||||
|
|
||||||
You may kave to create /ipfs and /ipfs before using 'ipfs mount':
|
You may have to create /ipfs and /ipfs before using 'ipfs mount':
|
||||||
|
|
||||||
> sudo mkdir /ipfs /ipns
|
> sudo mkdir /ipfs /ipns
|
||||||
> sudo chown ` + "`" + `whoami` + "`" + ` /ipfs /ipns
|
> sudo chown ` + "`" + `whoami` + "`" + ` /ipfs /ipns
|
||||||
@ -36,6 +40,8 @@ Mount ipfs at a read-only mountpoint on the OS (default: /ipfs and /ipns).
|
|||||||
All ipfs objects will be accessible under that directory. Note that the
|
All ipfs objects will be accessible under that directory. Note that the
|
||||||
root will not be listable, as it is virtual. Access known paths directly.
|
root will not be listable, as it is virtual. Access known paths directly.
|
||||||
|
|
||||||
|
You may have to create /ipfs and /ipfs before using 'ipfs mount':
|
||||||
|
|
||||||
> sudo mkdir /ipfs /ipns
|
> sudo mkdir /ipfs /ipns
|
||||||
> sudo chown ` + "`" + `whoami` + "`" + ` /ipfs /ipns
|
> sudo chown ` + "`" + `whoami` + "`" + ` /ipfs /ipns
|
||||||
> ipfs mount
|
> ipfs mount
|
||||||
@ -117,12 +123,22 @@ baz
|
|||||||
|
|
||||||
nsdone := mountIpns(node, nsdir, fsdir)
|
nsdone := mountIpns(node, nsdir, fsdir)
|
||||||
|
|
||||||
|
fmtFuseErr := func(err error) error {
|
||||||
|
s := err.Error()
|
||||||
|
if strings.Contains(s, fuseNoDirectory) {
|
||||||
|
s = strings.Replace(s, `fusermount: "fusermount:`, "", -1)
|
||||||
|
s = strings.Replace(s, `\n", exit status 1`, "", -1)
|
||||||
|
return cmds.ClientError(s)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// wait until mounts return an error (or timeout if successful)
|
// wait until mounts return an error (or timeout if successful)
|
||||||
select {
|
select {
|
||||||
case err := <-fsdone:
|
case err := <-fsdone:
|
||||||
return nil, err
|
return nil, fmtFuseErr(err)
|
||||||
case err := <-nsdone:
|
case err := <-nsdone:
|
||||||
return nil, err
|
return nil, fmtFuseErr(err)
|
||||||
|
|
||||||
// mounted successfully, we timed out with no errors
|
// mounted successfully, we timed out with no errors
|
||||||
case <-time.After(mountTimeout):
|
case <-time.After(mountTimeout):
|
||||||
|
Reference in New Issue
Block a user