Diff of the two buildlogs: -- --- b1/build.log 2025-02-24 03:07:11.282293448 +0000 +++ b2/build.log 2025-02-24 03:08:04.867879089 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sat Mar 28 21:29:01 -12 2026 -I: pbuilder-time-stamp: 1774776541 +I: Current time: Mon Feb 24 17:07:14 +14 2025 +I: pbuilder-time-stamp: 1740366434 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -25,52 +25,84 @@ dpkg-source: info: applying 0002-Add-patch-IGNORE-tmux-version-check.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/1518913/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/1024241/tmp/hooks/D01_modify_environment starting +debug: Running on codethink04-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 Feb 24 03:07 /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/1024241/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/1024241/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]="37" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.2.37(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='unstable' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='849ce8fa6f6146fc8e36b76be0ec6901' - 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='1518913' - PS1='# ' - PS2='> ' + INVOCATION_ID=034de045d4c84a079f54f05704d12ae7 + 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=1024241 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.R8bQamiT/pbuilderrc_aOlm --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.R8bQamiT/b1 --logfile b1/build.log tmuxinator_3.3.3-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.R8bQamiT/pbuilderrc_4lKG --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.R8bQamiT/b2 --logfile b2/build.log tmuxinator_3.3.3-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 codethink03-arm64 6.1.0-31-cloud-arm64 #1 SMP Debian 6.1.128-1 (2025-02-07) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-31-cloud-arm64 #1 SMP Debian 6.1.128-1 (2025-02-07) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Nov 22 2024 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/1518913/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/1024241/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -309,7 +341,7 @@ Get: 175 http://deb.debian.org/debian unstable/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 176 http://deb.debian.org/debian unstable/main arm64 ruby-xdg all 2.2.3-1.1 [12.0 kB] Get: 177 http://deb.debian.org/debian unstable/main arm64 tmux arm64 3.5a-3 [455 kB] -Fetched 51.1 MB in 0s (124 MB/s) +Fetched 51.1 MB in 0s (179 MB/s) Preconfiguring packages ... Selecting previously unselected package libpython3.13-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 ... 19889 files and directories currently installed.) @@ -892,8 +924,8 @@ Setting up tzdata (2025a-2) ... Current default time zone: 'Etc/UTC' -Local time is now: Sun Mar 29 09:29:42 UTC 2026. -Universal Time is now: Sun Mar 29 09:29:42 UTC 2026. +Local time is now: Mon Feb 24 03:07:39 UTC 2025. +Universal Time is now: Mon Feb 24 03:07:39 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-2) ... @@ -1053,7 +1085,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/tmuxinator-3.3.3/ && 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 > ../tmuxinator_3.3.3-1_source.changes +I: user script /srv/workspace/pbuilder/1024241/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/1024241/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/tmuxinator-3.3.3/ && 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 > ../tmuxinator_3.3.3-1_source.changes dpkg-buildpackage: info: source package tmuxinator dpkg-buildpackage: info: source version 3.3.3-1 dpkg-buildpackage: info: source distribution unstable @@ -1132,650 +1168,448 @@ RUBYLIB=/build/reproducible-path/tmuxinator-3.3.3/debian/tmuxinator/usr/lib/ruby/vendor_ruby:. GEM_PATH=/build/reproducible-path/tmuxinator-3.3.3/debian/tmuxinator/usr/share/rubygems-integration/all:/build/reproducible-path/tmuxinator-3.3.3/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake /usr/bin/ruby3.3 -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 --format documentation -Randomized with seed 47185 +Randomized with seed 23778 + +Tmuxinator::Hooks + #commands_from + config value is string + returns the string + config value is Array + joins array using ; + +Tmuxinator::Hooks::Project + #hook_on_project_exit + it should behave like a project hook + calls Hooks.commands_from + hook value is string + returns the string + hook value is Array + joins array using ; + #hook_on_project_stop + it should behave like a project hook + calls Hooks.commands_from + hook value is Array + joins array using ; + hook value is string + returns the string + #hook_on_project_restart + it should behave like a project hook + calls Hooks.commands_from + hook value is Array + joins array using ; + hook value is string + returns the string + #hook_on_project_first_start + it should behave like a project hook + calls Hooks.commands_from + hook value is Array + joins array using ; + hook value is string + returns the string + #hook_on_project_start + it should behave like a project hook + calls Hooks.commands_from + hook value is Array + joins array using ; + hook value is string + returns the string Tmuxinator::Project should include Hooks - #root - without deprecations - gets the root - with deprecations - still gets the root - without root - doesn't throw an error - #tmux_options - with deprecations - still gets the tmux options - no tmux options - returns nothing - #windows + #deprecations with deprecations - still gets the list of windows - without deprecations - gets the list of windows - #pane_titles - pane_title_position not configured - configures a default position of top - pane_title_position configured - configures a position of bottom - pane_titles enabled - returns true - pane_titles not enabled - returns false - pane_title_format configured - configures the provided format - pane_title_format not configured - configures a default format - pane_title_position invalid - configures the default position - #name + is not empty without deprecations - gets the name - window as non-string literal - will gracefully handle a window name given as a non-string literal - with deprecations - still gets the name - as number - will gracefully handle a name given as a number - as emoji - will gracefully handle a name given as an emoji - wemux - is wemux - without name - displays error message - #startup_pane - startup pane not specified - returns the base pane instead - startup pane specified - get the startup pane index from project config - #socket - socket path is present - gets the socket path - ::load - should raise if the project file doesn't parse - should return an instance of the class if the file loads - #send_keys - no command for window - returns empty string - command for window is not empty - returns the tmux command - #windows? - windows are present - returns true + is empty #tmux_has_session? - no active sessions - should return false if no sessions are found active sessions should return false if a partial (prefix) match is found should return true only when `tmux ls` has the named session - #get_pane_base_index - extracts pane-base-index from the global tmux window options - ::parse_settings - returns settings in a hash - removes settings from args + no active sessions + should return false if no sessions are found #startup_window - startup window specified - gets the startup window from project config startup window not specified returns base index instead - #commands - splits commands into an array - #deprecations - without deprecations - is empty - with deprecations - is not empty - #validate! - should raise if there are no windows defined - should raise if there is not a project name - #base_index - base index not present - defaults to 0 - base index present - gets the base index - when pane_base_index is 1 and base_index is unset - gets the tmux default of 0 + startup window specified + gets the startup window from project config + #get_pane_base_index + extracts pane-base-index from the global tmux window options + #pre + pre in yaml is string + returns the string + pre in yaml is Array + joins array using ; #window gets the window and index for tmux + #windows? + windows are present + returns true + ::parse_settings + removes settings from args + returns settings in a hash + ::load + should raise if the project file doesn't parse + should return an instance of the class if the file loads #send_pane_command - command for pane is not empty - returns the tmux command no command for pane returns empty string + command for pane is not empty + returns the tmux command #attach? - attach is false in yaml - returns false - attach is not defined in yaml + attach is true in yaml returns true attach is false in yaml, but command line forces attach returns true attach is true in yaml, but command line forces detach returns false - attach is true in yaml + attach is false in yaml + returns false + attach is not defined in yaml returns true - #pre - pre in yaml is string - returns the string - pre in yaml is Array - joins array using ; + tmux_kill_session_command + when first window has a name + returns command to start a new detached session + #root + without root + doesn't throw an error + with deprecations + still gets the root + without deprecations + gets the root + tmux_new_session_command + when first window has a name + returns command to start a new detached session + when first window is nameless + returns command to for new detached session without a window name + #windows + without deprecations + gets the list of windows + with deprecations + still gets the list of windows + #commands + splits commands into an array + #validate! + should raise if there are no windows defined + should raise if there is not a project name + #tmux_options + with deprecations + still gets the tmux options + no tmux options + returns nothing + #send_keys + no command for window + returns empty string + command for window is not empty + returns the tmux command + #initialize + valid yaml + creates an instance #name? name is present returns true + #get_base_index + extracts base-index from the global tmux options + #root? + root are present + returns true + #startup_pane + startup pane specified + get the startup pane index from project config + startup pane not specified + returns the base pane instead + #tmux_command + tmux_command specified + gets the custom tmux command + tmux_command is not specified + returns the default + #pane_titles + pane_titles not enabled + returns false + pane_title_format not configured + configures a default format + pane_title_position configured + configures a position of bottom + pane_title_position invalid + configures the default position + pane_titles enabled + returns true + pane_title_position not configured + configures a default position of top + pane_title_format configured + configures the provided format + #name + without name + displays error message + wemux + is wemux + as emoji + will gracefully handle a name given as an emoji + with deprecations + still gets the name + window as non-string literal + will gracefully handle a window name given as a non-string literal + as number + will gracefully handle a name given as a number + without deprecations + gets the name #render renders the tmux config custom name renders the tmux config with custom name - wemux -sh: 1: wemux: not found - renders the wemux config with alias renders the tmux config - #initialize - valid yaml - creates an instance - tmux_new_session_command - when first window is nameless - returns command to for new detached session without a window name - when first window has a name - returns command to start a new detached session - #get_base_index - extracts base-index from the global tmux options + wemux +sh: line 1: wemux: command not found + renders the wemux config + #socket + socket path is present + gets the socket path + #base_index + base index not present + defaults to 0 + when pane_base_index is 1 and base_index is unset + gets the tmux default of 0 + base index present + gets the base index #pre_window - pre_window in yaml is Array - joins array using ; with deprecations + pre_tab is present + still gets the correct pre_window command rvm option is present still gets the correct pre_window command rbenv option is present still gets the correct pre_window command - pre_tab is present - still gets the correct pre_window command + pre_window in yaml is Array + joins array using ; pre_window in yaml is string returns the string - #tmux_command - tmux_command specified - gets the custom tmux command - tmux_command is not specified - returns the default - #root? - root are present - returns true - tmux_kill_session_command - when first window has a name - returns command to start a new detached session - -Tmuxinator::Config - #default_or_sample - with default? false - falls back to the sample config when the default is missing - with default? true - gets the default config when it exists - #global_project - with duplicate project files - is the first .yml file found - with project yaml - gets the project as path to the yaml file - with project yml - gets the project as path to the yml file - without project yml - gets the project as path to the yml file - #xdg - is $XDG_CONFIG_HOME/tmuxinator - #default - gets the path of the default config - #sample - gets the path of the sample project - #default? - when the file doesn't exist - returns true - when the file exists - returns true - #exist? - checks if the given project exists - #project - with an non-local project yml - gets the project as path to the yml file - with a local project, but no global project - gets the project as path to the yml file - without project yml - gets the project as path to the yml file - #configs - gets a sorted list of all projects - gets a sorted list of all active projects - lists only projects in $TMUXINATOR_CONFIG when set - gets a sorted list excluding active projects - #environment - environment variable $TMUXINATOR_CONFIG is not empty - is $TMUXINATOR_CONFIG - environment variable $TMUXINATOR_CONFIG is set and empty - is an empty string - environment variable $TMUXINATOR_CONFIG is nil - is an empty string - #local_project - with a project yml - gets the project as path to the yml file - without project yml - gets the project as path to the yml file - #local? - checks if the given project exists - #directories - without TMUXINATOR_CONFIG environment - contains #xdg before #home - is empty if no configuration directories exist - with TMUXINATOR_CONFIG environment - is only [$TMUXINATOR_CONFIG] if set - #home - is ~/.tmuxinator - #validate - when a project config file is provided - should load and validate the project - should raise if the project config file can't be found - should take precedence over a local project - should take precedence over a named project - when no project can be found - should raise with NO_PROJECT_FOUND_MSG - when a project name is provided - should raise if the project file can't be found - should load and validate the project - when no project name is provided - should raise if the local project file doesn't exist - and tmuxinator.yml exists - should load and validate the local project - and tmuxinator.yaml exists - should load and validate the local project - #version - when reported version is '2.9a' - is expected to eq 2.9 - when reported version is '3.0-rc5' - is expected to eq 3.0 - when reported version is '1.0' - is expected to eq 1.0 - when reported version is '5935' - is expected to eq 5935.0 - when reported version is '2.4' - is expected to eq 2.4 - when reported version is '1.9' - is expected to eq 1.9 - when reported version is '-123-' - is expected to eq 123.0 - when reported version is '!@#^%' - is expected to eq 0.0 - when reported version is 'v3.12.0' - is expected to eq 3.12 - when reported version is 'next-3.1' - is expected to eq 3.1 - when reported version is 'v3.12.5' - is expected to eq 3.12 - when reported version is '2.9ä' - is expected to eq 2.9 - when reported version is '1.9a' - is expected to eq 1.9 - when reported version is 'foobar' - is expected to eq 0.0 - when reported version is 'v3.5' - is expected to eq 3.5 - when reported version is 'master' - is expected to eq Infinity - when reported version is '' - is expected to eq 0.0 - when reported version is '0.8' - is expected to eq 0.8 - #directory - both $XDG_CONFIG_HOME/tmuxinator and ~/.tmuxinator exist - is #xdg - only ~/.tmuxinator exists - is ~/.tmuxinator - environment variable $TMUXINATOR_CONFIG non-blank - is $TMUXINATOR_CONFIG - only $XDG_CONFIG_HOME/tmuxinator exists - is #xdg - defaulting to xdg with parent directory(s) that do not exist - creates parent directories if required - #default_path_option - >= 1.8 - returns -c - < 1.8 - returns default-path Tmuxinator::Cli - #stop(with project config file) - does not set the project name even when set - does not set the project name - stops the project - does not stop the project if given a bogus project config file - #edit - when the project file _does_ already exist - should _not_ generate a new project file - #list - no arguments are given - lists all projects - set --active flag - is a valid option - set --newline flag - force output to be one entry per line - #new - with the --local option - file exists - just opens the file - existing project doesn't exist - creates a new tmuxinator project file - from a session - with tmux < 1.6 - is unsupported - with tmux >= 1.6 - session exists - creates a project file -for-testing-tmuxinator - session doesn't exist - fails - without the --local option - file exists - just opens the file - existing project doesn't exist - creates a new tmuxinator project file - #implode - deletes the configuration directory(s) - confirms deletion of all projects - $TMUXINATOR_CONFIG specified - only deletes projects in that directory - #completions - gets completions - exit status - returns a non-zero status when an error occurs - #stop - with project name - stops the project - unsupported version - prints the warning - with --suppress-tmux-version-warning flag - does not print the warning - supported version - does not print the warning - without project name - stops the project using .tmuxinator.yml - base thor functionality - with a local project config - it should behave like base_thor_functionality - supports -v - supports help - it should behave like base_thor_functionality - supports help - supports -v - #create_project - attach option - detach - sets force_detach to false when no attach argument is provided - sets force_detach to false when 'attach: true' is provided - sets force_detach to true when 'attach: false' is provided - attach - sets force_attach to false when no attach argument is provided - sets force_attach to false when 'attach: false' is provided - sets force_attach to true when 'attach: true' is provided - when creating a traditional named project - it should behave like a_proper_project - should create a valid project - #doctor - checks requirements - #find_project_file - when the project file does not already exist - should generate a project file - when the project file _does_ already exist - should _not_ generate a new project file - #delete - with multiple arguments - all projects do not exist - outputs multiple error messages - all projects exist - deletes the projects - only one project exists - deletes one project - outputs an error message - with a single argument - local project exists - deletes the local project - project exists - deletes the project - project doesn't exist - outputs an error message - #generate_project_file - should always generate a project file - should generate a project file using the correct project file path - #start - deprecations - prints the deprecations - no deprecations - accepts a flag for alternate name - accepts additional arguments - accepts a project config file flag - starts the project - supported version - does not print the warning - unsupported version - prints the warning - with --suppress-tmux-version-warning flag - does not print the warning - #debug - project config file - does not render the project if given a bogus project config file - renders the project if given a valid project config file - named project - force attach renders the project with attach code - renders the project - force detach renders the project without attach code - renders the project with custom session ::bootstrap - and there is a local project config + and there is no local project config + when no args are supplied + should call ::start when one or more args are supplied it should behave like bootstrap_with_arguments + and the first arg is a tmuxinator command + should call ::start and the first arg is a thor command - (help) - should call ::start (-v) should call ::start - something else - should call ::start + (help) + should call ::start a tmuxinator project name should call #start - and the first arg is a tmuxinator command - should call ::start - when no args are supplied - should call #local - and there is no local project config - when no args are supplied - should call ::start + something else + should call ::start + and there is a local project config when one or more args are supplied it should behave like bootstrap_with_arguments + and the first arg is a tmuxinator command + should call ::start and the first arg is + a tmuxinator project name + should call #start a thor command - (help) - should call ::start (-v) should call ::start + (help) + should call ::start something else should call ::start - a tmuxinator project name - should call #start - and the first arg is a tmuxinator command - should call ::start - #commands - lists the commands + when no args are supplied + should call #local + #version + prints the current version #start(with project config file) no deprecations - does not set the project name - does not start the project if given a bogus project config file starts the project if given a valid project config file + does not start the project if given a bogus project config file + does not set the project name passes additional arguments through - #version - prints the current version - #start(custom_name) - no deprecations - starts the project + #stop + supported version + does not print the warning + without project name + stops the project using .tmuxinator.yml + unsupported version + prints the warning + with --suppress-tmux-version-warning flag + does not print the warning + with project name + stops the project + #commands + lists the commands + #edit + when the project file _does_ already exist + should _not_ generate a new project file + #copy + existing project doesn't exist + exit with error code + new project already exists + prompts user to confirm overwrite + #delete + with a single argument + project exists + deletes the project + project doesn't exist + outputs an error message + local project exists + deletes the local project + with multiple arguments + only one project exists + outputs an error message + deletes one project + all projects do not exist + outputs multiple error messages + all projects exist + deletes the projects + base thor functionality + it should behave like base_thor_functionality + supports -v + supports help + with a local project config + it should behave like base_thor_functionality + supports -v + supports help #local + supported version + does not print the warning + unsupported version + prints the warning + with --suppress-tmux-version-warning flag + does not print the warning when the command used is 'local' it should behave like local_project starts the project when the command used is '.' it should behave like local_project starts the project + #list + set --newline flag + force output to be one entry per line + no arguments are given + lists all projects + set --active flag + is a valid option + #stop(with project config file) + does not stop the project if given a bogus project config file + does not set the project name + stops the project + does not set the project name even when set + #create_project + attach option + detach + sets force_detach to true when 'attach: false' is provided + sets force_detach to false when no attach argument is provided + sets force_detach to false when 'attach: true' is provided + attach + sets force_attach to false when 'attach: false' is provided + sets force_attach to true when 'attach: true' is provided + sets force_attach to false when no attach argument is provided + when creating a traditional named project + it should behave like a_proper_project + should create a valid project + #start(custom_name) + no deprecations + starts the project + #completions + gets completions + #start + deprecations + prints the deprecations unsupported version prints the warning with --suppress-tmux-version-warning flag does not print the warning + no deprecations + starts the project + accepts a flag for alternate name + accepts a project config file flag + accepts additional arguments supported version does not print the warning - #copy - existing project doesn't exist - exit with error code - new project already exists - prompts user to confirm overwrite + #doctor + checks requirements + exit status + returns a non-zero status when an error occurs no arguments runs without error - -Tmuxinator::Hooks::Project - #hook_on_project_exit - it should behave like a project hook - calls Hooks.commands_from - hook value is Array - joins array using ; - hook value is string - returns the string - #hook_on_project_first_start - it should behave like a project hook - calls Hooks.commands_from - hook value is string - returns the string - hook value is Array - joins array using ; - #hook_on_project_stop - it should behave like a project hook - calls Hooks.commands_from - hook value is Array - joins array using ; - hook value is string - returns the string - #hook_on_project_start - it should behave like a project hook - calls Hooks.commands_from - hook value is Array - joins array using ; - hook value is string - returns the string - #hook_on_project_restart - it should behave like a project hook - calls Hooks.commands_from - hook value is Array - joins array using ; - hook value is string - returns the string - -Tmuxinator::Doctor - .installed? - tmux is not installed - returns false - tmux is installed - returns true - .editor? - $EDITOR is set - returns true - $EDITOR is not set - returns false - .shell? - $SHELL is set - returns true - $SHELL is not set - returns false - -Tmuxinator::Pane - creates an instance - is expected to eql "foo:0.1" - does not set pane title - when title is provided - sets pane title - -Tmuxinator::Hooks - #commands_from - config value is Array - joins array using ; - config value is string - returns the string - -Tmuxinator::WemuxSupport - #tmux - is expected to eq "wemux" - #render - renders the template - #name - is expected to eq "wemux" + #implode + deletes the configuration directory(s) + confirms deletion of all projects + $TMUXINATOR_CONFIG specified + only deletes projects in that directory + #new + from a session + with tmux >= 1.6 + session exists + creates a project file +for-testing-tmuxinator + session doesn't exist + fails + with tmux < 1.6 + is unsupported + with the --local option + existing project doesn't exist + creates a new tmuxinator project file + file exists + just opens the file + without the --local option + file exists + just opens the file + existing project doesn't exist + creates a new tmuxinator project file + #debug + project config file + renders the project if given a valid project config file + does not render the project if given a bogus project config file + named project + force detach renders the project without attach code + renders the project + force attach renders the project with attach code + renders the project with custom session + #find_project_file + when the project file does not already exist + should generate a project file + when the project file _does_ already exist + should _not_ generate a new project file + #generate_project_file + should always generate a project file + should generate a project file using the correct project file path Tmuxinator::Window - #panes - with a String - returns one pane in an Array - with a three element Array - creates three panes - returns three panes - titled panes - creates panes with titles - nested collections - with nested array - returns two panes in an Array - with nested hash - returns two panes in an Array - with nil - returns an empty Array - #name_options - with a name - specifies name with tmux name option - without a name - specifies no tmux name option - #synchronize_after? - synchronization is true - is expected to equal false - synchronization not specified - is expected to equal false - synchronization disabled - is expected to equal false - synchronization is 'before' - is expected to equal false - synchronization is 'after' - is expected to equal true #tmux_new_window_command constructs window command with path, target, and name options - name not set - does not set name option root not set has an extra space instead of path_part - #build_commands - command is empty - returns an empty array - command is an array - returns the flattened command - command is a hash - returns an empty array - command is a string - returns the command + name not set + does not set name option #initialize creates an instance - #pre - pre is not present - returns nil - pre is a string - returns the pre command #synchronize_before? - synchronize is 'before' + synchronization disabled + is expected to equal false + synchronize is true is expected to equal true synchronization not specified is expected to equal false synchronize is 'after' is expected to equal false + synchronize is 'before' + is expected to equal true + #synchronize_after? + synchronization is 'after' + is expected to equal true synchronization disabled is expected to equal false - synchronize is true - is expected to equal true - #tmux_synchronize_panes - synchronization enabled - should set the synchronize-panes window option on + synchronization not specified + is expected to equal false + synchronization is true + is expected to equal false + synchronization is 'before' + is expected to equal false #root with relative window root joins the project root @@ -1783,13 +1617,215 @@ gets the project root with absolute window root gets the window root + #tmux_synchronize_panes + synchronization enabled + should set the synchronize-panes window option on + #panes + titled panes + creates panes with titles + nested collections + with nested hash + returns two panes in an Array + with nested array + returns two panes in an Array + with a three element Array + creates three panes + returns three panes + with a String + returns one pane in an Array + with nil + returns an empty Array + #pre + pre is a string + returns the pre command + pre is not present + returns nil #tmux_select_first_pane targets the pane based on the configured pane_base_index + #build_commands + command is a hash + returns an empty array + command is empty + returns an empty array + command is a string + returns the command + command is an array + returns the flattened command + #name_options + with a name + specifies name with tmux name option + without a name + specifies no tmux name option + +Tmuxinator::WemuxSupport + #render + renders the template + #tmux + is expected to eq "wemux" + #name + is expected to eq "wemux" + +Tmuxinator::Config + #exist? + checks if the given project exists + #home + is ~/.tmuxinator + #environment + environment variable $TMUXINATOR_CONFIG is not empty + is $TMUXINATOR_CONFIG + environment variable $TMUXINATOR_CONFIG is nil + is an empty string + environment variable $TMUXINATOR_CONFIG is set and empty + is an empty string + #version + when reported version is '2.9a' + is expected to eq 2.9 + when reported version is 'foobar' + is expected to eq 0.0 + when reported version is '1.0' + is expected to eq 1.0 + when reported version is '-123-' + is expected to eq 123.0 + when reported version is '!@#^%' + is expected to eq 0.0 + when reported version is 'v3.5' + is expected to eq 3.5 + when reported version is '2.9ä' + is expected to eq 2.9 + when reported version is 'v3.12.5' + is expected to eq 3.12 + when reported version is '' + is expected to eq 0.0 + when reported version is '1.9' + is expected to eq 1.9 + when reported version is '3.0-rc5' + is expected to eq 3.0 + when reported version is 'master' + is expected to eq Infinity + when reported version is '5935' + is expected to eq 5935.0 + when reported version is '1.9a' + is expected to eq 1.9 + when reported version is 'v3.12.0' + is expected to eq 3.12 + when reported version is '0.8' + is expected to eq 0.8 + when reported version is '2.4' + is expected to eq 2.4 + when reported version is 'next-3.1' + is expected to eq 3.1 + #project + without project yml + gets the project as path to the yml file + with a local project, but no global project + gets the project as path to the yml file + with an non-local project yml + gets the project as path to the yml file + #directory + defaulting to xdg with parent directory(s) that do not exist + creates parent directories if required + only ~/.tmuxinator exists + is ~/.tmuxinator + environment variable $TMUXINATOR_CONFIG non-blank + is $TMUXINATOR_CONFIG + only $XDG_CONFIG_HOME/tmuxinator exists + is #xdg + both $XDG_CONFIG_HOME/tmuxinator and ~/.tmuxinator exist + is #xdg + #validate + when a project config file is provided + should raise if the project config file can't be found + should load and validate the project + should take precedence over a named project + should take precedence over a local project + when no project name is provided + should raise if the local project file doesn't exist + and tmuxinator.yaml exists + should load and validate the local project + and tmuxinator.yml exists + should load and validate the local project + when no project can be found + should raise with NO_PROJECT_FOUND_MSG + when a project name is provided + should load and validate the project + should raise if the project file can't be found + #default? + when the file doesn't exist + returns true + when the file exists + returns true + #default + gets the path of the default config + #default_or_sample + with default? true + gets the default config when it exists + with default? false + falls back to the sample config when the default is missing + #configs + gets a sorted list of all projects + gets a sorted list of all active projects + gets a sorted list excluding active projects + lists only projects in $TMUXINATOR_CONFIG when set + #xdg + is $XDG_CONFIG_HOME/tmuxinator + #sample + gets the path of the sample project + #global_project + with project yml + gets the project as path to the yml file + with project yaml + gets the project as path to the yaml file + with duplicate project files + is the first .yml file found + without project yml + gets the project as path to the yml file + #local_project + without project yml + gets the project as path to the yml file + with a project yml + gets the project as path to the yml file + #default_path_option + >= 1.8 + returns -c + < 1.8 + returns default-path + #directories + without TMUXINATOR_CONFIG environment + contains #xdg before #home + is empty if no configuration directories exist + with TMUXINATOR_CONFIG environment + is only [$TMUXINATOR_CONFIG] if set + #local? + checks if the given project exists + +Tmuxinator::Pane + creates an instance + does not set pane title + is expected to eql "foo:0.1" + when title is provided + sets pane title + +Tmuxinator::Doctor + .editor? + $EDITOR is set + returns true + $EDITOR is not set + returns false + .installed? + tmux is not installed + returns false + tmux is installed + returns true + .shell? + $SHELL is not set + returns false + $SHELL is set + returns true -Finished in 3.51 seconds (files took 0.72483 seconds to load) +Finished in 3.09 seconds (files took 0.77262 seconds to load) 291 examples, 0 failures -Randomized with seed 47185 +Randomized with seed 23778 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -1831,12 +1867,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/1024241/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/1024241/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/1518913 and its subdirectories -I: Current time: Sat Mar 28 21:30:10 -12 2026 -I: pbuilder-time-stamp: 1774776610 +I: removing directory /srv/workspace/pbuilder/1024241 and its subdirectories +I: Current time: Mon Feb 24 17:08:03 +14 2025 +I: pbuilder-time-stamp: 1740366483