From e615d7a5d790e073db9abb4c359fce9f45bba7a3 Mon Sep 17 00:00:00 2001 From: sgf Date: Wed, 22 Jun 2022 00:17:35 +0300 Subject: [PATCH] Save samovar, v5. --- samovar.go | 189 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 124 insertions(+), 65 deletions(-) diff --git a/samovar.go b/samovar.go index 98ac486..6c7baf3 100644 --- a/samovar.go +++ b/samovar.go @@ -22,36 +22,61 @@ type renFile struct { var renamedFiles []renFile var yetToCopyFiles []renFile -// Create directories and copy files, which don't need editing. -func copyToLower(p0 string, d fs.DirEntry, err error) error { - if err != nil { return err } +var editFileExts = map[string]bool { + ".html": true, + ".htm": true, + ".asp": true, + ".css": true, + ".dwt": true, + } - log.Println("Path: ", p0) +func convertFileName(p0 string, newExt string) (string, error) { rel0, err := filepath.Rel(rootPath, p0) - if err != nil { return err } + if err != nil { return "", err } rel1 := strings.ToLower(rel0) //rel1 := rel0 - p1 := filepath.Join(newRootPath, rel1) - log.Println("New name ", p1) - inf0, err := d.Info() - if err != nil { return err } - if rel0 != rel1 { renamedFiles = append(renamedFiles, renFile{oldName: p0, newName: p1}) } - log.Println(inf0.Mode()) ext1 := filepath.Ext(p1) - log.Println(ext1) + if newExt != "" && ext1 != newExt { + log.Printf("Replacing extension from %q to %q\n", ext1, newExt) + x := p1 + p1 = strings.TrimSuffix(p1, ext1) + newExt + renamedFiles = append(renamedFiles, renFile{oldName: x, newName: p1}) + } + log.Printf("Convert %q to %q\n", p0, p1) + return p1, nil +} + +// Create directories and copy files, which don't need editing. +func copyFiles(p0 string, d fs.DirEntry, err error) error { + if err != nil { return err } + log.Println("Path: ", p0) + + var p1 string + if strings.ToLower(filepath.Ext(p0)) == ".asp" { + p1, err = convertFileName(p0, ".htm") + } else { + p1, err = convertFileName(p0, "") + } + if err != nil { return err } + //rel1 := rel0 + + ext1 := filepath.Ext(p1) + inf0, err := d.Info() + if err != nil { return err } + if d.IsDir() { log.Printf("Creating dir %v\n", p1) err = os.Mkdir(p1, inf0.Mode()) if err != nil && !errors.Is(err, fs.ErrExist) { return err } - } else if ext1 != ".html" && ext1 != ".htm" && ext1 != ".asp" && ext1 != ".css" { + } else if !editFileExts[ext1] { log.Printf("Copying file %v\n", p1) h0, err := os.Open(p0) if err != nil { return err } @@ -68,16 +93,97 @@ func copyToLower(p0 string, d fs.DirEntry, err error) error { //yetToCopyFiles = append(yetToCopyFiles, renFile{oldName: p0, newName: filepath.Join(newRootPath, rel0)}) } return nil +} - /* - err = os.Rename(p0, filepath.Join(newRootPath, relL)) - if err != nil { return err }*/ +func fixRenamedPathes(s0 string) string { + s1 := s0 + + //log.Printf("Started with %q\n", s0) + for _, v := range renamedFiles { + x := strings.SplitAfter(v.oldName, "/") + //log.Printf("Split old name: %q\n", x) + y := strings.SplitAfter(v.newName, "/") + //log.Printf("Split new name: %q\n", y) + + if len(x) > 2 { x = x[len(x)-2:] } + //log.Printf("Work on old name: %q\n", x) + if len(y) > 2 { y = y[len(y)-2:] } + //log.Printf("Work on new name: %q\n", y) + for i, j := 0, 0; i < len(x) && j < len(y); i, j = i+1, j+1 { + s1 = strings.ReplaceAll(s1, x[i], y[j]) + if s0 != s1 { + //log.Printf("Replaced at %q, %q, %q\n", x[i], y[j], s1) + } + } + } + return s1 } -func rewritePathes(p0 string, _ fs.DirEntry, err error) error { - return nil +func main() { + /* + h0, err := os.Open("int.go") + if err != nil { panic("huynya") } + defer h0.Close() + + h1, err := os.OpenFile("2.tmp", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { panic("huynya") } + defer h1.Close() + + v := LineByLine{input: h0} + for { + l, err := v.ReadLine() + if err == io.EOF { break } + fmt.Printf("Received %q\n", l) + h1.Write(l) + } + */ + + var err error + + /* + renamedFiles = []renFile{ {"ABC", "abc"}, {"ABC/DEF", "abc/def"}, {"ABC/DEF/HUY.TXT", "abc/def/huy.txt"}, {"ABC/DEF/GHI/NYA.TXT", "abc/def/ghi/nya.txt"}} + res := fixRenamedPathes("file=NYA.TXT") + fmt.Printf("Result: %q\n", res) + + return*/ + _, ok := editFileExts[".html"] + fmt.Println(ok) + err = filepath.WalkDir(rootPath, copyFiles) + if err != nil { + fmt.Println(err) + fmt.Println("huynya bro") + } + //fmt.Printf("%#v", yetToCopyFiles) + for _, fn := range yetToCopyFiles { + log.Printf("Rewriting %q\n", fn.newName) + h0, err := os.Open(fn.oldName) + if err != nil { log.Fatal(err) } + defer h0.Close() + + h1, err := os.OpenFile(fn.newName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { log.Fatal(err) } + defer h1.Close() + + s := bufio.NewScanner(h0) + for s.Scan() { + //log.Printf("Scanner read %q\n", s.Text()) + //l := strings.ReplaceAll(s.Text(), "main", "NYAAA") + "\n" + l := s.Text() + if l == "<%@ language=JavaScript %>" { continue } + l = fixRenamedPathes(l) + "\n" + //l = l + "\n" + h1.Write([]byte(l)) + } + } } + + + + + + + type LineByLine struct { input io.Reader buf []byte @@ -134,50 +240,3 @@ func (r *LineByLine) ReadLine() (line []byte, err error) { } } -func main() { - /* - h0, err := os.Open("int.go") - if err != nil { panic("huynya") } - defer h0.Close() - - h1, err := os.OpenFile("2.tmp", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { panic("huynya") } - defer h1.Close() - - v := LineByLine{input: h0} - for { - l, err := v.ReadLine() - if err == io.EOF { break } - fmt.Printf("Received %q\n", l) - h1.Write(l) - } - */ - - var err error - - err = filepath.WalkDir(rootPath, copyToLower) - if err != nil { - fmt.Println(err) - fmt.Println("huynya bro") - } - fmt.Printf("%#v", yetToCopyFiles) - for _, fn := range yetToCopyFiles { - h0, err := os.Open(fn.oldName) - if err != nil { log.Fatal(err) } - defer h0.Close() - - h1, err := os.OpenFile(fn.newName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { log.Fatal(err) } - defer h1.Close() - - s := bufio.NewScanner(h0) - for s.Scan() { - //log.Printf("Scanner read %q\n", s.Text()) - //l := strings.ReplaceAll(s.Text(), "main", "NYAAA") + "\n" - l := s.Text() - if l == "<%@ language=JavaScript %>" { continue } - l = l + "\n" - h1.Write([]byte(l)) - } - } -} -- 2.20.1