diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index ada8c7bd1..f72ac9e6a 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -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" diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/README.md b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/README.md new file mode 100644 index 000000000..e03afc0c7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/README.md @@ -0,0 +1,45 @@ +# 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 +``` diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/.gitignore b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/.gitignore new file mode 100644 index 000000000..4778de0e4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/.gitignore @@ -0,0 +1 @@ +fuseprint diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/README.md b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/README.md new file mode 120000 index 000000000..32d46ee88 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/index.go b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/index.go new file mode 100644 index 000000000..8e4e04aa6 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/index.go @@ -0,0 +1,21 @@ +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) + } +} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version.go b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version.go new file mode 100644 index 000000000..b46bd7db4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version.go @@ -0,0 +1,37 @@ +// 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` diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_bsd.go b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_bsd.go new file mode 100644 index 000000000..a1d2460c8 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_bsd.go @@ -0,0 +1,11 @@ +// +build dragonfly freebsd netbsd openbsd + +package fuseversion + +import ( + "runtime" +) + +func getLocalFuseSystems() (*Systems, error) { + return nil, fmt.Sprintf(notImplYet, runtime.GOARCH()) +} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_darwin.go b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_darwin.go new file mode 100644 index 000000000..84325578b --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_darwin.go @@ -0,0 +1,24 @@ +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 +// #include +// #include +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()), + } +} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_linux.go b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_linux.go new file mode 100644 index 000000000..e4944d1c0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_linux.go @@ -0,0 +1,9 @@ +package fuseversion + +import ( + "runtime" +) + +func getLocalFuseSystems() (*Systems, error) { + return nil, fmt.Sprintf(notImplYet, runtime.GOARCH()) +} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_windows.go b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_windows.go new file mode 100644 index 000000000..e4944d1c0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_windows.go @@ -0,0 +1,9 @@ +package fuseversion + +import ( + "runtime" +) + +func getLocalFuseSystems() (*Systems, error) { + return nil, fmt.Sprintf(notImplYet, runtime.GOARCH()) +}