Commit 01f9ef3c authored by Juan Batiz-Benet's avatar Juan Batiz-Benet

added fuseversion for osxfuse

parent 05a0a944
......@@ -108,6 +108,10 @@
"ImportPath": "github.com/jbenet/go-datastore",
"Rev": "6a1c83bda2a71a9bdc936749fdb507df958ed949"
},
{
"ImportPath": "github.com/jbenet/go-fuse-version",
"Rev": "ff72c39433f95ada15f116fa493a51eeec2bd52e"
},
{
"ImportPath": "github.com/jbenet/go-is-domain",
"Rev": "93b717f2ae17838a265e30277275ee99ee7198d6"
......
# go-fuse-version
Simple package to get the user's FUSE libraries information.
- Godoc: https://godoc.org/github.com/jbenet/go-fuse-version
**Warning** Currently only supports OSXFUSE. if you want more, add them, it's really trivial now.
## Example
```Go
package main
import (
"fmt"
"os"
fuseversion "github.com/jbenet/go-fuse-version"
)
func main() {
sys, err := fuseversion.LocalFuseSystems()
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
fmt.Printf("FuseVersion, AgentVersion, Agent\n")
for _, s := range *sys {
fmt.Printf("%s, %s, %s\n", s.FuseVersion, s.AgentVersion, s.AgentName)
}
}
```
## fuseprint
If you dont use Go, you can also install the example as the silly util fuseprint:
```
> go get github.com/jbenet/go-fuse-version/fuseprint
> go install github.com/jbenet/go-fuse-version/fuseprint
> fuseprint
FuseVersion, AgentVersion, Agent
27, 2.7.2, OSXFUSE
```
package main
import (
"fmt"
"os"
fuseversion "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-fuse-version"
)
func main() {
sys, err := fuseversion.LocalFuseSystems()
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
fmt.Printf("FuseVersion, AgentVersion, Agent\n")
for _, s := range *sys {
fmt.Printf("%s, %s, %s\n", s.FuseVersion, s.AgentVersion, s.AgentName)
}
}
// package fuseversion simply exposes the version of FUSE installed
// in the user's machine. For reasoning, see:
// - https://github.com/jbenet/go-ipfs/issues/177
// - https://github.com/jbenet/go-ipfs/issues/202
// - https://github.com/osxfuse/osxfuse/issues/175#issuecomment-61888505
package fuseversion
type Systems map[string]FuseSystem
type FuseSystem struct {
// FuseVersion is the version of the FUSE protocol
FuseVersion string
// AgentName identifies the system implementing FUSE, or Agent
AgentName string
// AgentVersion is the version of the Agent program
// (it fights for the user! Sometimes it fights the user...)
AgentVersion string
}
// LocalFuseSystems returns a map of FuseSystems, keyed by name.
// For example:
//
// systems := fuseversion.LocalFuseSystems()
// for n, sys := range systems {
// fmt.Printf("%s, %s, %s", n, sys.FuseVersion, sys.AgentVersion)
// }
// // Outputs:
// // OSXFUSE, , 2.7.2
//
func LocalFuseSystems() (*Systems, error) {
return getLocalFuseSystems() // implemented by each platform
}
var notImplYet = `Error: not implemented for %s yet. :(
Please do it: https://github.com/jbenet/go-fuse-version`
// +build dragonfly freebsd netbsd openbsd
package fuseversion
import (
"runtime"
)
func getLocalFuseSystems() (*Systems, error) {
return nil, fmt.Sprintf(notImplYet, runtime.GOARCH())
}
package fuseversion
// #cgo CFLAGS: -I /usr/local/include/osxfuse/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=25
// #cgo LDFLAGS: /usr/local/lib/libosxfuse.dylib
//
// #include <fuse/fuse.h>
// #include <fuse/fuse_common.h>
// #include <fuse/fuse_darwin.h>
import "C"
import "fmt"
func getLocalFuseSystems() (*Systems, error) {
sys := Systems{}
sys["OSXFUSE"] = getOSXFUSE()
return &sys, nil
}
func getOSXFUSE() FuseSystem {
return FuseSystem{
FuseVersion: fmt.Sprintf("%d", int(C.fuse_version())),
AgentName: "OSXFUSE",
AgentVersion: C.GoString(C.osxfuse_version()),
}
}
package fuseversion
import (
"runtime"
)
func getLocalFuseSystems() (*Systems, error) {
return nil, fmt.Sprintf(notImplYet, runtime.GOARCH())
}
package fuseversion
import (
"runtime"
)
func getLocalFuseSystems() (*Systems, error) {
return nil, fmt.Sprintf(notImplYet, runtime.GOARCH())
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment