mirror of
https://github.com/BioArchLinux/bioarchlinux-tools.git
synced 2025-03-09 22:53:31 +00:00
support auto unarchive cran pkgs
This commit is contained in:
parent
0da0d2662a
commit
f114ec8574
3 changed files with 54 additions and 5 deletions
|
@ -15,7 +15,7 @@ import yaml
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from dbmanager import get_bioc_versions, EXCLUDED_PKGS
|
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, unarchive_cran
|
||||||
|
|
||||||
|
|
||||||
class PkgInfo:
|
class PkgInfo:
|
||||||
|
@ -293,7 +293,7 @@ def create_temporary_copy(path):
|
||||||
|
|
||||||
|
|
||||||
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, auto_unarchive=True,
|
||||||
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"):
|
||||||
'''
|
'''
|
||||||
Update depends of packages listed in `file`, one package name per line, CRAN style(e.g. `Rcpp`) and pkgname style (`r-rcpp`) are both supported.
|
Update depends of packages listed in `file`, one package name per line, CRAN style(e.g. `Rcpp`) and pkgname style (`r-rcpp`) are both supported.
|
||||||
|
@ -302,6 +302,7 @@ def update_depends_by_file(file, bioarch_path="BioArchLinux", db="sqlite.db",
|
||||||
bioarch_path: path to BioArchLinux
|
bioarch_path: path to BioArchLinux
|
||||||
db: path to the database to be read
|
db: path to the database to be read
|
||||||
auto_archive: whether to archive the package if it is not in CRAN or the latest BIOC
|
auto_archive: whether to archive the package if it is not in CRAN or the latest BIOC
|
||||||
|
auto_unarchive: whether to unarchive the archived package if it is in CRAN.
|
||||||
bioc_min_ver: minimum version of Bioconductor to be supported.
|
bioc_min_ver: minimum version of Bioconductor to be supported.
|
||||||
bioc_meta_mirror: The server used to get all version numbers of BIOC
|
bioc_meta_mirror: The server used to get all version numbers of BIOC
|
||||||
output_file: file to write the added depends to.
|
output_file: file to write the added depends to.
|
||||||
|
@ -330,6 +331,8 @@ def update_depends_by_file(file, bioarch_path="BioArchLinux", db="sqlite.db",
|
||||||
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)
|
||||||
# if PKGBUILD changed, bump pkgrel
|
# if PKGBUILD changed, bump pkgrel
|
||||||
|
if auto_unarchive:
|
||||||
|
unarchive_cran()
|
||||||
if not filecmp.cmp(temp_pkgbuild, "PKGBUILD"):
|
if not filecmp.cmp(temp_pkgbuild, "PKGBUILD"):
|
||||||
lilac.update_pkgrel()
|
lilac.update_pkgrel()
|
||||||
else:
|
else:
|
||||||
|
@ -366,11 +369,15 @@ if __name__ == '__main__':
|
||||||
'-o', '--output', help='The file to save newly added depends name', default="added_depends.txt")
|
'-o', '--output', help='The file to save newly added depends name', default="added_depends.txt")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-a', '--auto-archive', help='Automatically archive pkgs that are not in CRAN or the latest BIOC release', action='store_true')
|
'-a', '--auto-archive', help='Automatically archive pkgs that are not in CRAN or the latest BIOC release', action='store_true')
|
||||||
|
parser.add_argument(
|
||||||
|
'--no-auto-unarchive', help='DO NOT Automatically unarchive pkgs that are now in CRAN', action='store_false')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.file:
|
if args.file:
|
||||||
update_depends_by_file(args.file, args.bioarch_path, args.db,
|
update_depends_by_file(args.file, args.bioarch_path, args.db,
|
||||||
bioc_min_ver=args.bioc_min_ver, bioc_meta_mirror=args.bioc_meta_mirror, output_file=args.output, auto_archive=args.auto_archive)
|
output_file=args.output,
|
||||||
|
bioc_min_ver=args.bioc_min_ver, bioc_meta_mirror=args.bioc_meta_mirror,
|
||||||
|
auto_archive=args.auto_archive, auto_unarchive=args.no_auto_unarchive)
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
|
|
@ -89,7 +89,7 @@ def archive_pkg_pkgbuild(bioconductor_version=3.15, _pkgname="_pkgname"):
|
||||||
# to
|
# to
|
||||||
# https://cran.r-project.org/src/contrib/Archive/${_pkgname}/${_pkgname}_${pkgver}.tar.gz
|
# https://cran.r-project.org/src/contrib/Archive/${_pkgname}/${_pkgname}_${pkgver}.tar.gz
|
||||||
new_line = lines[i].replace(
|
new_line = lines[i].replace(
|
||||||
"src/contrib", r"src/contrib/Archive/${" + _pkgname + '}')
|
"src/contrib", "src/contrib/Archive/${_pkgname}")
|
||||||
elif '//bioconductor.org' in lines[i]:
|
elif '//bioconductor.org' in lines[i]:
|
||||||
# https://bioconductor.org/packages/release/bioc/src/contrib/${_pkgname}_${_pkgver}.tar.gz
|
# https://bioconductor.org/packages/release/bioc/src/contrib/${_pkgname}_${_pkgver}.tar.gz
|
||||||
# to
|
# to
|
||||||
|
@ -106,6 +106,47 @@ def archive_pkg_pkgbuild(bioconductor_version=3.15, _pkgname="_pkgname"):
|
||||||
return changed
|
return changed
|
||||||
|
|
||||||
|
|
||||||
|
def unarchive_cran():
|
||||||
|
unarchive_cran_pkgbuild()
|
||||||
|
unarchive_cran_yaml()
|
||||||
|
|
||||||
|
|
||||||
|
def unarchive_cran_pkgbuild():
|
||||||
|
with open("PKGBUILD", "r") as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
for i in range(len(lines)):
|
||||||
|
if lines[i].startswith("source="):
|
||||||
|
if "src/contrib/Archive" in lines[i]:
|
||||||
|
lines[i] = lines[i].replace(
|
||||||
|
"src/contrib/Archive/${_pkgname}", "src/contrib")
|
||||||
|
with open("PKGBUILD", "w") as f:
|
||||||
|
f.writelines(lines)
|
||||||
|
|
||||||
|
|
||||||
|
def unarchive_cran_yaml():
|
||||||
|
with open("lilac.yaml", "r") as f:
|
||||||
|
docs = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
|
url_idx = -1
|
||||||
|
url = None
|
||||||
|
for i in range(len(docs['update_on'])):
|
||||||
|
if "url" in docs['update_on'][i].keys():
|
||||||
|
url = docs['update_on'][i]['url']
|
||||||
|
url_idx = i
|
||||||
|
break
|
||||||
|
if not url:
|
||||||
|
return
|
||||||
|
pkg = url.rstrip('/')
|
||||||
|
pkg = re.split('/|=', pkg)[-1]
|
||||||
|
archive_url = None
|
||||||
|
# CRAN ARCHIVE
|
||||||
|
if 'cran.r-project.org' in url:
|
||||||
|
archive_url = f"https://cran.r-project.org/package={pkg}"
|
||||||
|
if archive_url:
|
||||||
|
docs['update_on'][url_idx]['url'] = archive_url
|
||||||
|
with open("lilac.yaml", 'w') as f:
|
||||||
|
yaml.dump(docs, f, sort_keys=False)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
|
@ -13,4 +13,5 @@ For usage, run with argument `-h`.
|
||||||
- [ ] generate PKGBUILD for missing dependencies `depends_updater`
|
- [ ] generate PKGBUILD for missing dependencies `depends_updater`
|
||||||
- [x] merge `sync_meta_data` into `dbmanager`
|
- [x] merge `sync_meta_data` into `dbmanager`
|
||||||
- [x] merge `pkg_archiver` into `dbmanager`
|
- [x] merge `pkg_archiver` into `dbmanager`
|
||||||
- [ ] support unarchiving CRAN pkgs automatically in `pkg_archiver`
|
- [x] support unarchiving CRAN pkgs automatically in `pkg_archiver`
|
||||||
|
- [ ] correct `arch` for pkgs.
|
||||||
|
|
Loading…
Add table
Reference in a new issue