mock
mock copied to clipboard
Bash completion wrt install completes source RPMs instead of "binary" RPMs after the first "binary" RPM
Short description of the problem
When I try bash completion with mock -r fedora-rawhide-x86_64 install
the first argument is completed for the "binary" RPM, but the second (third, ...) argument is completed to SRPMs only.
For example, consider I have the following RPMs available:
python-gast/results_python-gast/0.4.0/3.fc35/python-gast-0.4.0-3.fc35.src.rpm
python-gast/results_python-gast/0.4.0/3.fc35/python3-gast-0.4.0-3.fc35.noarch.rpm
python-beniget/results_python-beniget/0.3.0/3.fc35/python-beniget-0.3.0-3.fc35.src.rpm
python-beniget/results_python-beniget/0.3.0/3.fc35/python3-beniget-0.3.0-3.fc35.noarch.rpm
And I type (I've changed some repetitive parts to ...
for brevity):
$ mock -r fedora-rawhide-x86_64 install python-gast/r[Tab]
$ mock ... install python-gast/results_python-gast/[Tab]
$ mock ... install python-gast/results_python-gast/0.4.0/[Tab]
$ mock ... install python-gast/results_python-gast/0.4.0/3.fc35/[Tab]
$ mock ... install python-gast/results_python-gast/0.4.0/3.fc35/python3-gast-0.4.0-3.fc35.noarch.rpm
$ mock ... install .../python3-gast-0.4.0-3.fc35.noarch.rpm python-beniget/r[Tab]
$ mock ... install .../python3-gast-0.4.0-3.fc35.noarch.rpm python-beniget/results_python-beniget/[Tab]
$ mock ... install .../python3-gast-0.4.0-3.fc35.noarch.rpm python-beniget/results_python-beniget/0.3.0/[Tab]
$ mock ... install .../python3-gast-0.4.0-3.fc35.noarch.rpm python-beniget/results_python-beniget/0.3.0/3.fc35/[Tab]
$ mock ... install .../python3-gast-0.4.0-3.fc35.noarch.rpm python-beniget/results_python-beniget/0.3.0/3.fc35/python-beniget-0.3.0-3.fc35.src.rpm
In the last completion, I expect python3-beniget-0.3.0-3.fc35.noarch.rpm
, not python-beniget-0.3.0-3.fc35.src.rpm
.
Output of rpm -q mock
mock-2.10-1.fc33.noarch
Steps to reproduce issue
- Prepare some "binary" RPMs and some source RPMs
- Type
mock -r fedora-rawhide-x86_64 install
to your Bash shell - Try to Tab complete multiple "binary" RPMs as arguments
The first "binary" RPM is completed. Any other argument prefers to complete a source RPM instead.
Any additional notes
Output of mock --debug-config
mock --debug-config
config_opts['bootstrap_image'] = 'registry.fedoraproject.org/fedora:rawhide'
config_opts['build_log_fmt_str'] = '%(message)s'
config_opts['cache_alterations'] = False
config_opts['chroot_name'] = 'fedora-rawhide-x86_64'
config_opts['chroot_setup_cmd'] = 'install @{% if mirrored %}buildsys-{% endif %}build'
config_opts['cleanup_on_failure'] = False
config_opts['cleanup_on_success'] = False
config_opts['config_file'] = '/etc/mock/fedora-rawhide-x86_64.cfg'
config_opts['config_path'] = '/etc/mock'
config_opts['config_paths'] = ['/etc/mock/site-defaults.cfg',
'/etc/mock/fedora-rawhide-x86_64.cfg',
'/etc/mock/templates/fedora-rawhide.tpl',
'/home/churchyard/.config/mock.cfg']
config_opts['dist'] = 'rawhide'
config_opts['dnf.conf'] = ('\n'
'[main]\n'
'keepcache=1\n'
'debuglevel=2\n'
'reposdir=/dev/null\n'
'logfile=/var/log/yum.log\n'
'retries=20\n'
'obsoletes=1\n'
'gpgcheck=0\n'
'assumeyes=1\n'
'syslog_ident=mock\n'
'syslog_device=\n'
'install_weak_deps=0\n'
'metadata_expire=0\n'
'best=1\n'
'module_platform_id=platform:f{{ releasever }}\n'
'protected_packages=\n'
'user_agent={{ user_agent }}\n'
'\n'
'{%- macro rawhide_gpg_keys() -%}\n'
'file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary\n'
'{%- for version in [releasever|int, releasever|int - 1]\n'
'%} file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ '
'version }}-primary\n'
'{%- endfor %}\n'
'{%- endmacro %}\n'
'\n'
'# repos\n'
'\n'
'[local]\n'
'name=local\n'
'baseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/$basearch/\n'
'cost=2000\n'
'enabled={{ not mirrored }}\n'
'skip_if_unavailable=False\n'
'\n'
'[local-source]\n'
'name=local-source\n'
'baseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/src/\n'
'cost=2000\n'
'enabled=0\n'
'skip_if_unavailable=False\n'
'\n'
'{% if mirrored %}\n'
'[fedora]\n'
'name=fedora\n'
'metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch\n'
'gpgkey={{ rawhide_gpg_keys() }}\n'
'gpgcheck=1\n'
'skip_if_unavailable=False\n'
'\n'
'[fedora-debuginfo]\n'
'name=Fedora Rawhide - Debug\n'
'metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-debug&arch=$basearch\n'
'enabled=0\n'
'gpgkey={{ rawhide_gpg_keys() }}\n'
'gpgcheck=1\n'
'skip_if_unavailable=False\n'
'\n'
'[fedora-source]\n'
'name=fedora-source\n'
'metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-source&arch=$basearch\n'
'gpgkey={{ rawhide_gpg_keys() }}\n'
'gpgcheck=1\n'
'enabled=0\n'
'skip_if_unavailable=False\n'
'\n'
'# modular\n'
'\n'
'[rawhide-modular]\n'
'name=Fedora - Modular Rawhide - Developmental packages for the next Fedora '
'release\n'
'metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-modular&arch=$basearch\n'
'# if you want to enable it, you should set best=0\n'
'# see https://bugzilla.redhat.com/show_bug.cgi?id=1673851\n'
'enabled=0\n'
'gpgcheck=1\n'
'gpgkey={{ rawhide_gpg_keys() }}\n'
'skip_if_unavailable=False\n'
'\n'
'[rawhide-modular-debuginfo]\n'
'name=Fedora - Modular Rawhide - Debug\n'
'metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-modular-debug&arch=$basearch\n'
'enabled=0\n'
'gpgcheck=1\n'
'gpgkey={{ rawhide_gpg_keys() }}\n'
'skip_if_unavailable=False\n'
'\n'
'[rawhide-modular-source]\n'
'name=Fedora - Modular Rawhide - Source\n'
'metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-modular-source&arch=$basearch\n'
'enabled=0\n'
'gpgcheck=1\n'
'gpgkey={{ rawhide_gpg_keys() }}\n'
'skip_if_unavailable=False\n'
'{% endif %}\n')
config_opts['enable_disable_repos'] = []
config_opts['extra_chroot_dirs'] = ['/run/lock']
config_opts['files'] = {'etc/hosts': '127.0.0.1 localhost localhost.localdomain\n'
'::1 localhost localhost.localdomain localhost6 '
'localhost6.localdomain6\n'}
config_opts['legal_host_arches'] = ('x86_64',)
config_opts['macros'] = {'%_buildhost': 'carbon.local',
'%_rpmfilename': '%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm',
'%_topdir': '/builddir/build'}
config_opts['mirrored'] = True
config_opts['nosync'] = True
config_opts['nosync_force'] = True
config_opts['nspawn_args'] = ['--capability=cap_ipc_lock',
'--bind=/tmp/mock-resolv.idr5_g41:/etc/resolv.conf',
'--bind=/dev/btrfs-control',
'--bind=/dev/loop-control',
'--bind=/dev/loop0',
'--bind=/dev/loop1',
'--bind=/dev/loop2',
'--bind=/dev/loop3',
'--bind=/dev/loop4',
'--bind=/dev/loop5',
'--bind=/dev/loop6',
'--bind=/dev/loop7',
'--bind=/dev/loop8',
'--bind=/dev/loop9',
'--bind=/dev/loop10',
'--bind=/dev/loop11']
config_opts['plugin_conf'] = {'bind_mount_enable': True,
'bind_mount_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'create_dirs': False,
'dirs': [],
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'ccache_enable': False,
'ccache_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'compress': True,
'dir': '/var/cache/mock/fedora-rawhide-x86_64/ccache/u1000/',
'max_cache_size': '4G',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'chroot_scan_enable': False,
'chroot_scan_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'only_failed': True,
'regexes': ['^[^k]?core(\\.\\d+)?$', '\\.log$'],
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'compress_logs_enable': False,
'compress_logs_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'command': 'gzip',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'hw_info_enable': True,
'hw_info_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'lvm_root_enable': False,
'lvm_root_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'pool_name': 'mockbuild',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'mount_enable': True,
'mount_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'dirs': [],
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'overlayfs_enable': False,
'overlayfs_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'package_state_enable': True,
'package_state_opts': {'available_pkgs': False,
'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'installed_pkgs': True,
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'pm_request_enable': False,
'pm_request_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'procenv_enable': False,
'procenv_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'root_cache_enable': True,
'root_cache_opts': {'age_check': True,
'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'compress_program': 'lzop',
'decompress_program': None,
'dir': '/var/cache/mock/fedora-rawhide-x86_64/root_cache/',
'exclude_dirs': ['./proc',
'./sys',
'./dev',
'./tmp/ccache',
'./var/cache/yum',
'./var/cache/dnf',
'./var/log'],
'extension': '.lzo',
'max_age_days': 15,
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64',
'tar': 'gnutar'},
'rpkg_preprocessor_enable': False,
'rpkg_preprocessor_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'cmd': '/usr/bin/preproc-rpmspec %(source_spec)s '
'--output %(target_spec)s',
'requires': ['preproc-rpmspec'],
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'selinux_enable': True,
'selinux_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'showrc_enable': False,
'showrc_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'sign_enable': False,
'sign_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'cmd': 'rpmsign',
'opts': '--addsign %(rpms)s',
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'tmpfs_enable': False,
'tmpfs_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'keep_mounted': False,
'max_fs_size': None,
'mode': '0755',
'required_ram_mb': 900,
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'},
'yum_cache_enable': True,
'yum_cache_opts': {'basedir': '/var/lib/mock/fedora-rawhide-x86_64',
'cache_topdir': '/var/cache/mock',
'cachedir': '/var/cache/mock/fedora-rawhide-x86_64',
'max_age_days': 30,
'max_metadata_age_days': 30,
'online': True,
'resultdir': '/var/lib/mock/fedora-rawhide-x86_64/result',
'root': 'fedora-rawhide-x86_64'}}
config_opts['print_main_output'] = True
config_opts['releasever'] = '35'
config_opts['root'] = 'fedora-rawhide-{{ target_arch }}'
config_opts['root_log_fmt_str'] = '%(levelname)s %(filename)s:%(lineno)d: %(message)s'
config_opts['rpmbuild_arch'] = 'x86_64'
config_opts['state_log_fmt_str'] = '%(asctime)s - %(message)s'
config_opts['target_arch'] = 'x86_64'
config_opts['verbose'] = 1
Why would you want to install the SRPMs? Is it just out of a failure to exclude them, or are you trying to test builds in the mock chroot cage?
Why would you want to install the SRPMs?
I don't.
Oh: I see. My scripting around mock builds tends to segregate the SRPMs from the installable RPM's, and put them in a local working yum repo. I've a personal mock bootstrapping setup over at https://github.com/nkadel/mockrepo/tree/nkadel-2.16 , which I've tested it with and it's behaving well on CentOs 7.
Testing this in my working 'mockrepo' environment on EL7 and EL8 and fedora 35, I'm not seeing this issue at all. Can you double check yout command lines, without the trimming, and verify that the executable RPM actually existss?
Yes, this is still an issue and it still behaves exactly as when reported.
$ tree results_pytest/7.0.0~rc1/1.fc36/
results_pytest/7.0.0~rc1/1.fc36/
├── build.log
├── hw_info.log
├── installed_pkgs.log
├── pytest-7.0.0~rc1-1.fc36.src.rpm
├── python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm
├── root.log
└── state.log
$ mock -r fedora-rawhide-x86_64 install re
$ mock -r fedora-rawhide-x86_64 install results_pytest/
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm re
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm results_pytest/
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm results_pytest/7.0.0~rc1/
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm results_pytest/7.0.0~rc1/1.fc36/
$ mock -r fedora-rawhide-x86_64 install results_pytest/7.0.0~rc1/1.fc36/python3-pytest-7.0.0~rc1-1.fc36.noarch.rpm results_pytest/7.0.0~rc1/1.fc36/pytest-7.0.0~rc1-1.fc36.src.rpm
This is a confirmed issue, we just need some time to fix this... help is welcome!
Wait: you have an RPM file with '~' in the %{version} part of its name? That seems like a very bad idea. Can you discard that character in your 'Version:' entry of your .spec file? Handling new and unnecessary forms of syntactic sugar in RPM names seems troubleprone.
That seems like a very bad idea.
That is a quite common way to declare it is a pre-release version. Try rpmdev-vercmp 0.13.1 0.13.1~dev
.
It's not that common. Among 2446 RPMs for Fedora 35 x86_64, there are 55 RPMs with 'rc' in the %version value, only 2 of which use '~'. The others use "rc" or ".rc". Not saying it's invalid to use '~', but it's the sort of peculiar syntax that puts other programmers through extra work to deal with it.
It's accepted and supported since RPM 4.10 (and backported to RPM in RHEL 6 too), and approved in the Fedora Packaging Guidelines.
@nkadel Would you please stop posting issue comments here that aren't relevant to the issue? Thanks.
Since the binary RPM's rather than SRPM's are correctly bash-completed without a "~" in the name, I'd think that it's a relevant and contributing factor.
They are not, the ~
here is completely orthogonal topic (see the original report, where ~
isn't mentioned).
~~Otherwise LGTM~~ Wrong place to give LGTMs.
Thanks.