diff options
author | Andreas Fankhauser hiddenalpha.ch | 2022-12-15 14:33:41 +0100 |
---|---|---|
committer | Andreas Fankhauser hiddenalpha.ch | 2022-12-15 14:33:41 +0100 |
commit | eafae3e34bd5231e80391f4ba55417ca27e5f824 (patch) | |
tree | 40aeec0a35e4bd549400ff8fd2ecb79aa29945d3 | |
parent | 06fae3ad8b2892b1a6ca674a66559b0186e60f39 (diff) | |
parent | b8ce54e585c65e0b58baf2239dd71fd83874836d (diff) | |
download | UnspecifiedGarbage-eafae3e34bd5231e80391f4ba55417ca27e5f824.zip UnspecifiedGarbage-eafae3e34bd5231e80391f4ba55417ca27e5f824.tar.gz |
Merge accidental tmp branch to feature
-rw-r--r-- | src/main/lua/maven/MvnCentralDepScan.lua | 167 |
1 files changed, 136 insertions, 31 deletions
diff --git a/src/main/lua/maven/MvnCentralDepScan.lua b/src/main/lua/maven/MvnCentralDepScan.lua index 7225c58..1fbb7e8 100644 --- a/src/main/lua/maven/MvnCentralDepScan.lua +++ b/src/main/lua/maven/MvnCentralDepScan.lua @@ -41,30 +41,52 @@ end function mod.parseArgs( app ) local iA = 0 local isExample = false -::nextArg:: - iA = iA + 1 - local arg = _ENV.arg[iA] - if not arg then - goto endOfArgs - elseif arg == "--help" then - mod.printHelp() return -1 - elseif arg == "--example" then - isExample = true - elseif arg == "--sqliteOut" then + while true do iA = iA + 1 - arg = _ENV.arg[iA] - if not arg then log:write("Arg --sqliteOut needs value\n")return-1 end - app.sqliteOutFile = arg - else - log:write("Unexpected arg: "..tostring(arg).."\n")return -1 + local arg = _ENV.arg[iA] + if not arg then + break + elseif arg == "--help" then + mod.printHelp() return -1 + elseif arg == "--example" then + isExample = true + elseif arg == "--sqliteOut" then + iA = iA + 1 + arg = _ENV.arg[iA] + if not arg then log:write("Arg --sqliteOut needs value\n")return-1 end + app.sqliteOutFile = arg + else + log:write("Unexpected arg: "..tostring(arg).."\n")return -1 + end end - goto nextArg -::endOfArgs:: if not isExample then log:write("Bad Args\n") return -1 end return 0 end +function mod.newMvnArtifact() + return objectSeal{ + dbId = false, + parentGroupId = false, + parentArtifactId = false, + parentVersion = false, + groupId = false, + artifactId = false, + version = false, + } +end + + +function mod.newMvnDependency() + return objectSeal{ + dbId = false, + groupId = false, + artifactId = false, + version = false, + } +end + + function mod.newPomUrlSrc( app ) local urls = { -- TODO insert URLs here! @@ -88,11 +110,7 @@ function mod.processXmlValue( pomParser ) end --log:write(xpath .."\n") local mvnArtifact = pomParser.mvnArtifact - local newMvnDependency = function()return objectSeal{ - groupId = false, - artifactId = false, - version = false, - }end + local newMvnDependency = mod.newMvnDependency() if false then elseif xpath == "/project/parent/artifactId" then mvnArtifact.parentArtifactId = pomParser.currentValue @@ -178,14 +196,7 @@ function mod.onGetPomRspHdr( msg, req ) base = false, xmlElemStack = {}, currentValue = false, - mvnArtifact = objectSeal{ - parentGroupId = false, - parentArtifactId = false, - parentVersion = false, - groupId = false, - artifactId = false, - version = false, - }, + mvnArtifact = mod.newMvnArtifact(), mvnDependency = false, -- the one we're currently parsing mvnMngdDependency = false, -- the one we're currently parsing write = function( t, buf ) t.base:write(buf) end, @@ -378,6 +389,93 @@ function mod.printStuffAtEnd( app ) end +function mod.loadFromSqliteFile( app ) + local db + db = newSqlite{ + database = app.sqliteOutFile, + } + db:enhancePerf() + local stmtSelectString = db:prepare("SELECT id, str FROM String") + local strings = {} + -- Load stings + local rs = stmtSelectString:execute() + while rs:next() do + local stringKey, stringVal + for iCol=1, rs:numCols() do + local colName = rs:name(iCol) + if colName == "id" then + assert(rs:type(iCol) == "INTEGER") + stringKey = rs:value(iCol) + elseif colName == "str" then + assert(rs:type(iCol) == "TEXT") + stringVal = rs:value(iCol) + else + error("Unexpected col String."..tostring(rs:name(iCol))) + end + end + assert(stringKey) + assert(stringVal) + strings[stringKey] = stringVal + end + -- Load Artifacts + local stmtMvnArtifacts = db:prepare("" + .." SELECT id, groupId, artifactId, version, parentGroupId, parentArtifactId, parentVersion" + .." FROM MvnArtifact") + local mvnArtifactsByDbId = {} + local rs = stmtMvnArtifacts:execute() + assert(not app.mvnArtifacts) + app.mvnArtifacts = {} + while rs:next() do + local mvnArtif = mod.newMvnArtifact() + for iCol=1, rs:numCols() do + local colName = rs:name(iCol) + if colName == "id" then + mvnArtif.dbId = rs:value(iCol) + else + mvnArtif[colName] = (strings[rs:value(iCol)] or false) + end + end + app.mvnArtifacts[mod.getMvnArtifactKey(mvnArtif)] = mvnArtif; + --assert(mvnArtif) + --assert(type(mvnArtif) == "table") + --assert(mvnArtif.artifactId) + --assert(mvnArtif.artifactId) + assert(type(mvnArtif.dbId) == "number", mvnArtif.dbId) + log:write("mvnArtifactsByDbId[".. mvnArtif.dbId .."] = "..tostring(mvnArtif).."\n") + mvnArtifactsByDbId[mvnArtif.dbId] = mvnArtif + end + -- Load Dependencies + local stmtMvnDeps = db:prepare("" + .." SELECT id, mvnArtifactId, needsMvnArtifactId" + .." FROM MvnDependency") + local rs = stmtMvnDeps:execute() + while rs:next() do + local mvnDep = mod.newMvnDependency() + local mvnArtifId, mvnDepId + for iCol=1, rs:numCols() do + local colName = rs:name(iCol) + if colName == "id" then + mvnDep.dbId = assert(rs:value(iCol)) + elseif colName == "mvnArtifactId" then + mvnArtifId = assert(rs:value(iCol)) + elseif colName == "needsMvnArtifactId" then + mvnDepId = assert(rs:value(iCol)) + else + error("TODO_20221215134407 ".. colName) + end + end + local artif = mvnArtifactsByDbId[mvnArtifId] + local dep = mvnArtifactsByDbId[mvnDepId] + assert(type(dep) == "table") + local deps = app.mvnDepsByArtifact[artif] + if not deps then deps = {} app.mvnDepsByArtifact[artif] = deps end + table.insert(deps, dep) + end + -- + db:close() +end + + function mod.storeAsSqliteFile( app ) -- TODO could we cache our prepared queries? local db, stmt @@ -519,10 +617,17 @@ end function mod.run( app ) - assert(not app.mvnArtifacts) app.mvnArtifacts = {} assert(not app.mvnPropsByArtifact) app.mvnPropsByArtifact = {} assert(not app.mvnDepsByArtifact) app.mvnDepsByArtifact = {} assert(not app.mvnMngdDepsByArtifact) app.mvnMngdDepsByArtifact = {} + if true or fileExists then -- TODO + mod.loadFromSqliteFile( app ) + else + assert(not app.mvnArtifacts) + app.mvnArtifacts = {} + end + mod.printStuffAtEnd(app) + error("TODO_20221215104755") local pomSrc = mod.newPomUrlSrc(app) while true do local pomUrl = pomSrc:nextPomUrl() |