Diff of the two buildlogs: -- --- b1/build.log 2024-05-06 23:17:06.350271779 +0000 +++ b2/build.log 2024-05-06 23:18:11.127509873 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Mon May 6 11:16:28 -12 2024 -I: pbuilder-time-stamp: 1715037388 +I: Current time: Mon Jun 9 19:40:09 +14 2025 +I: pbuilder-time-stamp: 1749447609 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -29,52 +29,84 @@ dpkg-source: info: applying 0006-Disable-coveralls.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/258869/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3005555/tmp/hooks/D01_modify_environment starting +debug: Running on codethink01-arm64. +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 Jun 9 05:40 /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/3005555/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3005555/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='arm64' - DEBIAN_FRONTEND='noninteractive' + 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]="aarch64-unknown-linux-gnu") + 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=arm64 + DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='66a07a656f084c78bc6eb6d464da6538' - 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='258869' - PS1='# ' - PS2='> ' + INVOCATION_ID=2cb6728d30a8413eaf41cc3e16bd9ae6 + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + 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=3005555 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.vztVZWOs/pbuilderrc_qf6Y --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.vztVZWOs/b1 --logfile b1/build.log ruby-listen_3.9.0-1.dsc' - SUDO_GID='109' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + 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.vztVZWOs/pbuilderrc_dCWg --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.vztVZWOs/b2 --logfile b2/build.log ruby-listen_3.9.0-1.dsc' + SUDO_GID=109 + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink04-arm64 6.1.0-20-cloud-arm64 #1 SMP Debian 6.1.85-1 (2024-04-11) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-20-cloud-arm64 #1 SMP Debian 6.1.85-1 (2024-04-11) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 May 5 11:23 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/258869/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Jun 7 17:47 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3005555/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -254,7 +286,7 @@ Get: 132 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 133 http://deb.debian.org/debian trixie/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 134 http://deb.debian.org/debian trixie/main arm64 ruby-thor all 1.3.1-1 [49.2 kB] -Fetched 46.3 MB in 0s (164 MB/s) +Fetched 46.3 MB in 0s (145 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:arm64. (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 ... 19743 files and directories currently installed.) @@ -700,8 +732,8 @@ Setting up tzdata (2024a-3) ... Current default time zone: 'Etc/UTC' -Local time is now: Mon May 6 23:16:48 UTC 2024. -Universal Time is now: Mon May 6 23:16:48 UTC 2024. +Local time is now: Mon Jun 9 05:40:49 UTC 2025. +Universal Time is now: Mon Jun 9 05:40:49 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -824,7 +856,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-listen-3.9.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-listen_3.9.0-1_source.changes +I: user script /srv/workspace/pbuilder/3005555/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/3005555/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-listen-3.9.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-listen_3.9.0-1_source.changes dpkg-buildpackage: info: source package ruby-listen dpkg-buildpackage: info: source version 3.9.0-1 dpkg-buildpackage: info: source distribution unstable @@ -856,13 +892,13 @@ dh_prep -O--buildsystem=ruby dh_auto_install --destdir=debian/ruby-listen/ -O--buildsystem=ruby dh_ruby --install /build/reproducible-path/ruby-listen-3.9.0/debian/ruby-listen -/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20240506-272084-vi9qj4/gemspec +/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20250609-3034360-xtuqpa/gemspec Failed to load /dev/null because it doesn't contain valid YAML hash Successfully built RubyGem Name: listen Version: 3.9.0 File: listen-3.9.0.gem -/usr/bin/ruby3.1 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-listen/usr/share/rubygems-integration/all /tmp/d20240506-272084-vi9qj4/listen-3.9.0.gem +/usr/bin/ruby3.1 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-listen/usr/share/rubygems-integration/all /tmp/d20250609-3034360-xtuqpa/listen-3.9.0.gem Failed to load /dev/null because it doesn't contain valid YAML hash /build/reproducible-path/ruby-listen-3.9.0/debian/ruby-listen/usr/share/rubygems-integration/all/gems/listen-3.9.0/bin/listen /build/reproducible-path/ruby-listen-3.9.0/debian/ruby-listen/usr/share/rubygems-integration/all/gems/listen-3.9.0/lib/listen.rb @@ -936,392 +972,526 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 19816 +Randomized with seed 48702 -Listen::Event::Queue - #pop - when empty - forward the call to the queue - #empty? - when empty - is expected to be empty - when not empty - is expected not to be empty - #<< - when relative option is true - when watched dir is on another drive - registers full path - when watched dir is the current dir - registers relative paths - when watched dir is not the current dir - registers relative path - -Listen::Adapter::Config - #adapter_options - provides a set of adapter_specific options - #queue - provides a direct queue for filesystem events - #initialize - with directories as messy array - implement me (PENDING: Not yet implemented) - with file path - raises argument error requesting a directory - with directories as array - with strings for directories - when not resolved - returns array of resolved pathnames - when already resolved - returns array of pathnames - with Pathnames for directories - returns array of pathnames - with no directories - returns the current path in array - #silencer - provides a silencer object +Listen::Silencer + #silenced? + is expected to accept :file and # + when accepting only *.pid + when ignoring bar* + is expected not to accept :file and "foo.rb" + is expected to accept :file and "foo.pid" + is expected not to accept :file and "bar.pid" + when ignoring *.pid + is expected not to accept :file and "foo.pid" + with default ignore + is expected to accept :dir and ".gitfoo" + is expected not to accept :file and "foo.swx" + is expected not to accept :file and "foo.rbB22583.new" + is expected to accept :dir and "foo.bundle" + is expected to accept :file and "file54321.new" + is expected to accept :dir and ".rbxfoo" + is expected to accept :file and "sed_ABCDE" + is expected to accept :file and "foo.tmpl" + is expected not to accept :dir and ".rbx" + is expected not to accept :file and ".mutagen-temporary-unicode-test-\u00E9ntry0" + is expected to accept :file and ".sedq7eVAR" + is expected not to accept :file and "foo.tmp" + is expected not to accept :dir and ".git" + is expected to accept :file and "file.new" + is expected not to accept :file and ".#hello.rb" + is expected not to accept :file and "foo.swp" + is expected to accept :dir and "logfoo" + is expected not to accept :dir and ".hg" + is expected to accept :file and "sedabcdefg" + is expected to accept :file and "14913" + is expected not to accept :file and "foo.rbo54321.new" + is expected not to accept :dir and "tmp" + is expected to accept :file and "a.swf" + is expected to accept :file and "sediments" + is expected to accept :file and "49131" + is expected not to accept :file and ".mutagen-temporary-cross-device-rename0" + is expected not to accept :file and "foo.swpx" + is expected to accept :file and "sedatives" + is expected to accept :dir and "footmp" + is expected not to accept :file and "#hello.rb#" + is expected to accept :dir and ".hgfoo" + is expected to accept :dir and ".svnfoo" + is expected not to accept :dir and ".bundle" + is expected to accept :dir and "foo.rbx" + is expected to accept :file and "sedan2014" + is expected not to accept :file and "foo.rb.kate-swp" + is expected not to accept :file and "sed86w1kB" + is expected to accept :dir and "tmpfoo" + is expected to accept :file and "foo.sedq7eVAR" + is expected to accept :dir and ".bundlefoo" + is expected to accept :dir and "vendor/bundlefoo" + is expected not to accept :file and "foo.rb___jb_old___" + is expected not to accept :dir and "log" + is expected not to accept :file and ".DS_Store" + is expected not to accept :dir and ".svn" + is expected not to accept :file and "4913" + is expected not to accept :file and "foo.rb___jb_bak___" + is expected not to accept :dir and "vendor/bundle" + is expected to accept :dir and "foo.svn" + is expected not to accept :file and "sedq7eVAR" + is expected to accept :dir and "foo.git" + is expected to accept :dir and "foovendor/ruby" + is expected to accept :dir and "foolog" + is expected not to accept :file and "foo~" + is expected to accept :dir and "foobundle" + is expected not to accept :file and ".goutputstream-S3FBGX" + is expected to accept :dir and "bundlefoo" + is expected not to accept :dir and "vendor/ruby" + is expected to accept :dir and "foovendor/bundle" + is expected not to accept :dir and "bundle" + is expected to accept :dir and "foo.hg" + is expected to accept :dir and "vendor/rubyfoo" + when accepting only *foo* + is expected to accept :file and "foo" + is expected not to accept :file and "bar" + when accepting only foo/* and *.txt + is expected to accept :file and "foo/bar.rb" + is expected not to accept :file and "bar.rb" + is expected not to accept :file and "bar/baz.rb" + is expected to accept :file and "bar.txt" + when ignoring foo/bar* and *.pid + is expected not to accept :file and "foo/bar/baz" + is expected not to accept :file and "foo.pid" + when ignoring only *.pid + is expected not to accept :file and "foo.pid" + is expected to accept :file and ".git" -Listen::Adapter::Base +Listen::Event::Loop + when set up / started + #stop + frees the thread + waits for the thread to finish + sets the reason for waking up #start - runs the adapter - builds record - handling events - when an event occurs - passes invalidates the snapshot based on the event + is started + when state change to :started takes longer than 5 seconds + raises Error::NotStarted + when start is called again + returns silently + +Listen::Adapter::BSD + class + is expected not to be usable + +Listen::Adapter::Linux + instance methods + watch events + starts by calling watch with default events + #stop + when configured + stops the worker + when not even initialized + does not crash + inotify max watches exceeded + raises exception + _callback + recognizes moved_from as moved_from + recognizes close_write as modify + recognizes moved_to as moved_to + class methods + is expected to be usable Listen::Record + #file_data + with path in subdir + path not present + return empty hash + when path is present + returns file data + with path in watched dir + when path is present + returns file data + path not present + return empty hash #add_dir sets itself when empty correctly sets new directory data - sets itself when nil sets path and keeps old data not overwritten + sets itself when nil sets itself when . + #update_file + with path in watched dir + sets path and keeps old data not overwritten + sets path by spliting dirname and basename + with subdir path + sets path and keeps old data not overwritten + sets path by splitting dirname and basename + #build + re-inits paths + with subdir containing files + builds record, skipping silenced patterns + with a normal symlinked directory to another + shows message + with no subdirs + builds record + with subdir containing symlink to parent + shows a warning + with subdir containing dirs + builds record + with subdir containing symlinked file + shows a warning + #unset_path + within subdir + when path not present + unsets path + when path is present + unsets path + within watched dir + when path is present + unsets path + when path not present + unsets path #dir_entries + when there is a file with a similar name to a dir + is expected to eq {"README.md"=>{:mtime=>1.2}} when there is a file with the same name as a dir is expected to eq {"README.md"=>{:mtime=>1.2}} in watched dir - with subdir/file.rb in record - is expected to eq {"subdir"=>{}} with no entries is expected to be empty with file.rb in record is expected to eq {"file.rb"=>{:mtime=>1.1}} + with subdir/file.rb in record + is expected to eq {"subdir"=>{}} in subdir /path - with path/file.rb already in record - is expected to eq {"file.rb"=>{:mtime=>1.1}} with path/subdir with file is expected to be empty - with no entries - is expected to be empty with path renamed to file is expected to be empty + with no entries + is expected to be empty + with path/file.rb already in record + is expected to eq {"file.rb"=>{:mtime=>1.1}} with empty path/subdir is expected to be empty - when there is a file with a similar name to a dir - is expected to eq {"README.md"=>{:mtime=>1.2}} - #build - re-inits paths - with subdir containing symlinked file - shows a warning - with subdir containing dirs - builds record - with subdir containing symlink to parent - shows a warning - with subdir containing files - builds record, skipping silenced patterns - with no subdirs - builds record - with a normal symlinked directory to another - shows message - #update_file - with path in watched dir - sets path by spliting dirname and basename - sets path and keeps old data not overwritten - with subdir path - sets path and keeps old data not overwritten - sets path by splitting dirname and basename - #unset_path - within watched dir - when path is present - unsets path - when path not present - unsets path - within subdir - when path is present - unsets path - when path not present - unsets path - #file_data - with path in subdir - path not present - return empty hash - when path is present - returns file data - with path in watched dir - path not present - return empty hash - when path is present - returns file data -Listen::Adapter::Linux - instance methods - _callback - recognizes moved_to as moved_to - recognizes moved_from as moved_from - recognizes close_write as modify - watch events - starts by calling watch with default events - inotify max watches exceeded - raises exception - #stop - when configured - stops the worker - when not even initialized - does not crash - class methods +Listen::Adapter::Polling + class is expected to be usable + with a valid configuration + #start + notifies change on every listener directories path + #_latency + with custom latency overriding + is expected to eq 1234 + with no overriding option + is expected to eq 1.0 -Listen::Adapter - .select - returns Linux adapter when usable - returns BSD adapter when usable - returns Windows adapter when usable - returns Polling adapter if forced - returns Darwin adapter when usable - no usable adapters - warns polling fallback with default message - warns polling fallback with custom message if set - doesn't warn if polling_fallback_message is false - returns Polling adapter +Listen::Adapter::Config + #adapter_options + provides a set of adapter_specific options + #queue + provides a direct queue for filesystem events + #silencer + provides a silencer object + #initialize + with no directories + returns the current path in array + with file path + raises argument error requesting a directory + with directories as array + with strings for directories + when not resolved + returns array of resolved pathnames + when already resolved + returns array of pathnames + with Pathnames for directories + returns array of pathnames + with directories as messy array + implement me (PENDING: Not yet implemented) + +Listen::Event::Queue + #empty? + when not empty + is expected not to be empty + when empty + is expected to be empty + #<< + when relative option is true + when watched dir is the current dir + registers relative paths + when watched dir is not the current dir + registers relative path + when watched dir is on another drive + registers full path + #pop + when empty + forward the call to the queue Listen::Thread .new calls Thread.new when exception raised that is not derived from StandardError - NoMemoryError + TestExceptionDerivedFromException does not rescue SystemStackError does not rescue SecurityError does not rescue - TestExceptionDerivedFromException - does not rescue SystemExit does not rescue - when exception raised - rescues and logs exceptions - rescues and logs backtrace + exception backtrace + NoMemoryError + does not rescue when nested exceptions raised details exception causes + when exception raised + rescues and logs backtrace + exception backtrace + rescues and logs exceptions .rescue_and_log rescues and logs nested exceptions when exception raised that is not derived from StandardError raises out -Listen::Backend - #start - starts the adapter - #initialize - with config - sets up an adapter class - #stop - stops the adapter - -Listen::Directory - #scan with recursive on - with file.rb & subdir in record - with subdir2 path present - snapshots changes for file, file2 & subdir paths - with empty dir - snapshots changes for file & subdir path - with empty record - with non-existing dir - reports no changes - with subdir present in dir - snapshots changes for subdir - #scan with recursive off - with file & subdir in record - when file.rb no longer exists after scan - rescans - when file2.rb is added - notices file removed and file2 changed - when subdir is removed - notices subdir does not exist - with empty dir - sets record dir path - snapshots changes for file path and dir that doesn't exist - when file.rb removed - notices file was removed - with empty record - with file.rb in dir - snapshots changes for file & file2 paths - with non-existing dir path - reports no changes - unsets record dir path - when network share is disconnected - unsets record dir path - reports no changes - -Listen::Adapter::BSD - class - is expected not to be usable - -logger.rb - Listen.adapter_warn_behavior - allows the adapter_warn_behavior to be set to :log - defaults to :warn - allows the adapter_warn_behavior to be set to to silence the warnings - allows the adapter_warn_behavior to be set to false to silence the warnings - allows the adapter_warn_behavior to be set to silent to silence the warnings - when adapter_warn_behavior is set to a callable object like a proc - when the message matches a #{behavior} pattern - respects :silent - when the message matches a true pattern - respects :warn - when the message matches a :warn pattern - respects :warn - when the message matches a #{behavior} pattern - respects :silent - when the message matches a :silent pattern - respects :silent - when LISTEN_GEM_ADAPTER_WARN_BEHAVIOR is set to 'log' - respects the environment variable over nil - respects the environment variable over :warn - respects the environment variable over :silent - respects the environment variable over a callable config - respects the environment variable over false - Listen.logger - logger= - allows nil to be set (implying default logger) - allows the logger to be set - logger - infers INFO level from LISTEN_GEM_DEBUGGING="info" - infers ERROR level from LISTEN_GEM_DEBUGGING="error" - infers INFO level from LISTEN_GEM_DEBUGGING="yes" - infers WARN level from LISTEN_GEM_DEBUGGING="warning" - infers INFO level from LISTEN_GEM_DEBUGGING="1" - infers WARN level from LISTEN_GEM_DEBUGGING="warn" - infers ERROR level from LISTEN_GEM_DEBUGGING="OTHER" - infers DEBUG level from LISTEN_GEM_DEBUGGING="DEBUG" - infers INFO level from LISTEN_GEM_DEBUGGING="true" - infers WARN level from LISTEN_GEM_DEBUGGING=" warn" - infers FATAL level from LISTEN_GEM_DEBUGGING="fatal" - infers DEBUG level from LISTEN_GEM_DEBUGGING="2" - infers DEBUG level from LISTEN_GEM_DEBUGGING="debug" - infers DEBUG level from LISTEN_GEM_DEBUGGING="level2" - infers ERROR level from LISTEN_GEM_DEBUGGING="ERROR" - infers INFO level from LISTEN_GEM_DEBUGGING=" yesss!" - infers INFO level from LISTEN_GEM_DEBUGGING=" true" - infers FATAL level from LISTEN_GEM_DEBUGGING="FATAL" - infers DEBUG level from LISTEN_GEM_DEBUGGING="2 " - infers INFO level from LISTEN_GEM_DEBUGGING="INFO" - infers FATAL level from LISTEN_GEM_DEBUGGING=" fatal" - infers INFO level from LISTEN_GEM_DEBUGGING="TRUE " - infers INFO level from LISTEN_GEM_DEBUGGING="TRUE" - infers INFO level from LISTEN_GEM_DEBUGGING="level1" - returns default logger if none set - infers INFO level from LISTEN_GEM_DEBUGGING="YES" - infers WARN level from LISTEN_GEM_DEBUGGING="WARN" +Listen::Event::Processor + #loop_for + when stopped + with pending changes + does not sleep + does not change the event queue + when not stopped + when initially processing + when event queue has events + when there were events ages ago + processes events + when event queue is empty + when stopped after sleeping + breaks + sleeps, waiting to be woken up + when initially paused + when stopped after sleeping + sleeps, waiting to be woken up + breaks + when still paused after sleeping + when there were no events before + sleeps for latency to possibly later optimize some events + when there were no events for ages + still does not process events because it is paused + _process_changes + when it raises an exception derived from StandardError + rescues and logs exception and continues Listen::CLI - directories option - with a single directory - is set to app - not specified - is set to local directory - with a multiple directories - is set to an array of the directories relative option when --relative - supports --relative option supports -r option - without relative option - is set to false + supports --relative option when -r is set to true + without relative option + is set to false + directories option + with a single directory + is set to app + with a multiple directories + is set to an array of the directories + not specified + is set to local directory -Listen::FSM - FSM with no start state - raises ArgumentError on new - simple FSM - allows transitions - declares transition and transition! private - raises on disallowed transitions - starts in start_state - #wait_for_state - enforces precondition that states must be symbols - passes the timeout: down to wait, if given - waits for the next state change and returns truthy if then in the desired state - returns truthy immediately if already in the desired state - waits for the next state change and returns falsey if then not the desired state - passes nil (infinite) timeout: down to wait, if none given - FSM with string state name - raises ArgumentError on new +Listen::Adapter::Base + #start + builds record + runs the adapter + handling events + when an event occurs + passes invalidates the snapshot based on the event Listen::File + #inaccurate_mac_time? + with one accurate time + is expected to be falsey + with no accurate times + is expected to be truthy + with all accurate times + is expected to be falsey #change + with empty record + with existing path + returns added + sets path in record with expected data with file record with existing file with different mode in record - is expected to equal :modified sets path in record with expected data + is expected to equal :modified with same mode in record - with later mtime than in record - is expected to equal :modified - sets path in record with expected data with earlier mtime than in record sets path in record with expected data is expected to equal :modified + with later mtime than in record + sets path in record with expected data + is expected to equal :modified with identical mtime in record with accurate stat times is expected to be nil with inaccurate stat times with real mtime barely within last second + without available sha + is expected to equal :removed + should not unset record with available sha + with no sha in record + is expected to be nil + with same sha in record + is expected to be nil with different sha in record sets path in record with expected data is expected to equal :modified - with same sha in record - is expected to be nil - with no sha in record - is expected to be nil - without available sha - should not unset record - is expected to equal :removed with real mtime barely not within last second is expected to be nil with non-existing file - sets path in record is expected to eq :removed - with empty record - with existing path - sets path in record with expected data - returns added - #inaccurate_mac_time? - with all accurate times - is expected to be falsey - with no accurate times - is expected to be truthy - with one accurate time - is expected to be falsey + sets path in record -Listen - .to - initalizes listener - .stop - stops all listeners +Listen::Adapter + .select + returns BSD adapter when usable + returns Polling adapter if forced + returns Darwin adapter when usable + returns Windows adapter when usable + returns Linux adapter when usable + no usable adapters + warns polling fallback with custom message if set + doesn't warn if polling_fallback_message is false + warns polling fallback with default message + returns Polling adapter + +Listen::QueueOptimizer + smoosh_changes + with no cookie + with ignored file + is expected to eq {:added=>[], :modified=>[], :removed=>[]} + when double move + is expected to eq {:added=>[], :modified=>["foo"], :removed=>[]} + with cookie + when single moved + is expected to eq {:added=>["foo"], :modified=>[], :removed=>[]} + when related moved_to + is expected to eq {:added=>["bar"], :modified=>[], :removed=>[]} + when related moved_to with ignored moved_from + is expected to eq {:added=>[], :modified=>["foo"], :removed=>[]} + with rename from temp file + is expected to eq {:added=>[], :modified=>["foo"], :removed=>[]} + with a detected temp file + is expected to eq {:added=>[], :modified=>[], :removed=>[]} + +Listen::Forwarder + passes relative option to Listen + +Listen::Listener::Config + options + custom options + extracts adapter options + extract adapter selecting options + +logger.rb + Listen.logger + logger + infers INFO level from LISTEN_GEM_DEBUGGING=" yesss!" + infers DEBUG level from LISTEN_GEM_DEBUGGING="DEBUG" + infers DEBUG level from LISTEN_GEM_DEBUGGING="2 " + infers INFO level from LISTEN_GEM_DEBUGGING="level1" + infers ERROR level from LISTEN_GEM_DEBUGGING="ERROR" + infers FATAL level from LISTEN_GEM_DEBUGGING="fatal" + infers INFO level from LISTEN_GEM_DEBUGGING="1" + infers DEBUG level from LISTEN_GEM_DEBUGGING="2" + infers WARN level from LISTEN_GEM_DEBUGGING="WARN" + returns default logger if none set + infers ERROR level from LISTEN_GEM_DEBUGGING="OTHER" + infers DEBUG level from LISTEN_GEM_DEBUGGING="level2" + infers FATAL level from LISTEN_GEM_DEBUGGING="FATAL" + infers WARN level from LISTEN_GEM_DEBUGGING="warn" + infers INFO level from LISTEN_GEM_DEBUGGING="YES" + infers INFO level from LISTEN_GEM_DEBUGGING="TRUE" + infers INFO level from LISTEN_GEM_DEBUGGING=" true" + infers DEBUG level from LISTEN_GEM_DEBUGGING="debug" + infers INFO level from LISTEN_GEM_DEBUGGING="TRUE " + infers INFO level from LISTEN_GEM_DEBUGGING="info" + infers WARN level from LISTEN_GEM_DEBUGGING=" warn" + infers INFO level from LISTEN_GEM_DEBUGGING="true" + infers FATAL level from LISTEN_GEM_DEBUGGING=" fatal" + infers WARN level from LISTEN_GEM_DEBUGGING="warning" + infers INFO level from LISTEN_GEM_DEBUGGING="INFO" + infers INFO level from LISTEN_GEM_DEBUGGING="yes" + infers ERROR level from LISTEN_GEM_DEBUGGING="error" + logger= + allows the logger to be set + allows nil to be set (implying default logger) + Listen.adapter_warn_behavior + defaults to :warn + allows the adapter_warn_behavior to be set to false to silence the warnings + allows the adapter_warn_behavior to be set to to silence the warnings + allows the adapter_warn_behavior to be set to silent to silence the warnings + allows the adapter_warn_behavior to be set to :log + when LISTEN_GEM_ADAPTER_WARN_BEHAVIOR is set to 'log' + respects the environment variable over a callable config + respects the environment variable over false + respects the environment variable over :warn + respects the environment variable over :silent + respects the environment variable over nil + when adapter_warn_behavior is set to a callable object like a proc + when the message matches a #{behavior} pattern + respects :silent + when the message matches a true pattern + respects :warn + when the message matches a #{behavior} pattern + respects :silent + when the message matches a :silent pattern + respects :silent + when the message matches a :warn pattern + respects :warn + +Listen::Directory + #scan with recursive off + with empty record + with non-existing dir path + reports no changes + unsets record dir path + with file.rb in dir + snapshots changes for file & file2 paths + when network share is disconnected + reports no changes + unsets record dir path + with file & subdir in record + when file.rb no longer exists after scan + rescans + with empty dir + sets record dir path + snapshots changes for file path and dir that doesn't exist + when file2.rb is added + notices file removed and file2 changed + when subdir is removed + notices subdir does not exist + when file.rb removed + notices file was removed + #scan with recursive on + with empty record + with subdir present in dir + snapshots changes for subdir + with non-existing dir + reports no changes + with file.rb & subdir in record + with empty dir + snapshots changes for file & subdir path + with subdir2 path present + snapshots changes for file, file2 & subdir paths Listen::Listener - #ignore! + #ignore + with existing ignore options (array) + adds up to existing ignore options with existing ignore options - deletes ignore options - with existing ignore! options - overwrites existing ignore options - with no existing options - sets options - #stop - when fully started - terminates - when only initialized - terminates + adds up to existing ignore options + unpause with start + sets paused to false + #paused? + returns true when paused + returns false when not paused #listen? when stopped is expected not to be processing @@ -1329,246 +1499,112 @@ is expected not to be processing when processing is expected to be processing - #paused? - returns false when not paused - returns true when paused - #only - with existing only options - overwrites existing ignore options - unpause with start - sets paused to false #start starts adapter sets paused to false - #ignore + #only + with existing only options + overwrites existing ignore options + #pause + sets paused to true + #stop + when only initialized + terminates + when fully started + terminates + #ignore! with existing ignore options - adds up to existing ignore options - with existing ignore options (array) - adds up to existing ignore options + deletes ignore options + with existing ignore! options + overwrites existing ignore options + with no existing options + sets options initialize is expected not to be paused - with directories - passes directories to backend with a block passes the block to the event processor - #pause - sets paused to true - -Listen::Event::Loop - when set up / started - #stop - sets the reason for waking up - frees the thread - waits for the thread to finish - #start - is started - when state change to :started takes longer than 5 seconds - raises Error::NotStarted - when start is called again - returns silently - -Listen::Event::Processor - _process_changes - when it raises an exception derived from StandardError - rescues and logs exception and continues - #loop_for - when not stopped - when initially paused - when stopped after sleeping - sleeps, waiting to be woken up - breaks - when still paused after sleeping - when there were no events for ages - still does not process events because it is paused - when there were no events before - sleeps for latency to possibly later optimize some events - when initially processing - when event queue has events - when there were events ages ago - processes events - when event queue is empty - when stopped after sleeping - breaks - sleeps, waiting to be woken up - when stopped - with pending changes - does not change the event queue - does not sleep + with directories + passes directories to backend -Listen::Silencer::Controller - append_ignores - with previous :ignore rules - when providing a nil - reconfigures with existing :ignore rules - when providing a single regexp as argument - appends the given :ignore rules as array - when providing multiple arguments - appends the given :ignore rules as a flat array - when providing as array - appends the given :ignore rules - with no previous :ignore rules - when providing a single regexp as argument - sets the given :ignore rules as array - when providing as array - sets the given :ignore rules - when providing a nil - sets the given :ignore rules as empty array - when providing multiple arguments - sets the given :ignore rules as a flat array +Listen + .to + initalizes listener + .stop + stops all listeners -Listen::Listener::Config - options - custom options - extracts adapter options - extract adapter selecting options +Listen::Backend + #stop + stops the adapter + #initialize + with config + sets up an adapter class + #start + starts the adapter -Listen::Event::Config - with a given block - is callable - calls the block +Listen::FSM + FSM with string state name + raises ArgumentError on new + FSM with no start state + raises ArgumentError on new + simple FSM + raises on disallowed transitions + declares transition and transition! private + starts in start_state + allows transitions + #wait_for_state + passes nil (infinite) timeout: down to wait, if none given + waits for the next state change and returns falsey if then not the desired state + passes the timeout: down to wait, if given + returns truthy immediately if already in the desired state + waits for the next state change and returns truthy if then in the desired state + enforces precondition that states must be symbols Listen::Change #change directory calls Listen::Directory#new + with build options + calls still_building! on record file with unknown change calls Listen::File#change doesn't call Listen::File#change if path is silenced + that returns no change + doesn't notifies no change that returns a change listener listen notifies change to listener silence option notifies change to listener - that returns no change - doesn't notifies no change with known change - notifies change directly to listener doesn't notify to listener if path is silenced - with build options - calls still_building! on record - -Listen::QueueOptimizer - smoosh_changes - with a detected temp file - is expected to eq {:added=>[], :modified=>[], :removed=>[]} - with rename from temp file - is expected to eq {:added=>[], :modified=>["foo"], :removed=>[]} - with no cookie - with ignored file - is expected to eq {:added=>[], :modified=>[], :removed=>[]} - when double move - is expected to eq {:added=>[], :modified=>["foo"], :removed=>[]} - with cookie - when single moved - is expected to eq {:added=>["foo"], :modified=>[], :removed=>[]} - when related moved_to with ignored moved_from - is expected to eq {:added=>[], :modified=>["foo"], :removed=>[]} - when related moved_to - is expected to eq {:added=>["bar"], :modified=>[], :removed=>[]} - -Listen::Adapter::Polling - with a valid configuration - #start - notifies change on every listener directories path - #_latency - with custom latency overriding - is expected to eq 1234 - with no overriding option - is expected to eq 1.0 - class - is expected to be usable + notifies change directly to listener -Listen::Silencer - #silenced? - is expected to accept :file and # - when ignoring *.pid - is expected not to accept :file and "foo.pid" - with default ignore - is expected to accept :file and "a.swf" - is expected not to accept :file and ".#hello.rb" - is expected not to accept :dir and "tmp" - is expected to accept :dir and "foolog" - is expected to accept :dir and "foo.hg" - is expected not to accept :file and "sed86w1kB" - is expected to accept :dir and "foo.rbx" - is expected not to accept :dir and ".bundle" - is expected not to accept :file and "foo.rb.kate-swp" - is expected not to accept :file and "foo.swx" - is expected to accept :dir and "foo.svn" - is expected not to accept :file and ".goutputstream-S3FBGX" - is expected not to accept :file and ".mutagen-temporary-unicode-test-\u00E9ntry0" - is expected to accept :file and "sediments" - is expected not to accept :file and "foo.rbB22583.new" - is expected to accept :dir and "bundlefoo" - is expected to accept :dir and ".rbxfoo" - is expected to accept :file and "sedan2014" - is expected to accept :dir and ".gitfoo" - is expected to accept :file and "sedatives" - is expected to accept :dir and "foo.bundle" - is expected to accept :dir and "logfoo" - is expected to accept :dir and "vendor/rubyfoo" - is expected to accept :dir and "foobundle" - is expected not to accept :dir and ".git" - is expected to accept :file and "sed_ABCDE" - is expected to accept :dir and "foovendor/bundle" - is expected not to accept :dir and "bundle" - is expected not to accept :dir and ".svn" - is expected to accept :dir and "vendor/bundlefoo" - is expected not to accept :dir and ".rbx" - is expected to accept :file and "sedabcdefg" - is expected to accept :dir and "tmpfoo" - is expected not to accept :dir and "log" - is expected to accept :file and ".sedq7eVAR" - is expected not to accept :file and "foo~" - is expected not to accept :file and "4913" - is expected to accept :file and "foo.sedq7eVAR" - is expected to accept :dir and "foovendor/ruby" - is expected not to accept :dir and "vendor/bundle" - is expected not to accept :file and "foo.rbo54321.new" - is expected to accept :dir and ".bundlefoo" - is expected not to accept :dir and ".hg" - is expected not to accept :file and "foo.swpx" - is expected not to accept :file and "foo.tmp" - is expected not to accept :file and "foo.rb___jb_bak___" - is expected to accept :dir and "foo.git" - is expected not to accept :dir and "vendor/ruby" - is expected not to accept :file and ".DS_Store" - is expected to accept :file and "foo.tmpl" - is expected to accept :file and "49131" - is expected to accept :file and "file.new" - is expected to accept :dir and ".svnfoo" - is expected not to accept :file and "foo.swp" - is expected to accept :dir and "footmp" - is expected not to accept :file and "sedq7eVAR" - is expected to accept :file and "file54321.new" - is expected to accept :dir and ".hgfoo" - is expected not to accept :file and "#hello.rb#" - is expected to accept :file and "14913" - is expected not to accept :file and "foo.rb___jb_old___" - is expected not to accept :file and ".mutagen-temporary-cross-device-rename0" - when accepting only foo/* and *.txt - is expected to accept :file and "foo/bar.rb" - is expected not to accept :file and "bar.rb" - is expected to accept :file and "bar.txt" - is expected not to accept :file and "bar/baz.rb" - when accepting only *foo* - is expected not to accept :file and "bar" - is expected to accept :file and "foo" - when ignoring only *.pid - is expected to accept :file and ".git" - is expected not to accept :file and "foo.pid" - when ignoring foo/bar* and *.pid - is expected not to accept :file and "foo/bar/baz" - is expected not to accept :file and "foo.pid" - when accepting only *.pid - when ignoring bar* - is expected not to accept :file and "bar.pid" - is expected not to accept :file and "foo.rb" - is expected to accept :file and "foo.pid" +Listen::Event::Config + with a given block + calls the block + is callable -Listen::Forwarder - passes relative option to Listen +Listen::Silencer::Controller + append_ignores + with previous :ignore rules + when providing a nil + reconfigures with existing :ignore rules + when providing as array + appends the given :ignore rules + when providing a single regexp as argument + appends the given :ignore rules as array + when providing multiple arguments + appends the given :ignore rules as a flat array + with no previous :ignore rules + when providing as array + sets the given :ignore rules + when providing a single regexp as argument + sets the given :ignore rules as array + when providing a nil + sets the given :ignore rules as empty array + when providing multiple arguments + sets the given :ignore rules as a flat array Pending: (Failures listed here are expected and do not affect your suite's status) @@ -1576,10 +1612,10 @@ # Not yet implemented # ./spec/lib/listen/adapter/config_spec.rb:87 -Finished in 0.81456 seconds (files took 0.32356 seconds to load) +Finished in 0.80518 seconds (files took 0.28323 seconds to load) 331 examples, 0 failures, 1 pending -Randomized with seed 19816 +Randomized with seed 48702 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -1613,12 +1649,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/3005555/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3005555/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/258869 and its subdirectories -I: Current time: Mon May 6 11:17:04 -12 2024 -I: pbuilder-time-stamp: 1715037424 +I: removing directory /srv/workspace/pbuilder/3005555 and its subdirectories +I: Current time: Mon Jun 9 19:41:09 +14 2025 +I: pbuilder-time-stamp: 1749447669