This commit is contained in:
sukanka 2022-11-25 23:20:58 +08:00
parent 9726e5e042
commit 0f4a7014c4
3 changed files with 65 additions and 40 deletions

View file

@ -12,6 +12,39 @@ import datetime
from dateutil.parser import parse as parsedate from dateutil.parser import parse as parsedate
import re import re
EXCLUDED_PKGS = {
"base",
"boot",
"class",
"cluster",
"codetools",
"compiler",
"datasets",
"foreign",
"graphics",
"grDevices",
"grid",
"KernSmooth",
"lattice",
"MASS",
"Matrix",
"methods",
"mgcv",
"nlme",
"nnet",
"parallel",
"rpart",
"spatial",
"splines",
"stats",
"stats4",
"survival",
"tcltk",
"tools",
"utils",
"R"
}
Base = declarative_base() Base = declarative_base()
@ -114,6 +147,7 @@ def remove_all_cran_pkg(engine):
session.query(PkgMeta).filter_by(repo='CRAN').delete() session.query(PkgMeta).filter_by(repo='CRAN').delete()
session.commit() session.commit()
def update_DB(engine, min_ver=None, first_run=False, mtime=None, def update_DB(engine, min_ver=None, first_run=False, mtime=None,
bioc_mirror="https://bioconductor.org", cran_mirror="https://cran.r-project.org"): bioc_mirror="https://bioconductor.org", cran_mirror="https://cran.r-project.org"):
''' '''
@ -169,7 +203,7 @@ def update_DB(engine, min_ver=None, first_run=False, mtime=None,
# insert or skip # insert or skip
for pkgmeta in pkgmetas: for pkgmeta in pkgmetas:
# we already deleted all CRAN packages, so we can just add them. # we already deleted all CRAN packages, so we can just add them.
session.add(pkgmeta) add_or_update(session, PkgMeta, pkgmeta)
def add_or_skip(session, table, pkgmeta): def add_or_skip(session, table, pkgmeta):

View file

@ -8,45 +8,15 @@ import logging
from lilac2 import api as lilac from lilac2 import api as lilac
import argparse import argparse
import os import os
import shutil
import tempfile
import filecmp
import yaml import yaml
from typing import Optional from typing import Optional
import sqlite3 import sqlite3
from dbmanager import get_bioc_versions from dbmanager import get_bioc_versions, EXCLUDED_PKGS
from pkg_archiver import archive_pkg_yaml, archive_pkg_pkgbuild from pkg_archiver import archive_pkg_yaml, archive_pkg_pkgbuild
EXCLUDED_PKGS = {
"base",
"boot",
"class",
"cluster",
"codetools",
"compiler",
"datasets",
"foreign",
"graphics",
"grDevices",
"grid",
"KernSmooth",
"lattice",
"MASS",
"Matrix",
"methods",
"mgcv",
"nlme",
"nnet",
"parallel",
"rpart",
"spatial",
"splines",
"stats",
"stats4",
"survival",
"tcltk",
"tools",
"utils",
"R"
}
class PkgInfo: class PkgInfo:
def __init__(self, pkgname=None, depends=None, optdepends=None, def __init__(self, pkgname=None, depends=None, optdepends=None,
@ -316,6 +286,12 @@ class PkgInfo:
yaml.dump(docs, f, sort_keys=False) yaml.dump(docs, f, sort_keys=False)
def create_temporary_copy(path):
tmp = tempfile.NamedTemporaryFile(delete=False)
shutil.copy2(path, tmp.name)
return tmp.name
def update_depends_by_file(file, bioarch_path="BioArchLinux", db="sqlite.db", def update_depends_by_file(file, bioarch_path="BioArchLinux", db="sqlite.db",
auto_archive=False, auto_archive=False,
bioc_min_ver="3.0", bioc_meta_mirror="https://bioconductor.org", output_file="added_depends.txt"): bioc_min_ver="3.0", bioc_meta_mirror="https://bioconductor.org", output_file="added_depends.txt"):
@ -343,6 +319,8 @@ def update_depends_by_file(file, bioarch_path="BioArchLinux", db="sqlite.db",
pkgname = "r-"+pkgname.lower() pkgname = "r-"+pkgname.lower()
logging.info(f"Updating {pkgname}") logging.info(f"Updating {pkgname}")
os.chdir(f"{bioarch_path}/{pkgname}") os.chdir(f"{bioarch_path}/{pkgname}")
temp_pkgbuild = create_temporary_copy("PKGBUILD")
temp_lilac = create_temporary_copy("lilac.yaml")
pkginfo = PkgInfo(bioc_min_version=bioc_min_ver, pkginfo = PkgInfo(bioc_min_version=bioc_min_ver,
bioc_meta_mirror=bioc_meta_mirror, bioc_versions=bioc_versions) bioc_meta_mirror=bioc_meta_mirror, bioc_versions=bioc_versions)
pkginfo.build_body(cursor) pkginfo.build_body(cursor)
@ -351,7 +329,15 @@ def update_depends_by_file(file, bioarch_path="BioArchLinux", db="sqlite.db",
if auto_archive and pkginfo.is_archived(): if auto_archive and pkginfo.is_archived():
archive_pkg_yaml(bioconductor_version=pkginfo.bioc_ver) archive_pkg_yaml(bioconductor_version=pkginfo.bioc_ver)
archive_pkg_pkgbuild(bioconductor_version=pkginfo.bioc_ver) archive_pkg_pkgbuild(bioconductor_version=pkginfo.bioc_ver)
lilac.update_pkgrel() # if PKGBUILD changed, bump pkgrel
if not filecmp.cmp(temp_pkgbuild, "PKGBUILD"):
lilac.update_pkgrel()
else:
# else revert changes to lilac.yaml
shutil.copy2(temp_lilac, "lilac.yaml")
os.remove(temp_pkgbuild)
os.remove(temp_lilac)
if pkginfo.added_depends: if pkginfo.added_depends:
added_deps += pkginfo.added_depends added_deps += pkginfo.added_depends
os.chdir(current_dir) os.chdir(current_dir)

View file

@ -7,6 +7,7 @@ import os
import yaml import yaml
import argparse import argparse
from lilac2.api import update_pkgrel from lilac2.api import update_pkgrel
import re
def archive_pkg_by_file_list(file, bioarch_path="BioArchLinux", biconductor_version=3.15, step=1): def archive_pkg_by_file_list(file, bioarch_path="BioArchLinux", biconductor_version=3.15, step=1):
@ -40,21 +41,25 @@ def archive_pkg_yaml(bioconductor_version=3.15, yaml_file="lilac.yaml"):
with open(yaml_file, "r") as f: with open(yaml_file, "r") as f:
docs = yaml.load(f, Loader=yaml.FullLoader) docs = yaml.load(f, Loader=yaml.FullLoader)
url_idx = -1 url_idx = -1
url = None
for i in range(len(docs['update_on'])): for i in range(len(docs['update_on'])):
if "url" in docs['update_on'][i].keys(): if "url" in docs['update_on'][i].keys():
url = docs['update_on'][i]['url'] url = docs['update_on'][i]['url']
url_idx = i url_idx = i
break break
if not url:
return
pkg = url.rstrip('/').split('/')[-1] pkg = url.rstrip('/').split('/')[-1]
archive_url = None
# CRAN ARCHIVE # CRAN ARCHIVE
if 'cran.r-project.org' in url: if 'cran.r-project.org' in url:
archive_url = f"https://cran.r-project.org/src/contrib/Archive/{pkg}" archive_url = f"https://cran.r-project.org/src/contrib/Archive/{pkg}"
# Bioconductor ARCHIVE # Bioconductor ARCHIVE
elif 'bioconductor.org' in url: elif 'bioconductor.org' in url:
archive_url = f"https://bioconductor.org/packages/{bioconductor_version}/{pkg}" archive_url = url.replace('release', f"{bioconductor_version}")
if archive_url:
docs['update_on'][url_idx]['url'] = archive_url docs['update_on'][url_idx]['url'] = archive_url
with open(yaml_file, 'w') as f: with open(yaml_file, 'w') as f:
yaml.dump(docs, f, sort_keys=False) yaml.dump(docs, f, sort_keys=False)
@ -70,7 +75,7 @@ def archive_pkg_pkgbuild(bioconductor_version=3.15, _pkgname="_pkgname"):
flag = False flag = False
for i in range(len(lines)): for i in range(len(lines)):
if lines[i].startswith("url=") and '//bioconductor.org' in lines[i]: if lines[i].startswith("url=") and '//bioconductor.org' in lines[i] and not re.search("packages/[\d.]+", lines[i]):
lines[i] = lines[i].replace( lines[i] = lines[i].replace(
"packages/", f"packages/{bioconductor_version}/") "packages/", f"packages/{bioconductor_version}/")
changed = True changed = True