Revert "Cacheable, multithreaded finder."
This reverts commit b6d161bf16
.
Reason for revert: New Build Breakage: aosp-master/sdk_mac @ 4260825
Change-Id: I8bda8c50c5e5c9f84621d11a4c15b168833bcd21
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//
|
||||
// fast, parallel, caching implementation of `find`
|
||||
//
|
||||
|
||||
subdirs = [
|
||||
"cmd"
|
||||
]
|
||||
|
||||
bootstrap_go_package {
|
||||
name: "soong-finder",
|
||||
pkgPath: "android/soong/finder",
|
||||
srcs: [
|
||||
"finder.go",
|
||||
],
|
||||
testSrcs: [
|
||||
"finder_test.go",
|
||||
],
|
||||
deps: [
|
||||
"soong-fs",
|
||||
],
|
||||
}
|
||||
|
||||
|
@@ -1,29 +0,0 @@
|
||||
// Copyright 2017 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//
|
||||
// fast, parallel, caching implementation of `find`
|
||||
//
|
||||
|
||||
blueprint_go_binary {
|
||||
name: "finder",
|
||||
srcs: [
|
||||
"finder.go",
|
||||
],
|
||||
deps: [
|
||||
"soong-finder"
|
||||
],
|
||||
}
|
||||
|
||||
|
@@ -1,149 +0,0 @@
|
||||
// Copyright 2017 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"runtime/pprof"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"android/soong/finder"
|
||||
"android/soong/fs"
|
||||
)
|
||||
|
||||
var (
|
||||
// configuration of what to find
|
||||
excludeDirs string
|
||||
filenamesToFind string
|
||||
pruneFiles string
|
||||
|
||||
// other configuration
|
||||
cpuprofile string
|
||||
verbose bool
|
||||
dbPath string
|
||||
numIterations int
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&cpuprofile, "cpuprofile", "",
|
||||
"filepath of profile file to write (optional)")
|
||||
flag.BoolVar(&verbose, "v", false, "log additional information")
|
||||
flag.StringVar(&dbPath, "db", "", "filepath of cache db")
|
||||
|
||||
flag.StringVar(&excludeDirs, "exclude-dirs", "",
|
||||
"comma-separated list of directory names to exclude from search")
|
||||
flag.StringVar(&filenamesToFind, "names", "",
|
||||
"comma-separated list of filenames to find")
|
||||
flag.StringVar(&pruneFiles, "prune-files", "",
|
||||
"filenames that if discovered will exclude their entire directory "+
|
||||
"(including sibling files and directories)")
|
||||
flag.IntVar(&numIterations, "count", 1,
|
||||
"number of times to run. This is intended for use with --cpuprofile"+
|
||||
" , to increase profile accuracy")
|
||||
}
|
||||
|
||||
var usage = func() {
|
||||
fmt.Printf("usage: finder -name <fileName> --db <dbPath> <searchDirectory> [<searchDirectory>...]\n")
|
||||
flag.PrintDefaults()
|
||||
}
|
||||
|
||||
func main() {
|
||||
err := run()
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func stringToList(input string) []string {
|
||||
return strings.Split(input, ",")
|
||||
}
|
||||
|
||||
func run() error {
|
||||
startTime := time.Now()
|
||||
flag.Parse()
|
||||
|
||||
if cpuprofile != "" {
|
||||
f, err := os.Create(cpuprofile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error opening cpuprofile: %s", err)
|
||||
}
|
||||
pprof.StartCPUProfile(f)
|
||||
defer f.Close()
|
||||
defer pprof.StopCPUProfile()
|
||||
}
|
||||
|
||||
var writer io.Writer
|
||||
if verbose {
|
||||
writer = os.Stderr
|
||||
} else {
|
||||
writer = ioutil.Discard
|
||||
}
|
||||
|
||||
// TODO: replace Lshortfile with Llongfile when bug 63821638 is done
|
||||
logger := log.New(writer, "", log.Ldate|log.Lmicroseconds|log.Lshortfile)
|
||||
|
||||
logger.Printf("Finder starting at %v\n", startTime)
|
||||
|
||||
rootPaths := flag.Args()
|
||||
if len(rootPaths) < 1 {
|
||||
usage()
|
||||
return fmt.Errorf(
|
||||
"Must give at least one <searchDirectory>")
|
||||
}
|
||||
|
||||
workingDir, err := os.Getwd()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
params := finder.CacheParams{
|
||||
WorkingDirectory: workingDir,
|
||||
RootDirs: rootPaths,
|
||||
ExcludeDirs: stringToList(excludeDirs),
|
||||
PruneFiles: stringToList(pruneFiles),
|
||||
IncludeFiles: stringToList(filenamesToFind),
|
||||
}
|
||||
if dbPath == "" {
|
||||
usage()
|
||||
return errors.New("Param 'db' must be nonempty")
|
||||
}
|
||||
matches := []string{}
|
||||
for i := 0; i < numIterations; i++ {
|
||||
matches = runFind(params, logger)
|
||||
}
|
||||
findDuration := time.Since(startTime)
|
||||
logger.Printf("Found these %v inodes in %v :\n", len(matches), findDuration)
|
||||
sort.Strings(matches)
|
||||
for _, match := range matches {
|
||||
fmt.Println(match)
|
||||
}
|
||||
logger.Printf("End of %v inodes\n", len(matches))
|
||||
logger.Printf("Finder completed in %v\n", time.Since(startTime))
|
||||
return nil
|
||||
}
|
||||
|
||||
func runFind(params finder.CacheParams, logger *log.Logger) (paths []string) {
|
||||
service := finder.New(params, fs.OsFs, logger, dbPath)
|
||||
defer service.Shutdown()
|
||||
return service.FindAll()
|
||||
}
|
1399
finder/finder.go
1399
finder/finder.go
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user