Merge pull request #17213 from Rmys/master

applications-25.08.0
This commit is contained in:
Rmys
2025-08-14 12:36:59 +03:00
committed by GitHub
-198
View File
@@ -1,198 +0,0 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import re
import sys
import time
from optparse import OptionParser
from pisi.specfile import SpecFile
RELEASE = """\
<Update release="%(RELEASE)s">
<Date>%(DATE)s</Date>
<Version>%(VERSION)s</Version>
<Comment>%(COMMENT)s</Comment>
<Name>%(NAME)s</Name>
<Email>%(EMAIL)s</Email>
</Update>"""
def get_and_save_user_info():
info = [("NAME", "Please enter your full name as seen in pspec files"),
("EMAIL", "Please enter your e-mail as seen in pspec files")]
res = {}
conf_file = os.path.expanduser("~/.packagerinfo")
if not os.path.exists(conf_file): open(conf_file, "a")
for line in open(conf_file, "r"):
line = line.strip().split("=")
try:
res[line[0].strip()] = line[1].strip()
except IndexError:
pass
for i in info:
if not res.has_key(i[0]) or not res[i[0]]:
print "%s is not defined in %s. %s" % (i[0], conf_file, i[1])
res[i[0]] = raw_input("> ")
open(conf_file, "a").write("%s\t= %s\n" % (i[0], res[i[0]]))
return res
def bump(options, path):
if path.endswith("/"): path = path[:-1]
if not path.endswith("/pspec.xml"): path += "/pspec.xml"
if not os.path.isfile(path):
print "%s not found!" % path
sys.exit(1)
if not os.access(path, os.W_OK):
print "Cannot write to %s." % path
sys.exit(1)
info = get_and_save_user_info()
pspec = open(path, "r").read().strip()
specfile = SpecFile(path)
old_archive = specfile.source.archive
if len(old_archive) == 0:
print("No <Archive> tag found in %s." % path)
return
elif len(old_archive) > 1 and not options.many and not options.release and not options.rrelease:
print("Multiarchive pspec.xml not supported yet.")
sys.exit(1)
old_archive = old_archive[0].uri
old_type = re.sub(ver_ext_pattern, "\\2", old_archive).replace(".", "").replace("src", "")
new_type = old_type
last = specfile.history[0]
old_version = last.version
if options.many:
verfrom = options.many.split("-")[0]
new_version = options.many.split("-")[1]
if not old_version == verfrom:
print "skipping %s, different versions" % specfile.source.name
return
new_archive = old_archive.replace(old_version, new_version)
elif options.uri:
if not options.uri.split(":")[0] in ["ftp", "file", "http", "https", "mirrors"]:
print "Wrong uri: %s" % options.uri
sys.exit(1)
new_archive = options.uri
new_version = re.sub(ver_ext_pattern, "\\1", new_archive)
new_type = re.sub(ver_ext_pattern, "\\2", new_archive).replace(".", "").replace("tgz", "targz").replace("src", "")
elif options.ver:
if not re.search("[\d\.]", options.ver):
print "Wrong version number: %s" % options.ver
sys.exit(1)
new_version = options.ver
new_archive = old_archive.replace(old_version, new_version)
if "." in old_version:
mver = ".".join(old_version.split(".")[:-1])
if "/%s/" % mver in new_archive:
new_archive = new_archive.replace("/%s/" % mver, "/%s/" % ".".join(new_version.split(".")[:-1]))
elif options.release or options.rrelease:
new_type = old_type
new_archive = old_archive
new_version = old_version
else:
print old_archive
sys.exit(0)
info["RELEASE"] = int(last.release) + 1
info["DATE"] = time.strftime("%Y-%m-%d")
info["VERSION"] = new_version
if options.release or options.rrelease:
info["COMMENT"] = "Release bump."
else:
info["COMMENT"] = "Version bump."
new_release = RELEASE % info
new_pspec = ''
if new_type == "tgz": new_type = "targz"
elif not new_type in types: new_type = "binary"
for line in pspec.split("\n"):
if "<Archive" in line and old_archive in line:
new_line = line.split('>')
new_line = new_line[0] + '>' + new_archive + '<' + new_line[1].split('<')[1] + '>'
new_pspec = "\n".join((new_pspec, new_line))
elif "<History>" in line:
new_pspec = "\n".join((new_pspec, " <History>\n%s" % new_release))
elif options.vfrom and "<Dependency versionFrom" in line:
new_pspec = "\n".join((new_pspec, line.replace(old_version, new_version)))
else:
if not new_pspec: new_pspec = line
else: new_pspec = "\n".join((new_pspec, line))
open(path, "w").write(new_pspec)
open(path, "a").write("\n")
if options.release or options.rrelease: return specfile.source.name
if os.getenv("USER") != "root":
os.system("sudo pisi build %s --fetch" % path)
else:
os.system("pisi build %s --fetch" % path)
pspec = open(path, "r").read().strip()
new_pspec = ''
for line in pspec.split("\n"):
if "<Archive" in line and os.path.basename(new_archive) in line:
sha1sum = os.popen("sha1sum /var/cache/pisi/archives/%s" % os.path.basename(new_archive)).read().split()[0]
new_line = re.sub("(.*sha1sum=)[\"\'][^\"^\']+[\"\'](.*)", r'\1"%s"\2' % sha1sum, line)
new_line = re.sub("(.*type=)[\"\'][^\"^\']+[\"\'](.*)", r'\1"%s"\2' % new_type, new_line)
new_pspec = "\n".join((new_pspec, new_line))
else:
if not new_pspec: new_pspec = line
else: new_pspec = "\n".join((new_pspec, line))
open(path, "w").write(new_pspec)
open(path, "a").write("\n")
return specfile.source.name
if __name__ == "__main__":
ver_ext_pattern = re.compile("^.+?-?[\D^\-]*?([\d\._]+\d)[\D^\.]*?\.([\w\.]+)$")
types = ["targz", "tarbz2", "tarlzma", "tarxz", "tarZ", "tar", "zip", "gz", "gzip", "bz2", "bzip2", "lzma", "xz"]
usage = "Usage: %prog [options] [PATH]"
parser = OptionParser(usage)
parser.add_option("-r", "--release-bump", action="store_true", default=False, dest="release", help="release bump")
parser.add_option("-R", "--release-bump-recursively", action="store_true", default=False, dest="rrelease", help="release bump recursively")
parser.add_option("-u", "--new-uri", dest="uri", help="version bump using specified uri")
parser.add_option("-m", "--bump-many", dest="many", help="version/release bump for many packages")
parser.add_option("-v", "--new-version", dest="ver", help="version bump using specified version")
parser.add_option("-f", "--from-version", dest="vfrom", help="modify versionFrom too")
(options, args) = parser.parse_args()
try:
path = args[0]
except IndexError:
path = "."
if options.uri and options.ver:
print "Using options -u and -v together not allowed"
sys.exit(1)
elif options.many and (options.uri or options.ver):
print "Using options -m with -u or -v not allowed"
sys.exit(1)
elif (options.release or options.rrelease) and (options.uri or options.ver):
print "Using options -r or -R with -u or -v not allowed"
sys.exit(1)
elif options.many:
if not len(options.many.split("-")) == 2:
print "Wrong argument for option -m: %s\nYou have to write 'version from' and 'version to' separated by '-'\ne.g: -m x.y-x.z" % options.many
sys.exit(1)
if options.rrelease or options.many:
bumped = []
for root, dirs, files in os.walk(path):
if "pspec.xml" in files:
name = bump(options, root)
if name: bumped.append(name)
if not bumped: print "No bumped packages."
else:
print "Bumped packages:"
print "----------------"
for b in bumped: print b
else: bump(options, path)