mirror of https://github.com/mvdan/fdroidcl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.0 KiB
111 lines
2.0 KiB
// Copyright (c) 2015, Daniel Martí <mvdan@mvdan.cc> |
|
// See LICENSE for licensing information |
|
|
|
package main |
|
|
|
import ( |
|
"fmt" |
|
"os" |
|
"path/filepath" |
|
"syscall" |
|
) |
|
|
|
var cmdClean = &Command{ |
|
UsageLine: "clean", |
|
Short: "Clean index and/or cache", |
|
Long: ` |
|
Clean index and/or cache. |
|
The index basically contains information about available APKs to download. |
|
The cache is where all downloaded APKs are cached. |
|
|
|
Usage: |
|
|
|
$ fdroidcl clean |
|
$ fdroidcl clean index |
|
$ fdroidcl clean cache |
|
`[1:], |
|
} |
|
|
|
func init() { |
|
cmdClean.Run = runClean |
|
} |
|
|
|
func runClean(args []string) error { |
|
if len(args) > 1 { |
|
return fmt.Errorf("wrong amount of arguments") |
|
} |
|
if len(args) == 1 && (args[0] != "index" && args[0] != "cache") { |
|
return fmt.Errorf("pass either index or cache as parameter, or no parameter at all") |
|
} |
|
if len(args) == 0 || args[0] == "index" { |
|
err := cleanIndex() |
|
if err != nil { |
|
return err |
|
} |
|
} |
|
if len(args) == 0 || args[0] == "cache" { |
|
err := cleanCache() |
|
if err != nil { |
|
return err |
|
} |
|
} |
|
if len(args) == 1 { |
|
fmt.Printf("Cleaned %s.\n", args[0]) |
|
} else { |
|
fmt.Println("Cleaned index and cache.") |
|
} |
|
return nil |
|
} |
|
|
|
func cleanIndex() error { |
|
cachePath := filepath.Join(mustCache(), "cache-gob") |
|
err := removeFile(cachePath) |
|
if err != nil { |
|
return err |
|
} |
|
err = removeGlob(mustData() + "/*.jar") |
|
if err != nil { |
|
return err |
|
} |
|
err = removeGlob(mustData() + "/*.jar-etag") |
|
if err != nil { |
|
return err |
|
} |
|
return nil |
|
} |
|
|
|
func cleanCache() error { |
|
apksDir := subdir(mustCache(), "apks") |
|
err := os.RemoveAll(apksDir) |
|
if err != nil { |
|
return err |
|
} |
|
return nil |
|
} |
|
|
|
func removeFile(path string) error { |
|
err := os.Remove(path) |
|
if err != nil { |
|
e, ok := err.(*os.PathError) |
|
if ok && e.Err == syscall.ENOENT { |
|
// The file didn't exist, ignore |
|
} else { |
|
return err |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
func removeGlob(glob string) error { |
|
matches, err := filepath.Glob(glob) |
|
if err != nil { |
|
return err |
|
} |
|
for _, value := range matches { |
|
err := removeFile(value) |
|
if err != nil { |
|
return err |
|
} |
|
} |
|
return nil |
|
}
|
|
|