mirror of
https://github.com/clearlinux/common.git
synced 2026-06-16 11:06:15 +00:00
Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0ba3b95dad | |||
| 9749d00c56 | |||
| 7841d4dd5c | |||
| 91c89fe47d | |||
| 9d696fee5a | |||
| 54aea8a696 | |||
| a4545eb4b0 | |||
| 35d4f2c00f | |||
| 15c22ac4eb | |||
| 1c672f7638 | |||
| d0832c89f4 | |||
| 3a87e928c5 | |||
| 5ba1a7e1e3 | |||
| ba02bc2a4f | |||
| 0ef90a4704 | |||
| 0b39553aa6 | |||
| 7cd52ed2fd | |||
| a379bdd1e5 | |||
| b8eaa3c103 | |||
| 0664274e0a | |||
| 69cee2fcd7 | |||
| 19d7dfcc56 | |||
| 25e60b8d7f | |||
| c6749e0569 | |||
| 79b17335fa | |||
| 18503d7ff9 | |||
| d4a14d4b51 | |||
| 67f9a85781 | |||
| 2ab93bc546 | |||
| 0697a48265 | |||
| 3488d9df0b | |||
| 7eda6b13d5 | |||
| 22cf4d9aaa | |||
| abf88fe302 | |||
| e7d86e5ace | |||
| 0ca8a71a6a | |||
| c594d50d97 | |||
| 923b813833 | |||
| facfc57d55 | |||
| 9e0d404e52 | |||
| 9d954cb33a | |||
| 158c743fde | |||
| c5969bbd83 | |||
| cb01f2b9ef | |||
| c58e39da50 | |||
| 26dea91314 | |||
| efa4e1bcf8 | |||
| 9fba303a7b | |||
| eefffcb4cd | |||
| ae59dd4aa9 | |||
| 9ed6cf64eb | |||
| 1e1a52e948 |
+16
-2
@@ -186,8 +186,18 @@ autospec: preautospec-checks pullrebase localreponotice clean-old-content
|
||||
bash update_changelog.sh ; \
|
||||
git commit --amend --no-edit Change* ; \
|
||||
fi
|
||||
git diff | grep -q index || python3 $(TOPLVL)/projects/common/patchfilter.py > for-review.txt ;
|
||||
git diff | grep -q index || python3 $(TOPLVL)/projects/common/patchfilter.py ;
|
||||
@$(MAKE) -s for-review.txt
|
||||
@printf "\n**\n"
|
||||
@printf "** NOTICE: A patch with changes is available in the file for-review.txt\n"
|
||||
@printf "** To recreate (e.g., after git commit --amend), run make for-review.txt\n"
|
||||
@printf "** To submit for review: git send-email --to <recipient> for-review.txt\n"
|
||||
@printf "**\n\n"
|
||||
|
||||
#help for-review.txt: Creates the for-review.txt file, which is
|
||||
#help a minimized version of the Git commit, suitable for code review.
|
||||
for-review.txt:
|
||||
git diff | grep -q index || python3 $(TOPLVL)/projects/common/patchfilter.py > for-review.txt
|
||||
.PHONY: for-review.txt
|
||||
|
||||
#help autospecnogit: Runs autospec, but does not create a commit
|
||||
autospecnogit:
|
||||
@@ -269,6 +279,7 @@ sources:
|
||||
@$(MAKE) generateupstream; \
|
||||
[ $$? -eq 0 ] && exit 0; \
|
||||
nvr="$$(rpmspec --srpm -q --qf '%{NAME}\t%{VERSION}\t%{RELEASE}\n' $(SPECFILE))"; \
|
||||
git -C $(TOPLVL)/projects/common fetch --tags >/dev/null 2>&1; \
|
||||
latest_builds=$$(git -C $(TOPLVL)/projects/common tag -l | sort -rn); \
|
||||
for b in $$latest_builds; do \
|
||||
url="$(DOWNLOAD_MIRROR)/releases/$$b/clear/source/package-sources"; \
|
||||
@@ -492,6 +503,9 @@ cloc: $(SRPMFILE)
|
||||
@$(MOCK) --clean --scrub=chroot --uniqueext=$(PKG_NAME)
|
||||
cat results/cloc.txt
|
||||
|
||||
# Define LTS-specific targets in a separate makefile
|
||||
-include $(TOPLVL)/projects/common/Makefile.common.lts
|
||||
|
||||
# Define site local common targets in a separate makefile
|
||||
-include $(TOPLVL)/projects/common/Makefile.common.site_local
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
#-*-makefile-*-
|
||||
|
||||
LTSUTILS = python $(TOPLVL)/projects/common/lts/main.py $(PKG_NAME)
|
||||
|
||||
#help lts-show: Display a summary of active LTS branches.
|
||||
lts-show:
|
||||
@$(LTSUTILS) sanity-check
|
||||
@while read b; do \
|
||||
if git show-ref $$b > /dev/null; then \
|
||||
echo $$b $$(git log --oneline -1 $$b); \
|
||||
else \
|
||||
echo $$b Not found; \
|
||||
fi; \
|
||||
done < $(TOPLVL)/projects/common/lts/active-branches
|
||||
|
||||
#help lts-backport: Fast-forward the previous active branch to the current
|
||||
#help branch.
|
||||
lts-backport:
|
||||
@$(LTSUTILS) sanity-check
|
||||
@newer=$$(git symbolic-ref HEAD); \
|
||||
newer=$${newer#refs/heads/}; \
|
||||
if ! $(LTSUTILS) prev-branch --checkout; then \
|
||||
echo Could not check out previous active branch.; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
if $(LTSUTILS) is-same-version $$newer; then \
|
||||
$(LTSUTILS) fast-forward $$newer; \
|
||||
else \
|
||||
echo Most likely a patch needs to be manually re-applied for this version.; \
|
||||
echo Alternatively, use \"git merge --ff-only $$newer\" to upgrade the package version.; \
|
||||
fi
|
||||
|
||||
#help lts-build: Build RPM in Koji, or reuse existing build from older LTS
|
||||
#help branch.
|
||||
lts-build:
|
||||
@$(LTSUTILS) sanity-check
|
||||
@tag=$$(git tag --points-at); \
|
||||
if [[ -z $$tag ]]; then \
|
||||
echo This commit does not have a tag.; \
|
||||
echo Proceeding to run \"make lts-koji\".; \
|
||||
$(LTSUTILS) prompt || exit; \
|
||||
$(MAKE) lts-koji; \
|
||||
exit; \
|
||||
fi; \
|
||||
older=$$($(LTSUTILS) prev-branch); \
|
||||
if [[ -z $$older ]]; then \
|
||||
echo Could not determine previous active branch.; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
current=$$($(LTSUTILS) current-branch); \
|
||||
if [[ $$(git rev-parse $$older) != $$(git rev-parse $$current) ]]; then \
|
||||
echo Previous branch and current branch have different commits.; \
|
||||
for b in $$older $$current; do echo $$b $$(git log --oneline -1 $$b); done; \
|
||||
echo Proceeding to run \"make lts-koji\".; \
|
||||
$(LTSUTILS) prompt || exit; \
|
||||
$(MAKE) lts-koji; \
|
||||
exit; \
|
||||
fi; \
|
||||
if $(LTSUTILS) can-reuse-binary $$older; then \
|
||||
echo Reusing binary from $$older.; \
|
||||
$(KOJI_CMD) tag-build $$current $(SRPMVERS); \
|
||||
else \
|
||||
echo Could not reuse binary from $$older.; \
|
||||
echo Proceeding to run \"make bump lts-koji\".; \
|
||||
$(LTSUTILS) prompt || exit; \
|
||||
$(MAKE) bump lts-koji; \
|
||||
fi
|
||||
@$(LTSUTILS) next-branch --checkout
|
||||
|
||||
#help lts-koji: Same as "koji" but for working on LTS branches. Should not
|
||||
#help be called directly, use lts-build instead.
|
||||
lts-koji: prekoji-checks kojidef
|
||||
@$(LTSUTILS) sanity-check
|
||||
@$(MAKE) spdxcheck
|
||||
@$(MAKE) checkblacklist
|
||||
@current=$$($(LTSUTILS) current-branch); \
|
||||
if ! grep $$current $(TOPLVL)/projects/common/lts/active-branches; then \
|
||||
echo "Error: Must be on an active branch to submit to koji" >&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if ! git diff --quiet HEAD ${SPECFILE}; then \
|
||||
echo "Error: All changes to ${SPECFILE} must be committed first" >&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if git rev-parse --verify --quiet origin/$$current > /dev/null; then \
|
||||
git pull --rebase; \
|
||||
fi
|
||||
git tag $(SRPMVERS)-lts
|
||||
git push origin $$($(LTSUTILS) current-branch) refs/tags/$(SRPMVERS)-lts
|
||||
$(KOJI_CMD) build $$KOJI_NOWAIT $$($(LTSUTILS) current-branch) $(PKG_BASE_URL)/$(PKG_NAME)?#$(SRPMVERS)-lts
|
||||
+9
-7
@@ -11,6 +11,7 @@ SHELL = /bin/bash
|
||||
|
||||
PKGS = $(shell cat $(PACKAGES_FILE))
|
||||
PKGS_LOCAL = $(sort $(filter ${PKGS},$(subst packages/,,$(wildcard packages/*))))
|
||||
PKGS_ORPHANED = $(sort $(filter-out common ${PKGS},$(subst packages/,,$(wildcard packages/*))))
|
||||
|
||||
proj_PKGS = $(addprefix proj_,$(PROJ_PKGS))
|
||||
clone_PKGS = $(addprefix clone_,$(PKGS))
|
||||
@@ -128,11 +129,9 @@ pull: ${PULL_PKGS}
|
||||
#help clean-pkgs-dir: For packages that are no longer present in the distro,
|
||||
#help removes the associated package repos from the ./packages tree
|
||||
clean-pkgs-dir: $(PACKAGES_FILE)
|
||||
@for p in `ls packages`; do \
|
||||
if ! grep -wq "^$$p$$" "$<" && [ "$$p" != common ]; then \
|
||||
echo "Removing $$p from packages, it is no longer in common/packages."; \
|
||||
rm -rf packages/$$p; \
|
||||
fi \
|
||||
@for p in ${PKGS_ORPHANED}; do \
|
||||
echo "Removing $$p from packages, it is no longer in common/packages."; \
|
||||
rm -rf packages/$$p; \
|
||||
done
|
||||
@echo "packages directory cleaned";
|
||||
|
||||
@@ -229,8 +228,11 @@ autospecnew: preautospecnew-checks localreponotice
|
||||
if [ $$? -eq 0 ]; then \
|
||||
$(MAKE) link-new-rpms PKG_REPO_DIR="${TOPLVL}/packages/${NAME}"; \
|
||||
$(TOPLVL)/projects/common/checkblacklist.sh $(TOPLVL)/projects/common/blacklist $(TOPLVL)/packages/${NAME}/results/*.rpm; \
|
||||
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) show) > $(TOPLVL)/packages/$(NAME)/for-review.txt; \
|
||||
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) show); \
|
||||
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) format-patch -1 --stdout) > $(TOPLVL)/packages/$(NAME)/for-review.txt; \
|
||||
printf "\n**\n"; \
|
||||
printf "** NOTICE: A patch with changes is available in the file $(TOPLVL)/packages/$(NAME)/for-review.txt\n"; \
|
||||
printf "** Please look through this file and if you are unsure, please submit for code review with git send-email\n"; \
|
||||
printf "**\n\n"; \
|
||||
fi; \
|
||||
else \
|
||||
echo "$(NAME) already exists at $(TOPLVL)/packages/$(NAME)"; \
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
TEST = test.test_ltsutils
|
||||
|
||||
.PHONY: test
|
||||
test:
|
||||
PYTHONPATH=. python -m unittest -v -k .Test $(TEST)
|
||||
@@ -0,0 +1,19 @@
|
||||
# LTS package maintenance utility
|
||||
|
||||
This tooling is designed to automate 2 main tasks that are part of
|
||||
the package maintenance workflow of Clear Linux LTS. These tasks are:
|
||||
- Back-porting of a patch (e.g. security fix) to older branches.
|
||||
- Building RPMs with the intent of sharing binaries of older LTS branches to
|
||||
newer branches whenever possible.
|
||||
|
||||
There should be no need to run this tool directly. Instead use the following
|
||||
targets defined in Makefile.common.lts:
|
||||
- lts-show: Show a summary of active LTS branches
|
||||
- lts-backport: Attempt to fast-forward the previous active branch to the current branch
|
||||
- lts-build: Build RPM in Koji, or reuse existing build from older branch
|
||||
|
||||
"Active" branches correspond to LTS releases that currently have support.
|
||||
They are listed in a flat file "active-branches" in "lts" directory, from
|
||||
oldest to newest. New entries are added by Clear Linux LTS developers as
|
||||
new releases become available, and entries removed as releases become
|
||||
obsolete.
|
||||
@@ -0,0 +1,52 @@
|
||||
import pathlib
|
||||
from subprocess import PIPE, CalledProcessError
|
||||
from .shell import Shell
|
||||
|
||||
class PackageRepo:
|
||||
'''Represents a package repository. Most methods are wrappers of git commands.'''
|
||||
class UnknownCurrentBranchException(Exception): pass
|
||||
class InvalidBranchException(Exception): pass
|
||||
|
||||
def __init__(self, name, path):
|
||||
self.name = name
|
||||
self.path = pathlib.Path(path)
|
||||
self.sh = Shell(self.path)
|
||||
|
||||
def getNVR(self, commit='HEAD'):
|
||||
with self.sh.popen(['git', 'show', '{}:{}.spec'.format(commit, self.name)], stdout=PIPE) as specfile:
|
||||
nvr = self.sh.run('rpmspec --srpm -q --queryformat %{NVR} /dev/stdin', stdin=specfile.stdout)
|
||||
return tuple(nvr.stdout.strip().rsplit('-', maxsplit=2))
|
||||
|
||||
def checkoutBranch(self, branch, allow_remote=False):
|
||||
# allow_remote=True allows checking out a new remote-tracking branch
|
||||
if not allow_remote and not self.hasBranch(branch):
|
||||
raise self.InvalidBranchException(branch)
|
||||
self.sh.run_args(['git', 'checkout', branch], capture_output=False)
|
||||
|
||||
def fastForwardBranch(self, old, new):
|
||||
self.checkoutBranch(old)
|
||||
if not self.hasBranch(new):
|
||||
raise self.InvalidBranchException(new)
|
||||
self.sh.run_args(['git', 'merge', '--ff-only', new], capture_output=False)
|
||||
|
||||
def getActiveBranches(self):
|
||||
toplvl = pathlib.Path(self.path) / '../..'
|
||||
common = toplvl / 'projects/common'
|
||||
active_branches = common / 'lts/active-branches'
|
||||
with active_branches.open() as f:
|
||||
return [line.rstrip() for line in f]
|
||||
|
||||
def getCurrentBranch(self):
|
||||
try:
|
||||
head = self.sh.run('git symbolic-ref HEAD').stdout.strip()
|
||||
except CalledProcessError:
|
||||
raise self.UnknownCurrentBranchException
|
||||
|
||||
refs_heads = 'refs/heads/'
|
||||
assert head.startswith(refs_heads)
|
||||
head = head[len(refs_heads):]
|
||||
return head
|
||||
|
||||
def hasBranch(self, branch):
|
||||
p = self.sh.run_args(['git', 'rev-parse', 'refs/heads/'+branch], check=False)
|
||||
return p.returncode == 0
|
||||
@@ -0,0 +1,27 @@
|
||||
import subprocess, shlex
|
||||
|
||||
class Shell:
|
||||
# Default options passed to subprocess.run. May be customized per-instance.
|
||||
cwd = None
|
||||
check = True
|
||||
capture_output = True
|
||||
text = True
|
||||
|
||||
def __init__(self, cwd=None):
|
||||
if cwd: self.cwd = cwd
|
||||
|
||||
def run_args(self, args, **kwargs):
|
||||
kwargs1 = {
|
||||
'check': self.check,
|
||||
'capture_output': self.capture_output,
|
||||
'text': self.text,
|
||||
'cwd': self.cwd
|
||||
}
|
||||
kwargs1.update(kwargs)
|
||||
return subprocess.run(args, **kwargs1)
|
||||
|
||||
def run(self, cmd, **kwargs):
|
||||
return self.run_args(shlex.split(cmd), **kwargs)
|
||||
|
||||
def popen(self, args, **kwargs):
|
||||
return subprocess.Popen(args, cwd=self.cwd, **kwargs)
|
||||
+161
@@ -0,0 +1,161 @@
|
||||
#!/usr/bin/python
|
||||
import sys,argparse
|
||||
|
||||
from ltsutils.package_repo import PackageRepo
|
||||
|
||||
def log(msg, **kwargs):
|
||||
print(msg, file=sys.stderr)
|
||||
|
||||
def init_parser():
|
||||
main = argparse.ArgumentParser()
|
||||
main.add_argument('package_name', nargs=1)
|
||||
subparsers = main.add_subparsers(dest='command', metavar='command', required=True)
|
||||
|
||||
# Package maintenance commands
|
||||
p = subparsers.add_parser('prev-branch',
|
||||
help='show previous branch')
|
||||
p.add_argument('--checkout', action='store_true', help='checkout the branch')
|
||||
p = subparsers.add_parser('next-branch',
|
||||
help='show next branch')
|
||||
p.add_argument('--checkout', action='store_true', help='checkout the branch')
|
||||
p = subparsers.add_parser('current-branch',
|
||||
help='show current branch')
|
||||
p = subparsers.add_parser('is-same-version',
|
||||
help='return true if package version is the same as the given branch')
|
||||
p.add_argument('branch', nargs=1)
|
||||
p = subparsers.add_parser('fast-forward',
|
||||
help='fast-forward current branch to a newer branch')
|
||||
p.add_argument('branch', nargs=1)
|
||||
|
||||
# RPM build commands
|
||||
p = subparsers.add_parser('can-reuse-binary',
|
||||
help='check if binary from another branch can be used in current branch')
|
||||
p.add_argument('branch', nargs=1)
|
||||
|
||||
# Other commands
|
||||
p = subparsers.add_parser('prompt',
|
||||
help='prompt user to continue and return appropriate exit code')
|
||||
p = subparsers.add_parser('sanity-check',
|
||||
help='run sanity checks for data consistency')
|
||||
|
||||
return main
|
||||
|
||||
def prev_branch(args, repo):
|
||||
active_branches = repo.getActiveBranches()
|
||||
current = repo.getCurrentBranch()
|
||||
|
||||
i = active_branches.index(current)
|
||||
if i == 0:
|
||||
log('Already on oldest active branch.')
|
||||
return False
|
||||
|
||||
prev = active_branches[i-1]
|
||||
print(prev)
|
||||
if args.checkout:
|
||||
repo.checkoutBranch(prev, allow_remote=True)
|
||||
|
||||
def next_branch(args, repo):
|
||||
active_branches = repo.getActiveBranches()
|
||||
current = repo.getCurrentBranch()
|
||||
|
||||
i = active_branches.index(current)
|
||||
if i == len(active_branches)-1:
|
||||
log('Already on newest active branch.')
|
||||
return False
|
||||
|
||||
next_ = active_branches[i+1]
|
||||
print(next_)
|
||||
if args.checkout:
|
||||
repo.checkoutBranch(next_, allow_remote=False)
|
||||
|
||||
def current_branch(args, repo):
|
||||
current = repo.getCurrentBranch()
|
||||
print(current)
|
||||
|
||||
def is_same_version(args, other):
|
||||
current = repo.getCurrentBranch()
|
||||
other = args.branch[0]
|
||||
assert repo.hasBranch(other), 'Branch %s not found' % other
|
||||
|
||||
v1, v2 = [repo.getNVR('refs/heads/'+b)[1] for b in (current, other)]
|
||||
if v1 != v2:
|
||||
log('Current version {} does not match version {} on branch {}'.format(v1, v2, other))
|
||||
return v1 == v2
|
||||
|
||||
def fast_forward(args, repo):
|
||||
current = repo.getCurrentBranch()
|
||||
newer = args.branch[0]
|
||||
|
||||
log('Fast-forwarding {} to {}'.format(current, newer))
|
||||
repo.fastForwardBranch(current, newer)
|
||||
|
||||
def sanity_check(args, repo):
|
||||
ok = True
|
||||
# HEAD must point to a branch
|
||||
try:
|
||||
current = repo.getCurrentBranch()
|
||||
except PackageRepo.UnknownCurrentBranchException:
|
||||
log('Unknown current branch. Has a branch been checked out?')
|
||||
current = None
|
||||
ok = False
|
||||
|
||||
# active-branches file must not be empty
|
||||
active_branches = repo.getActiveBranches()
|
||||
if not len(active_branches):
|
||||
log('No active branches defined. Is active-branches file empty?')
|
||||
ok = False
|
||||
# current branch must be an active branch
|
||||
elif current and current not in active_branches:
|
||||
log('%s is not an active LTS branch.' % current)
|
||||
ok = False
|
||||
|
||||
return ok
|
||||
|
||||
def can_reuse_binary(args, repo):
|
||||
# Just compare versions for now
|
||||
# TODO: ABI compatibility testing
|
||||
current = repo.getCurrentBranch()
|
||||
older = args.branch[0]
|
||||
v1, v2 = [repo.getNVR('refs/heads/'+b)[1] for b in (older, current)]
|
||||
return v1 == v2
|
||||
|
||||
def prompt(args, repo):
|
||||
import selectors
|
||||
timeout = 60
|
||||
|
||||
while True:
|
||||
print('Continue? (y/N): ', end='', flush=True)
|
||||
with selectors.DefaultSelector() as sel:
|
||||
sel.register(sys.stdin, selectors.EVENT_READ)
|
||||
events = sel.select(timeout)
|
||||
if not len(events):
|
||||
print('Timed out after {}s.'.format(timeout))
|
||||
return False
|
||||
else:
|
||||
s = sys.stdin.readline().rstrip('\n')
|
||||
if s in ('Y', 'y', 'N', 'n', ''):
|
||||
break
|
||||
|
||||
if s in ('Y', 'y'):
|
||||
return True
|
||||
else:
|
||||
print('Cancelled.')
|
||||
return False
|
||||
|
||||
if __name__=='__main__':
|
||||
args = init_parser().parse_args()
|
||||
repo = PackageRepo(args.package_name[0], '.')
|
||||
|
||||
commands = {
|
||||
'prev-branch': prev_branch,
|
||||
'next-branch': next_branch,
|
||||
'current-branch': current_branch,
|
||||
'is-same-version': is_same_version,
|
||||
'fast-forward': fast_forward,
|
||||
'can-reuse-binary': can_reuse_binary,
|
||||
'prompt': prompt,
|
||||
'sanity-check': sanity_check,
|
||||
}
|
||||
ret = commands[args.command](args, repo)
|
||||
if ret is not None:
|
||||
exit(0 if ret else 1)
|
||||
@@ -0,0 +1,97 @@
|
||||
import unittest
|
||||
import os, pathlib, tempfile, logging
|
||||
import subprocess, functools
|
||||
|
||||
from ltsutils.package_repo import PackageRepo
|
||||
import ltsutils.shell
|
||||
|
||||
run = functools.partial(subprocess.run, check=True)
|
||||
|
||||
class Package:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.repo_url = 'https://github.com/clearlinux-pkgs/{}.git'.format(name)
|
||||
|
||||
class LTSUtilsTestCase(unittest.TestCase):
|
||||
toplvl = pathlib.Path('../../..')
|
||||
packages = toplvl / 'packages'
|
||||
|
||||
def cloneOrExtractRepo(self):
|
||||
tmpdir = pathlib.Path('/var/tmp/common-lts-test')
|
||||
tmpdir.mkdir(mode=0o700, exist_ok=True)
|
||||
tarball = tmpdir / '{}.tar.gz'.format(self.package.name)
|
||||
if tarball.exists():
|
||||
run(['tar', 'xf', tarball, '-C', self.workdir])
|
||||
else:
|
||||
run(['git', 'clone', self.package.repo_url, self.workdir])
|
||||
run(['tar', 'czf', tarball, '-C', self.workdir, '.'])
|
||||
|
||||
def setUp(self):
|
||||
self._tmpdir = tempfile.TemporaryDirectory(prefix='test-{}-'.format(self.package.name), dir=self.packages)
|
||||
self.workdir = pathlib.Path(self._tmpdir.name)
|
||||
self.cloneOrExtractRepo()
|
||||
self.repo = PackageRepo(self.package.name, self.workdir)
|
||||
|
||||
self._sh = ltsutils.shell.Shell(self.workdir)
|
||||
self._sh.capture_output = False
|
||||
|
||||
def sh(self, cmd):
|
||||
return self._sh.run(cmd)
|
||||
|
||||
def sh_stdout(self, cmd):
|
||||
return self._sh.run(cmd, capture_output=True).stdout.rstrip()
|
||||
|
||||
def tearDown(self):
|
||||
self._tmpdir.cleanup()
|
||||
|
||||
class PackageRepoTestCase(LTSUtilsTestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.L1 = self.package.L1
|
||||
self.L2 = self.package.L2
|
||||
self.sh('git branch L1 %s' % self.L1)
|
||||
self.sh('git branch L2 %s' % self.L2)
|
||||
|
||||
def testGetNVR(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def testHasBranch(self):
|
||||
self.assertTrue(self.repo.hasBranch('L2'))
|
||||
self.assertFalse(self.repo.hasBranch('L3'))
|
||||
|
||||
def testCheckoutBranch(self):
|
||||
self.repo.checkoutBranch('L2')
|
||||
self.assertEqual(self.sh_stdout('git rev-parse HEAD'), self.L2)
|
||||
|
||||
self.assertRaises(PackageRepo.InvalidBranchException, self.repo.checkoutBranch, 'L3')
|
||||
|
||||
def testFastForward(self):
|
||||
self.repo.fastForwardBranch('L1', 'L2')
|
||||
self.assertEqual(self.sh_stdout('git rev-parse L1'), self.L2)
|
||||
self.assertEqual(self.sh_stdout('git rev-parse L2'), self.L2)
|
||||
|
||||
def testGetCurrentBranch(self):
|
||||
self.repo.checkoutBranch('L2')
|
||||
b = self.repo.getCurrentBranch()
|
||||
self.assertEqual(b, 'L2')
|
||||
|
||||
self.sh('git checkout --detach L2')
|
||||
self.assertRaises(PackageRepo.UnknownCurrentBranchException, self.repo.getCurrentBranch)
|
||||
|
||||
class TestNano(PackageRepoTestCase):
|
||||
package = Package('nano')
|
||||
package.L1 = '3dcfa09f5217eedf6ec7539af7e243655d3abdb6' # 3.2-54
|
||||
package.L2 = 'b8243dd54e8feb16a11474f848b8735f5591cf12' # 3.2-55
|
||||
|
||||
def testGetNVR(self):
|
||||
nvr = self.repo.getNVR(self.L2)
|
||||
self.assertEqual(nvr, ('nano', '3.2', '55'))
|
||||
|
||||
class TestMySQL_Python(PackageRepoTestCase):
|
||||
package = Package('MySQL-python')
|
||||
package.L1 = '386163d8fc9c857c7194c4e958374af4c4f071ed' # 1.2.5-31
|
||||
package.L2 = 'f85bc5ec2141384f45f224d4464a0a44a981a4d4' # 1.2.5-33
|
||||
|
||||
def testGetNVR(self):
|
||||
nvr = self.repo.getNVR(self.L2)
|
||||
self.assertEqual(nvr, ('MySQL-python', '1.2.5', '33'))
|
||||
@@ -8,6 +8,7 @@ Cheetah
|
||||
CherryPy
|
||||
Coin
|
||||
ConfigArgParse
|
||||
CopyQ
|
||||
Counter
|
||||
Cura
|
||||
CuraEngine
|
||||
@@ -152,6 +153,8 @@ R-R.oo
|
||||
R-R.utils
|
||||
R-R2Cuba
|
||||
R-R2HTML
|
||||
R-R2WinBUGS
|
||||
R-R2jags
|
||||
R-R6
|
||||
R-RANN
|
||||
R-RColorBrewer
|
||||
@@ -308,6 +311,7 @@ R-desc
|
||||
R-devtools
|
||||
R-dfoptim
|
||||
R-dichromat
|
||||
R-diffobj
|
||||
R-diffusionMap
|
||||
R-digest
|
||||
R-dimRed
|
||||
@@ -387,6 +391,9 @@ R-fitdistrplus
|
||||
R-flashClust
|
||||
R-flexmix
|
||||
R-flexsurv
|
||||
R-fontBitstreamVera
|
||||
R-fontLiberation
|
||||
R-fontquiver
|
||||
R-forcats
|
||||
R-foreach
|
||||
R-forecast
|
||||
@@ -407,6 +414,7 @@ R-gbm
|
||||
R-gbutils
|
||||
R-gclus
|
||||
R-gdata
|
||||
R-gdtools
|
||||
R-geepack
|
||||
R-geiger
|
||||
R-generics
|
||||
@@ -503,6 +511,7 @@ R-lme4
|
||||
R-lmerTest
|
||||
R-lmtest
|
||||
R-locfit
|
||||
R-logcondens
|
||||
R-logspline
|
||||
R-loo
|
||||
R-lpSolve
|
||||
@@ -538,6 +547,7 @@ R-minpack.lm
|
||||
R-minqa
|
||||
R-mirt
|
||||
R-misc3d
|
||||
R-miscF
|
||||
R-miscTools
|
||||
R-mitools
|
||||
R-mixtools
|
||||
@@ -723,6 +733,7 @@ R-rstan
|
||||
R-rstanarm
|
||||
R-rstantools
|
||||
R-rstudio
|
||||
R-rstudio-server
|
||||
R-rstudioapi
|
||||
R-rsvg
|
||||
R-runjags
|
||||
@@ -882,14 +893,17 @@ SPIRV-Headers
|
||||
SPIRV-Tools
|
||||
SQLAlchemy
|
||||
SQLAlchemy-Utils
|
||||
Sane
|
||||
Send2Trash
|
||||
Shapely
|
||||
SmartXbar
|
||||
Solaar
|
||||
Sphinx
|
||||
SuiteSparse
|
||||
Tempita
|
||||
Theano
|
||||
Thunar
|
||||
UCD
|
||||
UkPostcodeParser
|
||||
Unidecode
|
||||
Uranium
|
||||
@@ -977,11 +991,14 @@ aniso8601
|
||||
ansible
|
||||
anyjson
|
||||
apache-ant
|
||||
apache-flink
|
||||
apache-hadoop
|
||||
apache-kafka
|
||||
apache-libcloud
|
||||
apache-maven
|
||||
apache-spark
|
||||
apache-tomcat
|
||||
apache-tomcat-dep
|
||||
apache-zookeeper
|
||||
apipkg
|
||||
appdirs
|
||||
@@ -997,6 +1014,8 @@ argparse
|
||||
aria2
|
||||
ark
|
||||
armadillo
|
||||
arp-scan
|
||||
arpack-ng
|
||||
artikulate
|
||||
asciidoc
|
||||
asciinema
|
||||
@@ -1153,6 +1172,8 @@ cantor
|
||||
capnproto
|
||||
caribou
|
||||
case
|
||||
cassandra
|
||||
cassandra-dep
|
||||
castellan
|
||||
casync
|
||||
catch2
|
||||
@@ -1281,6 +1302,7 @@ compat-hdf5-soname10
|
||||
compat-hwloc-soname5
|
||||
compat-hyperscan-soname4
|
||||
compat-icu4c-soname61
|
||||
compat-icu4c-soname63
|
||||
compat-ilmbase-soname23
|
||||
compat-intel-gmmlib-soname1
|
||||
compat-ipset-soname10
|
||||
@@ -1298,6 +1320,7 @@ compat-llvm-soname6
|
||||
compat-llvm-soname7
|
||||
compat-mariadb-soname18
|
||||
compat-mpfr-soname4
|
||||
compat-nettle-soname6
|
||||
compat-opencv-soname32
|
||||
compat-opencv-soname33
|
||||
compat-opencv-soname34
|
||||
@@ -1526,6 +1549,7 @@ dpdk
|
||||
dracut
|
||||
dragon
|
||||
drkonqi
|
||||
dssi
|
||||
dstat
|
||||
dtc
|
||||
dtopt
|
||||
@@ -1627,8 +1651,10 @@ flatpak
|
||||
flatpak-builder
|
||||
fldigi
|
||||
flex
|
||||
flink-dep
|
||||
flmsg
|
||||
flnet
|
||||
flrig
|
||||
fltk
|
||||
fluidsynth
|
||||
folks
|
||||
@@ -1637,6 +1663,7 @@ fontconfig
|
||||
fontforge
|
||||
fonttools
|
||||
fossil
|
||||
fox
|
||||
frameworkintegration
|
||||
freedv
|
||||
freeglut
|
||||
@@ -1650,7 +1677,6 @@ funcparserlib
|
||||
funcsigs
|
||||
functools32
|
||||
fuse
|
||||
futures
|
||||
futurist
|
||||
fwupd
|
||||
fwupdate
|
||||
@@ -1745,6 +1771,7 @@ gnome-music
|
||||
gnome-online-accounts
|
||||
gnome-panel
|
||||
gnome-photos
|
||||
gnome-screensaver
|
||||
gnome-screenshot
|
||||
gnome-session
|
||||
gnome-settings-daemon
|
||||
@@ -1774,6 +1801,7 @@ google-api-python-client
|
||||
google-apitools
|
||||
google-auth
|
||||
google-auth-httplib2
|
||||
google-pasta
|
||||
google-reauth
|
||||
googletest
|
||||
gparted
|
||||
@@ -1801,6 +1829,7 @@ grilo-plugins
|
||||
groff
|
||||
grpcio
|
||||
grub
|
||||
gsequencer
|
||||
gsettings-desktop-schemas
|
||||
gsl
|
||||
gsm
|
||||
@@ -1837,6 +1866,7 @@ hadoop-dep
|
||||
hamlib
|
||||
hammock
|
||||
haproxy
|
||||
hardinfo
|
||||
hardlink
|
||||
harfbuzz
|
||||
haskell-random
|
||||
@@ -1848,6 +1878,7 @@ helloworld
|
||||
helm
|
||||
help2man
|
||||
hexchat
|
||||
hexedit
|
||||
hgtools
|
||||
hicolor-icon-theme
|
||||
hiredis
|
||||
@@ -1880,6 +1911,8 @@ iasimage
|
||||
ibus
|
||||
ibus-libpinyin
|
||||
ibus-table
|
||||
ibus-typing-booster
|
||||
ibus-unikey
|
||||
icalendar
|
||||
icdiff
|
||||
iceauth
|
||||
@@ -1894,9 +1927,11 @@ igt-gpu-tools
|
||||
ilmbase
|
||||
image
|
||||
imageio
|
||||
imagescan
|
||||
imagesize
|
||||
imapfilter
|
||||
imlib2
|
||||
importlib_metadata
|
||||
indent
|
||||
infiniband-diags
|
||||
inflection
|
||||
@@ -1904,6 +1939,7 @@ influxdb
|
||||
iniparse
|
||||
init-rdahead
|
||||
inkscape
|
||||
innoextract
|
||||
inotify-tools
|
||||
intel-cmt-cat
|
||||
intel-compute-runtime
|
||||
@@ -1975,6 +2011,7 @@ jsonpath-rw-ext
|
||||
jsonpointer
|
||||
jsonrpc-glib
|
||||
jsonschema
|
||||
junit-xml
|
||||
jupyter
|
||||
jupyter-nbgallery
|
||||
jupyter-notebook-gist
|
||||
@@ -2216,6 +2253,7 @@ kwrited
|
||||
kxmlgui
|
||||
kxmlrpcclient
|
||||
kyotocabinet
|
||||
ladspa_sdk
|
||||
lark-parser
|
||||
latencytop
|
||||
latexcodec
|
||||
@@ -2230,6 +2268,7 @@ ldb
|
||||
ldc
|
||||
ledmon
|
||||
lensfun
|
||||
leptonica
|
||||
less
|
||||
leveldb
|
||||
lftp
|
||||
@@ -2260,6 +2299,7 @@ libaio
|
||||
libappindicator
|
||||
libarchive
|
||||
libarchive-c
|
||||
libass
|
||||
libassuan
|
||||
libasyncns
|
||||
libatasmart
|
||||
@@ -2276,6 +2316,7 @@ libcdio
|
||||
libcdr
|
||||
libcgroup
|
||||
libchamplain
|
||||
libclc
|
||||
libcmis
|
||||
libcomps
|
||||
libconfig
|
||||
@@ -2304,6 +2345,7 @@ libevent
|
||||
libexif
|
||||
libexttextcat
|
||||
libfabric
|
||||
libfakekey
|
||||
libfastjson
|
||||
libffi
|
||||
libffmpeg-stub
|
||||
@@ -2317,6 +2359,7 @@ libgcrypt
|
||||
libgd
|
||||
libgdata
|
||||
libgee
|
||||
libgeotiff
|
||||
libgepub
|
||||
libgfortran-avx
|
||||
libgfortran-compat-soname3
|
||||
@@ -2341,6 +2384,7 @@ libidn
|
||||
libidn2
|
||||
libindicator
|
||||
libinput
|
||||
libinstpatch
|
||||
libiscsi
|
||||
libisofs
|
||||
libite
|
||||
@@ -2426,6 +2470,7 @@ libsamplerate
|
||||
libsass
|
||||
libseccomp
|
||||
libsecret
|
||||
libshout
|
||||
libsigc++
|
||||
libsigsegv
|
||||
libsmbios
|
||||
@@ -2518,7 +2563,6 @@ linux-lts2017
|
||||
linux-lts2018
|
||||
linux-mainline
|
||||
linux-networktest
|
||||
linux-next
|
||||
linux-oracle
|
||||
linux-preempt-rt
|
||||
linux-steam-integration
|
||||
@@ -2549,6 +2593,7 @@ lua52
|
||||
lualgi
|
||||
luarocks
|
||||
lutris
|
||||
lv2
|
||||
lxml
|
||||
lxqt-about
|
||||
lxqt-admin
|
||||
@@ -2576,6 +2621,7 @@ make
|
||||
makedepend
|
||||
man-db
|
||||
man-pages
|
||||
man-pages-posix
|
||||
marble
|
||||
mariadb
|
||||
mash
|
||||
@@ -2593,6 +2639,7 @@ meld
|
||||
memcached
|
||||
memkind
|
||||
memshrinker
|
||||
memtier_benchmark
|
||||
menu-cache
|
||||
mercurial
|
||||
mesa
|
||||
@@ -2656,6 +2703,7 @@ msrestazure
|
||||
mstflint
|
||||
mtd-utils
|
||||
mtdev
|
||||
mtools
|
||||
mtr
|
||||
multidict
|
||||
multimon-ng
|
||||
@@ -2668,6 +2716,244 @@ musl
|
||||
mutagen
|
||||
mutt
|
||||
mutter
|
||||
mvn-RoaringBitmap
|
||||
mvn-activation
|
||||
mvn-aether-core
|
||||
mvn-animal-sniffer
|
||||
mvn-antlr
|
||||
mvn-antlr4
|
||||
mvn-aopalliance
|
||||
mvn-apache
|
||||
mvn-apache-jar-resource-bundle
|
||||
mvn-apache-rat
|
||||
mvn-arpack_combined_all
|
||||
mvn-asm
|
||||
mvn-autolink
|
||||
mvn-avalon-framework
|
||||
mvn-avro
|
||||
mvn-backport-util-concurrent
|
||||
mvn-beanshell
|
||||
mvn-biz.aQute.bndlib
|
||||
mvn-bndlib
|
||||
mvn-breeze-macros_2.11
|
||||
mvn-breeze_2.11
|
||||
mvn-build-helper-maven-plugin
|
||||
mvn-buildnumber-maven-plugin
|
||||
mvn-byte-buddy
|
||||
mvn-cdi-api
|
||||
mvn-checker-compat-qual
|
||||
mvn-checkstyle
|
||||
mvn-chill-java
|
||||
mvn-chill_2.11
|
||||
mvn-classworlds
|
||||
mvn-codehaus-jackson
|
||||
mvn-commons-beanutils
|
||||
mvn-commons-chain
|
||||
mvn-commons-cli
|
||||
mvn-commons-codec
|
||||
mvn-commons-collections
|
||||
mvn-commons-compress
|
||||
mvn-commons-configuration
|
||||
mvn-commons-crypto
|
||||
mvn-commons-digester
|
||||
mvn-commons-httpclient
|
||||
mvn-commons-io
|
||||
mvn-commons-jxpath
|
||||
mvn-commons-lang
|
||||
mvn-commons-lang3
|
||||
mvn-commons-logging
|
||||
mvn-commons-math3
|
||||
mvn-commons-parent
|
||||
mvn-commons-validator
|
||||
mvn-compress-lzf
|
||||
mvn-curator
|
||||
mvn-decentxml
|
||||
mvn-dom4j
|
||||
mvn-doxia
|
||||
mvn-doxia-sitetools
|
||||
mvn-doxia-tools
|
||||
mvn-enforcer
|
||||
mvn-error_prone_annotations
|
||||
mvn-extra-enforcer-rules
|
||||
mvn-file-management
|
||||
mvn-flexmark-java
|
||||
mvn-genesis
|
||||
mvn-google
|
||||
mvn-google-collections
|
||||
mvn-gson
|
||||
mvn-guava
|
||||
mvn-guice
|
||||
mvn-hamcrest
|
||||
mvn-htrace
|
||||
mvn-httpcomponents-client
|
||||
mvn-httpcomponents-core
|
||||
mvn-icu4j
|
||||
mvn-j2objc-annotations
|
||||
mvn-jackrabbit
|
||||
mvn-jackson-annotations
|
||||
mvn-jackson-core
|
||||
mvn-jackson-databind
|
||||
mvn-jackson-module-paranamer
|
||||
mvn-jackson-module-scala_2.11
|
||||
mvn-jansi
|
||||
mvn-java-boot-classpath-detector
|
||||
mvn-javax-servlet
|
||||
mvn-javax.annotation-api
|
||||
mvn-javax.inject
|
||||
mvn-javax.servlet-api
|
||||
mvn-javax.ws.rs-api
|
||||
mvn-jaxb-api
|
||||
mvn-jaxb-impl
|
||||
mvn-jdom
|
||||
mvn-jersey
|
||||
mvn-jersey-apache-client4
|
||||
mvn-jersey-core
|
||||
mvn-jersey-json
|
||||
mvn-jetty
|
||||
mvn-jetty-parent
|
||||
mvn-jetty-util
|
||||
mvn-jna
|
||||
mvn-jsch
|
||||
mvn-jsch.agentproxy.connector-factory
|
||||
mvn-jsch.agentproxy.core
|
||||
mvn-jsch.agentproxy.pageant
|
||||
mvn-jsch.agentproxy.sshagent
|
||||
mvn-jsch.agentproxy.svnkit-trilead-ssh2
|
||||
mvn-jsch.agentproxy.usocket-jna
|
||||
mvn-jsch.agentproxy.usocket-nc
|
||||
mvn-json4s_2.11
|
||||
mvn-jsoup
|
||||
mvn-jsr250-api
|
||||
mvn-jsr305
|
||||
mvn-jsr311-api
|
||||
mvn-jtransforms
|
||||
mvn-junit
|
||||
mvn-kryo
|
||||
mvn-kxml2
|
||||
mvn-leveldbjni
|
||||
mvn-log4j
|
||||
mvn-logback-classic
|
||||
mvn-logback-core
|
||||
mvn-logkit
|
||||
mvn-lz4-java
|
||||
mvn-machinist_2.11
|
||||
mvn-macro-compat_2.11
|
||||
mvn-maven
|
||||
mvn-maven-aether-provider
|
||||
mvn-maven-archiver
|
||||
mvn-maven-artifact
|
||||
mvn-maven-artifact-manager
|
||||
mvn-maven-builder-support
|
||||
mvn-maven-bundle-plugin
|
||||
mvn-maven-compat
|
||||
mvn-maven-core
|
||||
mvn-maven-embedder
|
||||
mvn-maven-error-diagnostics
|
||||
mvn-maven-model
|
||||
mvn-maven-model-builder
|
||||
mvn-maven-monitor
|
||||
mvn-maven-parent
|
||||
mvn-maven-plugin-api
|
||||
mvn-maven-plugin-descriptor
|
||||
mvn-maven-plugin-parameter-documenter
|
||||
mvn-maven-plugin-registry
|
||||
mvn-maven-plugin-testing
|
||||
mvn-maven-plugin-tools
|
||||
mvn-maven-profile
|
||||
mvn-maven-project
|
||||
mvn-maven-reporting-api
|
||||
mvn-maven-reporting-exec
|
||||
mvn-maven-reporting-impl
|
||||
mvn-maven-repository-metadata
|
||||
mvn-maven-resolver
|
||||
mvn-maven-resolver-provider
|
||||
mvn-maven-scm
|
||||
mvn-maven-scm-provider-svnjava
|
||||
mvn-maven-settings
|
||||
mvn-maven-shared
|
||||
mvn-maven-slf4j-provider
|
||||
mvn-maven-surefire
|
||||
mvn-maven-toolchain
|
||||
mvn-minlog
|
||||
mvn-mockito-core
|
||||
mvn-modello
|
||||
mvn-mojo-parent
|
||||
mvn-mojo-signature
|
||||
mvn-mvnplugins
|
||||
mvn-nekohtml
|
||||
mvn-netlib-java
|
||||
mvn-nexus-maven-plugins
|
||||
mvn-nexus-public
|
||||
mvn-objenesis
|
||||
mvn-opencsv
|
||||
mvn-openhtmltopdf-parent
|
||||
mvn-org.apache.felix.bundlerepository
|
||||
mvn-org.eclipse.sisu.inject
|
||||
mvn-org.eclipse.sisu.plexus
|
||||
mvn-org.osgi.compendium
|
||||
mvn-org.osgi.core
|
||||
mvn-oro
|
||||
mvn-osgi-resource-locator
|
||||
mvn-oss-parents
|
||||
mvn-ow2
|
||||
mvn-paranamer
|
||||
mvn-parquet-mr
|
||||
mvn-pdfbox
|
||||
mvn-plexus
|
||||
mvn-plexus-archiver
|
||||
mvn-plexus-build-api
|
||||
mvn-plexus-cipher
|
||||
mvn-plexus-classworlds
|
||||
mvn-plexus-cli
|
||||
mvn-plexus-compiler
|
||||
mvn-plexus-containers
|
||||
mvn-plexus-i18n
|
||||
mvn-plexus-interactivity
|
||||
mvn-plexus-interpolation
|
||||
mvn-plexus-io
|
||||
mvn-plexus-languages
|
||||
mvn-plexus-resources
|
||||
mvn-plexus-utils
|
||||
mvn-plexus-velocity
|
||||
mvn-protobuf-java
|
||||
mvn-py4j
|
||||
mvn-pyrolite
|
||||
mvn-qdox
|
||||
mvn-sequence-library
|
||||
mvn-servlet-api
|
||||
mvn-shapeless_2.11
|
||||
mvn-siesta
|
||||
mvn-sisu
|
||||
mvn-sisu-maven-plugin
|
||||
mvn-slf4j
|
||||
mvn-snakeyaml
|
||||
mvn-snappy
|
||||
mvn-snappy-java
|
||||
mvn-sonatype-aether
|
||||
mvn-sonatype-plexus-sec-dispatcher
|
||||
mvn-spice-zapper
|
||||
mvn-spire_2.11
|
||||
mvn-sqljet
|
||||
mvn-sslext
|
||||
mvn-stream-lib
|
||||
mvn-struts
|
||||
mvn-svnkit
|
||||
mvn-trilead-ssh2
|
||||
mvn-tycho
|
||||
mvn-validation-api
|
||||
mvn-velocity
|
||||
mvn-velocity-tools
|
||||
mvn-wagon
|
||||
mvn-weld-api
|
||||
mvn-weld-parent
|
||||
mvn-xbean
|
||||
mvn-xercesImpl
|
||||
mvn-xercesMinimal
|
||||
mvn-xml-apis
|
||||
mvn-xmlenc
|
||||
mvn-xmlunit
|
||||
mvn-xmlunit-core
|
||||
mvn-xz
|
||||
mxnet
|
||||
mycroft-core
|
||||
mypaint-brushes
|
||||
@@ -2716,6 +3002,7 @@ nghttp2
|
||||
nginx
|
||||
nginx-mainline
|
||||
nicstat
|
||||
nim
|
||||
ninja
|
||||
nload
|
||||
nlopt
|
||||
@@ -2763,6 +3050,7 @@ ocl-icd
|
||||
octave
|
||||
offlineimap
|
||||
oiio
|
||||
okteta
|
||||
okular
|
||||
olefile
|
||||
onig
|
||||
@@ -2921,12 +3209,14 @@ perl-Audio-FLAC-Header
|
||||
perl-Audio-Musepack
|
||||
perl-Audio-Scan
|
||||
perl-Audio-Wav
|
||||
perl-Authen-NTLM
|
||||
perl-Authen-SASL
|
||||
perl-B-Hooks-EndOfScope
|
||||
perl-B-Hooks-OP-Check
|
||||
perl-B-Keywords
|
||||
perl-BSD-Resource
|
||||
perl-Biblio-EndnoteStyle
|
||||
perl-Bit-Vector
|
||||
perl-Browser-Open
|
||||
perl-Business-ISBN
|
||||
perl-Business-ISBN-Data
|
||||
@@ -2944,6 +3234,8 @@ perl-CSS-DOM
|
||||
perl-CSS-Minifier-XS
|
||||
perl-CSS-Tiny
|
||||
perl-Cache-Simple-TimedExpiry
|
||||
perl-Cairo
|
||||
perl-Cairo-GObject
|
||||
perl-Calendar-Simple
|
||||
perl-Canary-Stability
|
||||
perl-Capture-Tiny
|
||||
@@ -2991,6 +3283,7 @@ perl-Context-Preserve
|
||||
perl-Convert-ASN1
|
||||
perl-Convert-Binary-C
|
||||
perl-Cookie-Baker
|
||||
perl-Coro
|
||||
perl-Cpanel-JSON-XS
|
||||
perl-Crypt-DH-GMP
|
||||
perl-Crypt-Eksblowfish
|
||||
@@ -3003,6 +3296,7 @@ perl-Curses
|
||||
perl-DBD-Pg
|
||||
perl-DBD-SQLite
|
||||
perl-DBD-SQLite2
|
||||
perl-DBD-mysql
|
||||
perl-DBI
|
||||
perl-DBICx-TestDatabase
|
||||
perl-DBIx-Class
|
||||
@@ -3032,6 +3326,7 @@ perl-Data-Serializer
|
||||
perl-Data-Structure-Util
|
||||
perl-Data-Uniqid
|
||||
perl-Data-Validate-IP
|
||||
perl-Date-Manip
|
||||
perl-DateTime
|
||||
perl-DateTime-Format-Builder
|
||||
perl-DateTime-Format-DateParse
|
||||
@@ -3093,6 +3388,7 @@ perl-ExtUtils-Config
|
||||
perl-ExtUtils-Depends
|
||||
perl-ExtUtils-Helpers
|
||||
perl-ExtUtils-InstallPaths
|
||||
perl-ExtUtils-PkgConfig
|
||||
perl-FCGI-ProcManager
|
||||
perl-Feed-Find
|
||||
perl-Fennec-Lite
|
||||
@@ -3140,7 +3436,11 @@ perl-Geo-IPfree
|
||||
perl-Getopt-Euclid
|
||||
perl-Getopt-Tabular
|
||||
perl-Git-Version-Compare
|
||||
perl-Glib
|
||||
perl-Glib-Object-Introspection
|
||||
perl-Graph
|
||||
perl-Gtk3
|
||||
perl-Gtk3-WebKit
|
||||
perl-Guard
|
||||
perl-HTML-Clean
|
||||
perl-HTML-Encoding
|
||||
@@ -3203,6 +3503,7 @@ perl-Inline-C
|
||||
perl-JSON
|
||||
perl-JSON-MaybeXS
|
||||
perl-JSON-RPC
|
||||
perl-JSON-XS
|
||||
perl-JavaScript-Minifier-XS
|
||||
perl-LWP-MediaTypes
|
||||
perl-LWP-Protocol-https
|
||||
@@ -3287,10 +3588,12 @@ perl-Moose
|
||||
perl-MooseX-Role-Parameterized
|
||||
perl-MooseX-Role-WithOverloading
|
||||
perl-Mozilla-CA
|
||||
perl-Net-Bluetooth
|
||||
perl-Net-CIDR-Lite
|
||||
perl-Net-DBus
|
||||
perl-Net-DNS
|
||||
perl-Net-DNS-Resolver-Programmable
|
||||
perl-Net-Daemon
|
||||
perl-Net-HTTP
|
||||
perl-Net-IDN-Encode
|
||||
perl-Net-INET6Glue
|
||||
@@ -3346,6 +3649,7 @@ perl-PerlIO-eol
|
||||
perl-PerlIO-gzip
|
||||
perl-PerlIO-utf8_strict
|
||||
perl-PerlIO-via-Timeout
|
||||
perl-PlRPC
|
||||
perl-Pod-Constants
|
||||
perl-Pod-Coverage
|
||||
perl-Pod-LaTeX
|
||||
@@ -3366,6 +3670,7 @@ perl-Role-Basic
|
||||
perl-Role-Tiny
|
||||
perl-Roman
|
||||
perl-Router-Simple
|
||||
perl-SGLMSpm
|
||||
perl-SMTP-Server
|
||||
perl-SQL-Abstract
|
||||
perl-SQL-Translator
|
||||
@@ -3443,6 +3748,7 @@ perl-Test-MockTime
|
||||
perl-Test-More-UTF8
|
||||
perl-Test-Most
|
||||
perl-Test-Needs
|
||||
perl-Test-NeedsDisplay
|
||||
perl-Test-NoWarnings
|
||||
perl-Test-Number-Delta
|
||||
perl-Test-Output
|
||||
@@ -3471,6 +3777,7 @@ perl-Text-Brew
|
||||
perl-Text-CSV
|
||||
perl-Text-CSV-Encoded
|
||||
perl-Text-CSV_XS
|
||||
perl-Text-CharWidth
|
||||
perl-Text-Diff
|
||||
perl-Text-FindIndent
|
||||
perl-Text-Format
|
||||
@@ -3486,6 +3793,7 @@ perl-Text-TabularDisplay
|
||||
perl-Text-Template
|
||||
perl-Text-Trim
|
||||
perl-Text-Unidecode
|
||||
perl-Text-WrapI18N
|
||||
perl-Text-Wrapper
|
||||
perl-Tie-Cycle
|
||||
perl-Tie-IxHash
|
||||
@@ -3509,10 +3817,12 @@ perl-URI-Escape-XS
|
||||
perl-URI-Fetch
|
||||
perl-URI-Find
|
||||
perl-UUID-Tiny
|
||||
perl-Unicode-LineBreak
|
||||
perl-Unicode-Map
|
||||
perl-Variable-Magic
|
||||
perl-WWW-Form-UrlEncoded-XS
|
||||
perl-WWW-RobotRules
|
||||
perl-X11-IdleTime
|
||||
perl-X11-Protocol
|
||||
perl-XML-Atom
|
||||
perl-XML-Feed
|
||||
@@ -3561,6 +3871,7 @@ persistent
|
||||
pesign
|
||||
pexpect
|
||||
phonon
|
||||
phonon-vlc
|
||||
phoronix-test-suite
|
||||
php
|
||||
php-imagick
|
||||
@@ -3690,6 +4001,7 @@ pygtkglext
|
||||
pyhs100
|
||||
pyinotify
|
||||
pykerberos
|
||||
pykwalify
|
||||
pylama
|
||||
pyliblzma
|
||||
pylint
|
||||
@@ -3735,6 +4047,7 @@ python-crfsuite
|
||||
python-dateutil
|
||||
python-dateutil-legacypython
|
||||
python-designateclient
|
||||
python-distutils-extra
|
||||
python-dldt
|
||||
python-editor
|
||||
python-future
|
||||
@@ -3909,9 +4222,10 @@ rsync
|
||||
rsyslog
|
||||
rt-tests
|
||||
rtkit
|
||||
rtmpdump
|
||||
rtslib-fb
|
||||
rttr
|
||||
ruamel-yaml
|
||||
ruamel.yaml
|
||||
ruby
|
||||
runc
|
||||
rust-std32
|
||||
@@ -3930,6 +4244,7 @@ sbc
|
||||
sbsigntools
|
||||
scala
|
||||
scala-dep
|
||||
scdoc
|
||||
scene-alembic
|
||||
scikit-build
|
||||
scikit-image
|
||||
@@ -3963,6 +4278,7 @@ setuptools_scm_git_archive
|
||||
setxkbmap
|
||||
sg3_utils
|
||||
shadow
|
||||
shapelib
|
||||
shared-mime-info
|
||||
sharutils
|
||||
shell
|
||||
@@ -3985,8 +4301,6 @@ snappy
|
||||
snitun
|
||||
snowballstemmer
|
||||
socat
|
||||
sof-crosstool-ng
|
||||
sof-newlib-xtensa
|
||||
solid
|
||||
sonnet
|
||||
sortedcontainers
|
||||
@@ -4043,6 +4357,7 @@ stellarium
|
||||
step
|
||||
stestr
|
||||
stevedore
|
||||
stoken
|
||||
stow
|
||||
strace
|
||||
stress-ng
|
||||
@@ -4094,6 +4409,7 @@ telemetrics-client
|
||||
telepathy-glib
|
||||
telepathy-logger
|
||||
telepathy-qt
|
||||
tempest
|
||||
tempest-lib
|
||||
template-glib
|
||||
tempora
|
||||
@@ -4107,6 +4423,7 @@ terminado
|
||||
terminaltables
|
||||
terminology
|
||||
terminus-font
|
||||
tesseract
|
||||
test-generator
|
||||
testdisk
|
||||
testpath
|
||||
@@ -4163,12 +4480,13 @@ tracker-miners
|
||||
traitlets
|
||||
tree
|
||||
trollius
|
||||
typed-ast
|
||||
typed_ast
|
||||
typing
|
||||
typing_extensions
|
||||
tzdata
|
||||
tzlocal
|
||||
ua-parser
|
||||
uamqp
|
||||
ucpp
|
||||
udisks2
|
||||
udunits
|
||||
@@ -4252,6 +4570,7 @@ wine
|
||||
winpdb
|
||||
wireless-regdb-master
|
||||
wireshark
|
||||
wmctrl
|
||||
woff2
|
||||
wok
|
||||
wol
|
||||
@@ -4319,6 +4638,7 @@ xkbcomp
|
||||
xkeyboard-config
|
||||
xkill
|
||||
xlog
|
||||
xmlb
|
||||
xmlrpc-c
|
||||
xmlsec1
|
||||
xmlstarlet
|
||||
@@ -4357,6 +4677,7 @@ yasm
|
||||
yelp
|
||||
yelp-tools
|
||||
yelp-xsl
|
||||
ytnef
|
||||
yum
|
||||
yum-metadata-parser
|
||||
zVMCloudConnector
|
||||
@@ -4368,8 +4689,10 @@ zeroconf
|
||||
zeroconf-ioslave
|
||||
zict
|
||||
zip
|
||||
zipp
|
||||
zlib
|
||||
znc
|
||||
zoneminder
|
||||
zookeeper-dep
|
||||
zope.component
|
||||
zope.configuration
|
||||
|
||||
+13
-1
@@ -195,7 +195,7 @@ def main():
|
||||
with open (filename, "r") as myfile:
|
||||
lines = myfile.readlines()
|
||||
else:
|
||||
output = subprocess.check_output("git show", shell=True).decode("latin-1")
|
||||
output = subprocess.check_output("git format-patch -1 --stdout", shell=True).decode("latin-1")
|
||||
lines = output.split("\n")
|
||||
|
||||
parse_patch(lines)
|
||||
@@ -225,6 +225,14 @@ def main():
|
||||
zap_line_in_file_start(".spec", "Source99 :")
|
||||
zap_line_in_file_start(".spec", "Source0 :")
|
||||
zap_line_in_file_start(".spec", "export SOURCE_DATE_EPOCH")
|
||||
zap_line_in_file_start(".spec", "export GCC_IGNORE_WERROR=1")
|
||||
zap_line_in_file_start(".spec", "export AR=gcc-ar")
|
||||
zap_line_in_file_start(".spec", "export RANLIB=gcc-ranlib")
|
||||
zap_line_in_file_start(".spec", "export NM=gcc-nm")
|
||||
zap_line_in_file_start(".spec", "export CFLAGS=\"$CFLAGS -O3 -ffat-lto-objects -flto=4 \"")
|
||||
zap_line_in_file_start(".spec", "export FCFLAGS=\"$CFLAGS -O3 -ffat-lto-objects -flto=4 \"")
|
||||
zap_line_in_file_start(".spec", "export FFLAGS=\"$CFLAGS -O3 -ffat-lto-objects -flto=4 \"")
|
||||
zap_line_in_file_start(".spec", "export CXXFLAGS=\"$CXXFLAGS -O3 -ffat-lto-objects -flto=4 \"")
|
||||
zap_line_in_file_start(".spec", "%setup -q -n ")
|
||||
zap_line_in_file_start(".spec", "URL :")
|
||||
zap_line_in_file_start(".spec", "Version :")
|
||||
@@ -236,6 +244,7 @@ def main():
|
||||
zap_line_in_file_start(".spec", "data components for the")
|
||||
zap_line_in_file_start(".spec", "locales components for the")
|
||||
zap_line_in_file_start(".spec", "license components for the")
|
||||
zap_line_in_file_start(".spec", "doc components for the")
|
||||
zap_line_in_file_start(".spec", "Group: Default")
|
||||
zap_line_in_file_start(".spec", "export http_proxy=http://127.0.0.1:9/")
|
||||
zap_line_in_file_start(".spec", "export https_proxy=http://127.0.0.1:9/")
|
||||
@@ -246,13 +255,16 @@ def main():
|
||||
zap_line_in_file_start(".spec", "Group: Binaries")
|
||||
zap_line_in_file_start(".spec", "Group: Data")
|
||||
zap_line_in_file_start(".spec", "Group: Libraries")
|
||||
zap_line_in_file_start(".spec", "Group: Documentation")
|
||||
zap_line_in_file_start(".spec", "export LANG=C")
|
||||
zap_line_in_file_start(".spec", "%description lib")
|
||||
zap_line_in_file_start(".spec", "%description bin")
|
||||
zap_line_in_file_start(".spec", "%description data")
|
||||
zap_line_in_file_start(".spec", "%description doc")
|
||||
zap_line_in_file_start(".spec", "%description locales")
|
||||
zap_line_in_file_start(".spec", "%description dev")
|
||||
zap_line_in_file_start(".spec", "%description license")
|
||||
zap_line_in_file_start(".spec", "%package doc")
|
||||
|
||||
zap_line_in_file_start("b/Makefile", "URL =")
|
||||
zap_line_in_file_start("b/Makefile", "PKG_NAME :=")
|
||||
|
||||
Reference in New Issue
Block a user