Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sage
Path: blob/develop/build/sage_bootstrap/updater.py
4052 views
1
# -*- coding: utf-8 -*-
2
"""
3
Package Updater
4
"""
5
6
# ****************************************************************************
7
# Copyright (C) 2015 Volker Braun <[email protected]>
8
#
9
# This program is free software: you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation, either version 2 of the License, or
12
# (at your option) any later version.
13
# https://www.gnu.org/licenses/
14
# ****************************************************************************
15
16
import os
17
18
import logging
19
log = logging.getLogger()
20
21
from sage_bootstrap.package import Package
22
from sage_bootstrap.download import Download
23
24
25
class ChecksumUpdater(object):
26
27
def __init__(self, package_name):
28
self.__package = None
29
self.package_name = package_name
30
31
@property
32
def package(self):
33
if self.__package is None:
34
self.__package = Package(self.package_name)
35
return self.__package
36
37
def fix_checksum(self):
38
checksums_ini = os.path.join(self.package.path, 'checksums.ini')
39
s = self.checksums_ini()
40
with open(checksums_ini, 'w') as f:
41
f.write(s)
42
43
def checksums_ini(self):
44
tarball = self.package.tarball
45
result = [
46
'tarball=' + self.package.tarball_pattern,
47
'sha1=' + tarball._compute_sha1(),
48
'sha256=' + tarball._compute_sha256()
49
]
50
if self.package.tarball_upstream_url_pattern:
51
result.append('upstream_url=' + self.package.tarball_upstream_url_pattern)
52
result.append('') # newline at end
53
return '\n'.join(result)
54
55
56
class PackageUpdater(ChecksumUpdater):
57
58
def __init__(self, package_name, new_version):
59
super(PackageUpdater, self).__init__(package_name)
60
self._update_version(new_version)
61
62
def _update_version(self, new_version):
63
old = Package(self.package_name)
64
package_version_txt = os.path.join(old.path, 'package-version.txt')
65
with open(package_version_txt, 'w') as f:
66
f.write(new_version.strip() + '\n')
67
68
def download_upstream(self, download_url=None):
69
tarball = self.package.tarball
70
if download_url is None:
71
pattern = self.package.tarball_upstream_url_pattern
72
if pattern and 'VERSION' not in pattern:
73
print('Warning: upstream_url pattern does not use the VERSION variable')
74
download_url = self.package.tarball_upstream_url
75
if download_url is None:
76
raise ValueError("package has no default upstream_url pattern, download_url needed")
77
print('Downloading tarball from {0} to {1}'.format(download_url, tarball.upstream_fqn))
78
Download(download_url, tarball.upstream_fqn).run()
79
80