-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdump.go
More file actions
120 lines (109 loc) · 3.51 KB
/
dump.go
File metadata and controls
120 lines (109 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//go:build test
// Run this effdump like this:
//
// go run -tags=test github.com/ypsu/pkgtrim
package main
import (
"bytes"
"context"
"flag"
"fmt"
"io/fs"
"os"
"path/filepath"
"strings"
_ "embed"
"github.com/ypsu/effdump"
"github.com/ypsu/textar"
)
func dump(ctx context.Context) error {
d := effdump.New("pkgtrim")
d.RegisterFlags(flag.CommandLine)
flagFS := flag.String("fs", "", "Override testdata to this textar filesystem.")
flag.Parse()
var rootfs fs.FS
var testfile string
add := func(name string, args ...string) {
w := &bytes.Buffer{}
err := Pkgtrim(w, rootfs, args)
result := make([]textar.File, 2)
result[0] = textar.File{"pkgtrim " + strings.Join(args, " "), w.Bytes()}
if err == nil {
result[1].Name = "result: success"
} else {
result[1].Name = "result: fail"
result[1].Data = []byte(err.Error() + "\n")
}
archive := textar.Archive{Files: result}
d.Add(testfile+"/"+name, archive.Format())
}
wd = "/home/user"
var testfiles []string
if *flagFS == "" {
testfiles, _ = filepath.Glob("testdata/*.textar")
} else {
testfiles = strings.Split(*flagFS, ",")
}
for _, filename := range testfiles {
data, err := os.ReadFile(filename)
if err != nil {
return err
}
testfile = strings.TrimSuffix(filepath.Base(filename), ".textar")
rootfs = textar.Parse(data).FS()
add("noargs")
add("packages", "-dump_packages")
if testfile == "archsmall" {
add("help", "-help")
add("badflag", "-blah")
add("badflagorder", "glibc", "-dump_packages")
add("cfgbadarg", "-f=nonexistent_pkgtrim", "-dump_config")
add("cfgbroken", "-f=broken_pkgtrim", "-dump_config")
add("cfgparse", "-f=tricky_pkgtrim", "-dump_config")
add("clean", "-f=all_pkgtrim")
add("graph0", "-graph")
add("graph1", "-graph", "fancylib")
add("graph2", "-graph", "fancylib", "otherapp")
add("graph3", "-graph", "nonexistent")
add("trace1", "-trace", "fancyapp", "glibc")
add("trace2", "-trace", "triouser", "triobase")
add("trim1", "fancyapp")
add("trim2", "glibc")
add("trim3", "fancyapp", "glibc")
add("trim4", "fancyapp", "glibc", "nonexistent")
add("multiaction1", "-install", "-remove")
add("multiaction2", "-install", "-trace")
add("multiaction3", "-remove", "-trace")
add("install", "-install", "-dryrun", "-f=tricky_pkgtrim")
add("filteredpackages", "-dump_packages", "fancylib", "otherapp")
add("removeall", "-remove", "-dryrun")
add("remove", "-remove", "-dryrun", "fancylib")
add("removewithcfg1", "-remove", "-dryrun", "-f=tricky_pkgtrim")
add("removewithcfg2", "-remove", "-dryrun", "-f=tricky_pkgtrim", "fancyapp")
add("removewithcfg3", "-remove", "-dryrun", "-f=tricky_pkgtrim", "fancyapp", "otherapp")
}
if testfile == "archlarge" {
add("removeall", "-remove", "-dryrun")
add("remove", "-remove", "-dryrun", "-f=pkgtrim.config")
add("remove1", "-remove", "-dryrun", "-f=pkgtrim.config", "clang")
add("trimmed", "-f=pkgtrim.config")
add("trimmed2", "-f=pkgtrim.config", "gmp")
add("trim1", "clang")
add("trim2", "-f=pkgtrim.config", "odin") // should not have clang as a unique dependency because clang is in .pkgtrim
add("tracebad0", "-trace")
add("tracebad1", "-trace", "gmp")
add("tracebad2", "-trace", "gmp", "gdb")
add("tracebad3", "-trace", "gdb", "gmp", "gmp")
add("tracebadpkg", "-trace", "gdb", "gxx")
add("traceok", "-trace", "gdb", "gmp")
}
}
d.Run(ctx)
return nil
}
func main() {
if err := dump(context.Background()); err != nil {
fmt.Fprintf(os.Stderr, "Error: %v.", err)
os.Exit(1)
}
}