first commit
This commit is contained in:
commit
79415a4819
69
MissingModules.txt
Normal file
69
MissingModules.txt
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
LGAEER13A0.IMZ
|
||||||
|
M10S11AUS.SWM
|
||||||
|
M10S11AUS2.SWM
|
||||||
|
THAXJUSX.CRC
|
||||||
|
THAXJUSX.INI
|
||||||
|
THAXJUSX.LIT
|
||||||
|
THAXJUSX.001
|
||||||
|
THAXJUSX.002
|
||||||
|
THAXJUSX.003
|
||||||
|
THAXJUSX.004
|
||||||
|
THAXJUSX.005
|
||||||
|
THAXJUSX.006
|
||||||
|
THAXJUSX.007
|
||||||
|
THAXJUSX.008
|
||||||
|
THAXJUSX.009
|
||||||
|
THAXJUSX.010
|
||||||
|
THAXJUSX.011
|
||||||
|
THAXJUSX.012
|
||||||
|
THAXJUSX.013
|
||||||
|
THAXJUSX.014
|
||||||
|
THAXJUSX.015
|
||||||
|
THAXJUSX.016
|
||||||
|
THAXJUSX.017
|
||||||
|
THAXJUSX.018
|
||||||
|
THAXJUSX.019
|
||||||
|
THAXJUSX.020
|
||||||
|
THAXJUSX.021
|
||||||
|
THAXJUSX.022
|
||||||
|
THAXJUSX.023
|
||||||
|
THAXJUSX.024
|
||||||
|
THAXJUSX.025
|
||||||
|
THAXJUSX.026
|
||||||
|
THAXJUSX.027
|
||||||
|
THAXJUSX.028
|
||||||
|
THAXJUSX.029
|
||||||
|
THAXJUSX.030
|
||||||
|
THAXJUSX.031
|
||||||
|
THAXJUSX.032
|
||||||
|
THAXJUSX.033
|
||||||
|
THAXJUSX.034
|
||||||
|
THAXJUSX.035
|
||||||
|
THAXJUSX.036
|
||||||
|
THAXJUSX.037
|
||||||
|
THAXJUSX.038
|
||||||
|
THAXJUSX.039
|
||||||
|
THAXJUSX.040
|
||||||
|
THAXJUSX.041
|
||||||
|
THAXJUSX.042
|
||||||
|
THAXJUSX.043
|
||||||
|
THAXJUSX.044
|
||||||
|
THAXJUSX.045
|
||||||
|
THAXJUSX.046
|
||||||
|
THAXJUSX.047
|
||||||
|
THAXJUSX.048
|
||||||
|
THAXJUSX.049
|
||||||
|
THAXJUSX.050
|
||||||
|
THAXJUSX.051
|
||||||
|
THAXJUSX.052
|
||||||
|
THAXJUSX.053
|
||||||
|
THAXJUSX.054
|
||||||
|
THAXJUSX.055
|
||||||
|
THAXJUSX.056
|
||||||
|
THAXJUSX.057
|
||||||
|
THAXJUSX.058
|
||||||
|
THAXJUSX.059
|
||||||
|
THAXJUSX.060
|
||||||
|
THAXJUSX.061
|
||||||
|
THAXJUSX.062
|
||||||
|
THAXJUSX.063
|
3184
NeedlessModules.txt
Normal file
3184
NeedlessModules.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
SummaryModulesByAOD.exe
Normal file
BIN
SummaryModulesByAOD.exe
Normal file
Binary file not shown.
247
SummaryModulesByAOD.go
Normal file
247
SummaryModulesByAOD.go
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"flag"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FileInfo struct {
|
||||||
|
FileName string
|
||||||
|
FilePath string
|
||||||
|
FileSize int64
|
||||||
|
//ModTime string
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
dbg bool = false
|
||||||
|
aodType string = ""
|
||||||
|
aodPath string = ""
|
||||||
|
modPath string = ""
|
||||||
|
aodInfoList []FileInfo
|
||||||
|
moduleInfoList []FileInfo
|
||||||
|
criList = make([]string, 0)
|
||||||
|
moduleList = make([]string, 0)
|
||||||
|
distinctCriList = make([]string, 0)
|
||||||
|
distinctModuleList = make([]string, 0)
|
||||||
|
needlessModuleList = make([]string, 0)
|
||||||
|
missingModuleList = make([]string, 0)
|
||||||
|
errAOD = make([]string, 0)
|
||||||
|
errCRI = make([]string, 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
var regFilter = `.*`
|
||||||
|
var regLNB = `(?i)\S{10,}\.[0-9]{3}`
|
||||||
|
var regTNB = `(?i)SSW\S{7}\.SSW\S{7}`
|
||||||
|
var regSBID = `(?i)\S{8,}\.DAT`
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
flag.BoolVar(&dbg, "v", false, "Show Verbose Debug Messages")
|
||||||
|
flag.StringVar(&aodPath, "a", `D:\MfgTest\PRELOAD\AOD`, "Path Of AODs")
|
||||||
|
flag.StringVar(&modPath, "m", `D:\Common`, "Path Of Modules")
|
||||||
|
flag.StringVar(&aodType, "t", "*", "Type Of AODs, LNB/TNB/SBID/*")
|
||||||
|
flag.Parse()
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
_, err := os.Stat(aodPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Path Of AODs Not Exists.\r\n")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
_, err = os.Stat(modPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Path Of Modules Not Exists.\r\n")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("[MSG] Summary Loacal AODs ...\r\n")
|
||||||
|
aodInfoList, err = _SummaryFiles(aodPath, aodType)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Get AOD List Failed: %s\r\n", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
log.Printf("[MSG] Total Local AODs: %d\r\n", len(aodInfoList))
|
||||||
|
|
||||||
|
log.Printf("[MSG] Summary Local Modules ...\r\n")
|
||||||
|
moduleInfoList, err = _SummaryFiles(modPath, "*")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Get Module List Failed: %s\r\n", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
log.Printf("[MSG] Total Local Modules: %d\r\n", len(moduleInfoList))
|
||||||
|
|
||||||
|
regCRI, err := regexp.Compile(`(?i).*File=(.{1,}.CRI)`)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] RegExp - CRI Compile Error: %s\r\n", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
log.Printf("[MSG] Summary CRIs From AODs ...\r\n")
|
||||||
|
for _, aod := range aodInfoList {
|
||||||
|
rdr, err := os.Open(aod.FilePath)
|
||||||
|
if err != nil {
|
||||||
|
errAOD = append(errAOD, aod.FilePath)
|
||||||
|
}
|
||||||
|
buf := bufio.NewScanner(rdr)
|
||||||
|
for buf.Scan() {
|
||||||
|
if buf.Err() != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
rst := regCRI.FindStringSubmatch(buf.Text())
|
||||||
|
if len(rst) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
criList = append(criList, strings.TrimSpace(rst[1]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Printf("[MSG] Total CRIs From AODs: %d\r\n", len(criList))
|
||||||
|
distinctCriList = _RemoveDuplicateElementOfSlice(criList)
|
||||||
|
log.Printf("[MSG] Distinct CRIs From AODs: %d\r\n", len(distinctCriList))
|
||||||
|
|
||||||
|
regModuleName, err := regexp.Compile(`(?i)(ModuleName[0-9]{0,}|ModuleThis[0-9]{0,})=(.{1,})`)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] RegExp - ModuleName Compile Error: %s\r\n", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
log.Printf("[MSG] Summary Modules From CRIs ...\r\n")
|
||||||
|
for _, cri := range distinctCriList {
|
||||||
|
rdr, err := os.Open(modPath + "\\" + cri)
|
||||||
|
if err != nil {
|
||||||
|
errCRI = append(errCRI, modPath+"\\"+cri)
|
||||||
|
}
|
||||||
|
buf := bufio.NewScanner(rdr)
|
||||||
|
for buf.Scan() {
|
||||||
|
if buf.Err() != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
rst := regModuleName.FindStringSubmatch(buf.Text())
|
||||||
|
if len(rst) != 3 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
moduleList = append(moduleList, strings.TrimSpace(rst[2]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Printf("[MSG] Total Modules From CRIs: %d\r\n", len(moduleList))
|
||||||
|
distinctModuleList = _RemoveDuplicateElementOfSlice(moduleList)
|
||||||
|
log.Printf("[MSG] Distinct Modules From CRIs: %d\r\n", len(distinctModuleList))
|
||||||
|
|
||||||
|
log.Printf("[MSG] Checking Missing Modules ...\r\n")
|
||||||
|
for _, m := range distinctModuleList {
|
||||||
|
exist := false
|
||||||
|
for _, l := range moduleInfoList {
|
||||||
|
if strings.EqualFold(m, l.FileName) {
|
||||||
|
exist = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !exist {
|
||||||
|
missingModuleList = append(missingModuleList, m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("[MSG] Checking Needless Modules ...\r\n")
|
||||||
|
for _, l := range moduleInfoList {
|
||||||
|
needless := true
|
||||||
|
for _, m := range distinctModuleList {
|
||||||
|
if strings.EqualFold(l.FileName, m) {
|
||||||
|
needless = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if needless {
|
||||||
|
needlessModuleList = append(needlessModuleList, l.FileName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("***** Error AODs: %d\r\n", len(errAOD))
|
||||||
|
_WriteFileFromStringSlice(".\\errAOD.txt", errAOD)
|
||||||
|
|
||||||
|
log.Printf("***** Error CRIs: %d\r\n", len(errCRI))
|
||||||
|
_WriteFileFromStringSlice(".\\errCRI.txt", errCRI)
|
||||||
|
|
||||||
|
log.Printf("##### Missing Modules: %d\r\n", len(missingModuleList))
|
||||||
|
_WriteFileFromStringSlice(".\\MissingModules.txt", missingModuleList)
|
||||||
|
|
||||||
|
log.Printf("##### Needless Modules: %d\r\n", len(needlessModuleList))
|
||||||
|
_WriteFileFromStringSlice(".\\NeedlessModules.txt", needlessModuleList)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _SummaryFiles(basePath, filter string) ([]FileInfo, error) {
|
||||||
|
var err error
|
||||||
|
sortInfoList := make([]FileInfo, 0)
|
||||||
|
fileInfoList := make([]FileInfo, 0)
|
||||||
|
|
||||||
|
err = filepath.Walk(basePath, func(path string, info os.FileInfo, err error) error {
|
||||||
|
if !info.IsDir() {
|
||||||
|
var fileInfo FileInfo
|
||||||
|
fileInfo.FileName = info.Name()
|
||||||
|
fileInfo.FilePath = path
|
||||||
|
fileInfo.FileSize = info.Size()
|
||||||
|
//fileInfo.ModTime = info.ModTime().Format("2006-01-02 15:04:05")
|
||||||
|
if !strings.Contains(fileInfo.FilePath, ".svn") {
|
||||||
|
fileInfoList = append(fileInfoList, fileInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Get File List Failed: %s\r\n", err.Error())
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch filter {
|
||||||
|
case "LNB":
|
||||||
|
regFilter = regLNB
|
||||||
|
case "TNB":
|
||||||
|
regFilter = regTNB
|
||||||
|
case "SBID":
|
||||||
|
regFilter = regSBID
|
||||||
|
default:
|
||||||
|
return fileInfoList, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, i := range fileInfoList {
|
||||||
|
reg := regexp.MustCompile(regFilter)
|
||||||
|
rst := reg.FindStringSubmatch(i.FileName)
|
||||||
|
if len(rst) != 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
sortInfoList = append(sortInfoList, i)
|
||||||
|
}
|
||||||
|
return sortInfoList, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func _RemoveDuplicateElementOfSlice(src []string) []string {
|
||||||
|
dst := make([]string, 0, len(src))
|
||||||
|
tmp := map[string]struct{}{}
|
||||||
|
for _, s := range src {
|
||||||
|
if _, ok := tmp[s]; !ok {
|
||||||
|
tmp[s] = struct{}{}
|
||||||
|
dst = append(dst, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
func _WriteFileFromStringSlice(fileName string, dataSlice []string) {
|
||||||
|
obj, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Open File Error: %s\r\n", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer obj.Close()
|
||||||
|
|
||||||
|
var builder strings.Builder
|
||||||
|
for _, s := range dataSlice {
|
||||||
|
builder.WriteString(s + "\r\n")
|
||||||
|
}
|
||||||
|
obj.WriteString(builder.String())
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERR] Write File Error: %s\r\n", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
0
errAOD.txt
Normal file
0
errAOD.txt
Normal file
4063
errCRI.txt
Normal file
4063
errCRI.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user