Input buildinfo: https://buildinfos.debian.net/buildinfo-pool/r/ruby-rufus-scheduler/ruby-rufus-scheduler_3.4.2-1_all.buildinfo Use metasnap for getting required timestamps New buildinfo file: /tmp/ruby-rufus-scheduler-3.4.2-13o2bey07/ruby-rufus-scheduler_3.4.2-1_all.buildinfo Get source package info: ruby-rufus-scheduler=3.4.2-1 Source URL: http://snapshot.notset.fr/mr/package/ruby-rufus-scheduler/3.4.2-1/srcfiles?fileinfo=1 env -i PATH=/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp mmdebstrap --arch=amd64 --include=autoconf=2.69-11 automake=1:1.15.1-3 autopoint=0.19.8.1-4 autotools-dev=20161112.1 base-files=10 base-passwd=3.5.44 bash=4.4-5 binutils=2.29-10 binutils-common=2.29-10 binutils-x86-64-linux-gnu=2.29-10 bsdmainutils=9.0.12+nmu1 bsdutils=1:2.29.2-5 build-essential=12.4 bzip2=1.0.6-8.1 ca-certificates=20170717 coreutils=8.26-3 cpp=4:7.2.0-1d1 cpp-7=7.2.0-5 dash=0.5.8-2.5 debconf=1.5.63 debhelper=10.8 debianutils=4.8.2 devscripts=2.17.10 dh-autoreconf=14 dh-python=2.20170125 dh-strip-nondeterminism=0.038-1 diffutils=1:3.6-1 dpkg=1.18.24 dpkg-dev=1.18.24 e2fslibs=1.43.6-1 e2fsprogs=1.43.6-1 fdisk=2.29.2-5 file=1:5.32-1 findutils=4.6.0+git+20170729-2 g++=4:7.2.0-1d1 g++-7=7.2.0-5 gcc=4:7.2.0-1d1 gcc-7=7.2.0-5 gcc-7-base=7.2.0-5 gem2deb=0.36 gem2deb-test-runner=0.36 gettext=0.19.8.1-4 gettext-base=0.19.8.1-4 grep=3.1-2 groff-base=1.22.3-9 gzip=1.6-5+b1 hostname=3.18+b1 init-system-helpers=1.49 intltool-debian=0.35.0+20060710.4 libacl1=2.2.52-3+b1 libarchive-zip-perl=1.59-1 libasan4=7.2.0-5 libatomic1=7.2.0-5 libattr1=1:2.4.47-2+b2 libaudit-common=1:2.7.7-1 libaudit1=1:2.7.7-1+b2 libbinutils=2.29-10 libblkid1=2.29.2-5 libbsd0=0.8.6-2 libbz2-1.0=1.0.6-8.1 libc-bin=2.24-17 libc-dev-bin=2.24-17 libc6=2.24-17 libc6-dev=2.24-17 libcap-ng0=0.7.7-3+b1 libcc1-0=7.2.0-5 libcilkrts5=7.2.0-5 libcomerr2=1.43.6-1 libcroco3=0.6.12-1 libdb5.3=5.3.28-13.1 libdebconfclient0=0.230 libdpkg-perl=1.18.24 libexpat1=2.2.3-1 libfdisk1=2.29.2-5 libffi6=3.2.1-6 libfile-homedir-perl=1.00-1 libfile-stripnondeterminism-perl=0.038-1 libfile-which-perl=1.21-1 libgcc-7-dev=7.2.0-5 libgcc1=1:7.2.0-5 libgcrypt20=1.7.9-1 libgdbm3=1.8.3-14 libglib2.0-0=2.54.0-1 libgmp-dev=2:6.1.2+dfsg-1 libgmp10=2:6.1.2+dfsg-1 libgmpxx4ldbl=2:6.1.2+dfsg-1 libgomp1=7.2.0-5 libgpg-error0=1.27-3 libicu57=57.1-6 libisl15=0.18-1 libitm1=7.2.0-5 liblsan0=7.2.0-5 liblz4-1=0.0~r131-2+b1 liblzma5=5.2.2-1.3 libmagic-mgc=1:5.32-1 libmagic1=1:5.32-1 libmount1=2.29.2-5 libmpc3=1.0.3-2 libmpdec2=2.4.2-1 libmpfr4=3.1.6-1 libmpx2=7.2.0-5 libncurses5=6.0+20170902-1 libncursesw5=6.0+20170902-1 libpam-modules=1.1.8-3.6 libpam-modules-bin=1.1.8-3.6 libpam-runtime=1.1.8-3.6 libpam0g=1.1.8-3.6 libpcre3=2:8.39-4 libperl5.26=5.26.0-8 libpipeline1=1.4.2-1 libpython3-stdlib=3.5.3-3 libpython3.5-minimal=3.5.4-4 libpython3.5-stdlib=3.5.4-4 libquadmath0=7.2.0-5 libreadline7=7.0-3 libruby2.3=2.3.3-1 libselinux1=2.7-2 libsigsegv2=2.11-1 libsmartcols1=2.29.2-5 libsqlite3-0=3.20.1-1 libss2=1.43.6-1 libssl1.0.2=1.0.2l-2 libssl1.1=1.1.0f-5 libstdc++-7-dev=7.2.0-5 libstdc++6=7.2.0-5 libsystemd0=234-3 libtimedate-perl=2.3000-2 libtinfo5=6.0+20170902-1 libtool=2.4.6-2 libtsan0=7.2.0-5 libubsan0=7.2.0-5 libudev1=234-3 libunistring2=0.9.7-2 libuuid1=2.29.2-5 libxml2=2.9.4+dfsg1-4 libyaml-0-2=0.1.7-2 linux-libc-dev=4.12.12-2 login=1:4.4-4.1 m4=1.4.18-1 make=4.1-9.1 man-db=2.7.6.1-2 mawk=1.3.3-17+b3 mime-support=3.60 ncurses-base=6.0+20170902-1 ncurses-bin=6.0+20170902-1 openssl=1.1.0f-5 patch=2.7.5-1+b2 perl=5.26.0-8 perl-base=5.26.0-8 perl-modules-5.26=5.26.0-8 po-debconf=1.0.20 python3=3.5.3-3 python3-minimal=3.5.3-3 python3.5=3.5.4-4 python3.5-minimal=3.5.4-4 rake=12.0.0-1 readline-common=7.0-3 ruby=1:2.3.3 ruby-all-dev=1:2.3.3 ruby-atomic=1.1.16-2+b6 ruby-chronic=0.10.2-3 ruby-did-you-mean=1.0.0-2 ruby-diff-lcs=1.3-1 ruby-et-orbi=1.0.5-1 ruby-minitest=5.10.3-1 ruby-net-telnet=0.1.1-2 ruby-power-assert=0.3.0-1 ruby-rspec=3.5.0c3e0m0s0-1 ruby-rspec-core=3.5.0c3e0m0s0-1 ruby-rspec-expectations=3.5.0c3e0m0s0-1 ruby-rspec-mocks=3.5.0c3e0m0s0-1 ruby-rspec-support=3.5.0c3e0m0s0-1 ruby-setup=3.4.1-9 ruby-test-unit=3.2.5-1 ruby-thread-order=1.1.0-1 ruby-thread-safe=0.3.5-3 ruby-tzinfo=1.2.3-1 ruby2.3=2.3.3-1 ruby2.3-dev=2.3.3-1 rubygems-integration=1.11 sed=4.4-1 sysvinit-utils=2.88dsf-59.9 tar=1.29b-2 tzdata=2017b-2 util-linux=2.29.2-5 xz-utils=5.2.2-1.3 zlib1g=1:1.2.8.dfsg-5 --variant=apt --aptopt=Acquire::Check-Valid-Until "false" --aptopt=Acquire::http::Dl-Limit "1000"; --aptopt=Acquire::https::Dl-Limit "1000"; --aptopt=Acquire::Retries "5"; --aptopt=APT::Get::allow-downgrades "true"; --keyring=/usr/share/keyrings/ --essential-hook=chroot "$1" sh -c "apt-get --yes install fakeroot util-linux" --essential-hook=copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ --essential-hook=chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20170918T214131Z/ unstable main' >> /etc/apt/sources.list && apt-get update" --customize-hook=chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash --customize-hook=chroot "$1" env sh -c "apt-get source --only-source -d ruby-rufus-scheduler=3.4.2-1 && mkdir -p /build/ruby-rufus-scheduler-Wy4N9G && dpkg-source --no-check -x /*.dsc /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2 && chown -R builduser:builduser /build/ruby-rufus-scheduler-Wy4N9G" --customize-hook=chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="POSIX" SOURCE_DATE_EPOCH="1504715105" dpkg-buildpackage -uc -a amd64 --build=all" --customize-hook=sync-out /build/ruby-rufus-scheduler-Wy4N9G /tmp/ruby-rufus-scheduler-3.4.2-13o2bey07 buster /dev/null deb http://snapshot.notset.fr/archive/debian/20170918T214131Z unstable main I: automatically chosen mode: root I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen format: tar I: using /tmp/mmdebstrap.HasBfyEt1t as tempdir I: running apt-get update... I: downloading packages with apt... I: extracting archives... I: installing essential packages... I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "apt-get --yes install fakeroot util-linux"' exec /tmp/mmdebstrap.HasBfyEt1t Reading package lists... Building dependency tree... util-linux is already the newest version (2.29.2-5). The following NEW packages will be installed: fakeroot libfakeroot 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 131 kB of archives. After this operation, 373 kB of additional disk space will be used. Get:1 http://snapshot.notset.fr/archive/debian/20170918T214131Z unstable/main amd64 libfakeroot amd64 1.22-1 [45.7 kB] Get:2 http://snapshot.notset.fr/archive/debian/20170918T214131Z unstable/main amd64 fakeroot amd64 1.22-1 [85.7 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 131 kB in 0s (890 kB/s) Selecting previously unselected package libfakeroot:amd64. (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 ... 4404 files and directories currently installed.) Preparing to unpack .../libfakeroot_1.22-1_amd64.deb ... Unpacking libfakeroot:amd64 (1.22-1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.22-1_amd64.deb ... Unpacking fakeroot (1.22-1) ... Processing triggers for libc-bin (2.24-17) ... Setting up libfakeroot:amd64 (1.22-1) ... Setting up fakeroot (1.22-1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Processing triggers for libc-bin (2.24-17) ... I: running special hook: copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20170918T214131Z/ unstable main' >> /etc/apt/sources.list && apt-get update"' exec /tmp/mmdebstrap.HasBfyEt1t Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm InRelease [81.6 kB] Hit:2 http://snapshot.notset.fr/archive/debian/20170918T214131Z unstable InRelease Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources [11.4 MB] Get:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages [11.1 MB] Fetched 22.6 MB in 26s (865 kB/s) Reading package lists... W: Problem unlinking the file auxfiles - pkgAcquire::Clean (21: Is a directory) I: installing remaining packages inside the chroot... I: running --customize-hook in shell: sh -c 'chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash' exec /tmp/mmdebstrap.HasBfyEt1t I: running --customize-hook in shell: sh -c 'chroot "$1" env sh -c "apt-get source --only-source -d ruby-rufus-scheduler=3.4.2-1 && mkdir -p /build/ruby-rufus-scheduler-Wy4N9G && dpkg-source --no-check -x /*.dsc /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2 && chown -R builduser:builduser /build/ruby-rufus-scheduler-Wy4N9G"' exec /tmp/mmdebstrap.HasBfyEt1t Reading package lists... NOTICE: 'ruby-rufus-scheduler' packaging is maintained in the 'Git' version control system at: https://anonscm.debian.org/git/pkg-ruby-extras/ruby-rufus-scheduler.git Please use: git clone https://anonscm.debian.org/git/pkg-ruby-extras/ruby-rufus-scheduler.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 71.2 kB of source archives. Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main ruby-rufus-scheduler 3.4.2-1 (dsc) [2197 B] Get:2 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main ruby-rufus-scheduler 3.4.2-1 (tar) [66.8 kB] Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main ruby-rufus-scheduler 3.4.2-1 (diff) [2276 B] Fetched 71.2 kB in 0s (1114 kB/s) Download complete and in download only mode W: Download is performed unsandboxed as root as file 'ruby-rufus-scheduler_3.4.2-1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) dpkg-source: info: extracting ruby-rufus-scheduler in /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2 dpkg-source: info: unpacking ruby-rufus-scheduler_3.4.2.orig.tar.gz dpkg-source: info: unpacking ruby-rufus-scheduler_3.4.2-1.debian.tar.xz I: running --customize-hook in shell: sh -c 'chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="POSIX" SOURCE_DATE_EPOCH="1504715105" dpkg-buildpackage -uc -a amd64 --build=all"' exec /tmp/mmdebstrap.HasBfyEt1t dpkg-buildpackage: info: source package ruby-rufus-scheduler dpkg-buildpackage: info: source version 3.4.2-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Pirate Praveen dpkg-source --before-build ruby-rufus-scheduler-3.4.2 fakeroot debian/rules clean dh clean --buildsystem=ruby --with ruby dh_auto_clean -O--buildsystem=ruby dh_ruby --clean dh_ruby --clean dh_clean -O--buildsystem=ruby debian/rules build-indep dh build-indep --buildsystem=ruby --with ruby dh_update_autotools_config -i -O--buildsystem=ruby dh_auto_configure -i -O--buildsystem=ruby dh_ruby --configure dh_auto_build -i -O--buildsystem=ruby dh_ruby --build dh_ruby --build dh_auto_test -i -O--buildsystem=ruby dh_ruby --test fakeroot debian/rules binary-indep dh binary-indep --buildsystem=ruby --with ruby dh_testroot -i -O--buildsystem=ruby dh_prep -i -O--buildsystem=ruby dh_auto_install -i -O--buildsystem=ruby dh_ruby --install /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler dh_ruby --install ┌──────────────────────────────────────────────────────────────────────────────┐ │ Install files │ └──────────────────────────────────────────────────────────────────────────────┘ install -d /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus/scheduler/job_array.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus/scheduler/job_array.rb install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus/scheduler/locks.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus/scheduler/locks.rb install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus/scheduler/cronline.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus/scheduler/cronline.rb install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus/scheduler/jobs.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus/scheduler/jobs.rb install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus/scheduler/util.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus/scheduler/util.rb install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus/scheduler.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus/scheduler.rb install -D -m644 /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/lib/rufus-scheduler.rb /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby/rufus-scheduler.rb dh_installchangelogs -pruby-rufus-scheduler /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/CHANGELOG.txt upstream ┌──────────────────────────────────────────────────────────────────────────────┐ │ Install Rubygems integration metadata │ └──────────────────────────────────────────────────────────────────────────────┘ generating gemspec at /build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/share/rubygems-integration/all/specifications/rufus-scheduler-3.4.2.gemspec /usr/bin/ruby2.3 /usr/bin/gem2deb-test-runner ┌──────────────────────────────────────────────────────────────────────────────┐ │ Checking Rubygems dependency resolution on ruby2.3 │ └──────────────────────────────────────────────────────────────────────────────┘ GEM_PATH=debian/ruby-rufus-scheduler/usr/share/rubygems-integration/all:/var/lib/gems/2.3.0:/usr/lib/x86_64-linux-gnu/rubygems-integration/2.3.0:/usr/share/rubygems-integration/2.3.0:/usr/share/rubygems-integration/all ruby2.3 -e gem\ \"rufus-scheduler\" ┌──────────────────────────────────────────────────────────────────────────────┐ │ Run tests for ruby2.3 from debian/ruby-tests.rake │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=/build/ruby-rufus-scheduler-Wy4N9G/ruby-rufus-scheduler-3.4.2/debian/ruby-rufus-scheduler/usr/lib/ruby/vendor_ruby:. GEM_PATH=debian/ruby-rufus-scheduler/usr/share/rubygems-integration/all:/var/lib/gems/2.3.0:/usr/lib/x86_64-linux-gnu/rubygems-integration/2.3.0:/usr/share/rubygems-integration/2.3.0:/usr/share/rubygems-integration/all ruby2.3 -S rake -f debian/ruby-tests.rake /usr/bin/ruby2.3 /usr/bin/rspec --pattern ./spec/\*\*/\*_spec.rb --format documentation RUBY_VERSION: 2.3.3 RUBY_PLATFORM: x86_64-linux-gnu basics Time.new accepts a timezone final argument Time.local works as expected Rufus::Scheduler::CronLine .new interprets cron strings correctly rejects invalid weekday expressions rejects invalid cronlines interprets cron strings with TZ correctly interprets cron strings with / (slashes) correctly accepts lonely / (slashes) (like <= 2.0.19 did) rejects / for days (every other wednesday) does not support ranges for monthdays (sun#1-sun#2) accepts items with initial 0 interprets cron strings with L correctly rejects zero increments does not support ranges for L does not support multiple Ls raises if L is used for something else than days accepts L for day-of-week accepts negative days accepts negative day ranges rejects day descending ranges rejects negative/positive day ranges rejects out of range input rejects day 0 sorts seconds sorts minutes sorts days sorts months sorts days of week #next_time computes the next occurrence correctly computes the next occurrence correctly in local TZ (TZ not specified) computes the next occurrence correctly in UTC (TZ specified) computes the next time correctly when there is a sun#2 involved computes next time correctly when there is a sun#2,sun#3 involved computes next time correctly when weekdays is combined with monthdays understands sun#L and co understands 0#L and co understands sun#-2 computes the next time correctly when "L" (last day of month) returns a time with subseconds chopped off survives TZInfo::AmbiguousTime survives TZInfo::PeriodNotFound understands six-field crontabs raises a RangeError if it doesn't reach the next time within x years #next_second ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:00 +0000) is 0 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:01 +0000) is 9 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:09 +0000) is 1 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:10 +0000) is 0 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:11 +0000) is 9 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:19 +0000) is 1 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:20 +0000) is 0 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:21 +0000) is 9 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:49 +0000) is 1 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:50 +0000) is 0 ensures that next_second('*/10 * * * * *', 1970-01-01 01:01:51 +0000) is 9 #prev_second returns the time to the closest previous second when time sec is lower then all cron seconds (gh-177) returns the time to the last second a minute before #previous_time returns the previous time the cron should have triggered jumps to the previous minute if necessary (gh-177) survives TZInfo::AmbiguousTime survives TZInfo::PeriodNotFound computes correctly when * 0,10,20 computes correctly when * */10 raises a RangeError if it doesn't reach the previous time within x years #matches? matches correctly in local TZ (TZ not specified) matches correctly in UTC (TZ specified) matches correctly when there is a sun#2 involved matches correctly when there is a L involved matches negative days matches negative day ranges matches correctly when there is a sun#2,sun#3 involved matches correctly for seconds matches correctly for seconds / interval #frequency returns the shortest delta between two occurrences (5 fields) returns the shortest delta between two occurrences (6 fields) spots B-A vs C-B asymmetry (5 fields) spots B-A vs C-B asymmetry (6 fields) handles crontab steps syntax (5 fields) handles crontab steps syntax (6 fields) #brute_frequency returns the shortest delta between two occurrences (5 fields) returns the shortest delta between two occurrences (6 fields) does not go into an infinite loop spots B-A vs C-B asymmetry (5 fields) spots B-A vs C-B asymmetry (6 fields) handles crontab modulo syntax (5 fields) handles crontab modulo syntax (6 fields) summer time schedules correctly through a switch into summer time schedules correctly through a switch out of summer time correctly increments through a DST transition correctly increments every minute through a DST transition correctly decrements through a DST transition correctly decrements every minute through a DST transition correctly increments when entering DST fall time correctly increments through a DST transition correctly increments every minute through a DST transition correctly decrements through a DST transition correctly decrements every minute through a DST transition correctly increments when leaving DST Rufus::Scheduler error in block intercepts the error and describes it on $stderr error in callable intercepts the error and describes it on $stderr Rufus::Scheduler#stderr= lets divert error information to custom files error information contains information about the error, the job and the scheduler Rufus::Scheduler#on_error(&block) intercepts all StandardError instances Rufus::Scheduler::JobArray #push pushes jobs pushes and remove duplicates Rufus::Scheduler::AtJob #unschedule unschedules the job #scheduled_at returns the Time at which the job got scheduled #time returns the time at which the job will trigger #previous_time returns the previous #time Rufus::Scheduler::CronJob normal triggers near the zero second first_at/in does not trigger before first_at is reached triggers for the first time at first_at scheduling the cron itself does not sit scheduling and blocking... #next_time returns the next trigger time returns the next trigger time (first_at => Time) Rufus::Scheduler::EveryJob triggers as expected lets its @next_time change in-flight summer time triggers correctly through a DST transition first_at/in triggers for the first time at first_at triggers for the first time at first_in triggers once at first then repeatedly after the assigned time #first_at= alters @next_time #previous_time returns the previous #time Rufus::Scheduler::IntervalJob #interval returns the scheduled interval first_at/in triggers for the first time at first_at #first_at= alters @next_time Rufus::Scheduler::RepeatJob #pause pauses the job #paused? returns true if the job is paused returns false if the job is not paused #resume resumes a paused job has no effect on a not paused job :times => i lets a job unschedule itself after i times is OK when passed a nil instead of an integer raises when passed something else than nil or an integer :first/:first_in/:first_at => point in time accepts a Time instance accepts a time string only lets the job trigger after the :first raises on points in the past :first_time => :now/:immediately/0 schedules the first execution immediately (:first => :now) schedules the first execution immediately (:first_in => 0) schedules the first execution immediately (:first_in => "0s") :first/:first_in/:first_at => duration accepts a duration string accepts a duration in seconds (integer) raises if the argument cannot be used #first_at= can be used to set first_at directly :last/:last_in/:last_at => point in time accepts a Time instance unschedules the job after the last_at time accepts a time string raises on a point in the past :last/:last_in/:last_at => duration accepts a duration string accepts a duration in seconds (integer) raises if the argument is worthless #last_at= can be used to set last_at directly #count starts at 0 keeps track of how many times the job fired #trigger_off_schedule calls the job flags the job as running Rufus::Scheduler::Job #last_time returns nil if the job never fired returns the last time the job fired #threads returns an empty list when the job is not running returns an empty list after the job terminated lists the threads the job currently runs in #kill has no effect if the job is not running makes the threads vacant #running? returns false when the job is not running in any thread returns true when the job is running in at least one thread #scheduled? returns true when the job is scheduled returns false when the job is not scheduled returns true for repeat jobs that are running returns false if job is unscheduled #call calls the job (like it were a proc) #call(true) calls the job and let the scheduler handle errors #call(false) calls the job and let errors slip through job-local variables #[]= sets a job-local variable #[] returns nil if there is no such entry returns the value of a job-local variable #key? returns true if there is an entry with the given key #keys returns the array of keys of the job-local variables :tag / :tags => [ t0, t1 ] accepts one tag accepts an array of tags turns tags into strings :blocking => true runs the job in the same thread as the scheduler thread default one thread per job behaviour runs the job in a dedicated thread :allow_overlapping / :allow_overlap / :overlap default (:overlap => true) lets a job overlap itself when :overlap => false prevents a job from overlapping itself :mutex :mutex => "mutex_name" prevents concurrent executions :mutex => mutex_instance prevents concurrent executions :mutex => [ array_of_mutex_names_or_instances ] prevents concurrent executions :timeout => duration_or_point_in_time interrupts the job it is stashed to (duration) interrupts the job it is stashed to (point in time) starts timing when the job enters successfully all its mutexes emits the timeout information to $stderr (default #on_error) does not prevent a repeat job from recurring work time #last_work_time starts at 0 keeps track of how long the work was upon last trigger #mean_work_time starts at 0 gathers work times and computes the mean one time job #determine_id returns unique ids repeat job #determine_id returns unique ids Rufus::Scheduler custom locks does not trigger when #confirm_lock returns false Rufus::Scheduler::FileLock :scheduler_lock => Rufus::Scheduler::FileLock.new(path) writes down a .rufus-scheduler.lock file "flocks" the lock file Rufus::Scheduler :lockfile => ".rufus-scheduler.lock" writes down a .rufus-scheduler.lock file "flocks" the lock file prevents newer schedulers from starting releases the lockfile when shutting down Rufus::Scheduler when running multiple schedulers side-by-side only starts if it can acquire a scheduler lock only triggers jobs when it can acquire a trigger lock Rufus::Scheduler .parse parses duration strings parses datetimes parses datetimes with timezones parses datetimes with named timezones parses datetimes (with the local timezone implicitly) parses cronlines raises on unparseable input does not use Chronic if not present uses Chronic if present passes options to Chronic .parse_duration parses duration strings calls #to_s on its input raises on wrong duration strings .parse_time_string -> .parse_duration is still around for libs using it out there .parse_duration_string -> .parse_duration is still around for libs using it out there .to_duration turns integers into duration strings ignores seconds and milliseconds if :drop_seconds => true displays months if :months => true turns floats into duration strings .to_duration_hash turns integers duration hashes turns floats duration hashes drops seconds and milliseconds if :drop_seconds => true Rufus::Scheduler #at raises if the block to schedule is missing returns a job id returns a job if :job => true adds a job triggers a job removes the job after execution accepts a Time instance accepts a time string accepts a time string with a delta timezone accepts a time string with a named timezone accepts a Chronic string (if Chronic is present) accepts a Chronic string and Chronic options (if Chronic present) accepts an ActiveSupport time thinggy (PENDING: Not yet implemented) #schedule_at returns a job Rufus::Scheduler #cron schedules raises if the job frequency is higher than the scheduler frequency accepts a CronLine instance #schedule_cron returns a CronJob instance accepts a CronLine instance Rufus::Scheduler #every adds a job triggers a job (2 times) does not remove the job after execution raises on negative frequencies raises on zero frequencies does not reschedule if the job was unscheduled raises if the job frequency is higher than the scheduler frequency #schedule_every accepts a duration string Rufus::Scheduler #in adds a job triggers a job removes the job after execution #schedule_in accepts a number accepts a duration string accepts an ActiveSupport .from_now thinggy (PENDING: Not yet implemented) Rufus::Scheduler #interval adds a job triggers a job (2 times) triggers, but reschedules after the trigger execution does not reschedule if the job was unscheduled raises on negative intervals raises on zero intervals #schedule_interval accepts a duration string Rufus::Scheduler #schedule leaves the schedule option hash untouched (2 args) leaves the schedule option hash untouched (3 args) accepts a CronLine instance #at leaves the schedule option hash untouched (2 args) leaves the schedule option hash untouched (3 args) Rufus::Scheduler #initialize starts the scheduler thread sets :name and :rufus_scheduler in the scheduler thread local vars accepts a :frequency => integer option accepts a :frequency => "2h1m" option accepts a :thread_name option accepts a :max_work_threads option a schedule method passes the job to its block when it triggers passes the trigger time as second block argument accepts a callable object instead of a block accepts a callable obj instead of a block (#call with no args) accepts a class as callable raises if the scheduler is shutting down #in / #at accepts point in time and duration indifferently (#in) accepts point in time and duration indifferently (#at) #schedule accepts a duration and schedules an InJob accepts a point in time and schedules an AtJob accepts a cron string and schedules a CronJob #repeat accepts a duration and schedules an EveryJob accepts a cron string and schedules a CronJob #unschedule(job_or_work_id) accepts job ids accepts jobs carefully unschedules repeat jobs #uptime returns the uptime as a float #uptime_s returns the uptime as a human readable string #join joins the scheduler thread #job(job_id) returns nil if there is no corresponding Job instance returns the corresponding Job instance #threads just lists the main thread (scheduler thread) when no job is scheduled lists all the threads a scheduler uses #work_threads(:all | :vacant) returns an empty array when the scheduler has not yet done anything lists the [vacant] work threads in the pool #work_threads(:active) returns [] when there are no jobs running returns the list of threads of the running jobs does not return threads from other schedulers #max_work_threads returns the max job thread count #max_work_threads= sets the max job thread count #running_jobs returns [] when there are no running jobs returns a list of running Job instances does not return twice the same job #running_jobs(:tag/:tags => x) returns a list of running jobs filtered by tag #occurrences(time0, time1) returns a { job => [ times ] } of job occurrences returns a [ [ time, job ], ... ] of job occurrences when :timeline respects :first_at for repeat jobs respects :times for repeat jobs #timeline returns a [ [ time, job ], ... ] of job occurrences should not lock when running timeline with a :first_at specified #shutdown blanks the uptime shuts the scheduler down has a #stop alias #shutdown(:wait) shuts down and blocks until all the jobs ended their current runs #shutdown(:kill) kills all the jobs and then shuts down #pause pauses the scheduler #resume works #paused? returns true if the scheduler is paused returns false if the scheduler is not paused #down? returns true when the scheduler is down returns false when the scheduler is up #up? returns true when the scheduler is up #jobs is empty at the beginning returns the list of scheduled jobs returns all the jobs (even those pending reschedule) does not return unscheduled jobs #jobs(:tag / :tags => x) returns [] when there are no jobs with the corresponding tag returns the jobs with the corresponding tag #every_jobs returns EveryJob instances #at_jobs returns AtJob instances #in_jobs returns InJob instances #cron_jobs returns CronJob instances #interval_jobs returns IntervalJob instances #on_pre_trigger is called right before a job triggers accepts the job and the triggerTime as argument when it returns false prevents the job from triggering #on_post_trigger is called right after a job triggers .singleton / .s returns a singleton instance of the scheduler accepts initialization parameters Rufus::Scheduler thread pool starts with an empty thread pool does not cross the max_work_threads threshold does not cross the max_work_threads threshold (overlap: false) does not execute unscheduled jobs Pending: (Failures listed here are expected and do not affect your suite's status) 1) Rufus::Scheduler#at accepts an ActiveSupport time thinggy # Not yet implemented # ./spec/schedule_at_spec.rb:149 2) Rufus::Scheduler#schedule_in accepts an ActiveSupport .from_now thinggy # Not yet implemented # ./spec/schedule_in_spec.rb:73 Finished in 3 minutes 22.3 seconds (files took 0.56376 seconds to load) 353 examples, 0 failures, 2 pending ┌──────────────────────────────────────────────────────────────────────────────┐ │ dh_ruby --install finished │ └──────────────────────────────────────────────────────────────────────────────┘ dh_installdocs -i -O--buildsystem=ruby dh_ruby_fixdocs -i -O--buildsystem=ruby dh_installchangelogs -i -O--buildsystem=ruby dh_perl -i -O--buildsystem=ruby dh_link -i -O--buildsystem=ruby dh_strip_nondeterminism -i -O--buildsystem=ruby dh_compress -X.rb -i -O--buildsystem=ruby dh_fixperms -i -O--buildsystem=ruby dh_missing -i -O--buildsystem=ruby dh_installdeb -i -O--buildsystem=ruby dh_gencontrol -i -O--buildsystem=ruby dpkg-gencontrol: warning: Depends field of package ruby-rufus-scheduler: unknown substitution variable ${shlibs:Depends} dh_md5sums -i -O--buildsystem=ruby dh_builddeb -i -O--buildsystem=ruby dpkg-deb: building package 'ruby-rufus-scheduler' in '../ruby-rufus-scheduler_3.4.2-1_all.deb'. dpkg-genbuildinfo --build=all dpkg-genchanges --build=all >../ruby-rufus-scheduler_3.4.2-1_all.changes dpkg-genchanges: info: binary-only arch-indep upload (source code and arch-specific packages not included) dpkg-source --after-build ruby-rufus-scheduler-3.4.2 dpkg-buildpackage: info: binary-only upload (no source included) I: running special hook: sync-out /build/ruby-rufus-scheduler-Wy4N9G /tmp/ruby-rufus-scheduler-3.4.2-13o2bey07 I: cleaning package lists and apt cache... I: creating tarball... I: done I: removing tempdir /tmp/mmdebstrap.HasBfyEt1t... I: success in 569.0998 seconds md5: ruby-rufus-scheduler_3.4.2-1_all.deb: OK sha1: ruby-rufus-scheduler_3.4.2-1_all.deb: OK sha256: ruby-rufus-scheduler_3.4.2-1_all.deb: OK Checksums: OK