Spec URL: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06682477-open-vmdk/open-vmdk.spec SRPM URL: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06682477-open-vmdk/open-vmdk-0.3.6-1.fc40.src.rpm Description: Open VMDK is an assistant tool for creating Open Virtual Appliance (OVA). An OVA is a tar archive file with Open Virtualization Format (OVF) files inside, which is composed of an OVF descriptor with extension .ovf, one or more virtual machine disk image files with extension .vmdk, and a manifest file with extension .mf. Fedora Account System Username: idoenmez Testing functionality: ❯ vmdk-convert 64bit/Fedora\ 35\ \(64bit\).vdi test.vmdk Starting to convert 64bit/Fedora 35 (64bit).vdi to test.vmdk... Success
Taking this review...
Copr build: https://copr.fedorainfracloud.org/coprs/build/6682478 (succeeded) Review template: https://download.copr.fedorainfracloud.org/results/@fedora-review/fedora-review-2251171-open-vmdk/fedora-rawhide-x86_64/06682478-open-vmdk/fedora-review/review.txt Please take a look if any issues were found. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service If you want to trigger a new Copr build, add a comment containing new Spec and SRPM URLs or [fedora-review-service-build] string.
Spec review: > #Source0: https://github.com/vmware/open-vmdk/archive/refs/tags/v%%{version}.tar.gz > Source0: %{name}-%{version}.tar.gz This should be just "Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz" > %description > Open VMDK is an assistant tool for creating Open Virtual Appliance (OVA). An OVA is a tar archive file with Open Virtualization Format (OVF) files inside, which is composed of an OVF descriptor with extension .ovf, one or more virtual machine disk image files with extension .vmdk, and a manifest file with extension .mf. This needs to be hard wrapped to 79 columns. > %setup -q Please use "%autosetup -p1" here. > %build > %make_build If you intend to build this for EPEL, you should add "%{!?_auto_set_build_flags:%{set_build_flags}}" above "%make_build" > %files > %{_datadir}/%{name} Please add a trailing slash here. > %{_bindir}/* This is too greedy, please list out the binaries. > %config %{_sysconfdir}/* This is too greedy, please list out the config files.
Updated spec file: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06697233-open-vmdk/open-vmdk.spec Updated srpm: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06697233-open-vmdk/open-vmdk-0.3.6-1.fc40.src.rpm > This should be just "Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz" Fixed, thank you! >This needs to be hard wrapped to 79 columns. Done. > Please use "%autosetup -p1" here. Done. > If you intend to build this for EPEL, you should add "%{!?_auto_set_build_flags:%{set_build_flags}}" above "%make_build" Done, but I hope to get this in rawhide and Fedora proper. >Please add a trailing slash here. Done. >This is too greedy, please list out the binaries. Sigh, I've been lazy, done. > %config %{_sysconfdir}/* Done.
(In reply to İsmail Dönmez from comment #4) > Updated spec file: > https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora- > rawhide-x86_64/06697233-open-vmdk/open-vmdk.spec > Updated srpm: > https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora- > rawhide-x86_64/06697233-open-vmdk/open-vmdk-0.3.6-1.fc40.src.rpm > > > > If you intend to build this for EPEL, you should add "%{!?_auto_set_build_flags:%{set_build_flags}}" above "%make_build" > Done, but I hope to get this in rawhide and Fedora proper. > Yes, you need to do that. That's if you want it *also* to build properly in EPEL. One last thing, your changelog format isn't quite right. See here for valid changelog formats: https://docs.fedoraproject.org/en-US/packaging-guidelines/manual-changelog/
>One last thing, your changelog format isn't quite right. Thanks, fixed! New spec: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/srpm-builds/06702168/open-vmdk.spec New srpm: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/srpm-builds/06702168/open-vmdk-0.3.6-1.fc39.src.rpm
Created attachment 2001826 [details] The .spec file difference from Copr build 6682478 to 6702179
Copr build: https://copr.fedorainfracloud.org/coprs/build/6702179 (succeeded) Review template: https://download.copr.fedorainfracloud.org/results/@fedora-review/fedora-review-2251171-open-vmdk/fedora-rawhide-x86_64/06702179-open-vmdk/fedora-review/review.txt Please take a look if any issues were found. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service If you want to trigger a new Copr build, add a comment containing new Spec and SRPM URLs or [fedora-review-service-build] string.
> %{_bindir}/mkova.sh I don't love that this is called "mkova.sh". Is this an internal script used by the other tools, or is this something users are supposed to call directly? If it's the latter, can we patch the code to move this to %{_libexecdir}/open-vmdk/ and fix the callers to look there? If it's the former, what's stopping us from dropping the ".sh" extension?
(In reply to Neal Gompa from comment #9) > > %{_bindir}/mkova.sh > > I don't love that this is called "mkova.sh". Is this an internal script used > by the other tools, or is this something users are supposed to call > directly? If it's the latter, can we patch the code to move this to > %{_libexecdir}/open-vmdk/ and fix the callers to look there? If it's the > former, what's stopping us from dropping the ".sh" extension? Blech, I got it backwards. If it's the former, can we patch the code to move this to %{_libexecdir}/open-vmdk/ and fix the callers to look there? If it's the latter, what's stopping us from dropping the ".sh" extension?
(In reply to Neal Gompa from comment #9) > > %{_bindir}/mkova.sh > This is a legacy tool (ova-compose should be used instead), but still provided for compatiblity. Unfortunately, the extension should be kept to avoid breaking existing build systems relying on this script.
Thanks, Mohamed, for the explanation :)
Should we ship it in Fedora? If so, should it be subpackaged and marked as deprecated[1] so that no new packages are allowed to depend on it? [1]: https://docs.fedoraproject.org/en-US/packaging-guidelines/deprecating-packages/#_marking_a_package_deprecated
> Release: %{autorelease} Don't use %autorelease if you've got a regular changelog. Use "1%{?dist}" instead. Either that or switch the changelog section to: > %changelog > %autochangelog Just don't go halfway.
> Don't use %autorelease if you've got a regular changelog. Use "1%{?dist}" instead ACK, done. New spec: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/srpm-builds/06704854/open-vmdk.spec New srpm: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/srpm-builds/06704854/open-vmdk-0.3.6-1.fc39.src.rpm
Created attachment 2001945 [details] The .spec file difference from Copr build 6702179 to 6704862
Copr build: https://copr.fedorainfracloud.org/coprs/build/6704862 (succeeded) Review template: https://download.copr.fedorainfracloud.org/results/@fedora-review/fedora-review-2251171-open-vmdk/fedora-rawhide-x86_64/06704862-open-vmdk/fedora-review/review.txt Please take a look if any issues were found. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service If you want to trigger a new Copr build, add a comment containing new Spec and SRPM URLs or [fedora-review-service-build] string.
> %config %{_sysconfdir}/open-vmdk.conf This needs to be "%config(noreplace)".
/etc/open-vmdk.conf is not supposed to be modified: ❯ cat /etc/open-vmdk.conf PREFIX=/usr which is used by mkova.sh: [ -f /etc/open-vmdk.conf ] && . /etc/open-vmdk.conf [ ! -n "$PREFIX" ] && PREFIX=/usr
I can remove /etc/open-vmdk.conf, as we use the default prefix and don't expect it to be changed.
But then again, more config is passed: [ ! -n "$NUM_CPUS" ] && NUM_CPUS=2 [ ! -n "$MEM_SIZE" ] && MEM_SIZE=1024 [ ! -n "$FIRMWARE" ] && FIRMWARE="efi" I'll mark this as noreplace indeed.
Updated spec: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06705322-open-vmdk/open-vmdk.spec Updated srpm: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06705322-open-vmdk/open-vmdk-0.3.6-1.fc40.src.rpm
Created attachment 2001979 [details] The .spec file difference from Copr build 6704862 to 6705325
Copr build: https://copr.fedorainfracloud.org/coprs/build/6705325 (succeeded) Review template: https://download.copr.fedorainfracloud.org/results/@fedora-review/fedora-review-2251171-open-vmdk/fedora-rawhide-x86_64/06705325-open-vmdk/fedora-review/review.txt Please take a look if any issues were found. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service If you want to trigger a new Copr build, add a comment containing new Spec and SRPM URLs or [fedora-review-service-build] string.
(In reply to İsmail Dönmez from comment #22) > Updated spec: > https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora- > rawhide-x86_64/06705322-open-vmdk/open-vmdk.spec > Updated srpm: > https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora- > rawhide-x86_64/06705322-open-vmdk/open-vmdk-0.3.6-1.fc40.src.rpm Please see my comment #11. File extension for mkova.sh should not be removed.
> Please see my comment #11. File extension for mkova.sh should not be removed. That sneaked in as I was testing locally, reverted now. Thanks! Updated spec: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/srpm-builds/06706214/open-vmdk.spec Updated srpm: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/srpm-builds/06706214/open-vmdk-0.3.6-1.fc39.src.rpm
Created attachment 2001999 [details] The .spec file difference from Copr build 6705325 to 6706218
Copr build: https://copr.fedorainfracloud.org/coprs/build/6706218 (succeeded) Review template: https://download.copr.fedorainfracloud.org/results/@fedora-review/fedora-review-2251171-open-vmdk/fedora-rawhide-x86_64/06706218-open-vmdk/fedora-review/review.txt Please take a look if any issues were found. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service If you want to trigger a new Copr build, add a comment containing new Spec and SRPM URLs or [fedora-review-service-build] string.
Fedora compilation flags are not honored actually, according to COPR logs: + /usr/bin/make -O -j2 V=1 VERBOSE=1 for x in vmdk ova ova-compose templates; do /usr/bin/make -C $x all; done make[1]: Entering directory '/builddir/build/BUILD/open-vmdk-0.3.6/vmdk' mkdir -p ../build/vmdk make[1]: Leaving directory '/builddir/build/BUILD/open-vmdk-0.3.6/vmdk' make[1]: Entering directory '/builddir/build/BUILD/open-vmdk-0.3.6/vmdk' gcc -W -Wall -O2 -g -c -o ../build/vmdk/flat.o flat.c [...] A fix without patching the Makefile could be to pass flags through make: %build %{!?_auto_set_build_flags:%{set_build_flags}} %make_build CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS -lz"
The following should work for this: > %make_build CFLAGS="%{build_cflags}" LDFLAGS="%{build_ldflags}"
Oh, I see -lz (zlib-devel), the Makefile should probably be patched to be able to take user passed CFLAGS and LDFLAGS without dropping linking to dependencies.
Fixing the Makefile was easier, will also send upstream later. Updated spec: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06706384-open-vmdk/open-vmdk.spec Updated srpm: https://download.copr.fedorainfracloud.org/results/idoenmez/open-vmdk/fedora-rawhide-x86_64/06706384-open-vmdk/open-vmdk-0.3.6-1.fc40.src.rpm
Created attachment 2002008 [details] The .spec file difference from Copr build 6706218 to 6706401
Copr build: https://copr.fedorainfracloud.org/coprs/build/6706401 (succeeded) Review template: https://download.copr.fedorainfracloud.org/results/@fedora-review/fedora-review-2251171-open-vmdk/fedora-rawhide-x86_64/06706401-open-vmdk/fedora-review/review.txt Please take a look if any issues were found. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service If you want to trigger a new Copr build, add a comment containing new Spec and SRPM URLs or [fedora-review-service-build] string.
Package Review ============== Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated ===== MUST items ===== C/C++: [-]: Provides: bundled(gnulib) in place as required. Note: Sources not installed [x]: Package does not contain kernel modules. [x]: If your application is a C or C++ application you must list a BuildRequires against gcc, gcc-c++ or clang. [x]: Header files in -devel subpackage, if present. [x]: Package does not contain any libtool archives (.la) [x]: Package contains no static executables. [x]: Rpath absent or only used for internal libs. Generic: [x]: Package is licensed with an open-source compatible license and meets other legal requirements as defined in the legal section of Packaging Guidelines. [x]: If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package is included in %license. [x]: License field in the package spec file matches the actual license. Note: Checking patched sources after %prep for licenses. Licenses found: "*No copyright* Apache License 2.0", "Apache License 2.0", "Unknown or generated". 9 files have unknown license. Detailed output of licensecheck in /home/ngompa/2251171-open-vmdk/licensecheck.txt [x]: License file installed when any subpackage combination is installed. [x]: %build honors applicable compiler flags or justifies otherwise. [x]: Package contains no bundled libraries without FPC exception. [x]: Changelog in prescribed format. [x]: Sources contain only permissible code or content. [-]: Package contains desktop file if it is a GUI application. [-]: Development files must be in a -devel package [x]: Package uses nothing in %doc for runtime. [x]: Package consistently uses macros (instead of hard-coded directory names). [x]: Package is named according to the Package Naming Guidelines. [x]: Package does not generate any conflict. [x]: Package obeys FHS, except libexecdir and /usr/target. [-]: If the package is a rename of another package, proper Obsoletes and Provides are present. [x]: Requires correct, justified where necessary. [x]: Spec file is legible and written in American English. [-]: Package contains systemd file(s) if in need. [x]: Useful -debuginfo package or justification otherwise. [x]: Package is not known to require an ExcludeArch tag. [x]: Package complies to the Packaging Guidelines [x]: Package successfully compiles and builds into binary rpms on at least one supported primary architecture. [x]: Package installs properly. [x]: Rpmlint is run on all rpms the build produces. Note: There are rpmlint messages (see attachment). [x]: The License field must be a valid SPDX expression. [x]: Package requires other packages for directories it uses. [x]: Package must own all directories that it creates. [x]: Package does not own files or directories owned by other packages. [x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT [x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the beginning of %install. [x]: %config files are marked noreplace or the reason is justified. [x]: Macros in Summary, %description expandable at SRPM build time. [x]: Dist tag is present. [x]: Package does not contain duplicates in %files. [x]: Permissions on files are set properly. [x]: Package must not depend on deprecated() packages. [x]: Package use %makeinstall only when make install DESTDIR=... doesn't work. [x]: Package is named using only allowed ASCII characters. [x]: No %config files under /usr. [x]: Package does not use a name that already exists. [x]: Package is not relocatable. [x]: Sources used to build the package match the upstream source, as provided in the spec URL. [x]: Spec file name must match the spec package %{name}, in the format %{name}.spec. [x]: File names are valid UTF-8. [x]: Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files. Note: Documentation size is 0 bytes in 0 files. [x]: Packages must not store files under /srv, /opt or /usr/local ===== SHOULD items ===== Generic: [-]: If the source package does not include license text(s) as a separate file from upstream, the packager SHOULD query upstream to include it. [x]: Final provides and requires are sane (see attachments). [x]: Package functions as described. [x]: Latest version is packaged. [x]: Package does not include license text files separate from upstream. [x]: Patches link to upstream bugs/comments/lists or are otherwise justified. [-]: Sources are verified with gpgverify first in %prep if upstream publishes signatures. Note: gpgverify is not used. [x]: Package should compile and build into binary rpms on all supported architectures. [-]: %check is present and all tests pass. [x]: Packages should try to preserve timestamps of original installed files. [x]: Reviewer should test that the package builds in mock. [x]: Buildroot is not present [x]: Package has no %clean section with rm -rf %{buildroot} (or $RPM_BUILD_ROOT) [x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin. [x]: Fully versioned dependency in subpackages if applicable. [x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file [x]: Sources can be downloaded from URI in Source: tag [x]: SourceX is a working URL. [x]: Spec use %global instead of %define unless justified. ===== EXTRA items ===== Generic: [x]: Rpmlint is run on debuginfo package(s). Note: No rpmlint messages. [x]: Rpmlint is run on all installed packages. Note: There are rpmlint messages (see attachment). [x]: Large data in /usr/share should live in a noarch subpackage if package is arched. [x]: Spec file according to URL is the same as in SRPM. Rpmlint ------- Checking: open-vmdk-0.3.6-1.fc40.x86_64.rpm open-vmdk-debuginfo-0.3.6-1.fc40.x86_64.rpm open-vmdk-debugsource-0.3.6-1.fc40.x86_64.rpm open-vmdk-0.3.6-1.fc40.src.rpm ========================================================================================== rpmlint session starts ========================================================================================== rpmlint: 2.4.0 configuration: /usr/lib/python3.12/site-packages/rpmlint/configdefaults.toml /etc/xdg/rpmlint/fedora-legacy-licenses.toml /etc/xdg/rpmlint/fedora-spdx-licenses.toml /etc/xdg/rpmlint/fedora.toml /etc/xdg/rpmlint/scoring.toml /etc/xdg/rpmlint/users-groups.toml /etc/xdg/rpmlint/warn-on-functions.toml rpmlintrc: [PosixPath('/tmp/tmphcq521_3')] checks: 31, packages: 4 open-vmdk.x86_64: W: no-manual-page-for-binary mkova.sh open-vmdk.x86_64: W: no-manual-page-for-binary ova-compose open-vmdk.x86_64: W: no-manual-page-for-binary vmdk-convert open-vmdk.x86_64: W: no-documentation =========================================================== 4 packages and 0 specfiles checked; 0 errors, 4 warnings, 0 badness; has taken 0.3 s =========================================================== Rpmlint (debuginfo) ------------------- Checking: open-vmdk-debuginfo-0.3.6-1.fc40.x86_64.rpm ========================================================================================== rpmlint session starts ========================================================================================== rpmlint: 2.4.0 configuration: /usr/lib/python3.12/site-packages/rpmlint/configdefaults.toml /etc/xdg/rpmlint/fedora-legacy-licenses.toml /etc/xdg/rpmlint/fedora-spdx-licenses.toml /etc/xdg/rpmlint/fedora.toml /etc/xdg/rpmlint/scoring.toml /etc/xdg/rpmlint/users-groups.toml /etc/xdg/rpmlint/warn-on-functions.toml rpmlintrc: [PosixPath('/tmp/tmpp4p9jumm')] checks: 31, packages: 1 =========================================================== 1 packages and 0 specfiles checked; 0 errors, 0 warnings, 0 badness; has taken 0.1 s =========================================================== Rpmlint (installed packages) ---------------------------- ============================ rpmlint session starts ============================ rpmlint: 2.5.0 configuration: /usr/lib/python3.12/site-packages/rpmlint/configdefaults.toml /etc/xdg/rpmlint/fedora-legacy-licenses.toml /etc/xdg/rpmlint/fedora-spdx-licenses.toml /etc/xdg/rpmlint/fedora.toml /etc/xdg/rpmlint/scoring.toml /etc/xdg/rpmlint/users-groups.toml /etc/xdg/rpmlint/warn-on-functions.toml checks: 32, packages: 3 open-vmdk.x86_64: E: spelling-error ('ovf', '%description -l en_US ovf -> of, ova, oaf') open-vmdk.x86_64: E: spelling-error ('mf', '%description -l en_US mf -> mph, mg, m') open-vmdk.x86_64: W: no-manual-page-for-binary mkova.sh open-vmdk.x86_64: W: no-manual-page-for-binary ova-compose open-vmdk.x86_64: W: no-manual-page-for-binary vmdk-convert open-vmdk.x86_64: W: no-documentation 3 packages and 0 specfiles checked; 2 errors, 4 warnings, 13 filtered, 2 badness; has taken 0.3 s Source checksums ---------------- https://github.com/vmware/open-vmdk/archive/v0.3.6/open-vmdk-0.3.6.tar.gz : CHECKSUM(SHA256) this package : 413ffd94a471a2c366f6b0b9f08af775756dedeccac300f6ce27341020f2a5ea CHECKSUM(SHA256) upstream package : 413ffd94a471a2c366f6b0b9f08af775756dedeccac300f6ce27341020f2a5ea Requires -------- open-vmdk (rpmlib, GLIBC filtered): /usr/bin/bash /usr/bin/python3 config(open-vmdk) coreutils grep libc.so.6()(64bit) libz.so.1()(64bit) libz.so.1(ZLIB_1.2.0)(64bit) python3-PyYAML python3-lxml rtld(GNU_HASH) sed tar util-linux open-vmdk-debuginfo (rpmlib, GLIBC filtered): open-vmdk-debugsource (rpmlib, GLIBC filtered): Provides -------- open-vmdk: config(open-vmdk) open-vmdk open-vmdk(x86-64) open-vmdk-debuginfo: debuginfo(build-id) open-vmdk-debuginfo open-vmdk-debuginfo(x86-64) open-vmdk-debugsource: open-vmdk-debugsource open-vmdk-debugsource(x86-64) Generated by fedora-review 0.10.0 (e79b66b) last change: 2023-07-24 Command line :/usr/bin/fedora-review -b 2251171 -m fedora-rawhide-x86_64 Buildroot used: fedora-rawhide-x86_64 Active plugins: C/C++, Shell-api, Generic Disabled plugins: PHP, Python, R, Java, Ocaml, Haskell, fonts, SugarActivity, Perl Disabled flags: EXARCH, EPEL6, EPEL7, DISTTAG, BATCH
At this point, I think we're good to go, so... PACKAGE APPROVED.
Hello @idoenmez, since this is your first Fedora package, you need to get sponsored by a package sponsor before it can be accepted. A sponsor is an experienced package maintainer who will guide you through the processes that you will follow and the tools that you will use as a future maintainer. A sponsor will also be there to answer your questions related to packaging. You can find all active sponsors here: https://docs.pagure.org/fedora-sponsors/ I created a sponsorship request for you: https://pagure.io/packager-sponsors/issue/607 Please take a look and make sure the information is correct. Thank you, and best of luck on your packaging journey. --- This comment was created by the fedora-review-service https://github.com/FrostyX/fedora-review-service
I've now sponsored you to become a Fedora packager. Congratulations, good luck, and have fun! :)
I can co-maintain this package if you wish.
I would also be happy to be a co-maintainer as we'll likely start using this in kiwi: https://github.com/OSInside/kiwi/issues/2292
The Pagure repository was created at https://src.fedoraproject.org/rpms/open-vmdk
Thank you, Neal, Mohamed for your help and reviews! Package merged: https://src.fedoraproject.org/rpms/open-vmdk Prepared updates for f38 and f39, but having an authentication problem with Bodhi, will follow up with ngompa@ and probably in the Matrix room. Added ngompa@ and rjones@ as collaborators to the project, thanks for stepping up! Resolving this bug.