1
0
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:
Juan Batiz-Benet
2014-11-14 03:09:26 -08:00
parent fa8fc1aefc
commit f30161b063

View File

@ -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):