func main() { // Scans the arg list and sets up flags debug := flag.Bool("debug", false, "print debugging messages.") latencies := flag.Bool("latencies", false, "record operation latencies.") flag.Parse() if flag.NArg() < 2 { fmt.Fprintf(os.Stderr, "usage: %s MOUNTPOINT ZIP-FILE\n", os.Args[0]) os.Exit(2) } var fs fuse.NodeFileSystem fs, err := zipfs.NewArchiveFileSystem(flag.Arg(1)) if err != nil { fmt.Fprintf(os.Stderr, "NewArchiveFileSystem failed: %v\n", err) os.Exit(1) } state, _, err := fuse.MountNodeFileSystem(flag.Arg(0), fs, nil) if err != nil { fmt.Printf("Mount fail: %v\n", err) os.Exit(1) } state.SetRecordStatistics(*latencies) state.Debug = *debug state.Loop() }
func NewUnionFsFromRoots(roots []string, opts *UnionFsOptions, roCaching bool) (*UnionFs, os.Error) { fses := make([]fuse.FileSystem, 0) for i, r := range roots { var fs fuse.FileSystem fi, err := os.Stat(r) if err != nil { return nil, err } if fi.IsDirectory() { fs = fuse.NewLoopbackFileSystem(r) } if fs == nil { fs, err = zipfs.NewArchiveFileSystem(r) } if fs == nil { return nil, err } if i > 0 && roCaching { fs = NewCachingFileSystem(fs, 0) } fses = append(fses, fs) } return NewUnionFs(fses, *opts), nil }
func NewUnionFsFromRoots(roots []string, opts *UnionFsOptions) (*UnionFs, os.Error) { fses := make([]fuse.FileSystem, 0) for _, r := range roots { var fs fuse.FileSystem fi, err := os.Stat(r) if err != nil { return nil, err } if fi.IsDirectory() { fs = fuse.NewLoopbackFileSystem(r) } if fs == nil { fs, err = zipfs.NewArchiveFileSystem(r) } if fs == nil { return nil, err } fses = append(fses, fs) } identifier := fmt.Sprintf("%v", roots) return NewUnionFs(identifier, fses, *opts), nil }
func main() { // Scans the arg list and sets up flags debug := flag.Bool("debug", false, "print debugging messages.") profile := flag.String("profile", "", "record cpu profile.") mem_profile := flag.String("mem-profile", "", "record memory profile.") command := flag.String("run", "", "run this command after mounting.") ttl := flag.Float64("ttl", 1.0, "attribute/entry cache TTL.") flag.Parse() if flag.NArg() < 2 { fmt.Fprintf(os.Stderr, "usage: %s MOUNTPOINT ZIP-FILE\n", os.Args[0]) os.Exit(2) } var profFile, memProfFile io.Writer var err error if *profile != "" { profFile, err = os.Create(*profile) if err != nil { log.Fatalf("os.Create: %v", err) } } if *mem_profile != "" { memProfFile, err = os.Create(*mem_profile) if err != nil { log.Fatalf("os.Create: %v", err) } } root, err := zipfs.NewArchiveFileSystem(flag.Arg(1)) if err != nil { fmt.Fprintf(os.Stderr, "NewArchiveFileSystem failed: %v\n", err) os.Exit(1) } opts := &nodefs.Options{ AttrTimeout: time.Duration(*ttl * float64(time.Second)), EntryTimeout: time.Duration(*ttl * float64(time.Second)), Debug: *debug, } state, _, err := nodefs.MountRoot(flag.Arg(0), root, opts) if err != nil { fmt.Printf("Mount fail: %v\n", err) os.Exit(1) } runtime.GC() if profFile != nil { pprof.StartCPUProfile(profFile) defer pprof.StopCPUProfile() } if *command != "" { args := strings.Split(*command, " ") cmd := exec.Command(args[0], args[1:]...) cmd.Stdout = os.Stdout cmd.Start() } state.Serve() if memProfFile != nil { pprof.WriteHeapProfile(memProfFile) } }