diff --git a/plab/filelist.go b/plab/filelist.go new file mode 100644 index 0000000000000000000000000000000000000000..1aef405d960c112e0d7607b6ee43da64a4a81b07 --- /dev/null +++ b/plab/filelist.go @@ -0,0 +1,125 @@ +package main + +import ( + "fmt" + "git.sch.bme.hu/insert-epic-projlab-team-name-here/tooling/plab/helpers" + "io/fs" + "io/ioutil" + "os/exec" + "path/filepath" + "strconv" + "strings" + "time" + "unicode" +) + +type fileinfo struct { + name string + size string + date string + notes string +} + +var Filelist = helpers.Subcommand{ + Name: "filelist", + Command: func(args []string) { + if len(args) != 2 { + fmt.Println("usage: <dirname> <filelist>") + return + } + + list := readFile(args[1]) + list_map := mapizator(list) + files := getData(args[0], list_map) + genLatex(files) + }, + Help: "generate file list", // TODO +} + +func readFile(filename string) []string { + b, e := ioutil.ReadFile(filename) + if e != nil { + panic(e) + } + str := string(b) + return strings.Split(str, "\n") +} + +func mapizator(list []string) map[string]string { + list_map := make(map[string]string) + + for _, v := range list { + elements := strings.Split(v, "=") + list_map[elements[0]] = elements[1] + } + return list_map +} + +func getCreateTime(filepath string) string { + b, e := exec.Command("git", "log", "--format=%ai", filepath).Output() + if e != nil { + b = make([]byte, 0) + } + + str := string(b) + lines := strings.Split(str, "\n") + str = lines[len(lines)-1] + + if strings.Contains(str, "") { + str = time.Now().Format("2006-01-02 15:04:05") + } + + return str +} + +func latexizeName(name string) string { + cop := "" + for i, ch := range name { + if i != 0 && unicode.IsUpper(ch) { + cop += `\-` + } + cop += string(ch) + } + return cop +} + +func getData(dirname string, list map[string]string) []fileinfo { + var files []fileinfo + + e := filepath.Walk(dirname, func(path string, info fs.FileInfo, err error) error { + if err != nil { + return err + } + + if data, ok := list[info.Name()]; ok { + file := fileinfo{ + name: latexizeName(info.Name()), + size: strconv.FormatInt(info.Size(), 10) + " byte", + date: getCreateTime(path + info.Name()), + notes: data, + } + files = append(files, file) + } + + return nil + }) + + if e != nil { + panic(e) + } + + return files +} + +func genLatex(files []fileinfo) { + fmt.Println("\\newcolumntype{P}[1]{>{\\hspace{0pt}}p{#1}}") // TODO: rm % if needed + fmt.Println("\\noindent\\begin{xltabular}{\\textwidth}{|l|l|X|X|}") + fmt.Println("\\hline Fájlnév & Méret & Keletkezés ideje & Tartalom \\\\ \\hline \\hline \\endhead") + + for _, file := range files { + fmt.Printf("%s & %s & %s & %s \\\\ \\hline\n", file.name, file.size, file.date, file.notes) + } + + fmt.Println("\\end{xltabular}") + +} diff --git a/plab/main.go b/plab/main.go index 5d3a70836da3d8459400440d986a8ed4b87ca29d..f0413e1a1cabb1a36e676c305a33e5c4f9e2f78f 100644 --- a/plab/main.go +++ b/plab/main.go @@ -7,7 +7,7 @@ import ( ) func main() { - mainCmds := helpers.CmdFrom(os.Args[0], "go projlab tool", Timetable, Javadoc, Classdiag, Check, tests.TestsToLatex) + mainCmds := helpers.CmdFrom(os.Args[0], "go projlab tool", Timetable, Javadoc, Classdiag, Check, Filelist, tests.TestsToLatex) if len(os.Args) < 2 { os.Args = append(os.Args, "help") }