Diff of the two buildlogs: -- --- b1/build.log 2024-05-12 02:14:31.809232607 +0000 +++ b2/build.log 2024-05-12 02:16:24.420434345 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sat May 11 14:11:16 -12 2024 -I: pbuilder-time-stamp: 1715479876 +I: Current time: Sun May 12 16:14:40 +14 2024 +I: pbuilder-time-stamp: 1715480080 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -30,52 +30,84 @@ dpkg-source: info: applying 0004-Fix-requires-so-that-they-work-inside-autopkgtest.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/6951/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/D01_modify_environment starting +debug: Running on virt64z. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 May 12 02:14 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='armhf' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=3 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='armhf' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="21" [3]="1" [4]="release" [5]="arm-unknown-linux-gnueabihf") + BASH_VERSION='5.2.21(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=armhf + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=4 ' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=arm + HOST_ARCH=armhf IFS=' ' - INVOCATION_ID='fb40de744ea84f0c9d92e1e80e3b7a0c' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='6951' - PS1='# ' - PS2='> ' + INVOCATION_ID=f5b97bb0b98743898e1017a2cdac2222 + LANG=C + LANGUAGE=it_CH:it + LC_ALL=C + MACHTYPE=arm-unknown-linux-gnueabihf + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnueabihf + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=24977 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.mYq4A29J/pbuilderrc_I3fq --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.mYq4A29J/b1 --logfile b1/build.log ruby-simplecov_0.22.0-1.dsc' - SUDO_GID='113' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://10.0.0.15:3142/' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.mYq4A29J/pbuilderrc_U41E --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.mYq4A29J/b2 --logfile b2/build.log ruby-simplecov_0.22.0-1.dsc' + SUDO_GID=110 + SUDO_UID=103 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://10.0.0.15:3142/ I: uname -a - Linux ff4a 6.1.0-21-armmp-lpae #1 SMP Debian 6.1.90-1 (2024-05-03) armv7l GNU/Linux + Linux i-capture-the-hostname 6.1.0-21-arm64 #1 SMP Debian 6.1.90-1 (2024-05-03) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 May 11 11:24 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/6951/tmp/hooks/D02_print_environment finished +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -261,7 +293,7 @@ Get: 136 http://deb.debian.org/debian trixie/main armhf ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 137 http://deb.debian.org/debian trixie/main armhf ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 138 http://deb.debian.org/debian trixie/main armhf ruby-simplecov-html all 0.12.3-2 [468 kB] -Fetched 46.3 MB in 5s (9644 kB/s) +Fetched 46.3 MB in 2s (22.6 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:armhf. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19446 files and directories currently installed.) @@ -720,8 +752,8 @@ Setting up tzdata (2024a-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Sun May 12 02:13:04 UTC 2024. -Universal Time is now: Sun May 12 02:13:04 UTC 2024. +Local time is now: Sun May 12 02:15:41 UTC 2024. +Universal Time is now: Sun May 12 02:15:41 UTC 2024. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -847,7 +879,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-simplecov-0.22.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-simplecov_0.22.0-1_source.changes +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-simplecov-0.22.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-simplecov_0.22.0-1_source.changes dpkg-buildpackage: info: source package ruby-simplecov dpkg-buildpackage: info: source version 0.22.0-1 dpkg-buildpackage: info: source distribution unstable @@ -876,13 +912,13 @@ dh_prep -O--buildsystem=ruby dh_auto_install --destdir=debian/ruby-simplecov/ -O--buildsystem=ruby dh_ruby --install /build/reproducible-path/ruby-simplecov-0.22.0/debian/ruby-simplecov -/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20240511-13010-tmmpgm/gemspec +/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20240512-724-k5oikz/gemspec Failed to load /dev/null because it doesn't contain valid YAML hash Successfully built RubyGem Name: simplecov Version: 0.22.0 File: simplecov-0.22.0.gem -/usr/bin/ruby3.1 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-simplecov/usr/share/rubygems-integration/all /tmp/d20240511-13010-tmmpgm/simplecov-0.22.0.gem +/usr/bin/ruby3.1 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-simplecov/usr/share/rubygems-integration/all /tmp/d20240512-724-k5oikz/simplecov-0.22.0.gem Failed to load /dev/null because it doesn't contain valid YAML hash /build/reproducible-path/ruby-simplecov-0.22.0/debian/ruby-simplecov/usr/share/rubygems-integration/all/gems/simplecov-0.22.0/lib/minitest/simplecov_plugin.rb /build/reproducible-path/ruby-simplecov-0.22.0/debian/ruby-simplecov/usr/share/rubygems-integration/all/gems/simplecov-0.22.0/lib/simplecov.rb @@ -969,624 +1005,624 @@ mv test_projects/rails/rspec_rails/Gemfile.lock test_projects/rails/rspec_rails/.gem2deb.Gemfile.lock /usr/bin/ruby3.1 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern ./spec/\*\*/\*_spec.rb --exclude-pattern ./spec/default_formatter_spec.rb,./spec/gemspec_spec.rb --format documentation -Randomized with seed 5341 +Randomized with seed 55588 -SimpleCov::LinesClassifier - #classify - not-relevant lines - determines whitespace is not-relevant - :nocov: blocks - determines all lines after a non-closing :nocov: as not-relevant - determines :nocov: blocks are not-relevant - comments - doesn't mistake interpolation as a comment - determines comments are not-relevant - relevant lines - determines code as relevant - determines invalid UTF-8 byte sequences as relevant - -SimpleCov - profiles - provides a sensible test_frameworks profile - provides a sensible rails profile +SimpleCov::LastRun + defines a last_run_path + writes json to its last_run_path that can be parsed again + reading + but the last_run file does not exist + returns nil + an empty result + returns nil + a non empty result + reads json from its last_run_path -A source file which is subsequently deleted - does not cause an error +SimpleCov::Result + with a (mocked) Coverage.result + with groups set up that do not match all files + has sample.rb in "Ungrouped" group + has 3 groups + returns all groups as instances of SimpleCov::FileList + has 1 item per group + with groups set up for all files + has 3 groups + has sample_controller.rb in 'Controllers' group + has user.rb in 'Models' group + and simple formatter being used + returns a formatted string with result.format! + and multi formatter being used + returns an array containing formatted string with result.format! + a simple cov result initialized from that + responds to total_lines + returns an instance of SimpleCov::FileList for source_files and files + has accurate least covered file + has accurate covered percentages + has 3 source files + has files equal to source_files + has 3 filenames + responds to covered_strength + responds to covered_percent + responds to covered_lines + responds to missed_lines + responds to least_covered_file + has accurate covered percent + responds to covered_percentages + dumped with to_hash + is a hash + loaded back with from_hash + has the same covered_percentages + has the same command_name + has the same timestamp + has the same covered_percent + has the same original_result + has 3 source files + .from_hash + can consume multiple commands + with some filters set up + has 80 covered percent + has [80.0, 80.0] covered percentages + has 2 files in a new simple cov result -SimpleCov::ExitCodes::MaximumCoverageDropCheck - coverage expectation for a coverage that wasn't previously present - is expected not to be failing - more coverage drop allowed - is expected not to be failing - we're at the same coverage - is expected not to be failing - last coverage higher than new coverage - is expected to be failing - but allowed drop is within range - is expected not to be failing - old last_run.json format - is expected not to be failing - no last run coverage information - is expected not to be failing - one coverage lower than maximum drop - is expected to be failing - but allowed drop is within range - is expected not to be failing - last coverage lower then new coverage - is expected not to be failing +return codes + inside fixtures/frameworks + when running rspec_good.rb + behaves like good tests + prints nothing to STDERR + has a zero exit status + when running testunit_good.rb + behaves like good tests + has a zero exit status + prints nothing to STDERR + when running rspec_bad.rb + behaves like bad tests + when print_error_status is disabled + does not print anything to STDERR + has a non-zero exit status + with default configuration + prints a message to STDERR + has a non-zero exit status + when running testunit_bad.rb + behaves like bad tests + with default configuration + prints a message to STDERR + has a non-zero exit status + when print_error_status is disabled + does not print anything to STDERR + has a non-zero exit status SimpleCov + .exit_status_from_exception + when a SystemExit has occurred + returns the SystemExit status + when no exception has occurred + returns nil + when a non SystemExit occurs + return SimpleCov::ExitCodes::EXCEPTION + .process_result + when minimum coverage is 100% + branch coverage + errors out when the coverage is too low + when actual coverage is almost 100% + return SimpleCov::ExitCodes::MINIMUM_COVERAGE + when actual coverage is exactly 100% + return SimpleCov::ExitCodes::SUCCESS + .start_coverage_measurement + starts coverage with lines and branches if branches is activated + starts coverage in lines mode by default .collate when no files to be merged shows an error message when files to be merged + and a single report to be merged + creates a merged report identical to the original + and multiple reports to be merged + creates a merged report and multiple reports to be merged, one of them outdated ignores timeout by default creating a report with all values creates a merged report with only the results from the current resultset if ignore_timeout: false - and multiple reports to be merged - creates a merged report - and a single report to be merged - creates a merged report identical to the original .result with merging enabled + when not running + merges the result when running + merges the result adds not-loaded-files stores the current coverage - uses the result from Coverage - merges the result caches its result - when not running - merges the result + uses the result from Coverage with merging disabled when not running returns nil when running - uses the result from Coverage - doesn't store the current coverage - doesn't merge the result adds not-loaded-files + doesn't merge the result + uses the result from Coverage caches its result - .exit_status_from_exception - when a non SystemExit occurs - return SimpleCov::ExitCodes::EXCEPTION - when no exception has occurred - returns nil - when a SystemExit has occurred - returns the SystemExit status - .start_coverage_measurement - starts coverage with lines and branches if branches is activated - starts coverage in lines mode by default - .process_result - when minimum coverage is 100% - when actual coverage is exactly 100% - return SimpleCov::ExitCodes::SUCCESS - branch coverage - errors out when the coverage is too low - when actual coverage is almost 100% - return SimpleCov::ExitCodes::MINIMUM_COVERAGE + doesn't store the current coverage SimpleCov::ResultMerger - .merge_and_store - merging behavior - 2 normal results - correctly merges the 2 results - has the result stored - both resultsets outdated - includes both when we say ignore_timeout: true - completely omits the result from the merge - 1 resultset is outdated - includes it when we say ignore_timeout: true - completely omits the result from the merge - pre 0.18 result format - gets the same content back but under "lines" + .synchronize_resultset + blocks other processes + is reentrant (i.e. doesn't block its own process) resultset handling returns an empty hash when the resultset cache file is not present returns an empty hash when the resultset cache file is empty - .store_result - persists to disk - synchronizes writes - refreshes the resultset - .resultset - synchronizes reads basic workings with 2 resultsets - has stored data in resultset_path JSON file returns proper values for merged_result + has stored data in resultset_path JSON file returns a hash containing keys ['result1' and 'result2'] for resultset with second result way above the merge_timeout has only one result in SimpleCov::ResultMerger.results - .synchronize_resultset - blocks other processes - is reentrant (i.e. doesn't block its own process) - -SimpleCov::CoverageStatistics - .from - returns an all 0s coverage statistics if there are no statistics - produces sensible total results - returns all empty statistics when initialized with a couple of empty results - .new - can omit the total strength defaulting to 0.0 - can deal with it if everything is 0 - retains statistics and computes new ones + .resultset + synchronizes reads + .store_result + refreshes the resultset + synchronizes writes + persists to disk + .merge_and_store + merging behavior + 1 resultset is outdated + completely omits the result from the merge + includes it when we say ignore_timeout: true + both resultsets outdated + includes both when we say ignore_timeout: true + completely omits the result from the merge + 2 normal results + has the result stored + correctly merges the 2 results + pre 0.18 result format + gets the same content back but under "lines" SimpleCov::Combine::ResultsCombiner merges frozen resultsets with two faked coverage resultsets a merge - has proper results for parallel_tests.rb - has proper results for conditionally_loaded_2.rb - has proper results for sample.rb - has proper results for three.rb - has proper results for resultset1.rb - has proper results for user.rb - has proper results for sample_controller.rb has proper results for conditionally_loaded_1.rb + has proper results for sample_controller.rb + has proper results for three.rb has proper results for resultset2.rb + has proper results for user.rb + has proper results for resultset1.rb + has proper results for parallel_tests.rb + has proper results for sample.rb + has proper results for conditionally_loaded_2.rb -SimpleCov::Result - has 14 lines of code - has 17 never lines - has the correct covered strength - has the correct covered percent - has the correct least covered file - has the correct covered percentages - has 11 covered lines - has 3 missed lines - has 5 skipped lines +SimpleCov::ExitCodes::MaximumCoverageDropCheck + coverage expectation for a coverage that wasn't previously present + is expected not to be failing + last coverage higher than new coverage + is expected to be failing + but allowed drop is within range + is expected not to be failing + one coverage lower than maximum drop + is expected to be failing + but allowed drop is within range + is expected not to be failing + more coverage drop allowed + is expected not to be failing + last coverage lower then new coverage + is expected not to be failing + no last run coverage information + is expected not to be failing + we're at the same coverage + is expected not to be failing + old last_run.json format + is expected not to be failing SimpleCov::SourceFile - matches a new SimpleCov::StringFilter 'spec/fixtures' - doesn't match a new SimpleCov::RegexFilter /^/fixtures// - doesn't match a new SimpleCov::StringFilter 'foobar' - matches a new SimpleCov::ArrayFilter when two file paths including 'sample.rb' are passed as array - doesn't match a new SimpleCov::BlockFilter that is not applicable - matches a new SimpleCov::StringFilter 'sample.rb' - matches a new SimpleCov::ArrayFilter when a custom class that returns true is passed as array + matches a new SimpleCov::ArrayFilter when a block is passed as array and returns true + matches a new SimpleCov::RegexFilter //fixtures// matches a new SimpleCov::BlockFilter that is applicable - matches a new SimpleCov::ArrayFilter when /sample.rb/ is passed as array + matches a new SimpleCov::ArrayFilter when two file paths including 'sample.rb' are passed as array + doesn't match a parent directory with a new SimpleCov::ArrayFilter doesn't match a new SimpleCov::StringFilter 'some/path' - matches a new SimpleCov::RegexFilter //fixtures// - matches a new SimpleCov::ArrayFilter when 'sample.rb' is passed as array - doesn't match a new SimpleCov::ArrayFilter when a file path different than /sample.rb/ is passed as array - doesn't match a parent directory with a new SimpleCov::StringFilter + matches a new SimpleCov::RegexFilter /^/spec// + doesn't match a new SimpleCov::StringFilter '.pl' + matches a new SimpleCov::StringFilter 'spec/fixtures' + doesn't match a new SimpleCov::ArrayFilter when a file path different than 'sample.rb' is passed as array matches a new SimpleCov::StringFilter 'spec/fixtures/sample.rb' + matches a new SimpleCov::ArrayFilter when /sample.rb/ is passed as array + matches a new SimpleCov::StringFilter 'sample.rb' + doesn't match a new SimpleCov::ArrayFilter when a file path different than /sample.rb/ is passed as array doesn't match a new SimpleCov::ArrayFilter when a block that returns false is passed as array - matches a new SimpleCov::ArrayFilter when a block is passed as array and returns true - doesn't match a new SimpleCov::ArrayFilter when a file path different than 'sample.rb' is passed as array - doesn't match a new SimpleCov::StringFilter '.pl' - doesn't match a parent directory with a new SimpleCov::ArrayFilter - matches a new SimpleCov::RegexFilter /^/spec// + matches a new SimpleCov::ArrayFilter when 'sample.rb' is passed as array + matches a new SimpleCov::ArrayFilter when a custom class that returns true is passed as array + doesn't match a new SimpleCov::BlockFilter that is not applicable + doesn't match a parent directory with a new SimpleCov::StringFilter + doesn't match a new SimpleCov::RegexFilter /^/fixtures// + doesn't match a new SimpleCov::StringFilter 'foobar' doesn't match a new SimpleCov::ArrayFilter when a custom class that returns false is passed as array with the default configuration - outside the project - filters even if the sibling directory has SimpleCov.root as a prefix - filters inside the project - filters hidden files doesn't filter + filters hidden folders filters vendor/bundle + filters hidden files doesn't filter hidden files further down the path - filters hidden folders + outside the project + filters + filters even if the sibling directory has SimpleCov.root as a prefix + .class_for_argument + returns SimpleCov::RegexFilter for a string + returns SimpleCov::StringFilter for a string + returns SimpleCov::RegexFilter for a string with no filters set up and a basic source file in an array - returns 1 item after executing SimpleCov.filtered on files when using a "fooo" string filter - returns 1 item after executing SimpleCov.filtered on files when using an always-false block filter returns 0 items after executing SimpleCov.filtered on files when using a "spec/fixtures" string filter - returns a FileList after filtering + returns 1 item after executing SimpleCov.filtered on files when using an always-false block filter returns 0 items after executing SimpleCov.filtered on files when using a "sample" string filter returns 0 items after executing SimpleCov.filtered on files when using a block filter that returns true - .class_for_argument - returns SimpleCov::RegexFilter for a string - returns SimpleCov::RegexFilter for a string - returns SimpleCov::StringFilter for a string + returns a FileList after filtering + returns 1 item after executing SimpleCov.filtered on files when using a "fooo" string filter -SimpleCov::SourceFile::Branch - A source branch with coverage - is covered +SimpleCov::Result + has the correct covered strength + has 14 lines of code + has the correct covered percentages + has 3 missed lines + has the correct least covered file + has 11 covered lines + has the correct covered percent + has 17 never lines + has 5 skipped lines + +SimpleCov::Configuration + #tracked_files + when configured + returns the configured glob + and configured again with nil + returns nil + #branch_coverage? + returns true of branch coverage is being measured + returns false for line coverage + #minimum_coverage + behaves like setting coverage expectations + warns you about your usage + raises when unknown coverage criteria provided + sets the right coverage when called with a hash of just branch + raises when trying to set branch coverage but not enabled + sets the right coverage when called with both line and branch + does not warn you about your usage + sets the right coverage value when called with a number + sets the right coverage when called with a hash of just line + when primary coverage is set + sets the right coverage value when called with a number + #enable_for_subprocesses + returns false by default + can be enabled and then disabled again + can be set to true + #minimum_coverage_by_file + behaves like setting coverage expectations + warns you about your usage + raises when unknown coverage criteria provided + sets the right coverage when called with both line and branch + does not warn you about your usage + sets the right coverage when called with a hash of just branch + sets the right coverage when called with a hash of just line + raises when trying to set branch coverage but not enabled + sets the right coverage value when called with a number + when primary coverage is set + sets the right coverage value when called with a number + #coverage_criteria + defaults to line + #enable_coverage + can enable branch coverage + can't enable arbitrary things + can enable line again + #coverage_criterion + works fine with line + defaults to line + works fine with :branch + works fine setting it back and forth + errors out on unknown coverage + when unconfigured + returns nil + #primary_coverage + can't set primary coverage to arbitrary things + can set primary coverage to line + when branch coverage is enabled + can set primary coverage to branch + when branch coverage is not enabled + cannot set primary coverage to branch + #refuse_coverage_drop + sets the right coverage value when called with no args + sets the right coverage value when called with `:branch` + sets the right coverage value when called with `:line` and `:branch` + sets the right coverage value when called with `:line` + #maximum_coverage_drop + behaves like setting coverage expectations + sets the right coverage when called with both line and branch + does not warn you about your usage + sets the right coverage when called with a hash of just branch + raises when trying to set branch coverage but not enabled + sets the right coverage value when called with a number + sets the right coverage when called with a hash of just line + warns you about your usage + raises when unknown coverage criteria provided + when primary coverage is set + sets the right coverage value when called with a number + #print_error_status + when manually set + is expected to equal false + when not manually set + is expected to equal true + +SimpleCov::CoverageStatistics + .from + produces sensible total results + returns all empty statistics when initialized with a couple of empty results + returns an all 0s coverage statistics if there are no statistics + .new + retains statistics and computes new ones + can omit the total strength defaulting to 0.0 + can deal with it if everything is 0 + +SimpleCov::SourceFile::Line + raises ArgumentError when initialized with invalid coverage + raises ArgumentError when initialized with invalid src + raises ArgumentError when initialized with invalid line_number + A source line with no code + is never + status is never is not missed - is neither covered not missed if skipped + has nil coverage + is not skipped + is not covered + A source line with coverage + has coverage of 3 + is not skipped + is not missed + is not never + status is covered + is covered + a source line + returns the same for source as for src + returns "# the ruby source" as src + has line number 5 + has equal line_number, line and number + flagged as skipped! + status is skipped + is skipped + is not covered + is not never + is not missed + A source line without coverage + is not never + has coverage of 0 + is not covered + status is missed + is missed + is not skipped + +SimpleCov + profiles + provides a sensible test_frameworks profile + provides a sensible rails profile + +SimpleCov::SourceFile::Branch skipping lines can be skipped isn't skipped by default + #overlaps_with?(range) + overlaps with a range that fully includes everything + overlaps with a range that partially includes its beginning + overlaps with a range that partially includes its end + doesn't overlap with a range beyond its lines + overlaps with a range that pends in its middle + doesn't overlap with a range before its lines + overlaps with a range that exactly includes it + A source branch with coverage + is neither covered not missed if skipped + is not missed + is covered a source branch without coverage is neither covered not missed if skipped is missed isn't covered a source branch if..else correct branch report - #overlaps_with?(range) - overlaps with a range that partially includes its end - overlaps with a range that partially includes its beginning - overlaps with a range that fully includes everything - doesn't overlap with a range beyond its lines - doesn't overlap with a range before its lines - overlaps with a range that exactly includes it - overlaps with a range that pends in its middle + +SimpleCov::UselessResultsRemover + still retains the app path + Result ignore gem file path from result set + +SimpleCov::CommandGuesser + correctly guesses "Cucumber Features" for cucumber features + correctly guesses "Unit Tests" for unit tests + correctly guesses "Integration Tests" for integration tests + defaults to RSpec because RSpec constant is defined + correctly guesses "Functional Tests" for functional tests + correctly guesses "RSpec" for RSpec + +SimpleCov::Formatter::MultiFormatter + .[] + constructs a formatter with multiple children + +A source file which is subsequently deleted + does not cause an error + +loading config + without ENV[HOME] + shouldn't raise any errors + +SimpleCov::ExitCodes::MinimumOverallCoverageCheck + coverage slightly violated + is expected to be failing + coverage violated + is expected to be failing + one criterion violated + is expected to be failing + everything exactly ok + is expected not to be failing + +SimpleCov::ExitCodes::MinimumCoverageByFileCheck + one file violating requirements + is expected to be failing + all files passing requirements + is expected not to be failing SimpleCov::SourceFile - simulating potential Ruby 1.9 defect -- see Issue #56 - prints a warning to stderr if coverage array contains more data than lines in the file - has 16 source lines regardless of extra data in coverage array - a file with nested branches - branch coverage - registered 2 hits for the while branch - covers 3/5 - line coverage - covers 6/7 - a file where nothing is ever executed mixed with skipping #563 - has 0.0 covered_percent - has 0.0 covered_strength - a file that is never relevant - has 100.0 covered_percent - has 0.0 covered_strength - has 100.0 branch coverage - a file with case - line coverage - covers 4/7 - branch coverage - covers 1/4 - covers all the things right - a file where everything is skipped/irrelevant but executed #563 - branch coverage - has no branches - does has neither covered nor missed branches - has an empty branch report - line coverage - has 0.0 covered_percent - has a whole lot of skipped lines - has no covered lines - has no missed lines - has 0.0 covered_strength - has no relevant lines - a file with an uneven usage of # :nocov:s - line coverage - reports 100% coverage on 4/4 - has 12 lines skipped - branch coverage - has 5 branches marked as skipped - has 100% branch coverage on 1/1 - a file where everything is skipped and missed #563 - has 0.0 covered_percent - has no covered or missed lines - has 0.0 covered_strength A file that has inline branches - has branches coverage percent 50.00 has dual element in condition at line 3 report - has covered branches count 2 has branches report on 3 lines + has branches coverage percent 50.00 + has covered branches count 2 + a source file initialized with some coverage data + has 16 source lines + has all source lines of type SimpleCov::SourceFile::Line + has source equal to src + has a filename + has source_lines equal to lines + has 'class Foo' as line(2).source + has a project filename which removes the project directory + line coverage + returns lines number 1, 5, 6, 9, 10, 16 for never_lines + returns lines number 2, 3, 4, 7 for covered_lines + has 80% covered_percent + returns lines number 8 for missed_lines + returns line numbers 11, 12, 13, 14, 15 for skipped_lines + branch coverage + has total branches count 0 + has missed branches count 0 + has branch coverage report + has covered branches count 0 + is considered 100% branches covered a file entirely ignored with a single # :nocov: branch coverage - has 100% branch coverage on 0/0 has all branches marked as skipped + has 100% branch coverage on 0/0 line coverage - reports 100% coverage on 0/0 has all lines skipped - a file with if/elsif - line coverage - covers 6/9 - branch coverage - covers the branch that includes 42 - covers 3/6 + reports 100% coverage on 0/0 file with branches branch coverage has line 7 with missed branches branch + has missed branches count 3 has 50% branch coverage - has covered branches count 3 has coverage report + has covered branches count 3 has line 3 with missed branches branch has total branches count 6 - has missed branches count 3 line coverage - has 1 missed line + has 7 relevant lines has 6 covered lines has line coverage - has 7 relevant lines + has 1 missed line + simulating potential Ruby 1.9 defect -- see Issue #56 + prints a warning to stderr if coverage array contains more data than lines in the file + has 16 source lines regardless of extra data in coverage array + a file with if/elsif + line coverage + covers 6/9 + branch coverage + covers the branch that includes 42 + covers 3/6 + a file where everything is skipped and missed #563 + has 0.0 covered_percent + has no covered or missed lines + has 0.0 covered_strength a file with case without else line coverage covers 4/6 branch coverage - covers the branch that includes 42 covers 1/4 (counting the else branch) + covers the branch that includes 42 marks the non declared else branch as missing at the point of the case - a source file initialized with some coverage data - has all source lines of type SimpleCov::SourceFile::Line - has a project filename which removes the project directory - has 16 source lines - has 'class Foo' as line(2).source - has a filename - has source_lines equal to lines - has source equal to src + a file with case + branch coverage + covers all the things right + covers 1/4 line coverage - returns lines number 2, 3, 4, 7 for covered_lines - returns lines number 8 for missed_lines - has 80% covered_percent - returns line numbers 11, 12, 13, 14, 15 for skipped_lines - returns lines number 1, 5, 6, 9, 10, 16 for never_lines + covers 4/7 + a file with more complex skipping + line coverage + has no missed lines + has 6 relevant lines + has a whole lot of skipped lines + has 100.0 covered_percent + has 6 covered lines branch coverage - has covered branches count 0 - has total branches count 0 - is considered 100% branches covered - has branch coverage report - has missed branches count 0 + has an empty branch report + covers 3/4 branches + a file with an uneven usage of # :nocov:s + branch coverage + has 100% branch coverage on 1/1 + has 5 branches marked as skipped + line coverage + has 12 lines skipped + reports 100% coverage on 4/4 + a file with nested branches + line coverage + covers 6/7 + branch coverage + covers 3/5 + registered 2 hits for the while branch + a file that is never relevant + has 100.0 covered_percent + has 100.0 branch coverage + has 0.0 covered_strength + the branch tester script + branch coverage + covers 10/24 + notifies us of the missing else branch on line 27 that's hit + line coverage + covers 18/28 a file contains non-ASCII characters - empty euc-jp file - has empty lines - UTF-8 without magic comment + EUC-JP with magic comment has the line with 135°C behaves like converting to UTF-8 has all source lines of encoding UTF-8 - UTF-8 with magic comment + UTF-8 without magic comment has the line with 135°C behaves like converting to UTF-8 has all source lines of encoding UTF-8 + empty euc-jp file + has empty lines EUC-JP with magic comment and shebang has all the right lines behaves like converting to UTF-8 has all source lines of encoding UTF-8 - EUC-JP with magic comment + UTF-8 with magic comment has the line with 135°C behaves like converting to UTF-8 has all source lines of encoding UTF-8 - the branch tester script - line coverage - covers 18/28 + a file where nothing is ever executed mixed with skipping #563 + has 0.0 covered_percent + has 0.0 covered_strength + a file where everything is skipped/irrelevant but executed #563 branch coverage - notifies us of the missing else branch on line 27 that's hit - covers 10/24 - a file with more complex skipping + has no branches + does has neither covered nor missed branches + has an empty branch report line coverage - has 6 relevant lines - has a whole lot of skipped lines - has 6 covered lines - has 100.0 covered_percent has no missed lines - branch coverage - covers 3/4 branches - has an empty branch report - -SimpleCov::CommandGuesser - defaults to RSpec because RSpec constant is defined - correctly guesses "Unit Tests" for unit tests - correctly guesses "Integration Tests" for integration tests - correctly guesses "RSpec" for RSpec - correctly guesses "Cucumber Features" for cucumber features - correctly guesses "Functional Tests" for functional tests - -SimpleCov::ExitCodes::MinimumCoverageByFileCheck - one file violating requirements - is expected to be failing - all files passing requirements - is expected not to be failing - -SimpleCov::SourceFile::Line - raises ArgumentError when initialized with invalid src - raises ArgumentError when initialized with invalid coverage - raises ArgumentError when initialized with invalid line_number - A source line with no code - is not missed - has nil coverage - status is never - is not covered - is never - is not skipped - A source line without coverage - is not skipped - is not never - is not covered - has coverage of 0 - is missed - status is missed - a source line - has line number 5 - has equal line_number, line and number - returns the same for source as for src - returns "# the ruby source" as src - flagged as skipped! - is not never - status is skipped - is not missed - is skipped - is not covered - A source line with coverage - is not missed - has coverage of 3 - is not never - status is covered - is covered - is not skipped - -SimpleCov::Formatter::MultiFormatter - .[] - constructs a formatter with multiple children - -SimpleCov::ExitCodes::MinimumOverallCoverageCheck - coverage violated - is expected to be failing - one criterion violated - is expected to be failing - everything exactly ok - is expected not to be failing - coverage slightly violated - is expected to be failing - -SimpleCov::Configuration - #tracked_files - when unconfigured - returns nil - #minimum_coverage - behaves like setting coverage expectations - does not warn you about your usage - sets the right coverage when called with a hash of just branch - raises when trying to set branch coverage but not enabled - raises when unknown coverage criteria provided - sets the right coverage when called with a hash of just line - sets the right coverage value when called with a number - warns you about your usage - sets the right coverage when called with both line and branch - when primary coverage is set - sets the right coverage value when called with a number - #enable_coverage - can enable line again - can enable branch coverage - can't enable arbitrary things - #minimum_coverage_by_file - behaves like setting coverage expectations - raises when trying to set branch coverage but not enabled - sets the right coverage when called with a hash of just line - does not warn you about your usage - raises when unknown coverage criteria provided - sets the right coverage value when called with a number - warns you about your usage - sets the right coverage when called with a hash of just branch - sets the right coverage when called with both line and branch - when primary coverage is set - sets the right coverage value when called with a number - #coverage_criterion - works fine with :branch - errors out on unknown coverage - works fine setting it back and forth - works fine with line - defaults to line - #branch_coverage? - returns true of branch coverage is being measured - returns false for line coverage - #coverage_criteria - defaults to line - #maximum_coverage_drop - behaves like setting coverage expectations - raises when trying to set branch coverage but not enabled - sets the right coverage when called with a hash of just branch - sets the right coverage value when called with a number - sets the right coverage when called with both line and branch - does not warn you about your usage - raises when unknown coverage criteria provided - sets the right coverage when called with a hash of just line - warns you about your usage - when primary coverage is set - sets the right coverage value when called with a number - #enable_for_subprocesses - can be enabled and then disabled again - returns false by default - can be set to true - #refuse_coverage_drop - sets the right coverage value when called with no args - sets the right coverage value when called with `:line` and `:branch` - sets the right coverage value when called with `:line` - sets the right coverage value when called with `:branch` - #primary_coverage - can set primary coverage to line - can't set primary coverage to arbitrary things - when branch coverage is enabled - can set primary coverage to branch - when branch coverage is not enabled - cannot set primary coverage to branch - when configured - returns the configured glob - and configured again with nil - returns nil - #print_error_status - when manually set - is expected to equal false - when not manually set - is expected to equal true - -SimpleCov::UselessResultsRemover - Result ignore gem file path from result set - still retains the app path - -SimpleCov::Result - with a (mocked) Coverage.result - with some filters set up - has [80.0, 80.0] covered percentages - has 2 files in a new simple cov result - has 80 covered percent - a simple cov result initialized from that - has files equal to source_files - responds to covered_percentages - responds to missed_lines - responds to covered_lines - responds to least_covered_file - responds to total_lines - has accurate covered percent - has 3 filenames - responds to covered_strength - returns an instance of SimpleCov::FileList for source_files and files - has accurate least covered file - has 3 source files - has accurate covered percentages - responds to covered_percent - dumped with to_hash - is a hash - loaded back with from_hash - has the same covered_percent - has the same covered_percentages - has the same original_result - has the same timestamp - has 3 source files - has the same command_name - with groups set up that do not match all files - has 3 groups - has sample.rb in "Ungrouped" group - returns all groups as instances of SimpleCov::FileList - has 1 item per group - with groups set up for all files - has sample_controller.rb in 'Controllers' group - has 3 groups - has user.rb in 'Models' group - and simple formatter being used - returns a formatted string with result.format! - and multi formatter being used - returns an array containing formatted string with result.format! - .from_hash - can consume multiple commands - -return codes - inside fixtures/frameworks - when running rspec_bad.rb - behaves like bad tests - when print_error_status is disabled - does not print anything to STDERR - has a non-zero exit status - with default configuration - prints a message to STDERR - has a non-zero exit status - when running rspec_good.rb - behaves like good tests - prints nothing to STDERR - has a zero exit status - when running testunit_good.rb - behaves like good tests - prints nothing to STDERR - has a zero exit status - when running testunit_bad.rb - behaves like bad tests - with default configuration - prints a message to STDERR - has a non-zero exit status - when print_error_status is disabled - has a non-zero exit status - does not print anything to STDERR - -loading config - without ENV[HOME] - shouldn't raise any errors + has 0.0 covered_percent + has no covered lines + has 0.0 covered_strength + has no relevant lines + has a whole lot of skipped lines -SimpleCov::LastRun - defines a last_run_path - writes json to its last_run_path that can be parsed again - reading - an empty result - returns nil - but the last_run file does not exist - returns nil - a non empty result - reads json from its last_run_path +SimpleCov::LinesClassifier + #classify + not-relevant lines + determines whitespace is not-relevant + :nocov: blocks + determines :nocov: blocks are not-relevant + determines all lines after a non-closing :nocov: as not-relevant + comments + doesn't mistake interpolation as a comment + determines comments are not-relevant + relevant lines + determines code as relevant + determines invalid UTF-8 byte sequences as relevant Non-app warnings written to tmp/warnings.txt -Finished in 14.94 seconds (files took 1.01 seconds to load) +Finished in 9.76 seconds (files took 0.61973 seconds to load) 385 examples, 0 failures -Randomized with seed 5341 +Randomized with seed 55588 mv ./.gem2deb.Gemfile.lock Gemfile.lock mv test_projects/monorepo/.gem2deb.Gemfile.lock test_projects/monorepo/Gemfile.lock @@ -1624,12 +1660,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/24977/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/6951 and its subdirectories -I: Current time: Sat May 11 14:14:27 -12 2024 -I: pbuilder-time-stamp: 1715480067 +I: removing directory /srv/workspace/pbuilder/24977 and its subdirectories +I: Current time: Sun May 12 16:16:20 +14 2024 +I: pbuilder-time-stamp: 1715480180