nim-libp2p/tools/pinner.nim

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

47 lines
1.4 KiB
Nim
Raw Normal View History

import os
import strscans
import algorithm
import tables
import sequtils
import strutils
import json
import osproc
const PinFile = ".pinned"
removeDir("nimbledeps")
createDir("nimbledeps")
discard execCmd("nimble install -dy")
var allDeps: Table[string, string]
2022-12-14 11:10:00 +00:00
let nimblePkgs =
if dirExists("nimbledeps/pkgs"): "nimbledeps/pkgs" else: "nimbledeps/pkgs2"
for (_, dependency) in walkDir(nimblePkgs):
let
jsonContent = parseJson(readFile(dependency & "/nimblemeta.json"))
fileContent =
if "metaData" in jsonContent:
jsonContent["metaData"]
else:
jsonContent
let url = fileContent.getOrDefault("url").getStr("")
var version = fileContent.getOrDefault("vcsRevision").getStr("")
var packageName = dependency.split('/')[^1].split('-')[0]
if version.len == 0:
version = execCmdEx("git ls-remote " & url).output.split()[0]
if version.len > 0 and url.len > 0:
let fullPackage = url & "@#" & version
if packageName in allDeps and allDeps[packageName] != fullPackage:
echo "Warning: duplicate package " & packageName & ":"
echo allDeps[packageName]
echo fullPackage
echo ""
allDeps[packageName] = fullPackage
else:
echo "Failed to get url & version for ", dependency
let asString = toSeq(allDeps.pairs).mapIt(it[0] & ";" & it[1]).sorted().join("\n")
writeFile(PinFile, asString)
echo asString