Skip to content

Commit 412e5a9

Browse files
committed
feat(cli): support both long and shorthand flags, set output directory manually
Closes: #18
1 parent d8d68fa commit 412e5a9

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

go.sum

-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
1919
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
2020
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
2121
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
22-
github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=
2322
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
2423
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
2524
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
@@ -36,7 +35,6 @@ github.com/spencercw/go-xz v0.0.0-20181128201811-c82a2123b492 h1:8J9q7E8tGpVB84c
3635
github.com/spencercw/go-xz v0.0.0-20181128201811-c82a2123b492/go.mod h1:EvRrgz1GcjNV5yfN+ISxA4sxn255MimeGQ/ROJnQPtQ=
3736
github.com/vbauerster/mpb/v5 v5.3.0 h1:vgrEJjUzHaSZKDRRxul5Oh4C72Yy/5VEMb0em+9M0mQ=
3837
github.com/vbauerster/mpb/v5 v5.3.0/go.mod h1:4yTkvAb8Cm4eylAp6t0JRq6pXDkFJ4krUlDqWYkakAs=
39-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
4038
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
4139
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
4240
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

main.go

+31-8
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,21 @@ func extractPayloadBin(filename string) string {
4848
func main() {
4949
runtime.GOMAXPROCS(runtime.NumCPU())
5050

51-
list := flag.Bool("l", false, "Show list of partitions in payload.bin")
52-
partitions := flag.String("p", "", "Dump only selected partitions")
51+
var (
52+
list bool
53+
partitions string
54+
outputDirectory string
55+
concurrency int
56+
)
57+
58+
flag.BoolVar(&list, "list", false, "Show list of partitions in payload.bin")
59+
flag.BoolVar(&list, "l", false, "Show list of partitions in payload.bin (shorthand)")
60+
flag.StringVar(&partitions, "partitions", "", "Dump only selected partitions (comma-separated)")
61+
flag.StringVar(&partitions, "p", "", "Dump only selected partitions (comma-separated) (shorthand)")
62+
flag.StringVar(&outputDirectory, "output", "", "Set output directory")
63+
flag.StringVar(&outputDirectory, "o", "", "Set output directory (shorthand)")
64+
flag.IntVar(&concurrency, "concurrency", 4, "Number of multiple workers to extract")
65+
flag.IntVar(&concurrency, "c", 4, "Number of multiple workers to extract (shorthand)")
5366
flag.Parse()
5467

5568
if flag.NArg() == 0 {
@@ -79,17 +92,27 @@ func main() {
7992
}
8093
payload.Init()
8194

82-
if *list {
95+
if list {
8396
return
8497
}
8598

8699
now := time.Now()
87-
targetDirectory := fmt.Sprintf("extracted_%d%02d%02d_%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
88-
if err := os.Mkdir(targetDirectory, 0755); err != nil {
89-
log.Fatal("Failed to create target directory")
100+
101+
var targetDirectory = outputDirectory
102+
if targetDirectory == "" {
103+
targetDirectory = fmt.Sprintf("extracted_%d%02d%02d_%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
104+
}
105+
if _, err := os.Stat(targetDirectory); os.IsNotExist(err) {
106+
if err := os.Mkdir(targetDirectory, 0755); err != nil {
107+
log.Fatal("Failed to create target directory")
108+
}
90109
}
91-
if *partitions != "" {
92-
if err := payload.ExtractSelected(targetDirectory, strings.Split(*partitions, ",")); err != nil {
110+
111+
payload.SetConcurrency(concurrency)
112+
fmt.Printf("Number of workers: %d\n", payload.GetConcurrency())
113+
114+
if partitions != "" {
115+
if err := payload.ExtractSelected(targetDirectory, strings.Split(partitions, ",")); err != nil {
93116
log.Fatal(err)
94117
}
95118
} else {

0 commit comments

Comments
 (0)