==> Building on U ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/chezmoi ./ PKGBUILD 1,796 100% 0.00kB/s 0:00:00 1,796 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3) chezmoi-2.20.0-1.log 235 100% 229.49kB/s 0:00:00 235 100% 229.49kB/s 0:00:00 (xfr#2, to-chk=0/3) sent 1,203 bytes received 96 bytes 866.00 bytes/sec total size is 1,984 speedup is 1.53 ==> Patching arch to riscv64... ==> Running extra-riscv64-build -- -d /home/felix/packages/riscv64-pkg-cache:/var/cache/pacman/pkg -l felix1 on remote host... [?25l:: Synchronizing package databases... core downloading... extra downloading... community downloading... :: Starting full system upgrade... there is nothing to do [?25h==> Building in chroot for [extra] (riscv64)... ==> Locking chroot copy [felix1]...done ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix1]...done ==> Making package: chezmoi 2.20.0-1 (Fri Jul 29 23:06:16 2022) ==> Retrieving sources...  -> Downloading chezmoi-2.20.0.tar.gz... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 100 455k 0 455k 0 0 218k 0 --:--:-- 0:00:02 --:--:-- 466k 100 2351k 0 2351k 0 0 957k 0 --:--:-- 0:00:02 --:--:-- 1739k ==> Validating source files with sha512sums... chezmoi-2.20.0.tar.gz ... Passed ==> Making package: chezmoi 2.20.0-1 (Fri Jul 29 23:07:34 2022) ==> Checking runtime dependencies... ==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (6) New Version Net Change extra/perl-error 0.17029-4 0.04 MiB extra/perl-mailtools 2.21-6 0.11 MiB extra/perl-timedate 2.33-4 0.08 MiB extra/git 2.37.1-1 30.56 MiB community/go 2:1.18.4-1 409.50 MiB extra/zip 3.0-10 0.47 MiB Total Installed Size: 440.75 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing go... installing perl-error... installing perl-timedate... installing perl-mailtools... installing git... Optional dependencies for git tk: gitk and git gui perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-mediawiki-api: git mediawiki support perl-datetime-format-iso8601: git mediawiki support perl-lwp-protocol-https: git mediawiki https support perl-cgi: gitweb (web interface) support python: git svn & git p4 subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] installing zip... :: Running post-transaction hooks... (1/1) Warn about old perl modules [?25h==> Retrieving sources...  -> Found chezmoi-2.20.0.tar.gz ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Extracting chezmoi-2.20.0.tar.gz with bsdtar ==> Starting prepare()... ==> Starting build()... ==> Starting check()... === RUN TestMain chezmoi version dev --- PASS: TestMain (0.01s) PASS ok github.com/twpayne/chezmoi/v2 2.018s testing: warning: no tests to run PASS ok github.com/twpayne/chezmoi/v2/assets/chezmoi.io/docs 0.041s [no tests to run] === RUN TestFS --- PASS: TestFS (0.00s) PASS ok github.com/twpayne/chezmoi/v2/assets/chezmoi.io/docs/reference/commands 0.141s === RUN TestFS --- PASS: TestFS (0.00s) PASS ok github.com/twpayne/chezmoi/v2/assets/templates 0.046s testing: warning: no tests to run PASS ok github.com/twpayne/chezmoi/v2/internal/cmds/execute-template 0.091s [no tests to run] === RUN TestGoToolDistList --- PASS: TestGoToolDistList (0.26s) PASS ok github.com/twpayne/chezmoi/v2/internal/cmds/generate-install.sh 0.369s === RUN TestLintData === RUN TestLintData/0 === RUN TestLintData/1 === RUN TestLintData/2 === RUN TestLintData/3 === RUN TestLintData/4 --- PASS: TestLintData (0.00s) --- PASS: TestLintData/0 (0.00s) --- PASS: TestLintData/1 (0.00s) --- PASS: TestLintData/2 (0.00s) --- PASS: TestLintData/3 (0.00s) --- PASS: TestLintData/4 (0.00s) PASS ok github.com/twpayne/chezmoi/v2/internal/cmds/lint-whitespace 0.063s === RUN TestNewTar --- PASS: TestNewTar (0.00s) === RUN TestNewZip --- PASS: TestNewZip (0.01s) PASS ok github.com/twpayne/chezmoi/v2/pkg/archivetest 0.110s === RUN TestNewAbsPathFromExtPath === RUN TestNewAbsPathFromExtPath/empty === RUN TestNewAbsPathFromExtPath/file === RUN TestNewAbsPathFromExtPath/tilde === RUN TestNewAbsPathFromExtPath/tilde_home_file === RUN TestNewAbsPathFromExtPath/tilde_home_file_windows abspath_test.go:52: skipping Windows test on UNIX --- PASS: TestNewAbsPathFromExtPath (0.00s) --- PASS: TestNewAbsPathFromExtPath/empty (0.00s) --- PASS: TestNewAbsPathFromExtPath/file (0.00s) --- PASS: TestNewAbsPathFromExtPath/tilde (0.00s) --- PASS: TestNewAbsPathFromExtPath/tilde_home_file (0.00s) --- SKIP: TestNewAbsPathFromExtPath/tilde_home_file_windows (0.00s) === RUN TestAgeEncryption ageencryption_test.go:16: age not found in $PATH --- SKIP: TestAgeEncryption (0.00s) === RUN TestAgeMultipleIdentitiesAndMultipleRecipients ageencryption_test.go:30: age not found in $PATH --- SKIP: TestAgeMultipleIdentitiesAndMultipleRecipients (0.00s) === RUN TestAgeRecipientsFile ageencryption_test.go:54: age not found in $PATH --- SKIP: TestAgeRecipientsFile (0.00s) === RUN TestBuiltinAgeEncryption === RUN TestBuiltinAgeEncryption/DecryptToFile === RUN TestBuiltinAgeEncryption/EncryptDecrypt === RUN TestBuiltinAgeEncryption/EncryptFile --- PASS: TestBuiltinAgeEncryption (0.05s) --- PASS: TestBuiltinAgeEncryption/DecryptToFile (0.01s) --- PASS: TestBuiltinAgeEncryption/EncryptDecrypt (0.02s) --- PASS: TestBuiltinAgeEncryption/EncryptFile (0.01s) === RUN TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients === RUN TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients/DecryptToFile === RUN TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients/EncryptDecrypt === RUN TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients/EncryptFile --- PASS: TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients (0.11s) --- PASS: TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients/DecryptToFile (0.04s) --- PASS: TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients/EncryptDecrypt (0.02s) --- PASS: TestBuiltinAgeMultipleIdentitiesAndMultipleRecipients/EncryptFile (0.04s) === RUN TestBuiltinAgeRecipientsFile === RUN TestBuiltinAgeRecipientsFile/DecryptToFile === RUN TestBuiltinAgeRecipientsFile/EncryptDecrypt === RUN TestBuiltinAgeRecipientsFile/EncryptFile === RUN TestBuiltinAgeRecipientsFile/DecryptToFile#01 === RUN TestBuiltinAgeRecipientsFile/EncryptDecrypt#01 === RUN TestBuiltinAgeRecipientsFile/EncryptFile#01 --- PASS: TestBuiltinAgeRecipientsFile (0.13s) --- PASS: TestBuiltinAgeRecipientsFile/DecryptToFile (0.02s) --- PASS: TestBuiltinAgeRecipientsFile/EncryptDecrypt (0.02s) --- PASS: TestBuiltinAgeRecipientsFile/EncryptFile (0.01s) --- PASS: TestBuiltinAgeRecipientsFile/DecryptToFile#01 (0.01s) --- PASS: TestBuiltinAgeRecipientsFile/EncryptDecrypt#01 (0.01s) --- PASS: TestBuiltinAgeRecipientsFile/EncryptFile#01 (0.03s) === RUN TestWalkArchive === RUN TestWalkArchive/tar === RUN TestWalkArchive/zip --- PASS: TestWalkArchive (0.04s) --- PASS: TestWalkArchive/tar (0.00s) --- PASS: TestWalkArchive/zip (0.02s) === RUN TestArchiveReaderSystemTar --- PASS: TestArchiveReaderSystemTar (0.00s) === RUN TestDirAttr --- PASS: TestDirAttr (0.02s) === RUN TestDirAttrLiteral === RUN TestDirAttrLiteral/exact_dir === RUN TestDirAttrLiteral/literal_exact_dir === RUN TestDirAttrLiteral/literal_literal_dir --- PASS: TestDirAttrLiteral (0.00s) --- PASS: TestDirAttrLiteral/exact_dir (0.00s) --- PASS: TestDirAttrLiteral/literal_exact_dir (0.00s) --- PASS: TestDirAttrLiteral/literal_literal_dir (0.00s) === RUN TestFileAttr --- PASS: TestFileAttr (0.31s) === RUN TestFileAttrEncryptedSuffix --- PASS: TestFileAttrEncryptedSuffix (0.00s) === RUN TestFileAttrLiteral === RUN TestFileAttrLiteral/dot_file === RUN TestFileAttrLiteral/literal_dot_file === RUN TestFileAttrLiteral/literal_literal_file === RUN TestFileAttrLiteral/run_once_script === RUN TestFileAttrLiteral/run_literal_once_script === RUN TestFileAttrLiteral/file.literal === RUN TestFileAttrLiteral/file.literal.literal === RUN TestFileAttrLiteral/file.tmpl === RUN TestFileAttrLiteral/file.tmpl.literal === RUN TestFileAttrLiteral/file.tmpl.literal.tmpl --- PASS: TestFileAttrLiteral (0.00s) --- PASS: TestFileAttrLiteral/dot_file (0.00s) --- PASS: TestFileAttrLiteral/literal_dot_file (0.00s) --- PASS: TestFileAttrLiteral/literal_literal_file (0.00s) --- PASS: TestFileAttrLiteral/run_once_script (0.00s) --- PASS: TestFileAttrLiteral/run_literal_once_script (0.00s) --- PASS: TestFileAttrLiteral/file.literal (0.00s) --- PASS: TestFileAttrLiteral/file.literal.literal (0.00s) --- PASS: TestFileAttrLiteral/file.tmpl (0.00s) --- PASS: TestFileAttrLiteral/file.tmpl.literal (0.00s) --- PASS: TestFileAttrLiteral/file.tmpl.literal.tmpl (0.00s) === RUN TestFileAttrPerm --- PASS: TestFileAttrPerm (0.00s) === RUN TestAutoTemplate === RUN TestAutoTemplate/simple === RUN TestAutoTemplate/longest_first === RUN TestAutoTemplate/alphabetical_first === RUN TestAutoTemplate/nested_values === RUN TestAutoTemplate/only_replace_words === RUN TestAutoTemplate/longest_match_first === RUN TestAutoTemplate/longest_match_first_prefix === RUN TestAutoTemplate/longest_match_first_suffix === RUN TestAutoTemplate/longest_match_first_prefix_and_suffix === RUN TestAutoTemplate/words_only === RUN TestAutoTemplate/words_only_2 === RUN TestAutoTemplate/words_only_3 === RUN TestAutoTemplate/skip_empty === RUN TestAutoTemplate/markers --- PASS: TestAutoTemplate (0.00s) --- PASS: TestAutoTemplate/simple (0.00s) --- PASS: TestAutoTemplate/longest_first (0.00s) --- PASS: TestAutoTemplate/alphabetical_first (0.00s) --- PASS: TestAutoTemplate/nested_values (0.00s) --- PASS: TestAutoTemplate/only_replace_words (0.00s) --- PASS: TestAutoTemplate/longest_match_first (0.00s) --- PASS: TestAutoTemplate/longest_match_first_prefix (0.00s) --- PASS: TestAutoTemplate/longest_match_first_suffix (0.00s) --- PASS: TestAutoTemplate/longest_match_first_prefix_and_suffix (0.00s) --- PASS: TestAutoTemplate/words_only (0.00s) --- PASS: TestAutoTemplate/words_only_2 (0.00s) --- PASS: TestAutoTemplate/words_only_3 (0.00s) --- PASS: TestAutoTemplate/skip_empty (0.00s) --- PASS: TestAutoTemplate/markers (0.00s) === RUN TestInWord --- PASS: TestInWord (0.00s) === RUN TestBoltPersistentState === RUN TestBoltPersistentState/0 === RUN TestBoltPersistentState/0#01 === RUN TestBoltPersistentState/0#02 --- PASS: TestBoltPersistentState (0.01s) --- PASS: TestBoltPersistentState/0 (0.00s) --- PASS: TestBoltPersistentState/0#01 (0.00s) --- PASS: TestBoltPersistentState/0#02 (0.00s) === RUN TestBoltPersistentStateMock --- PASS: TestBoltPersistentStateMock (0.00s) === RUN TestBoltPersistentStateReadOnly --- PASS: TestBoltPersistentStateReadOnly (0.00s) === RUN TestEtcHostsFQDNHostname === RUN TestEtcHostsFQDNHostname/etc_hosts === RUN TestEtcHostsFQDNHostname/etc_hosts_whitespace_and_comments === RUN TestEtcHostsFQDNHostname/etc_hosts_missing_canonical_hostname === RUN TestEtcHostsFQDNHostname/etc_hostname === RUN TestEtcHostsFQDNHostname/etc_myname --- PASS: TestEtcHostsFQDNHostname (0.03s) --- PASS: TestEtcHostsFQDNHostname/etc_hosts (0.01s) --- PASS: TestEtcHostsFQDNHostname/etc_hosts_whitespace_and_comments (0.01s) --- PASS: TestEtcHostsFQDNHostname/etc_hosts_missing_canonical_hostname (0.00s) --- PASS: TestEtcHostsFQDNHostname/etc_hostname (0.00s) --- PASS: TestEtcHostsFQDNHostname/etc_myname (0.00s) === RUN TestUmask --- PASS: TestUmask (0.00s) === RUN TestKernel === RUN TestKernel/windows_services_for_linux === RUN TestKernel/debian_version_only === RUN TestKernel/proc_sys_kernel_missing --- PASS: TestKernel (0.01s) --- PASS: TestKernel/windows_services_for_linux (0.01s) --- PASS: TestKernel/debian_version_only (0.00s) --- PASS: TestKernel/proc_sys_kernel_missing (0.00s) === RUN TestOSRelease === RUN TestOSRelease/archlinux === RUN TestOSRelease/fedora === RUN TestOSRelease/ubuntu --- PASS: TestOSRelease (0.01s) --- PASS: TestOSRelease/archlinux (0.00s) --- PASS: TestOSRelease/fedora (0.00s) --- PASS: TestOSRelease/ubuntu (0.00s) === RUN TestParseOSRelease === RUN TestParseOSRelease/fedora === RUN TestParseOSRelease/ubuntu_with_comments --- PASS: TestParseOSRelease (0.00s) --- PASS: TestParseOSRelease/fedora (0.00s) --- PASS: TestParseOSRelease/ubuntu_with_comments (0.00s) === RUN TestDumpSystem --- PASS: TestDumpSystem (0.03s) === RUN TestXOREncryption === RUN TestXOREncryption/DecryptToFile === RUN TestXOREncryption/EncryptDecrypt === RUN TestXOREncryption/EncryptFile --- PASS: TestXOREncryption (0.01s) --- PASS: TestXOREncryption/DecryptToFile (0.01s) --- PASS: TestXOREncryption/EncryptDecrypt (0.00s) --- PASS: TestXOREncryption/EncryptFile (0.00s) === RUN TestEntryStateEquivalent === RUN TestEntryStateEquivalent/dir1_dir1 === RUN TestEntryStateEquivalent/dir1_copy_dir1 === RUN TestEntryStateEquivalent/dir_private_dir1 === RUN TestEntryStateEquivalent/file1_dir1 === RUN TestEntryStateEquivalent/file1_copy_dir1 === RUN TestEntryStateEquivalent/file2_dir1 === RUN TestEntryStateEquivalent/nil1_dir1 === RUN TestEntryStateEquivalent/nil2_dir1 === RUN TestEntryStateEquivalent/remove_dir1 === RUN TestEntryStateEquivalent/script_dir1 === RUN TestEntryStateEquivalent/symlink_dir1 === RUN TestEntryStateEquivalent/symlink_copy_dir1 === RUN TestEntryStateEquivalent/dir1_dir1_copy === RUN TestEntryStateEquivalent/dir1_copy_dir1_copy === RUN TestEntryStateEquivalent/dir_private_dir1_copy === RUN TestEntryStateEquivalent/file1_dir1_copy === RUN TestEntryStateEquivalent/file1_copy_dir1_copy === RUN TestEntryStateEquivalent/file2_dir1_copy === RUN TestEntryStateEquivalent/nil1_dir1_copy === RUN TestEntryStateEquivalent/nil2_dir1_copy === RUN TestEntryStateEquivalent/remove_dir1_copy === RUN TestEntryStateEquivalent/script_dir1_copy === RUN TestEntryStateEquivalent/symlink_dir1_copy === RUN TestEntryStateEquivalent/symlink_copy_dir1_copy === RUN TestEntryStateEquivalent/dir1_dir_private === RUN TestEntryStateEquivalent/dir1_copy_dir_private === RUN TestEntryStateEquivalent/dir_private_dir_private === RUN TestEntryStateEquivalent/file1_dir_private === RUN TestEntryStateEquivalent/file1_copy_dir_private === RUN TestEntryStateEquivalent/file2_dir_private === RUN TestEntryStateEquivalent/nil1_dir_private === RUN TestEntryStateEquivalent/nil2_dir_private === RUN TestEntryStateEquivalent/remove_dir_private === RUN TestEntryStateEquivalent/script_dir_private === RUN TestEntryStateEquivalent/symlink_dir_private === RUN TestEntryStateEquivalent/symlink_copy_dir_private === RUN TestEntryStateEquivalent/dir1_file1 === RUN TestEntryStateEquivalent/dir1_copy_file1 === RUN TestEntryStateEquivalent/dir_private_file1 === RUN TestEntryStateEquivalent/file1_file1 === RUN TestEntryStateEquivalent/file1_copy_file1 === RUN TestEntryStateEquivalent/file2_file1 === RUN TestEntryStateEquivalent/nil1_file1 === RUN TestEntryStateEquivalent/nil2_file1 === RUN TestEntryStateEquivalent/remove_file1 === RUN TestEntryStateEquivalent/script_file1 === RUN TestEntryStateEquivalent/symlink_file1 === RUN TestEntryStateEquivalent/symlink_copy_file1 === RUN TestEntryStateEquivalent/dir1_file1_copy === RUN TestEntryStateEquivalent/dir1_copy_file1_copy === RUN TestEntryStateEquivalent/dir_private_file1_copy === RUN TestEntryStateEquivalent/file1_file1_copy === RUN TestEntryStateEquivalent/file1_copy_file1_copy === RUN TestEntryStateEquivalent/file2_file1_copy === RUN TestEntryStateEquivalent/nil1_file1_copy === RUN TestEntryStateEquivalent/nil2_file1_copy === RUN TestEntryStateEquivalent/remove_file1_copy === RUN TestEntryStateEquivalent/script_file1_copy === RUN TestEntryStateEquivalent/symlink_file1_copy === RUN TestEntryStateEquivalent/symlink_copy_file1_copy === RUN TestEntryStateEquivalent/dir1_file2 === RUN TestEntryStateEquivalent/dir1_copy_file2 === RUN TestEntryStateEquivalent/dir_private_file2 === RUN TestEntryStateEquivalent/file1_file2 === RUN TestEntryStateEquivalent/file1_copy_file2 === RUN TestEntryStateEquivalent/file2_file2 === RUN TestEntryStateEquivalent/nil1_file2 === RUN TestEntryStateEquivalent/nil2_file2 === RUN TestEntryStateEquivalent/remove_file2 === RUN TestEntryStateEquivalent/script_file2 === RUN TestEntryStateEquivalent/symlink_file2 === RUN TestEntryStateEquivalent/symlink_copy_file2 === RUN TestEntryStateEquivalent/dir1_nil1 === RUN TestEntryStateEquivalent/dir1_copy_nil1 === RUN TestEntryStateEquivalent/dir_private_nil1 === RUN TestEntryStateEquivalent/file1_nil1 === RUN TestEntryStateEquivalent/file1_copy_nil1 === RUN TestEntryStateEquivalent/file2_nil1 === RUN TestEntryStateEquivalent/nil1_nil1 === RUN TestEntryStateEquivalent/nil2_nil1 === RUN TestEntryStateEquivalent/remove_nil1 === RUN TestEntryStateEquivalent/script_nil1 === RUN TestEntryStateEquivalent/symlink_nil1 === RUN TestEntryStateEquivalent/symlink_copy_nil1 === RUN TestEntryStateEquivalent/dir1_nil2 === RUN TestEntryStateEquivalent/dir1_copy_nil2 === RUN TestEntryStateEquivalent/dir_private_nil2 === RUN TestEntryStateEquivalent/file1_nil2 === RUN TestEntryStateEquivalent/file1_copy_nil2 === RUN TestEntryStateEquivalent/file2_nil2 === RUN TestEntryStateEquivalent/nil1_nil2 === RUN TestEntryStateEquivalent/nil2_nil2 === RUN TestEntryStateEquivalent/remove_nil2 === RUN TestEntryStateEquivalent/script_nil2 === RUN TestEntryStateEquivalent/symlink_nil2 === RUN TestEntryStateEquivalent/symlink_copy_nil2 === RUN TestEntryStateEquivalent/dir1_remove === RUN TestEntryStateEquivalent/dir1_copy_remove === RUN TestEntryStateEquivalent/dir_private_remove === RUN TestEntryStateEquivalent/file1_remove === RUN TestEntryStateEquivalent/file1_copy_remove === RUN TestEntryStateEquivalent/file2_remove === RUN TestEntryStateEquivalent/nil1_remove === RUN TestEntryStateEquivalent/nil2_remove === RUN TestEntryStateEquivalent/remove_remove === RUN TestEntryStateEquivalent/script_remove === RUN TestEntryStateEquivalent/symlink_remove === RUN TestEntryStateEquivalent/symlink_copy_remove === RUN TestEntryStateEquivalent/dir1_script === RUN TestEntryStateEquivalent/dir1_copy_script === RUN TestEntryStateEquivalent/dir_private_script === RUN TestEntryStateEquivalent/file1_script === RUN TestEntryStateEquivalent/file1_copy_script === RUN TestEntryStateEquivalent/file2_script === RUN TestEntryStateEquivalent/nil1_script === RUN TestEntryStateEquivalent/nil2_script === RUN TestEntryStateEquivalent/remove_script === RUN TestEntryStateEquivalent/script_script === RUN TestEntryStateEquivalent/symlink_script === RUN TestEntryStateEquivalent/symlink_copy_script === RUN TestEntryStateEquivalent/dir1_symlink === RUN TestEntryStateEquivalent/dir1_copy_symlink === RUN TestEntryStateEquivalent/dir_private_symlink === RUN TestEntryStateEquivalent/file1_symlink === RUN TestEntryStateEquivalent/file1_copy_symlink === RUN TestEntryStateEquivalent/file2_symlink === RUN TestEntryStateEquivalent/nil1_symlink === RUN TestEntryStateEquivalent/nil2_symlink === RUN TestEntryStateEquivalent/remove_symlink === RUN TestEntryStateEquivalent/script_symlink === RUN TestEntryStateEquivalent/symlink_symlink === RUN TestEntryStateEquivalent/symlink_copy_symlink === RUN TestEntryStateEquivalent/dir1_symlink_copy === RUN TestEntryStateEquivalent/dir1_copy_symlink_copy === RUN TestEntryStateEquivalent/dir_private_symlink_copy === RUN TestEntryStateEquivalent/file1_symlink_copy === RUN TestEntryStateEquivalent/file1_copy_symlink_copy === RUN TestEntryStateEquivalent/file2_symlink_copy === RUN TestEntryStateEquivalent/nil1_symlink_copy === RUN TestEntryStateEquivalent/nil2_symlink_copy === RUN TestEntryStateEquivalent/remove_symlink_copy === RUN TestEntryStateEquivalent/script_symlink_copy === RUN TestEntryStateEquivalent/symlink_symlink_copy === RUN TestEntryStateEquivalent/symlink_copy_symlink_copy --- PASS: TestEntryStateEquivalent (0.12s) --- PASS: TestEntryStateEquivalent/dir1_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/file1_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/file2_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/nil1_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/nil2_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/remove_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/script_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_dir1 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/file1_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/file2_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/nil1_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/nil2_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/remove_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/script_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/symlink_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_dir1_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir1_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/file1_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/file2_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/nil1_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/nil2_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/remove_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/script_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/symlink_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_dir_private (0.00s) --- PASS: TestEntryStateEquivalent/dir1_file1 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_file1 (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_file1 (0.00s) --- PASS: TestEntryStateEquivalent/file1_file1 (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_file1 (0.00s) --- PASS: TestEntryStateEquivalent/file2_file1 (0.00s) --- PASS: TestEntryStateEquivalent/nil1_file1 (0.00s) --- PASS: TestEntryStateEquivalent/nil2_file1 (0.00s) --- PASS: TestEntryStateEquivalent/remove_file1 (0.00s) --- PASS: TestEntryStateEquivalent/script_file1 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_file1 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_file1 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/file1_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/file2_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/nil1_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/nil2_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/remove_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/script_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/symlink_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_file1_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir1_file2 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_file2 (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_file2 (0.00s) --- PASS: TestEntryStateEquivalent/file1_file2 (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_file2 (0.00s) --- PASS: TestEntryStateEquivalent/file2_file2 (0.00s) --- PASS: TestEntryStateEquivalent/nil1_file2 (0.00s) --- PASS: TestEntryStateEquivalent/nil2_file2 (0.00s) --- PASS: TestEntryStateEquivalent/remove_file2 (0.00s) --- PASS: TestEntryStateEquivalent/script_file2 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_file2 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_file2 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/file1_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/file2_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/nil1_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/nil2_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/remove_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/script_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_nil1 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/file1_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/file2_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/nil1_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/nil2_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/remove_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/script_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_nil2 (0.00s) --- PASS: TestEntryStateEquivalent/dir1_remove (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_remove (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_remove (0.00s) --- PASS: TestEntryStateEquivalent/file1_remove (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_remove (0.00s) --- PASS: TestEntryStateEquivalent/file2_remove (0.00s) --- PASS: TestEntryStateEquivalent/nil1_remove (0.00s) --- PASS: TestEntryStateEquivalent/nil2_remove (0.00s) --- PASS: TestEntryStateEquivalent/remove_remove (0.00s) --- PASS: TestEntryStateEquivalent/script_remove (0.00s) --- PASS: TestEntryStateEquivalent/symlink_remove (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_remove (0.00s) --- PASS: TestEntryStateEquivalent/dir1_script (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_script (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_script (0.01s) --- PASS: TestEntryStateEquivalent/file1_script (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_script (0.00s) --- PASS: TestEntryStateEquivalent/file2_script (0.00s) --- PASS: TestEntryStateEquivalent/nil1_script (0.00s) --- PASS: TestEntryStateEquivalent/nil2_script (0.00s) --- PASS: TestEntryStateEquivalent/remove_script (0.00s) --- PASS: TestEntryStateEquivalent/script_script (0.00s) --- PASS: TestEntryStateEquivalent/symlink_script (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_script (0.00s) --- PASS: TestEntryStateEquivalent/dir1_symlink (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_symlink (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_symlink (0.00s) --- PASS: TestEntryStateEquivalent/file1_symlink (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_symlink (0.00s) --- PASS: TestEntryStateEquivalent/file2_symlink (0.00s) --- PASS: TestEntryStateEquivalent/nil1_symlink (0.00s) --- PASS: TestEntryStateEquivalent/nil2_symlink (0.00s) --- PASS: TestEntryStateEquivalent/remove_symlink (0.00s) --- PASS: TestEntryStateEquivalent/script_symlink (0.00s) --- PASS: TestEntryStateEquivalent/symlink_symlink (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_symlink (0.00s) --- PASS: TestEntryStateEquivalent/dir1_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir1_copy_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/dir_private_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/file1_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/file1_copy_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/file2_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/nil1_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/nil2_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/remove_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/script_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/symlink_symlink_copy (0.00s) --- PASS: TestEntryStateEquivalent/symlink_copy_symlink_copy (0.00s) === RUN TestIncludeMaskSet === RUN TestIncludeMaskSet/#00 === RUN TestIncludeMaskSet/none === RUN TestIncludeMaskSet/dirs,files === RUN TestIncludeMaskSet/all === RUN TestIncludeMaskSet/all,noscripts === RUN TestIncludeMaskSet/noscripts === RUN TestIncludeMaskSet/noscripts,nosymlinks === RUN TestIncludeMaskSet/symlinks,, === RUN TestIncludeMaskSet/devices --- PASS: TestIncludeMaskSet (0.00s) --- PASS: TestIncludeMaskSet/#00 (0.00s) --- PASS: TestIncludeMaskSet/none (0.00s) --- PASS: TestIncludeMaskSet/dirs,files (0.00s) --- PASS: TestIncludeMaskSet/all (0.00s) --- PASS: TestIncludeMaskSet/all,noscripts (0.00s) --- PASS: TestIncludeMaskSet/noscripts (0.00s) --- PASS: TestIncludeMaskSet/noscripts,nosymlinks (0.00s) --- PASS: TestIncludeMaskSet/symlinks,, (0.00s) --- PASS: TestIncludeMaskSet/devices (0.00s) === RUN TestIncludeMaskStringSlice === RUN TestIncludeMaskStringSlice/all === RUN TestIncludeMaskStringSlice/dirs === RUN TestIncludeMaskStringSlice/files === RUN TestIncludeMaskStringSlice/remove === RUN TestIncludeMaskStringSlice/scripts === RUN TestIncludeMaskStringSlice/symlinks === RUN TestIncludeMaskStringSlice/encrypted === RUN TestIncludeMaskStringSlice/externals === RUN TestIncludeMaskStringSlice/none === RUN TestIncludeMaskStringSlice/dirs,files --- PASS: TestIncludeMaskStringSlice (0.01s) --- PASS: TestIncludeMaskStringSlice/all (0.00s) --- PASS: TestIncludeMaskStringSlice/dirs (0.00s) --- PASS: TestIncludeMaskStringSlice/files (0.00s) --- PASS: TestIncludeMaskStringSlice/remove (0.00s) --- PASS: TestIncludeMaskStringSlice/scripts (0.00s) --- PASS: TestIncludeMaskStringSlice/symlinks (0.00s) --- PASS: TestIncludeMaskStringSlice/encrypted (0.00s) --- PASS: TestIncludeMaskStringSlice/externals (0.00s) --- PASS: TestIncludeMaskStringSlice/none (0.00s) --- PASS: TestIncludeMaskStringSlice/dirs,files (0.00s) === RUN TestFormats --- PASS: TestFormats (0.00s) === RUN TestFormatRoundTrip === RUN TestFormatRoundTrip/json.gz === RUN TestFormatRoundTrip/json === RUN TestFormatRoundTrip/toml === RUN TestFormatRoundTrip/yaml --- PASS: TestFormatRoundTrip (0.01s) --- PASS: TestFormatRoundTrip/json.gz (0.01s) --- PASS: TestFormatRoundTrip/json (0.00s) --- PASS: TestFormatRoundTrip/toml (0.00s) --- PASS: TestFormatRoundTrip/yaml (0.00s) === RUN TestGPGEncryption 12:23AM INF Run args=["/usr/bin/gpg","--batch","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--quick-generate-key","chezmoi-test-gpg-key"] duration=32.082145247s path=/usr/bin/gpg === RUN TestGPGEncryption/asymmetric === RUN TestGPGEncryption/asymmetric/DecryptToFile gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 12:23AM INF Run args=["/usr/bin/gpg","--armor","--output","/tmp/chezmoi-encryption268042202/ciphertext","--recipient","chezmoi-test-gpg-key","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--encrypt","/tmp/chezmoi-encryption268042202/plaintext"] duration=154.673291ms path=/usr/bin/gpg gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID BD99F2CA139A40CA, created 2022-07-29 "chezmoi-test-gpg-key" 12:23AM INF Run args=["/usr/bin/gpg","--output","/tmp/TestGPGEncryptionasymmetricDecryptToFile1177927083/001/plaintext","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--decrypt","/tmp/chezmoi-encryption1064983353/ciphertext"] duration=1.122235358s path=/usr/bin/gpg === RUN TestGPGEncryption/asymmetric/EncryptDecrypt gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! 12:23AM INF Run args=["/usr/bin/gpg","--armor","--output","/tmp/chezmoi-encryption2268571434/ciphertext","--recipient","chezmoi-test-gpg-key","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--encrypt","/tmp/chezmoi-encryption2268571434/plaintext"] duration=127.002675ms path=/usr/bin/gpg gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID BD99F2CA139A40CA, created 2022-07-29 "chezmoi-test-gpg-key" 12:23AM INF Run args=["/usr/bin/gpg","--output","/tmp/chezmoi-encryption2294614764/plaintext","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--decrypt","/tmp/chezmoi-encryption2294614764/ciphertext"] duration=436.986405ms path=/usr/bin/gpg === RUN TestGPGEncryption/asymmetric/EncryptFile gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! 12:23AM INF Run args=["/usr/bin/gpg","--armor","--output","/tmp/chezmoi-encryption3186996965/ciphertext","--recipient","chezmoi-test-gpg-key","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--encrypt","/tmp/TestGPGEncryptionasymmetricEncryptFile4165024832/001/plaintext"] duration=63.830391ms path=/usr/bin/gpg gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID BD99F2CA139A40CA, created 2022-07-29 "chezmoi-test-gpg-key" 12:23AM INF Run args=["/usr/bin/gpg","--output","/tmp/chezmoi-encryption2974298589/plaintext","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--decrypt","/tmp/chezmoi-encryption2974298589/ciphertext"] duration=397.917866ms path=/usr/bin/gpg === RUN TestGPGEncryption/symmetric === RUN TestGPGEncryption/symmetric/DecryptToFile gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! 12:23AM INF Run args=["/usr/bin/gpg","--armor","--output","/tmp/chezmoi-encryption1715291142/ciphertext","--symmetric","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","/tmp/chezmoi-encryption1715291142/plaintext"] duration=474.095662ms path=/usr/bin/gpg gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase 12:23AM INF Run args=["/usr/bin/gpg","--output","/tmp/TestGPGEncryptionsymmetricDecryptToFile2435038660/001/plaintext","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--decrypt","/tmp/chezmoi-encryption67134958/ciphertext"] duration=283.428361ms path=/usr/bin/gpg === RUN TestGPGEncryption/symmetric/EncryptDecrypt gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! 12:23AM INF Run args=["/usr/bin/gpg","--armor","--output","/tmp/chezmoi-encryption3229855024/ciphertext","--symmetric","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","/tmp/chezmoi-encryption3229855024/plaintext"] duration=275.787876ms path=/usr/bin/gpg gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase 12:23AM INF Run args=["/usr/bin/gpg","--output","/tmp/chezmoi-encryption486475997/plaintext","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--decrypt","/tmp/chezmoi-encryption486475997/ciphertext"] duration=256.56562ms path=/usr/bin/gpg === RUN TestGPGEncryption/symmetric/EncryptFile gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! 12:23AM INF Run args=["/usr/bin/gpg","--armor","--output","/tmp/chezmoi-encryption4032873255/ciphertext","--symmetric","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","/tmp/TestGPGEncryptionsymmetricEncryptFile1737019098/001/plaintext"] duration=254.702821ms path=/usr/bin/gpg gpg: WARNING: unsafe permissions on homedir '/tmp/TestGPGEncryption3458304226/001' gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase 12:23AM INF Run args=["/usr/bin/gpg","--output","/tmp/chezmoi-encryption1342932932/plaintext","--homedir","/tmp/TestGPGEncryption3458304226/001","--no-tty","--passphrase","chezmoi-test-gpg-passphrase","--pinentry-mode","loopback","--decrypt","/tmp/chezmoi-encryption1342932932/ciphertext"] duration=244.56559ms path=/usr/bin/gpg --- PASS: TestGPGEncryption (36.21s) --- PASS: TestGPGEncryption/asymmetric (2.32s) --- PASS: TestGPGEncryption/asymmetric/DecryptToFile (1.29s) --- PASS: TestGPGEncryption/asymmetric/EncryptDecrypt (0.57s) --- PASS: TestGPGEncryption/asymmetric/EncryptFile (0.47s) --- PASS: TestGPGEncryption/symmetric (1.80s) --- PASS: TestGPGEncryption/symmetric/DecryptToFile (0.76s) --- PASS: TestGPGEncryption/symmetric/EncryptDecrypt (0.54s) --- PASS: TestGPGEncryption/symmetric/EncryptFile (0.50s) === RUN TestHexBytes === RUN TestHexBytes/0 === RUN TestHexBytes/0/json === RUN TestHexBytes/0/yaml === RUN TestHexBytes/1 === RUN TestHexBytes/1/json === RUN TestHexBytes/1/yaml === RUN TestHexBytes/2 === RUN TestHexBytes/2/json === RUN TestHexBytes/2/yaml --- PASS: TestHexBytes (0.01s) --- PASS: TestHexBytes/0 (0.00s) --- PASS: TestHexBytes/0/json (0.00s) --- PASS: TestHexBytes/0/yaml (0.00s) --- PASS: TestHexBytes/1 (0.00s) --- PASS: TestHexBytes/1/json (0.00s) --- PASS: TestHexBytes/1/yaml (0.00s) --- PASS: TestHexBytes/2 (0.00s) --- PASS: TestHexBytes/2/json (0.00s) --- PASS: TestHexBytes/2/yaml (0.00s) === RUN TestMockPersistentState --- PASS: TestMockPersistentState (0.00s) === RUN TestPatternSet === RUN TestPatternSet/empty === RUN TestPatternSet/exact === RUN TestPatternSet/wildcard === RUN TestPatternSet/exclude === RUN TestPatternSet/doublestar --- PASS: TestPatternSet (0.00s) --- PASS: TestPatternSet/empty (0.00s) --- PASS: TestPatternSet/exact (0.00s) --- PASS: TestPatternSet/wildcard (0.00s) --- PASS: TestPatternSet/exclude (0.00s) --- PASS: TestPatternSet/doublestar (0.00s) === RUN TestPatternSetGlob === RUN TestPatternSetGlob/empty === RUN TestPatternSetGlob/simple === RUN TestPatternSetGlob/include_exclude === RUN TestPatternSetGlob/doublestar --- PASS: TestPatternSetGlob (0.01s) --- PASS: TestPatternSetGlob/empty (0.00s) --- PASS: TestPatternSetGlob/simple (0.00s) --- PASS: TestPatternSetGlob/include_exclude (0.00s) --- PASS: TestPatternSetGlob/doublestar (0.00s) === RUN TestRealSystemGlob === RUN TestRealSystemGlob//home/user/foo === RUN TestRealSystemGlob//home/user/**/foo === RUN TestRealSystemGlob//home/user/**/ba* --- PASS: TestRealSystemGlob (0.01s) --- PASS: TestRealSystemGlob//home/user/foo (0.00s) --- PASS: TestRealSystemGlob//home/user/**/foo (0.00s) --- PASS: TestRealSystemGlob//home/user/**/ba* (0.00s) === RUN TestRecursiveMerge --- PASS: TestRecursiveMerge (0.00s) === RUN TestRecursiveMergeCopies --- PASS: TestRecursiveMergeCopies (0.00s) === RUN TestSourceRelPath === RUN TestSourceRelPath/empty === RUN TestSourceRelPath/dir === RUN TestSourceRelPath/exact_dir === RUN TestSourceRelPath/exact_dir_private_dir === RUN TestSourceRelPath/file === RUN TestSourceRelPath/dot_file === RUN TestSourceRelPath/exact_dir_executable_file --- PASS: TestSourceRelPath (0.00s) --- PASS: TestSourceRelPath/empty (0.00s) --- PASS: TestSourceRelPath/dir (0.00s) --- PASS: TestSourceRelPath/exact_dir (0.00s) --- PASS: TestSourceRelPath/exact_dir_private_dir (0.00s) --- PASS: TestSourceRelPath/file (0.00s) --- PASS: TestSourceRelPath/dot_file (0.00s) --- PASS: TestSourceRelPath/exact_dir_executable_file (0.00s) === RUN TestSourceStateAdd === RUN TestSourceStateAdd/dir === RUN TestSourceStateAdd/dir/0 === RUN TestSourceStateAdd/dir/1 === RUN TestSourceStateAdd/dir/0#01 === RUN TestSourceStateAdd/dir/0#02 === RUN TestSourceStateAdd/dir_change_attributes === RUN TestSourceStateAdd/dir_change_attributes/0 === RUN TestSourceStateAdd/dir_change_attributes/0#01 === RUN TestSourceStateAdd/dir_change_attributes/1 === RUN TestSourceStateAdd/dir_change_attributes/0#02 === RUN TestSourceStateAdd/dir_change_attributes/1#01 === RUN TestSourceStateAdd/dir_change_attributes/2 === RUN TestSourceStateAdd/dir_file === RUN TestSourceStateAdd/dir_file/0 === RUN TestSourceStateAdd/dir_file/1 === RUN TestSourceStateAdd/dir_file/0#01 === RUN TestSourceStateAdd/dir_file/1#01 === RUN TestSourceStateAdd/dir_file/2 === RUN TestSourceStateAdd/dir_file_existing_dir === RUN TestSourceStateAdd/dir_file_existing_dir/0 === RUN TestSourceStateAdd/dir_file_existing_dir/1 === RUN TestSourceStateAdd/dir_subdir === RUN TestSourceStateAdd/dir_subdir/0 === RUN TestSourceStateAdd/dir_subdir/1 === RUN TestSourceStateAdd/dir_subdir/0#01 === RUN TestSourceStateAdd/dir_subdir/1#01 === RUN TestSourceStateAdd/dir_subdir/0#02 === RUN TestSourceStateAdd/dir_subdir_file === RUN TestSourceStateAdd/dir_subdir_file/0 === RUN TestSourceStateAdd/dir_subdir_file/1 === RUN TestSourceStateAdd/dir_subdir_file/0#01 === RUN TestSourceStateAdd/dir_subdir_file/0#02 === RUN TestSourceStateAdd/dir_subdir_file/1#01 === RUN TestSourceStateAdd/dir_subdir_file/0#03 === RUN TestSourceStateAdd/dir_subdir_file/1#02 === RUN TestSourceStateAdd/dir_subdir_file/2 === RUN TestSourceStateAdd/dir_subdir_file_existing_dir_subdir === RUN TestSourceStateAdd/dir_subdir_file_existing_dir_subdir/0 === RUN TestSourceStateAdd/dir_subdir_file_existing_dir_subdir/1 === RUN TestSourceStateAdd/dir_readonly_unix === RUN TestSourceStateAdd/dir_readonly_unix/0 === RUN TestSourceStateAdd/dir_readonly_unix/1 === RUN TestSourceStateAdd/empty === RUN TestSourceStateAdd/empty/0 === RUN TestSourceStateAdd/empty_with_empty === RUN TestSourceStateAdd/empty_with_empty/0 === RUN TestSourceStateAdd/empty_with_empty/1 === RUN TestSourceStateAdd/empty_with_empty/2 === RUN TestSourceStateAdd/executable_unix === RUN TestSourceStateAdd/executable_unix/0 === RUN TestSourceStateAdd/executable_unix/1 === RUN TestSourceStateAdd/executable_unix/2 === RUN TestSourceStateAdd/executable_windows sourcestate_test.go:489: skipping Windows test on UNIX === RUN TestSourceStateAdd/create === RUN TestSourceStateAdd/create/0 === RUN TestSourceStateAdd/create/1 === RUN TestSourceStateAdd/create/2 === RUN TestSourceStateAdd/file === RUN TestSourceStateAdd/file/0 === RUN TestSourceStateAdd/file/1 === RUN TestSourceStateAdd/file/2 === RUN TestSourceStateAdd/file_change_attributes === RUN TestSourceStateAdd/file_change_attributes/0 === RUN TestSourceStateAdd/file_change_attributes/1 === RUN TestSourceStateAdd/file_change_attributes/2 === RUN TestSourceStateAdd/file_change_attributes/0#01 === RUN TestSourceStateAdd/file_replace_contents === RUN TestSourceStateAdd/file_replace_contents/0 === RUN TestSourceStateAdd/file_replace_contents/1 === RUN TestSourceStateAdd/file_replace_contents/2 === RUN TestSourceStateAdd/private_unix === RUN TestSourceStateAdd/private_unix/0 === RUN TestSourceStateAdd/private_unix/1 === RUN TestSourceStateAdd/private_unix/2 === RUN TestSourceStateAdd/private_windows sourcestate_test.go:489: skipping Windows test on UNIX === RUN TestSourceStateAdd/file_readonly_unix === RUN TestSourceStateAdd/file_readonly_unix/0 === RUN TestSourceStateAdd/file_readonly_unix/1 === RUN TestSourceStateAdd/file_readonly_unix/2 === RUN TestSourceStateAdd/symlink === RUN TestSourceStateAdd/symlink/0 === RUN TestSourceStateAdd/symlink/1 === RUN TestSourceStateAdd/symlink_backslash_windows sourcestate_test.go:489: skipping Windows test on UNIX === RUN TestSourceStateAdd/template === RUN TestSourceStateAdd/template/0 === RUN TestSourceStateAdd/template/1 === RUN TestSourceStateAdd/template/2 === RUN TestSourceStateAdd/dir_and_dir_file === RUN TestSourceStateAdd/dir_and_dir_file/0 === RUN TestSourceStateAdd/dir_and_dir_file/1 === RUN TestSourceStateAdd/dir_and_dir_file/0#01 === RUN TestSourceStateAdd/dir_and_dir_file/1#01 === RUN TestSourceStateAdd/dir_and_dir_file/2 === RUN TestSourceStateAdd/file_in_dir_exact_subdir === RUN TestSourceStateAdd/file_in_dir_exact_subdir/0 === RUN TestSourceStateAdd/file_in_dir_exact_subdir/1 --- PASS: TestSourceStateAdd (0.49s) --- PASS: TestSourceStateAdd/dir (0.01s) --- PASS: TestSourceStateAdd/dir/0 (0.00s) --- PASS: TestSourceStateAdd/dir/1 (0.00s) --- PASS: TestSourceStateAdd/dir/0#01 (0.00s) --- PASS: TestSourceStateAdd/dir/0#02 (0.00s) --- PASS: TestSourceStateAdd/dir_change_attributes (0.03s) --- PASS: TestSourceStateAdd/dir_change_attributes/0 (0.01s) --- PASS: TestSourceStateAdd/dir_change_attributes/0#01 (0.00s) --- PASS: TestSourceStateAdd/dir_change_attributes/1 (0.00s) --- PASS: TestSourceStateAdd/dir_change_attributes/0#02 (0.00s) --- PASS: TestSourceStateAdd/dir_change_attributes/1#01 (0.00s) --- PASS: TestSourceStateAdd/dir_change_attributes/2 (0.00s) --- PASS: TestSourceStateAdd/dir_file (0.03s) --- PASS: TestSourceStateAdd/dir_file/0 (0.00s) --- PASS: TestSourceStateAdd/dir_file/1 (0.00s) --- PASS: TestSourceStateAdd/dir_file/0#01 (0.00s) --- PASS: TestSourceStateAdd/dir_file/1#01 (0.00s) --- PASS: TestSourceStateAdd/dir_file/2 (0.00s) --- PASS: TestSourceStateAdd/dir_file_existing_dir (0.02s) --- PASS: TestSourceStateAdd/dir_file_existing_dir/0 (0.00s) --- PASS: TestSourceStateAdd/dir_file_existing_dir/1 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir (0.01s) --- PASS: TestSourceStateAdd/dir_subdir/0 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir/1 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir/0#01 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir/1#01 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir/0#02 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file (0.03s) --- PASS: TestSourceStateAdd/dir_subdir_file/0 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/1 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/0#01 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/0#02 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/1#01 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/0#03 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/1#02 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file/2 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file_existing_dir_subdir (0.06s) --- PASS: TestSourceStateAdd/dir_subdir_file_existing_dir_subdir/0 (0.00s) --- PASS: TestSourceStateAdd/dir_subdir_file_existing_dir_subdir/1 (0.00s) --- PASS: TestSourceStateAdd/dir_readonly_unix (0.09s) --- PASS: TestSourceStateAdd/dir_readonly_unix/0 (0.00s) --- PASS: TestSourceStateAdd/dir_readonly_unix/1 (0.00s) --- PASS: TestSourceStateAdd/empty (0.01s) --- PASS: TestSourceStateAdd/empty/0 (0.00s) --- PASS: TestSourceStateAdd/empty_with_empty (0.01s) --- PASS: TestSourceStateAdd/empty_with_empty/0 (0.00s) --- PASS: TestSourceStateAdd/empty_with_empty/1 (0.00s) --- PASS: TestSourceStateAdd/empty_with_empty/2 (0.00s) --- PASS: TestSourceStateAdd/executable_unix (0.01s) --- PASS: TestSourceStateAdd/executable_unix/0 (0.00s) --- PASS: TestSourceStateAdd/executable_unix/1 (0.00s) --- PASS: TestSourceStateAdd/executable_unix/2 (0.00s) --- SKIP: TestSourceStateAdd/executable_windows (0.00s) --- PASS: TestSourceStateAdd/create (0.01s) --- PASS: TestSourceStateAdd/create/0 (0.00s) --- PASS: TestSourceStateAdd/create/1 (0.00s) --- PASS: TestSourceStateAdd/create/2 (0.00s) --- PASS: TestSourceStateAdd/file (0.01s) --- PASS: TestSourceStateAdd/file/0 (0.00s) --- PASS: TestSourceStateAdd/file/1 (0.00s) --- PASS: TestSourceStateAdd/file/2 (0.00s) --- PASS: TestSourceStateAdd/file_change_attributes (0.01s) --- PASS: TestSourceStateAdd/file_change_attributes/0 (0.00s) --- PASS: TestSourceStateAdd/file_change_attributes/1 (0.00s) --- PASS: TestSourceStateAdd/file_change_attributes/2 (0.00s) --- PASS: TestSourceStateAdd/file_change_attributes/0#01 (0.00s) --- PASS: TestSourceStateAdd/file_replace_contents (0.02s) --- PASS: TestSourceStateAdd/file_replace_contents/0 (0.00s) --- PASS: TestSourceStateAdd/file_replace_contents/1 (0.00s) --- PASS: TestSourceStateAdd/file_replace_contents/2 (0.00s) --- PASS: TestSourceStateAdd/private_unix (0.01s) --- PASS: TestSourceStateAdd/private_unix/0 (0.00s) --- PASS: TestSourceStateAdd/private_unix/1 (0.00s) --- PASS: TestSourceStateAdd/private_unix/2 (0.00s) --- SKIP: TestSourceStateAdd/private_windows (0.00s) --- PASS: TestSourceStateAdd/file_readonly_unix (0.03s) --- PASS: TestSourceStateAdd/file_readonly_unix/0 (0.00s) --- PASS: TestSourceStateAdd/file_readonly_unix/1 (0.00s) --- PASS: TestSourceStateAdd/file_readonly_unix/2 (0.00s) --- PASS: TestSourceStateAdd/symlink (0.01s) --- PASS: TestSourceStateAdd/symlink/0 (0.00s) --- PASS: TestSourceStateAdd/symlink/1 (0.00s) --- SKIP: TestSourceStateAdd/symlink_backslash_windows (0.00s) --- PASS: TestSourceStateAdd/template (0.01s) --- PASS: TestSourceStateAdd/template/0 (0.00s) --- PASS: TestSourceStateAdd/template/1 (0.00s) --- PASS: TestSourceStateAdd/template/2 (0.00s) --- PASS: TestSourceStateAdd/dir_and_dir_file (0.03s) --- PASS: TestSourceStateAdd/dir_and_dir_file/0 (0.00s) --- PASS: TestSourceStateAdd/dir_and_dir_file/1 (0.00s) --- PASS: TestSourceStateAdd/dir_and_dir_file/0#01 (0.00s) --- PASS: TestSourceStateAdd/dir_and_dir_file/1#01 (0.00s) --- PASS: TestSourceStateAdd/dir_and_dir_file/2 (0.00s) --- PASS: TestSourceStateAdd/file_in_dir_exact_subdir (0.04s) --- PASS: TestSourceStateAdd/file_in_dir_exact_subdir/0 (0.00s) --- PASS: TestSourceStateAdd/file_in_dir_exact_subdir/1 (0.00s) === RUN TestSourceStateAddInExternal 12:23AM INF HTTPRequest duration=3.199656ms method=GET size=-1 status="200 OK" statusCode=200 url=http://127.0.0.1:43025/archive.tar === RUN TestSourceStateAddInExternal/0 === RUN TestSourceStateAddInExternal/1 === RUN TestSourceStateAddInExternal/0#01 === RUN TestSourceStateAddInExternal/1#01 === RUN TestSourceStateAddInExternal/2 --- PASS: TestSourceStateAddInExternal (0.06s) --- PASS: TestSourceStateAddInExternal/0 (0.00s) --- PASS: TestSourceStateAddInExternal/1 (0.00s) --- PASS: TestSourceStateAddInExternal/0#01 (0.00s) --- PASS: TestSourceStateAddInExternal/1#01 (0.00s) --- PASS: TestSourceStateAddInExternal/2 (0.00s) === RUN TestSourceStateApplyAll === RUN TestSourceStateApplyAll/empty === RUN TestSourceStateApplyAll/dir === RUN TestSourceStateApplyAll/dir/0 === RUN TestSourceStateApplyAll/dir/1 === RUN TestSourceStateApplyAll/dir_exact === RUN TestSourceStateApplyAll/dir_exact/0 === RUN TestSourceStateApplyAll/dir_exact/1 === RUN TestSourceStateApplyAll/dir_exact/0#01 === RUN TestSourceStateApplyAll/file === RUN TestSourceStateApplyAll/file/0 === RUN TestSourceStateApplyAll/file/1 === RUN TestSourceStateApplyAll/file/2 === RUN TestSourceStateApplyAll/file_remove_empty === RUN TestSourceStateApplyAll/file_remove_empty/0 === RUN TestSourceStateApplyAll/file_create_empty === RUN TestSourceStateApplyAll/file_create_empty/0 === RUN TestSourceStateApplyAll/file_create_empty/1 === RUN TestSourceStateApplyAll/file_create_empty/2 === RUN TestSourceStateApplyAll/file_template === RUN TestSourceStateApplyAll/file_template/0 === RUN TestSourceStateApplyAll/file_template/1 === RUN TestSourceStateApplyAll/file_template/2 === RUN TestSourceStateApplyAll/create === RUN TestSourceStateApplyAll/create/0 === RUN TestSourceStateApplyAll/create/1 === RUN TestSourceStateApplyAll/create/2 === RUN TestSourceStateApplyAll/create_no_replace === RUN TestSourceStateApplyAll/create_no_replace/0 === RUN TestSourceStateApplyAll/create_no_replace/1 === RUN TestSourceStateApplyAll/create_no_replace/2 === RUN TestSourceStateApplyAll/symlink === RUN TestSourceStateApplyAll/symlink/0 === RUN TestSourceStateApplyAll/symlink/1 === RUN TestSourceStateApplyAll/symlink_template === RUN TestSourceStateApplyAll/symlink_template/0 === RUN TestSourceStateApplyAll/symlink_template/1 --- PASS: TestSourceStateApplyAll (0.09s) --- PASS: TestSourceStateApplyAll/empty (0.00s) --- PASS: TestSourceStateApplyAll/dir (0.00s) --- PASS: TestSourceStateApplyAll/dir/0 (0.00s) --- PASS: TestSourceStateApplyAll/dir/1 (0.00s) --- PASS: TestSourceStateApplyAll/dir_exact (0.01s) --- PASS: TestSourceStateApplyAll/dir_exact/0 (0.00s) --- PASS: TestSourceStateApplyAll/dir_exact/1 (0.00s) --- PASS: TestSourceStateApplyAll/dir_exact/0#01 (0.00s) --- PASS: TestSourceStateApplyAll/file (0.01s) --- PASS: TestSourceStateApplyAll/file/0 (0.00s) --- PASS: TestSourceStateApplyAll/file/1 (0.00s) --- PASS: TestSourceStateApplyAll/file/2 (0.00s) --- PASS: TestSourceStateApplyAll/file_remove_empty (0.00s) --- PASS: TestSourceStateApplyAll/file_remove_empty/0 (0.00s) --- PASS: TestSourceStateApplyAll/file_create_empty (0.01s) --- PASS: TestSourceStateApplyAll/file_create_empty/0 (0.00s) --- PASS: TestSourceStateApplyAll/file_create_empty/1 (0.00s) --- PASS: TestSourceStateApplyAll/file_create_empty/2 (0.00s) --- PASS: TestSourceStateApplyAll/file_template (0.01s) --- PASS: TestSourceStateApplyAll/file_template/0 (0.00s) --- PASS: TestSourceStateApplyAll/file_template/1 (0.00s) --- PASS: TestSourceStateApplyAll/file_template/2 (0.00s) --- PASS: TestSourceStateApplyAll/create (0.01s) --- PASS: TestSourceStateApplyAll/create/0 (0.00s) --- PASS: TestSourceStateApplyAll/create/1 (0.00s) --- PASS: TestSourceStateApplyAll/create/2 (0.00s) --- PASS: TestSourceStateApplyAll/create_no_replace (0.01s) --- PASS: TestSourceStateApplyAll/create_no_replace/0 (0.00s) --- PASS: TestSourceStateApplyAll/create_no_replace/1 (0.00s) --- PASS: TestSourceStateApplyAll/create_no_replace/2 (0.00s) --- PASS: TestSourceStateApplyAll/symlink (0.00s) --- PASS: TestSourceStateApplyAll/symlink/0 (0.00s) --- PASS: TestSourceStateApplyAll/symlink/1 (0.00s) --- PASS: TestSourceStateApplyAll/symlink_template (0.01s) --- PASS: TestSourceStateApplyAll/symlink_template/0 (0.00s) --- PASS: TestSourceStateApplyAll/symlink_template/1 (0.00s) === RUN TestSourceStateRead === RUN TestSourceStateRead/empty === RUN TestSourceStateRead/dir === RUN TestSourceStateRead/file === RUN TestSourceStateRead/duplicate_target_file === RUN TestSourceStateRead/duplicate_target_dir === RUN TestSourceStateRead/duplicate_target_script === RUN TestSourceStateRead/symlink_with_attr === RUN TestSourceStateRead/symlink_script === RUN TestSourceStateRead/script === RUN TestSourceStateRead/symlink === RUN TestSourceStateRead/file_in_dir === RUN TestSourceStateRead/chezmoiignore === RUN TestSourceStateRead/chezmoiignore_ignore_file === RUN TestSourceStateRead/chezmoiignore_exact_dir === RUN TestSourceStateRead/chezmoiremove === RUN TestSourceStateRead/chezmoiremove_and_ignore === RUN TestSourceStateRead/chezmoiremove_and_ignore_in_subdir === RUN TestSourceStateRead/chezmoitemplates === RUN TestSourceStateRead/chezmoiversion === RUN TestSourceStateRead/chezmoiversion_multiple === RUN TestSourceStateRead/ignore_dir === RUN TestSourceStateRead/ignore_file --- PASS: TestSourceStateRead (0.16s) --- PASS: TestSourceStateRead/empty (0.00s) --- PASS: TestSourceStateRead/dir (0.00s) --- PASS: TestSourceStateRead/file (0.00s) --- PASS: TestSourceStateRead/duplicate_target_file (0.02s) --- PASS: TestSourceStateRead/duplicate_target_dir (0.01s) --- PASS: TestSourceStateRead/duplicate_target_script (0.01s) --- PASS: TestSourceStateRead/symlink_with_attr (0.00s) --- PASS: TestSourceStateRead/symlink_script (0.00s) --- PASS: TestSourceStateRead/script (0.00s) --- PASS: TestSourceStateRead/symlink (0.00s) --- PASS: TestSourceStateRead/file_in_dir (0.00s) --- PASS: TestSourceStateRead/chezmoiignore (0.00s) --- PASS: TestSourceStateRead/chezmoiignore_ignore_file (0.00s) --- PASS: TestSourceStateRead/chezmoiignore_exact_dir (0.00s) --- PASS: TestSourceStateRead/chezmoiremove (0.01s) --- PASS: TestSourceStateRead/chezmoiremove_and_ignore (0.01s) --- PASS: TestSourceStateRead/chezmoiremove_and_ignore_in_subdir (0.02s) --- PASS: TestSourceStateRead/chezmoitemplates (0.00s) --- PASS: TestSourceStateRead/chezmoiversion (0.00s) --- PASS: TestSourceStateRead/chezmoiversion_multiple (0.01s) --- PASS: TestSourceStateRead/ignore_dir (0.00s) --- PASS: TestSourceStateRead/ignore_file (0.01s) === RUN TestSourceStateReadExternal === RUN TestSourceStateReadExternal/external_yaml === RUN TestSourceStateReadExternal/external_toml === RUN TestSourceStateReadExternal/external_in_subdir --- PASS: TestSourceStateReadExternal (0.02s) --- PASS: TestSourceStateReadExternal/external_yaml (0.01s) --- PASS: TestSourceStateReadExternal/external_toml (0.00s) --- PASS: TestSourceStateReadExternal/external_in_subdir (0.00s) === RUN TestSourceStateReadScriptsConcurrent === RUN TestSourceStateReadScriptsConcurrent/with_ignore --- PASS: TestSourceStateReadScriptsConcurrent (1.93s) --- PASS: TestSourceStateReadScriptsConcurrent/with_ignore (1.90s) === RUN TestSourceStateReadExternalCache 12:24AM INF HTTPRequest duration=2.908604ms method=GET size=2048 status="200 OK" statusCode=200 url=http://127.0.0.1:40141/archive.tar 12:24AM INF HTTPRequest duration=4.329784ms method=GET size=2048 status="200 OK" statusCode=200 url=http://127.0.0.1:40141/archive.tar --- PASS: TestSourceStateReadExternalCache (0.07s) === RUN TestSourceStateTargetRelPaths === RUN TestSourceStateTargetRelPaths/empty === RUN TestSourceStateTargetRelPaths/scripts --- PASS: TestSourceStateTargetRelPaths (0.01s) --- PASS: TestSourceStateTargetRelPaths/empty (0.00s) --- PASS: TestSourceStateTargetRelPaths/scripts (0.01s) === RUN TestSourceStateEntryTreeNodeEmpty --- PASS: TestSourceStateEntryTreeNodeEmpty (0.00s) === RUN TestSourceStateEntryTreeNodeSingle --- PASS: TestSourceStateEntryTreeNodeSingle (0.00s) === RUN TestSourceStateEntryTreeNodeMultiple --- PASS: TestSourceStateEntryTreeNodeMultiple (0.00s) === RUN TestConcurrentWalkSourceDir --- PASS: TestConcurrentWalkSourceDir (0.01s) === RUN TestWalkSourceDir --- PASS: TestWalkSourceDir (0.00s) === RUN TestTargetStateEntryApply === RUN TestTargetStateEntryApply/target_dir_actual_dir === RUN TestTargetStateEntryApply/target_dir_actual_dir/0 === RUN TestTargetStateEntryApply/target_dir_actual_dir/1 === RUN TestTargetStateEntryApply/target_file_actual_dir === RUN TestTargetStateEntryApply/target_file_actual_dir/0 === RUN TestTargetStateEntryApply/target_file_actual_dir/1 === RUN TestTargetStateEntryApply/target_file_actual_dir/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_dir === RUN TestTargetStateEntryApply/target_file_empty_actual_dir/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_dir/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_dir/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_dir === RUN TestTargetStateEntryApply/target_file_executable_actual_dir/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_dir/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_dir/2 === RUN TestTargetStateEntryApply/target_remove_actual_dir === RUN TestTargetStateEntryApply/target_remove_actual_dir/0 === RUN TestTargetStateEntryApply/target_symlink_actual_dir === RUN TestTargetStateEntryApply/target_symlink_actual_dir/0 === RUN TestTargetStateEntryApply/target_symlink_actual_dir/1 === RUN TestTargetStateEntryApply/target_dir_actual_file === RUN TestTargetStateEntryApply/target_dir_actual_file/0 === RUN TestTargetStateEntryApply/target_dir_actual_file/1 === RUN TestTargetStateEntryApply/target_file_actual_file === RUN TestTargetStateEntryApply/target_file_actual_file/0 === RUN TestTargetStateEntryApply/target_file_actual_file/1 === RUN TestTargetStateEntryApply/target_file_actual_file/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_file === RUN TestTargetStateEntryApply/target_file_empty_actual_file/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_file/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_file/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_file === RUN TestTargetStateEntryApply/target_file_executable_actual_file/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_file/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_file/2 === RUN TestTargetStateEntryApply/target_remove_actual_file === RUN TestTargetStateEntryApply/target_remove_actual_file/0 === RUN TestTargetStateEntryApply/target_symlink_actual_file === RUN TestTargetStateEntryApply/target_symlink_actual_file/0 === RUN TestTargetStateEntryApply/target_symlink_actual_file/1 === RUN TestTargetStateEntryApply/target_dir_actual_file_empty === RUN TestTargetStateEntryApply/target_dir_actual_file_empty/0 === RUN TestTargetStateEntryApply/target_dir_actual_file_empty/1 === RUN TestTargetStateEntryApply/target_file_actual_file_empty === RUN TestTargetStateEntryApply/target_file_actual_file_empty/0 === RUN TestTargetStateEntryApply/target_file_actual_file_empty/1 === RUN TestTargetStateEntryApply/target_file_actual_file_empty/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_file_empty === RUN TestTargetStateEntryApply/target_file_empty_actual_file_empty/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_file_empty/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_file_empty/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_file_empty === RUN TestTargetStateEntryApply/target_file_executable_actual_file_empty/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_file_empty/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_file_empty/2 === RUN TestTargetStateEntryApply/target_remove_actual_file_empty === RUN TestTargetStateEntryApply/target_remove_actual_file_empty/0 === RUN TestTargetStateEntryApply/target_symlink_actual_file_empty === RUN TestTargetStateEntryApply/target_symlink_actual_file_empty/0 === RUN TestTargetStateEntryApply/target_symlink_actual_file_empty/1 === RUN TestTargetStateEntryApply/target_dir_actual_file_executable === RUN TestTargetStateEntryApply/target_dir_actual_file_executable/0 === RUN TestTargetStateEntryApply/target_dir_actual_file_executable/1 === RUN TestTargetStateEntryApply/target_file_actual_file_executable === RUN TestTargetStateEntryApply/target_file_actual_file_executable/0 === RUN TestTargetStateEntryApply/target_file_actual_file_executable/1 === RUN TestTargetStateEntryApply/target_file_actual_file_executable/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_file_executable === RUN TestTargetStateEntryApply/target_file_empty_actual_file_executable/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_file_executable/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_file_executable/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_file_executable === RUN TestTargetStateEntryApply/target_file_executable_actual_file_executable/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_file_executable/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_file_executable/2 === RUN TestTargetStateEntryApply/target_remove_actual_file_executable === RUN TestTargetStateEntryApply/target_remove_actual_file_executable/0 === RUN TestTargetStateEntryApply/target_symlink_actual_file_executable === RUN TestTargetStateEntryApply/target_symlink_actual_file_executable/0 === RUN TestTargetStateEntryApply/target_symlink_actual_file_executable/1 === RUN TestTargetStateEntryApply/target_dir_actual_remove === RUN TestTargetStateEntryApply/target_dir_actual_remove/0 === RUN TestTargetStateEntryApply/target_dir_actual_remove/1 === RUN TestTargetStateEntryApply/target_file_actual_remove === RUN TestTargetStateEntryApply/target_file_actual_remove/0 === RUN TestTargetStateEntryApply/target_file_actual_remove/1 === RUN TestTargetStateEntryApply/target_file_actual_remove/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_remove === RUN TestTargetStateEntryApply/target_file_empty_actual_remove/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_remove/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_remove/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_remove === RUN TestTargetStateEntryApply/target_file_executable_actual_remove/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_remove/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_remove/2 === RUN TestTargetStateEntryApply/target_remove_actual_remove === RUN TestTargetStateEntryApply/target_remove_actual_remove/0 === RUN TestTargetStateEntryApply/target_symlink_actual_remove === RUN TestTargetStateEntryApply/target_symlink_actual_remove/0 === RUN TestTargetStateEntryApply/target_symlink_actual_remove/1 === RUN TestTargetStateEntryApply/target_dir_actual_symlink === RUN TestTargetStateEntryApply/target_dir_actual_symlink/0 === RUN TestTargetStateEntryApply/target_dir_actual_symlink/1 === RUN TestTargetStateEntryApply/target_file_actual_symlink === RUN TestTargetStateEntryApply/target_file_actual_symlink/0 === RUN TestTargetStateEntryApply/target_file_actual_symlink/1 === RUN TestTargetStateEntryApply/target_file_actual_symlink/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink/2 === RUN TestTargetStateEntryApply/target_remove_actual_symlink === RUN TestTargetStateEntryApply/target_remove_actual_symlink/0 === RUN TestTargetStateEntryApply/target_symlink_actual_symlink === RUN TestTargetStateEntryApply/target_symlink_actual_symlink/0 === RUN TestTargetStateEntryApply/target_symlink_actual_symlink/1 === RUN TestTargetStateEntryApply/target_dir_actual_symlink_broken === RUN TestTargetStateEntryApply/target_dir_actual_symlink_broken/0 === RUN TestTargetStateEntryApply/target_dir_actual_symlink_broken/1 === RUN TestTargetStateEntryApply/target_file_actual_symlink_broken === RUN TestTargetStateEntryApply/target_file_actual_symlink_broken/0 === RUN TestTargetStateEntryApply/target_file_actual_symlink_broken/1 === RUN TestTargetStateEntryApply/target_file_actual_symlink_broken/2 === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink_broken === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink_broken/0 === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink_broken/1 === RUN TestTargetStateEntryApply/target_file_empty_actual_symlink_broken/2 === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink_broken === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink_broken/0 === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink_broken/1 === RUN TestTargetStateEntryApply/target_file_executable_actual_symlink_broken/2 === RUN TestTargetStateEntryApply/target_remove_actual_symlink_broken === RUN TestTargetStateEntryApply/target_remove_actual_symlink_broken/0 === RUN TestTargetStateEntryApply/target_symlink_actual_symlink_broken === RUN TestTargetStateEntryApply/target_symlink_actual_symlink_broken/0 === RUN TestTargetStateEntryApply/target_symlink_actual_symlink_broken/1 --- PASS: TestTargetStateEntryApply (0.17s) --- PASS: TestTargetStateEntryApply/target_dir_actual_dir (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_dir/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_dir/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_dir (0.01s) --- PASS: TestTargetStateEntryApply/target_file_actual_dir/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_dir/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_dir/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_dir (0.01s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_dir/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_dir/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_dir/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_dir (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_dir/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_dir/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_dir/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_dir (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_dir/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_dir (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_dir/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_dir/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_file (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_file/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file_empty (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file_empty/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file_empty/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_empty (0.01s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_empty/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_empty/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_empty/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_empty (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_empty/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_empty/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_empty/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_empty (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_empty/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_empty/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_empty/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_file_empty (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_file_empty/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file_empty (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file_empty/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file_empty/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file_executable (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file_executable/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_file_executable/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_executable (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_executable/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_executable/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_file_executable/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_executable (0.01s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_executable/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_executable/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_file_executable/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_executable (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_executable/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_executable/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_file_executable/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_file_executable (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_file_executable/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file_executable (0.01s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file_executable/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_file_executable/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_remove (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_remove/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_remove/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_remove (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_remove/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_remove/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_remove/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_remove (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_remove/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_remove/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_remove/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_remove (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_remove/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_remove/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_remove/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_remove (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_remove/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_remove (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_remove/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_remove/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_symlink (0.01s) --- PASS: TestTargetStateEntryApply/target_dir_actual_symlink/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_symlink/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_symlink (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_symlink/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_symlink (0.01s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_symlink/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_symlink/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_symlink_broken (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_symlink_broken/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_dir_actual_symlink_broken/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink_broken (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink_broken/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink_broken/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_actual_symlink_broken/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink_broken (0.01s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink_broken/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink_broken/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_empty_actual_symlink_broken/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink_broken (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink_broken/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink_broken/1 (0.00s) --- PASS: TestTargetStateEntryApply/target_file_executable_actual_symlink_broken/2 (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_symlink_broken (0.00s) --- PASS: TestTargetStateEntryApply/target_remove_actual_symlink_broken/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_symlink_broken (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_symlink_broken/0 (0.00s) --- PASS: TestTargetStateEntryApply/target_symlink_actual_symlink_broken/1 (0.00s) === RUN TestTarWriterSystem === RUN TestTarWriterSystem/.dir/ === RUN TestTarWriterSystem/.dir/file === RUN TestTarWriterSystem/script === RUN TestTarWriterSystem/symlink --- PASS: TestTarWriterSystem (0.02s) --- PASS: TestTarWriterSystem/.dir/ (0.00s) --- PASS: TestTarWriterSystem/.dir/file (0.00s) --- PASS: TestTarWriterSystem/script (0.00s) --- PASS: TestTarWriterSystem/symlink (0.00s) === RUN TestZIPWriterSystem === RUN TestZIPWriterSystem/.dir === RUN TestZIPWriterSystem/.dir/file === RUN TestZIPWriterSystem/script === RUN TestZIPWriterSystem/symlink --- PASS: TestZIPWriterSystem (0.06s) --- PASS: TestZIPWriterSystem/.dir (0.00s) --- PASS: TestZIPWriterSystem/.dir/file (0.00s) --- PASS: TestZIPWriterSystem/script (0.01s) --- PASS: TestZIPWriterSystem/symlink (0.00s) PASS ok github.com/twpayne/chezmoi/v2/pkg/chezmoi 40.444s === RUN TestOutput === RUN TestOutput/0 === RUN TestOutput/1 === RUN TestOutput/2 === RUN TestOutput/3 === RUN TestOutput/4 === RUN TestOutput/5 === RUN TestOutput/6 --- PASS: TestOutput (0.01s) --- PASS: TestOutput/0 (0.00s) --- PASS: TestOutput/1 (0.00s) --- PASS: TestOutput/2 (0.00s) --- PASS: TestOutput/3 (0.00s) --- PASS: TestOutput/4 (0.00s) --- PASS: TestOutput/5 (0.00s) --- PASS: TestOutput/6 (0.00s) PASS ok github.com/twpayne/chezmoi/v2/pkg/chezmoilog 0.088s === RUN TestJoinLines === RUN TestJoinLines/0 === RUN TestJoinLines/1 === RUN TestJoinLines/2 === RUN TestJoinLines/3 --- PASS: TestJoinLines (0.00s) --- PASS: TestJoinLines/0 (0.00s) --- PASS: TestJoinLines/1 (0.00s) --- PASS: TestJoinLines/2 (0.00s) --- PASS: TestJoinLines/3 (0.00s) PASS ok github.com/twpayne/chezmoi/v2/pkg/chezmoitest 0.149s === RUN TestAddCmd === RUN TestAddCmd/dir === RUN TestAddCmd/dir/0 === RUN TestAddCmd/dir/1 === RUN TestAddCmd/dir/0#01 === RUN TestAddCmd/dir/1#01 === RUN TestAddCmd/dir_with_file === RUN TestAddCmd/dir_with_file/0 === RUN TestAddCmd/dir_with_file/1 === RUN TestAddCmd/dir_with_file/0#01 === RUN TestAddCmd/dir_with_file/0#02 === RUN TestAddCmd/dir_with_file/1#01 === RUN TestAddCmd/dir_with_file/2 === RUN TestAddCmd/dir_with_file_with_--recursive=false === RUN TestAddCmd/dir_with_file_with_--recursive=false/0 === RUN TestAddCmd/dir_with_file_with_--recursive=false/1 === RUN TestAddCmd/dir_with_file_with_--recursive=false/0#01 === RUN TestAddCmd/dir_with_file_with_--recursive=false/1#01 === RUN TestAddCmd/dir_with_file_with_--recursive=false/0#02 === RUN TestAddCmd/dir_private_unix === RUN TestAddCmd/dir_private_unix/0 === RUN TestAddCmd/dir_private_unix/1 === RUN TestAddCmd/dir_private_unix/0#01 === RUN TestAddCmd/dir_private_unix/0#02 === RUN TestAddCmd/dir_private_unix/1#01 === RUN TestAddCmd/dir_private_unix/2 === RUN TestAddCmd/dir_file_private_unix === RUN TestAddCmd/dir_file_private_unix/0 === RUN TestAddCmd/dir_file_private_unix/1 === RUN TestAddCmd/dir_file_private_unix/0#01 === RUN TestAddCmd/dir_file_private_unix/0#02 === RUN TestAddCmd/dir_file_private_unix/1#01 === RUN TestAddCmd/dir_file_private_unix/2 === RUN TestAddCmd/empty === RUN TestAddCmd/empty/0 === RUN TestAddCmd/empty/1 === RUN TestAddCmd/empty/2 === RUN TestAddCmd/executable_unix === RUN TestAddCmd/executable_unix/0 === RUN TestAddCmd/executable_unix/1 === RUN TestAddCmd/executable_unix/2 === RUN TestAddCmd/file === RUN TestAddCmd/file/0 === RUN TestAddCmd/file/1 === RUN TestAddCmd/file/2 === RUN TestAddCmd/symlink === RUN TestAddCmd/symlink/0 === RUN TestAddCmd/symlink/1 === RUN TestAddCmd/symlink/2 === RUN TestAddCmd/symlink_with_--follow === RUN TestAddCmd/symlink_with_--follow/0 === RUN TestAddCmd/symlink_with_--follow/1 === RUN TestAddCmd/symlink_with_--follow/2 --- PASS: TestAddCmd (0.53s) --- PASS: TestAddCmd/dir (0.11s) --- PASS: TestAddCmd/dir/0 (0.00s) --- PASS: TestAddCmd/dir/1 (0.00s) --- PASS: TestAddCmd/dir/0#01 (0.00s) --- PASS: TestAddCmd/dir/1#01 (0.00s) --- PASS: TestAddCmd/dir_with_file (0.10s) --- PASS: TestAddCmd/dir_with_file/0 (0.00s) --- PASS: TestAddCmd/dir_with_file/1 (0.00s) --- PASS: TestAddCmd/dir_with_file/0#01 (0.00s) --- PASS: TestAddCmd/dir_with_file/0#02 (0.00s) --- PASS: TestAddCmd/dir_with_file/1#01 (0.00s) --- PASS: TestAddCmd/dir_with_file/2 (0.00s) --- PASS: TestAddCmd/dir_with_file_with_--recursive=false (0.06s) --- PASS: TestAddCmd/dir_with_file_with_--recursive=false/0 (0.00s) --- PASS: TestAddCmd/dir_with_file_with_--recursive=false/1 (0.00s) --- PASS: TestAddCmd/dir_with_file_with_--recursive=false/0#01 (0.00s) --- PASS: TestAddCmd/dir_with_file_with_--recursive=false/1#01 (0.00s) --- PASS: TestAddCmd/dir_with_file_with_--recursive=false/0#02 (0.00s) --- PASS: TestAddCmd/dir_private_unix (0.06s) --- PASS: TestAddCmd/dir_private_unix/0 (0.00s) --- PASS: TestAddCmd/dir_private_unix/1 (0.00s) --- PASS: TestAddCmd/dir_private_unix/0#01 (0.00s) --- PASS: TestAddCmd/dir_private_unix/0#02 (0.00s) --- PASS: TestAddCmd/dir_private_unix/1#01 (0.01s) --- PASS: TestAddCmd/dir_private_unix/2 (0.00s) --- PASS: TestAddCmd/dir_file_private_unix (0.06s) --- PASS: TestAddCmd/dir_file_private_unix/0 (0.00s) --- PASS: TestAddCmd/dir_file_private_unix/1 (0.00s) --- PASS: TestAddCmd/dir_file_private_unix/0#01 (0.00s) --- PASS: TestAddCmd/dir_file_private_unix/0#02 (0.00s) --- PASS: TestAddCmd/dir_file_private_unix/1#01 (0.00s) --- PASS: TestAddCmd/dir_file_private_unix/2 (0.00s) --- PASS: TestAddCmd/empty (0.03s) --- PASS: TestAddCmd/empty/0 (0.00s) --- PASS: TestAddCmd/empty/1 (0.00s) --- PASS: TestAddCmd/empty/2 (0.00s) --- PASS: TestAddCmd/executable_unix (0.03s) --- PASS: TestAddCmd/executable_unix/0 (0.00s) --- PASS: TestAddCmd/executable_unix/1 (0.00s) --- PASS: TestAddCmd/executable_unix/2 (0.00s) --- PASS: TestAddCmd/file (0.02s) --- PASS: TestAddCmd/file/0 (0.00s) --- PASS: TestAddCmd/file/1 (0.00s) --- PASS: TestAddCmd/file/2 (0.00s) --- PASS: TestAddCmd/symlink (0.02s) --- PASS: TestAddCmd/symlink/0 (0.00s) --- PASS: TestAddCmd/symlink/1 (0.00s) --- PASS: TestAddCmd/symlink/2 (0.00s) --- PASS: TestAddCmd/symlink_with_--follow (0.02s) --- PASS: TestAddCmd/symlink_with_--follow/0 (0.00s) --- PASS: TestAddCmd/symlink_with_--follow/1 (0.00s) --- PASS: TestAddCmd/symlink_with_--follow/2 (0.00s) === RUN TestAddCmdChmod --- PASS: TestAddCmdChmod (0.06s) === RUN TestApplyCmd === RUN TestApplyCmd/all === RUN TestApplyCmd/all/0 === RUN TestApplyCmd/all/1 === RUN TestApplyCmd/all/2 === RUN TestApplyCmd/all/0#01 === RUN TestApplyCmd/all/1#01 === RUN TestApplyCmd/all/0#02 === RUN TestApplyCmd/all/1#02 === RUN TestApplyCmd/all/2#01 === RUN TestApplyCmd/all/0#03 === RUN TestApplyCmd/all/1#03 === RUN TestApplyCmd/all/0#04 === RUN TestApplyCmd/all/1#04 === RUN TestApplyCmd/all/2#02 === RUN TestApplyCmd/all/0#05 === RUN TestApplyCmd/all/1#05 === RUN TestApplyCmd/all/2#03 === RUN TestApplyCmd/all/0#06 === RUN TestApplyCmd/all/1#06 === RUN TestApplyCmd/all/2#04 === RUN TestApplyCmd/all/0#07 === RUN TestApplyCmd/all/1#07 === RUN TestApplyCmd/all/2#05 === RUN TestApplyCmd/all/0#08 === RUN TestApplyCmd/all/1#08 === RUN TestApplyCmd/all/2#06 === RUN TestApplyCmd/all/0#09 === RUN TestApplyCmd/all/0#10 === RUN TestApplyCmd/all/1#09 === RUN TestApplyCmd/all/0#11 === RUN TestApplyCmd/all/1#10 === RUN TestApplyCmd/all/2#07 === RUN TestApplyCmd/all_with_--dry-run === RUN TestApplyCmd/all_with_--dry-run/0 === RUN TestApplyCmd/all_with_--dry-run/0#01 === RUN TestApplyCmd/all_with_--dry-run/0#02 === RUN TestApplyCmd/all_with_--dry-run/0#03 === RUN TestApplyCmd/all_with_--dry-run/0#04 === RUN TestApplyCmd/all_with_--dry-run/0#05 === RUN TestApplyCmd/all_with_--dry-run/0#06 === RUN TestApplyCmd/all_with_--dry-run/0#07 === RUN TestApplyCmd/all_with_--dry-run/0#08 === RUN TestApplyCmd/dir === RUN TestApplyCmd/dir/0 === RUN TestApplyCmd/dir/1 === RUN TestApplyCmd/dir/0#01 === RUN TestApplyCmd/dir/1#01 === RUN TestApplyCmd/dir/2 === RUN TestApplyCmd/dir/0#02 === RUN TestApplyCmd/dir/1#02 === RUN TestApplyCmd/dir/0#03 === RUN TestApplyCmd/dir/1#03 === RUN TestApplyCmd/dir/2#01 === RUN TestApplyCmd/dir_with_--recursive=false === RUN TestApplyCmd/dir_with_--recursive=false/0 === RUN TestApplyCmd/dir_with_--recursive=false/1 === RUN TestApplyCmd/dir_with_--recursive=false/0#01 === RUN TestApplyCmd/dir_with_--recursive=false/0#02 === RUN TestApplyCmd/create === RUN TestApplyCmd/create/0 === RUN TestApplyCmd/create/1 === RUN TestApplyCmd/create/2 --- PASS: TestApplyCmd (0.41s) --- PASS: TestApplyCmd/all (0.15s) --- PASS: TestApplyCmd/all/0 (0.00s) --- PASS: TestApplyCmd/all/1 (0.00s) --- PASS: TestApplyCmd/all/2 (0.00s) --- PASS: TestApplyCmd/all/0#01 (0.00s) --- PASS: TestApplyCmd/all/1#01 (0.00s) --- PASS: TestApplyCmd/all/0#02 (0.00s) --- PASS: TestApplyCmd/all/1#02 (0.00s) --- PASS: TestApplyCmd/all/2#01 (0.00s) --- PASS: TestApplyCmd/all/0#03 (0.00s) --- PASS: TestApplyCmd/all/1#03 (0.00s) --- PASS: TestApplyCmd/all/0#04 (0.00s) --- PASS: TestApplyCmd/all/1#04 (0.00s) --- PASS: TestApplyCmd/all/2#02 (0.00s) --- PASS: TestApplyCmd/all/0#05 (0.00s) --- PASS: TestApplyCmd/all/1#05 (0.00s) --- PASS: TestApplyCmd/all/2#03 (0.00s) --- PASS: TestApplyCmd/all/0#06 (0.00s) --- PASS: TestApplyCmd/all/1#06 (0.00s) --- PASS: TestApplyCmd/all/2#04 (0.00s) --- PASS: TestApplyCmd/all/0#07 (0.00s) --- PASS: TestApplyCmd/all/1#07 (0.00s) --- PASS: TestApplyCmd/all/2#05 (0.00s) --- PASS: TestApplyCmd/all/0#08 (0.00s) --- PASS: TestApplyCmd/all/1#08 (0.00s) --- PASS: TestApplyCmd/all/2#06 (0.00s) --- PASS: TestApplyCmd/all/0#09 (0.00s) --- PASS: TestApplyCmd/all/0#10 (0.00s) --- PASS: TestApplyCmd/all/1#09 (0.00s) --- PASS: TestApplyCmd/all/0#11 (0.00s) --- PASS: TestApplyCmd/all/1#10 (0.00s) --- PASS: TestApplyCmd/all/2#07 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run (0.12s) --- PASS: TestApplyCmd/all_with_--dry-run/0 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#01 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#02 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#03 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#04 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#05 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#06 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#07 (0.00s) --- PASS: TestApplyCmd/all_with_--dry-run/0#08 (0.00s) --- PASS: TestApplyCmd/dir (0.05s) --- PASS: TestApplyCmd/dir/0 (0.00s) --- PASS: TestApplyCmd/dir/1 (0.00s) --- PASS: TestApplyCmd/dir/0#01 (0.00s) --- PASS: TestApplyCmd/dir/1#01 (0.00s) --- PASS: TestApplyCmd/dir/2 (0.00s) --- PASS: TestApplyCmd/dir/0#02 (0.00s) --- PASS: TestApplyCmd/dir/1#02 (0.00s) --- PASS: TestApplyCmd/dir/0#03 (0.00s) --- PASS: TestApplyCmd/dir/1#03 (0.00s) --- PASS: TestApplyCmd/dir/2#01 (0.00s) --- PASS: TestApplyCmd/dir_with_--recursive=false (0.04s) --- PASS: TestApplyCmd/dir_with_--recursive=false/0 (0.00s) --- PASS: TestApplyCmd/dir_with_--recursive=false/1 (0.00s) --- PASS: TestApplyCmd/dir_with_--recursive=false/0#01 (0.00s) --- PASS: TestApplyCmd/dir_with_--recursive=false/0#02 (0.00s) --- PASS: TestApplyCmd/create (0.04s) --- PASS: TestApplyCmd/create/0 (0.00s) --- PASS: TestApplyCmd/create/1 (0.00s) --- PASS: TestApplyCmd/create/2 (0.00s) === RUN TestChattrCmdValidArgs === RUN TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"a") === RUN TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"e") === RUN TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"-c") === RUN TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"+o") === RUN TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"nop") === RUN TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"empty,s") --- PASS: TestChattrCmdValidArgs (0.01s) --- PASS: TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"a") (0.00s) --- PASS: TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"e") (0.00s) --- PASS: TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"-c") (0.00s) --- PASS: TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"+o") (0.00s) --- PASS: TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"nop") (0.00s) --- PASS: TestChattrCmdValidArgs/chattrValidArgs(_,_[],_"empty,s") (0.00s) === RUN TestParseAttrModifier === RUN TestParseAttrModifier/empty === RUN TestParseAttrModifier/+empty === RUN TestParseAttrModifier/-empty === RUN TestParseAttrModifier/noempty === RUN TestParseAttrModifier/e === RUN TestParseAttrModifier/encrypted === RUN TestParseAttrModifier/executable === RUN TestParseAttrModifier/x === RUN TestParseAttrModifier/b === RUN TestParseAttrModifier/-b === RUN TestParseAttrModifier/after === RUN TestParseAttrModifier/noafter === RUN TestParseAttrModifier/once === RUN TestParseAttrModifier/private === RUN TestParseAttrModifier/p === RUN TestParseAttrModifier/template === RUN TestParseAttrModifier/t === RUN TestParseAttrModifier/create === RUN TestParseAttrModifier/-create === RUN TestParseAttrModifier/modify === RUN TestParseAttrModifier/-script === RUN TestParseAttrModifier/+symlink === RUN TestParseAttrModifier/empty,+executable,noprivate,-t === RUN TestParseAttrModifier/_empty_,_-private,_notemplate_ === RUN TestParseAttrModifier/p,,-t === RUN TestParseAttrModifier/unknown --- PASS: TestParseAttrModifier (0.06s) --- PASS: TestParseAttrModifier/empty (0.00s) --- PASS: TestParseAttrModifier/+empty (0.00s) --- PASS: TestParseAttrModifier/-empty (0.00s) --- PASS: TestParseAttrModifier/noempty (0.00s) --- PASS: TestParseAttrModifier/e (0.00s) --- PASS: TestParseAttrModifier/encrypted (0.00s) --- PASS: TestParseAttrModifier/executable (0.00s) --- PASS: TestParseAttrModifier/x (0.00s) --- PASS: TestParseAttrModifier/b (0.00s) --- PASS: TestParseAttrModifier/-b (0.00s) --- PASS: TestParseAttrModifier/after (0.00s) --- PASS: TestParseAttrModifier/noafter (0.00s) --- PASS: TestParseAttrModifier/once (0.00s) --- PASS: TestParseAttrModifier/private (0.00s) --- PASS: TestParseAttrModifier/p (0.00s) --- PASS: TestParseAttrModifier/template (0.00s) --- PASS: TestParseAttrModifier/t (0.00s) --- PASS: TestParseAttrModifier/create (0.00s) --- PASS: TestParseAttrModifier/-create (0.00s) --- PASS: TestParseAttrModifier/modify (0.00s) --- PASS: TestParseAttrModifier/-script (0.00s) --- PASS: TestParseAttrModifier/+symlink (0.00s) --- PASS: TestParseAttrModifier/empty,+executable,noprivate,-t (0.00s) --- PASS: TestParseAttrModifier/_empty_,_-private,_notemplate_ (0.00s) --- PASS: TestParseAttrModifier/p,,-t (0.00s) --- PASS: TestParseAttrModifier/unknown (0.00s) === RUN TestMustGetLongHelpPanics --- PASS: TestMustGetLongHelpPanics (0.00s) === RUN TestAddTemplateFuncPanic --- PASS: TestAddTemplateFuncPanic (0.00s) === RUN TestParseCommand === RUN TestParseCommand/0 === RUN TestParseCommand/1 === RUN TestParseCommand/2 === RUN TestParseCommand/3 --- PASS: TestParseCommand (0.04s) --- PASS: TestParseCommand/0 (0.00s) --- PASS: TestParseCommand/1 (0.03s) --- PASS: TestParseCommand/2 (0.00s) --- PASS: TestParseCommand/3 (0.00s) === RUN TestParseConfig === RUN TestParseConfig/json_bool === RUN TestParseConfig/json_string === RUN TestParseConfig/toml_bool === RUN TestParseConfig/toml_string === RUN TestParseConfig/yaml_bool === RUN TestParseConfig/yaml_string --- PASS: TestParseConfig (0.53s) --- PASS: TestParseConfig/json_bool (0.21s) --- PASS: TestParseConfig/json_string (0.13s) --- PASS: TestParseConfig/toml_bool (0.04s) --- PASS: TestParseConfig/toml_string (0.03s) --- PASS: TestParseConfig/yaml_bool (0.07s) --- PASS: TestParseConfig/yaml_string (0.04s) === RUN TestUpperSnakeCaseToCamelCase --- PASS: TestUpperSnakeCaseToCamelCase (0.00s) === RUN TestDataCmd === RUN TestDataCmd/json === RUN TestDataCmd/yaml --- PASS: TestDataCmd (0.03s) --- PASS: TestDataCmd/json (0.01s) --- PASS: TestDataCmd/yaml (0.01s) === RUN TestDiffCmd === RUN TestDiffCmd/empty === RUN TestDiffCmd/file === RUN TestDiffCmd/simple_exclude_files === RUN TestDiffCmd/simple_exclude_files_with_config --- PASS: TestDiffCmd (0.08s) --- PASS: TestDiffCmd/empty (0.01s) --- PASS: TestDiffCmd/file (0.01s) --- PASS: TestDiffCmd/simple_exclude_files (0.04s) --- PASS: TestDiffCmd/simple_exclude_files_with_config (0.02s) === RUN TestImportCmd === RUN TestImportCmd/--strip-components=1 === RUN TestImportCmd/--strip-components=1/0 === RUN TestImportCmd/--strip-components=1/1 === RUN TestImportCmd/--strip-components=1/0#01 === RUN TestImportCmd/--strip-components=1/1#01 === RUN TestImportCmd/--strip-components=1/2 === RUN TestImportCmd/--strip-components=1/0#02 === RUN TestImportCmd/--strip-components=1/1#02 === RUN TestImportCmd/--strip-components=1/2#01 === RUN TestImportCmd/--destination=~/dir_--strip-components=1 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/0 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/1 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/0#01 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/1#01 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/2 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/0#02 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/1#02 === RUN TestImportCmd/--destination=~/dir_--strip-components=1/2#01 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/1 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0#01 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0#02 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/1#01 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/2 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0#03 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/1#02 === RUN TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/2#01 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/0 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/1 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/0#01 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/1#01 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/2 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/0#02 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/1#02 === RUN TestImportCmd/--destination=~/dir_--exact_--strip-components=1/2#01 --- PASS: TestImportCmd (0.09s) --- PASS: TestImportCmd/--strip-components=1 (0.02s) --- PASS: TestImportCmd/--strip-components=1/0 (0.00s) --- PASS: TestImportCmd/--strip-components=1/1 (0.00s) --- PASS: TestImportCmd/--strip-components=1/0#01 (0.00s) --- PASS: TestImportCmd/--strip-components=1/1#01 (0.00s) --- PASS: TestImportCmd/--strip-components=1/2 (0.00s) --- PASS: TestImportCmd/--strip-components=1/0#02 (0.00s) --- PASS: TestImportCmd/--strip-components=1/1#02 (0.00s) --- PASS: TestImportCmd/--strip-components=1/2#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1 (0.03s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/0 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/1 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/0#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/1#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/2 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/0#02 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/1#02 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--strip-components=1/2#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1 (0.02s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/1 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0#02 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/1#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/2 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/0#03 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/1#02 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--remove-destination_--strip-components=1/2#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1 (0.01s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/0 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/1 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/0#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/1#01 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/2 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/0#02 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/1#02 (0.00s) --- PASS: TestImportCmd/--destination=~/dir_--exact_--strip-components=1/2#01 (0.00s) === RUN TestGuessDotfilesRepoURL === RUN TestGuessDotfilesRepoURL/git@github.com:user/dotfiles.git === RUN TestGuessDotfilesRepoURL/codeberg.org/user === RUN TestGuessDotfilesRepoURL/codeberg.org/user/dots === RUN TestGuessDotfilesRepoURL/gitlab.com/user === RUN TestGuessDotfilesRepoURL/gitlab.com/user/dots === RUN TestGuessDotfilesRepoURL/gitlab.com/user/dots.git === RUN TestGuessDotfilesRepoURL/http://gitlab.com/user/dots.git === RUN TestGuessDotfilesRepoURL/https://gitlab.com/user/dots.git === RUN TestGuessDotfilesRepoURL/sr.ht/~user === RUN TestGuessDotfilesRepoURL/sr.ht/~user/dots === RUN TestGuessDotfilesRepoURL/user === RUN TestGuessDotfilesRepoURL/user/dots === RUN TestGuessDotfilesRepoURL/user/dots.git --- PASS: TestGuessDotfilesRepoURL (0.01s) --- PASS: TestGuessDotfilesRepoURL/git@github.com:user/dotfiles.git (0.00s) --- PASS: TestGuessDotfilesRepoURL/codeberg.org/user (0.00s) --- PASS: TestGuessDotfilesRepoURL/codeberg.org/user/dots (0.00s) --- PASS: TestGuessDotfilesRepoURL/gitlab.com/user (0.00s) --- PASS: TestGuessDotfilesRepoURL/gitlab.com/user/dots (0.00s) --- PASS: TestGuessDotfilesRepoURL/gitlab.com/user/dots.git (0.00s) --- PASS: TestGuessDotfilesRepoURL/http://gitlab.com/user/dots.git (0.00s) --- PASS: TestGuessDotfilesRepoURL/https://gitlab.com/user/dots.git (0.00s) --- PASS: TestGuessDotfilesRepoURL/sr.ht/~user (0.00s) --- PASS: TestGuessDotfilesRepoURL/sr.ht/~user/dots (0.00s) --- PASS: TestGuessDotfilesRepoURL/user (0.00s) --- PASS: TestGuessDotfilesRepoURL/user/dots (0.00s) --- PASS: TestGuessDotfilesRepoURL/user/dots.git (0.00s) === RUN TestIssue2137 --- PASS: TestIssue2137 (0.01s) === RUN TestPromptBoolInitTemplateFunc === RUN TestPromptBoolInitTemplateFunc/response_without_default === RUN TestPromptBoolInitTemplateFunc/response_with_default === RUN TestPromptBoolInitTemplateFunc/no_response_with_default === RUN TestPromptBoolInitTemplateFunc/invalid_response === RUN TestPromptBoolInitTemplateFunc/invalid_response_with_default === RUN TestPromptBoolInitTemplateFunc/too_many_args --- PASS: TestPromptBoolInitTemplateFunc (0.02s) --- PASS: TestPromptBoolInitTemplateFunc/response_without_default (0.00s) --- PASS: TestPromptBoolInitTemplateFunc/response_with_default (0.00s) --- PASS: TestPromptBoolInitTemplateFunc/no_response_with_default (0.00s) --- PASS: TestPromptBoolInitTemplateFunc/invalid_response (0.00s) --- PASS: TestPromptBoolInitTemplateFunc/invalid_response_with_default (0.00s) --- PASS: TestPromptBoolInitTemplateFunc/too_many_args (0.01s) === RUN TestPromptIntInitTemplateFunc === RUN TestPromptIntInitTemplateFunc/response_without_default === RUN TestPromptIntInitTemplateFunc/response_with_default === RUN TestPromptIntInitTemplateFunc/no_response_with_default === RUN TestPromptIntInitTemplateFunc/invalid_response === RUN TestPromptIntInitTemplateFunc/invalid_response_with_default === RUN TestPromptIntInitTemplateFunc/too_many_args --- PASS: TestPromptIntInitTemplateFunc (0.01s) --- PASS: TestPromptIntInitTemplateFunc/response_without_default (0.00s) --- PASS: TestPromptIntInitTemplateFunc/response_with_default (0.00s) --- PASS: TestPromptIntInitTemplateFunc/no_response_with_default (0.00s) --- PASS: TestPromptIntInitTemplateFunc/invalid_response (0.00s) --- PASS: TestPromptIntInitTemplateFunc/invalid_response_with_default (0.00s) --- PASS: TestPromptIntInitTemplateFunc/too_many_args (0.00s) === RUN TestPromptStringInitTemplateFunc === RUN TestPromptStringInitTemplateFunc/response_without_default === RUN TestPromptStringInitTemplateFunc/response_with_default === RUN TestPromptStringInitTemplateFunc/response_with_space_with_default === RUN TestPromptStringInitTemplateFunc/no_response_with_default_with_space === RUN TestPromptStringInitTemplateFunc/no_response_with_default === RUN TestPromptStringInitTemplateFunc/whitespace_response_with_default === RUN TestPromptStringInitTemplateFunc/too_many_args --- PASS: TestPromptStringInitTemplateFunc (0.01s) --- PASS: TestPromptStringInitTemplateFunc/response_without_default (0.00s) --- PASS: TestPromptStringInitTemplateFunc/response_with_default (0.00s) --- PASS: TestPromptStringInitTemplateFunc/response_with_space_with_default (0.00s) --- PASS: TestPromptStringInitTemplateFunc/no_response_with_default_with_space (0.00s) --- PASS: TestPromptStringInitTemplateFunc/no_response_with_default (0.00s) --- PASS: TestPromptStringInitTemplateFunc/whitespace_response_with_default (0.00s) --- PASS: TestPromptStringInitTemplateFunc/too_many_args (0.00s) === RUN TestKeepassxcParseOutput === RUN TestKeepassxcParseOutput/0 === RUN TestKeepassxcParseOutput/1 --- PASS: TestKeepassxcParseOutput (0.00s) --- PASS: TestKeepassxcParseOutput/0 (0.00s) --- PASS: TestKeepassxcParseOutput/1 (0.00s) === RUN TestLastpassParseNote === RUN TestLastpassParseNote/0 === RUN TestLastpassParseNote/1 === RUN TestLastpassParseNote/2 --- PASS: TestLastpassParseNote (0.00s) --- PASS: TestLastpassParseNote/0 (0.00s) --- PASS: TestLastpassParseNote/1 (0.00s) --- PASS: TestLastpassParseNote/2 (0.00s) === RUN TestManagedCmd === RUN TestManagedCmd/simple === RUN TestManagedCmd/template === RUN TestManagedCmd/create_template === RUN TestManagedCmd/modify_template === RUN TestManagedCmd/script_template === RUN TestManagedCmd/symlink_template --- PASS: TestManagedCmd (0.10s) --- PASS: TestManagedCmd/simple (0.01s) --- PASS: TestManagedCmd/template (0.01s) --- PASS: TestManagedCmd/create_template (0.01s) --- PASS: TestManagedCmd/modify_template (0.01s) --- PASS: TestManagedCmd/script_template (0.02s) --- PASS: TestManagedCmd/symlink_template (0.03s) === RUN TestShellQuote --- PASS: TestShellQuote (0.00s) === RUN TestShellQuoteCommand --- PASS: TestShellQuoteCommand (0.00s) === RUN TestStatusCmd === RUN TestStatusCmd/add_file === RUN TestStatusCmd/add_file/0 === RUN TestStatusCmd/add_file/1 === RUN TestStatusCmd/add_file/2 === RUN TestStatusCmd/update_symlink === RUN TestStatusCmd/update_symlink/0 --- PASS: TestStatusCmd (0.06s) --- PASS: TestStatusCmd/add_file (0.03s) --- PASS: TestStatusCmd/add_file/0 (0.00s) --- PASS: TestStatusCmd/add_file/1 (0.00s) --- PASS: TestStatusCmd/add_file/2 (0.00s) --- PASS: TestStatusCmd/update_symlink (0.03s) --- PASS: TestStatusCmd/update_symlink/0 (0.00s) === RUN TestSymlinks === RUN TestSymlinks/symlink_forward_slash_unix === RUN TestSymlinks/symlink_forward_slash_unix/0 === RUN TestSymlinks/symlink_forward_slash_unix/1 === RUN TestSymlinks/symlink_forward_slash_windows symlinks_test.go:75: skipping Windows test on UNIX === RUN TestSymlinks/symlink_backward_slash_windows symlinks_test.go:75: skipping Windows test on UNIX === RUN TestSymlinks/symlink_mixed_slash_windows symlinks_test.go:75: skipping Windows test on UNIX --- PASS: TestSymlinks (0.02s) --- PASS: TestSymlinks/symlink_forward_slash_unix (0.02s) --- PASS: TestSymlinks/symlink_forward_slash_unix/0 (0.00s) --- PASS: TestSymlinks/symlink_forward_slash_unix/1 (0.00s) --- SKIP: TestSymlinks/symlink_forward_slash_windows (0.00s) --- SKIP: TestSymlinks/symlink_backward_slash_windows (0.00s) --- SKIP: TestSymlinks/symlink_mixed_slash_windows (0.00s) === RUN TestQuoteListTemplateFunc --- PASS: TestQuoteListTemplateFunc (0.00s) === RUN TestConfigGetPackageFilename === RUN TestConfigGetPackageFilename/chezmoi_2.0.0_linux_amd64.apk === RUN TestConfigGetPackageFilename/chezmoi_2.0.0_linux_i386.deb === RUN TestConfigGetPackageFilename/chezmoi_2.0.0_linux_amd64.deb === RUN TestConfigGetPackageFilename/chezmoi_2.0.0_linux_armel.deb === RUN TestConfigGetPackageFilename/chezmoi_2.0.0_linux_arm64.deb === RUN TestConfigGetPackageFilename/chezmoi-2.0.0-i686.rpm === RUN TestConfigGetPackageFilename/chezmoi-2.0.0-x86_64.rpm === RUN TestConfigGetPackageFilename/chezmoi-2.0.0-armhfp.rpm === RUN TestConfigGetPackageFilename/chezmoi-2.0.0-aarch64.rpm === RUN TestConfigGetPackageFilename/chezmoi-2.0.0-ppc64.rpm === RUN TestConfigGetPackageFilename/chezmoi-2.0.0-ppc64le.rpm --- PASS: TestConfigGetPackageFilename (0.02s) --- PASS: TestConfigGetPackageFilename/chezmoi_2.0.0_linux_amd64.apk (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi_2.0.0_linux_i386.deb (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi_2.0.0_linux_amd64.deb (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi_2.0.0_linux_armel.deb (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi_2.0.0_linux_arm64.deb (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi-2.0.0-i686.rpm (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi-2.0.0-x86_64.rpm (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi-2.0.0-armhfp.rpm (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi-2.0.0-aarch64.rpm (0.01s) --- PASS: TestConfigGetPackageFilename/chezmoi-2.0.0-ppc64.rpm (0.00s) --- PASS: TestConfigGetPackageFilename/chezmoi-2.0.0-ppc64le.rpm (0.00s) === RUN TestEnglishList --- PASS: TestEnglishList (0.00s) === RUN TestEnglishListWithNoun --- PASS: TestEnglishListWithNoun (0.00s) === RUN TestUniqueAbbreviations === RUN TestUniqueAbbreviations/#00 === RUN TestUniqueAbbreviations/yes_no_all_quit === RUN TestUniqueAbbreviations/ale_all_abort === RUN TestUniqueAbbreviations/no_now_nope --- PASS: TestUniqueAbbreviations (0.00s) --- PASS: TestUniqueAbbreviations/#00 (0.00s) --- PASS: TestUniqueAbbreviations/yes_no_all_quit (0.00s) --- PASS: TestUniqueAbbreviations/ale_all_abort (0.00s) --- PASS: TestUniqueAbbreviations/no_now_nope (0.00s) === RUN TestUpperSnakeCaseToCamelCaseMap --- PASS: TestUpperSnakeCaseToCamelCaseMap (0.00s) === RUN TestVerifyCmd === RUN TestVerifyCmd/empty === RUN TestVerifyCmd/file --- PASS: TestVerifyCmd (0.03s) --- PASS: TestVerifyCmd/empty (0.01s) --- PASS: TestVerifyCmd/file (0.02s) === RUN TestScript === RUN TestScript/add === PAUSE TestScript/add === RUN TestScript/addattributes === PAUSE TestScript/addattributes === RUN TestScript/addautotemplate === PAUSE TestScript/addautotemplate === RUN TestScript/addencrypted === PAUSE TestScript/addencrypted === RUN TestScript/ageencryption === PAUSE TestScript/ageencryption === RUN TestScript/ageencryptionsymmetric === PAUSE TestScript/ageencryptionsymmetric === RUN TestScript/apply === PAUSE TestScript/apply === RUN TestScript/applychmod_unix === PAUSE TestScript/applychmod_unix === RUN TestScript/applyexact === PAUSE TestScript/applyexact === RUN TestScript/applyremove === PAUSE TestScript/applyremove === RUN TestScript/applyskipencrypted === PAUSE TestScript/applyskipencrypted === RUN TestScript/applysourcepath === PAUSE TestScript/applysourcepath === RUN TestScript/applystate === PAUSE TestScript/applystate === RUN TestScript/applytype === PAUSE TestScript/applytype === RUN TestScript/applyverbose === PAUSE TestScript/applyverbose === RUN TestScript/archivetar === PAUSE TestScript/archivetar === RUN TestScript/archivezip === PAUSE TestScript/archivezip === RUN TestScript/autocommit === PAUSE TestScript/autocommit === RUN TestScript/autopush === PAUSE TestScript/autopush === RUN TestScript/bitwarden === PAUSE TestScript/bitwarden === RUN TestScript/builtinage === PAUSE TestScript/builtinage === RUN TestScript/builtingit === PAUSE TestScript/builtingit === RUN TestScript/cat === PAUSE TestScript/cat === RUN TestScript/cd_unix === PAUSE TestScript/cd_unix === RUN TestScript/cd_windows === PAUSE TestScript/cd_windows === RUN TestScript/chattr === PAUSE TestScript/chattr === RUN TestScript/completion === PAUSE TestScript/completion === RUN TestScript/completion_unix === PAUSE TestScript/completion_unix === RUN TestScript/config === PAUSE TestScript/config === RUN TestScript/configstate === PAUSE TestScript/configstate === RUN TestScript/create === PAUSE TestScript/create === RUN TestScript/data === PAUSE TestScript/data === RUN TestScript/debug === PAUSE TestScript/debug === RUN TestScript/diff === PAUSE TestScript/diff === RUN TestScript/diffcommand_unix === PAUSE TestScript/diffcommand_unix === RUN TestScript/diffcommand_windows === PAUSE TestScript/diffcommand_windows === RUN TestScript/doctor_unix === PAUSE TestScript/doctor_unix === RUN TestScript/doctor_windows === PAUSE TestScript/doctor_windows === RUN TestScript/dumpjson === PAUSE TestScript/dumpjson === RUN TestScript/dumpyaml === PAUSE TestScript/dumpyaml === RUN TestScript/edgecases === PAUSE TestScript/edgecases === RUN TestScript/edit === PAUSE TestScript/edit === RUN TestScript/editconfig === PAUSE TestScript/editconfig === RUN TestScript/edithardlink === PAUSE TestScript/edithardlink === RUN TestScript/encryptiontemplatefuncs === PAUSE TestScript/encryptiontemplatefuncs === RUN TestScript/errors === PAUSE TestScript/errors === RUN TestScript/exclude === PAUSE TestScript/exclude === RUN TestScript/executetemplate === PAUSE TestScript/executetemplate === RUN TestScript/external === PAUSE TestScript/external === RUN TestScript/externalarchiveinclude === PAUSE TestScript/externalarchiveinclude === RUN TestScript/externalencrypted === PAUSE TestScript/externalencrypted === RUN TestScript/externalfilter === PAUSE TestScript/externalfilter === RUN TestScript/externalgitrepo === PAUSE TestScript/externalgitrepo === RUN TestScript/externalguess === PAUSE TestScript/externalguess === RUN TestScript/externalzip === PAUSE TestScript/externalzip === RUN TestScript/forget === PAUSE TestScript/forget === RUN TestScript/generate === PAUSE TestScript/generate === RUN TestScript/git === PAUSE TestScript/git === RUN TestScript/gopass === PAUSE TestScript/gopass === RUN TestScript/gpg === PAUSE TestScript/gpg === RUN TestScript/gpgencryption === PAUSE TestScript/gpgencryption === RUN TestScript/gpgencryptionsymmetric === PAUSE TestScript/gpgencryptionsymmetric === RUN TestScript/help === PAUSE TestScript/help === RUN TestScript/ignore === PAUSE TestScript/ignore === RUN TestScript/ignored === PAUSE TestScript/ignored === RUN TestScript/import === PAUSE TestScript/import === RUN TestScript/importxz === PAUSE TestScript/importxz === RUN TestScript/importzip === PAUSE TestScript/importzip === RUN TestScript/init === PAUSE TestScript/init === RUN TestScript/inittemplatefuncs === PAUSE TestScript/inittemplatefuncs === RUN TestScript/issue1161 === PAUSE TestScript/issue1161 === RUN TestScript/issue1213 === PAUSE TestScript/issue1213 === RUN TestScript/issue1237 === PAUSE TestScript/issue1237 === RUN TestScript/issue1365 === PAUSE TestScript/issue1365 === RUN TestScript/issue1794 === PAUSE TestScript/issue1794 === RUN TestScript/issue1832 === PAUSE TestScript/issue1832 === RUN TestScript/issue1866 === PAUSE TestScript/issue1866 === RUN TestScript/issue1869 === PAUSE TestScript/issue1869 === RUN TestScript/issue2092 === PAUSE TestScript/issue2092 === RUN TestScript/issue2137 === PAUSE TestScript/issue2137 === RUN TestScript/issue2177 === PAUSE TestScript/issue2177 === RUN TestScript/issue796 === PAUSE TestScript/issue796 === RUN TestScript/keepassxc === PAUSE TestScript/keepassxc === RUN TestScript/keeper === PAUSE TestScript/keeper === RUN TestScript/keepgoing === PAUSE TestScript/keepgoing === RUN TestScript/lastpass === PAUSE TestScript/lastpass === RUN TestScript/license === PAUSE TestScript/license === RUN TestScript/literal === PAUSE TestScript/literal === RUN TestScript/managed === PAUSE TestScript/managed === RUN TestScript/merge_unix === PAUSE TestScript/merge_unix === RUN TestScript/mergeall_unix === PAUSE TestScript/mergeall_unix === RUN TestScript/mergeencryptedage_unix === PAUSE TestScript/mergeencryptedage_unix === RUN TestScript/mergeencryptedgpg_unix === PAUSE TestScript/mergeencryptedgpg_unix === RUN TestScript/modesymlink === PAUSE TestScript/modesymlink === RUN TestScript/modify_unix === PAUSE TestScript/modify_unix === RUN TestScript/modify_windows === PAUSE TestScript/modify_windows === RUN TestScript/modifyencrypted === PAUSE TestScript/modifyencrypted === RUN TestScript/modifypython_windows === PAUSE TestScript/modifypython_windows === RUN TestScript/noencryption === PAUSE TestScript/noencryption === RUN TestScript/nosourcedir === PAUSE TestScript/nosourcedir === RUN TestScript/onepassword === PAUSE TestScript/onepassword === RUN TestScript/onepassword2 === PAUSE TestScript/onepassword2 === RUN TestScript/options === PAUSE TestScript/options === RUN TestScript/pass === PAUSE TestScript/pass === RUN TestScript/purge === PAUSE TestScript/purge === RUN TestScript/re-add === PAUSE TestScript/re-add === RUN TestScript/remove === PAUSE TestScript/remove === RUN TestScript/removedir === PAUSE TestScript/removedir === RUN TestScript/root === PAUSE TestScript/root === RUN TestScript/runscriptdir_unix === PAUSE TestScript/runscriptdir_unix === RUN TestScript/script === PAUSE TestScript/script === RUN TestScript/script_unix === PAUSE TestScript/script_unix === RUN TestScript/script_windows === PAUSE TestScript/script_windows === RUN TestScript/scriptinterpreters_windows === PAUSE TestScript/scriptinterpreters_windows === RUN TestScript/scriptinterpreterstemplate === PAUSE TestScript/scriptinterpreterstemplate === RUN TestScript/scriptonce_unix === PAUSE TestScript/scriptonce_unix === RUN TestScript/scriptonce_windows === PAUSE TestScript/scriptonce_windows === RUN TestScript/scriptonchange_unix === PAUSE TestScript/scriptonchange_unix === RUN TestScript/scriptorder_unix === PAUSE TestScript/scriptorder_unix === RUN TestScript/scriptorder_windows === PAUSE TestScript/scriptorder_windows === RUN TestScript/scriptperl === PAUSE TestScript/scriptperl === RUN TestScript/scriptpython === PAUSE TestScript/scriptpython === RUN TestScript/scriptruby === PAUSE TestScript/scriptruby === RUN TestScript/scriptsdir_unix === PAUSE TestScript/scriptsdir_unix === RUN TestScript/scriptsubdir_unix === PAUSE TestScript/scriptsubdir_unix === RUN TestScript/scriptsubdir_windows === PAUSE TestScript/scriptsubdir_windows === RUN TestScript/scripttempdir === PAUSE TestScript/scripttempdir === RUN TestScript/secret === PAUSE TestScript/secret === RUN TestScript/sourcedir === PAUSE TestScript/sourcedir === RUN TestScript/sourcepath === PAUSE TestScript/sourcepath === RUN TestScript/state === PAUSE TestScript/state === RUN TestScript/state_unix === PAUSE TestScript/state_unix === RUN TestScript/state_windows === PAUSE TestScript/state_windows === RUN TestScript/status === PAUSE TestScript/status === RUN TestScript/symlinks === PAUSE TestScript/symlinks === RUN TestScript/symlinks_windows === PAUSE TestScript/symlinks_windows === RUN TestScript/targetpath === PAUSE TestScript/targetpath === RUN TestScript/templatedata === PAUSE TestScript/templatedata === RUN TestScript/templatefuncs === PAUSE TestScript/templatefuncs === RUN TestScript/templatevars === PAUSE TestScript/templatevars === RUN TestScript/textconv === PAUSE TestScript/textconv === RUN TestScript/tilde === PAUSE TestScript/tilde === RUN TestScript/umask_unix === PAUSE TestScript/umask_unix === RUN TestScript/unmanaged === PAUSE TestScript/unmanaged === RUN TestScript/update === PAUSE TestScript/update === RUN TestScript/upgrade === PAUSE TestScript/upgrade === RUN TestScript/vault === PAUSE TestScript/vault === RUN TestScript/verify === PAUSE TestScript/verify === RUN TestScript/version === PAUSE TestScript/version === RUN TestScript/workingtree === PAUSE TestScript/workingtree === CONT TestScript/secret === CONT TestScript/add === CONT TestScript/secret testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/secret > [windows] unix2dos bin/secret.cmd # test secret template function (2.381s) > chezmoi execute-template '{{ secret "password" }}' [stdout] password> stdout ^password$ # test secretJSON template function (2.504s) > chezmoi execute-template '{{ (secretJSON "{\"password\":\"secret\"}").password }}' [stdout] secret> stdout ^secret$ PASS === CONT TestScript/scripttempdir testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi apply with a scriptTempDir set creates a temporary directory (1.585s) > expandenv $CHEZMOICONFIGDIR/chezmoi.toml > chezmoi apply [stdout] ok > stdout ok > exists $WORK/script-tmp PASS === CONT TestScript/scriptsubdir_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/scriptsubdir_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!umask:022] skip # test that scripts in subdirectories are run in the subdirectory (7.090s) > chezmoi apply --force [stdout] $WORK/home/user $WORK/home/user/dir $WORK/home/user/anotherdir > cmpenv stdout golden/apply > chezmoi dump [stdout] { "anotherdir": { "type": "dir", "name": "anotherdir", "perm": 493 }, "anotherdir/script.sh": { "type": "script", "name": "anotherdir/script.sh", "contents": "#!/bin/sh\n\npwd\n" }, "dir": { "type": "dir", "name": "dir", "perm": 493 }, "dir/script.sh": { "type": "script", "name": "dir/script.sh", "contents": "#!/bin/sh\n\npwd\n" }, "otherdir": { "type": "dir", "name": "otherdir", "perm": 493 }, "otherdir/script.sh": { "type": "script", "name": "otherdir/script.sh", "contents": "#!/bin/sh\n\npwd\n" } } > cmp stdout golden/dump.json > chezmoi archive --gzip --output=archive.tar.gz > exec tar -tzf archive.tar.gz [stdout] otherdir/script.sh anotherdir/ dir/ dir/script.sh otherdir/ anotherdir/script.sh > [!openbsd] cmp stdout golden/archive > [openbsd] cmp stdout golden/archive-openbsd PASS === CONT TestScript/scriptsdir_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi apply runs scripts in .chezmoiscripts (1.833s) > chezmoi apply [stdout] script script in subdir > cmp stdout golden/apply > chhome home2/user # test that chezmoi apply fails if .chezmoiscripts contains a non-script (1.790s) > ! chezmoi apply [stderr] chezmoi: $WORK/home2/user/.local/share/chezmoi/.chezmoiscripts/dot_file: not a script [exit status 1] > stderr 'not a script' > chhome home3/user # test that chezmoi apply fails if .chezmoiscripts contains duplicate targets (2.097s) > ! chezmoi apply [stderr] chezmoi: .chezmoiscripts/script.sh: inconsistent state ($WORK/home3/user/.local/share/chezmoi/.chezmoiscripts/run_once_script.sh, $WORK/home3/user/.local/share/chezmoi/.chezmoiscripts/run_script.sh) [exit status 1] > stderr 'inconsistent state' > chhome home4/user # test that chezmoi apply fails if .chezmoiscripts contains any .chezmoi* files (1.615s) > ! chezmoi apply [stderr] chezmoi: $WORK/home4/user/.local/share/chezmoi/.chezmoiscripts/.chezmoiignore: not allowed in .chezmoiscripts directory [exit status 1] > stderr 'not allowed in \.chezmoiscripts directory' PASS === CONT TestScript/scriptruby cmd.go:370: ruby not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:ruby] skip 'ruby not found in $PATH' === CONT TestScript/scriptpython cmd.go:370: python3 not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:python3] skip 'python3 not found in $PATH' === CONT TestScript/scriptperl testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:perl] skip 'perl not found in $PATH' > chezmoi apply [stdout] Hello from Perl > stdout 'Hello from Perl' PASS === CONT TestScript/scriptorder_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/scriptorder_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi apply runs scripts in the correct order (2.737s) > symlink home/user/.local/share/chezmoi/.chezmoiscripts/run_before_00-chezmoiscripts-before -> ../.script.sh > symlink home/user/.local/share/chezmoi/.chezmoiscripts/run_before_99-chezmoiscripts-before -> ../.script.sh > symlink home/user/.local/share/chezmoi/.chezmoiscripts/run_00-chezmoiscripts -> ../.script.sh > symlink home/user/.local/share/chezmoi/.chezmoiscripts/run_99-chezmoiscripts -> ../.script.sh > symlink home/user/.local/share/chezmoi/.chezmoiscripts/run_after_00-chezmoiscripts-after -> ../.script.sh > symlink home/user/.local/share/chezmoi/.chezmoiscripts/run_after_99-chezmoiscripts-after -> ../.script.sh > symlink home/user/.local/share/chezmoi/run_before_00-before -> .script.sh > symlink home/user/.local/share/chezmoi/run_before_99-before -> .script.sh > symlink home/user/.local/share/chezmoi/run_00 -> .script.sh > symlink home/user/.local/share/chezmoi/run_99 -> .script.sh > symlink home/user/.local/share/chezmoi/run_after_00-after -> .script.sh > symlink home/user/.local/share/chezmoi/run_after_99-after -> .script.sh > chezmoi apply --force [stdout] 00-chezmoiscripts-before 99-chezmoiscripts-before 00-before 99-before 00-chezmoiscripts 99-chezmoiscripts 00 99 00-chezmoiscripts-after 99-chezmoiscripts-after 00-after 99-after > cmp stdout golden/apply PASS === CONT TestScript/scriptonchange_unix === CONT TestScript/add testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir > mksourcedir golden # test chezmoi add --create (0.821s) > chezmoi add --create $HOME${/}.create > cmp $CHEZMOISOURCEDIR/create_dot_create golden/create_dot_create # test that adding a directory creates a .keep file (1.999s) > chezmoi add --recursive=false $HOME${/}.dir > exists $CHEZMOISOURCEDIR/dot_dir/.keep # test adding a file in a directory (1.505s) > chezmoi add $HOME${/}.dir/file > cmp $CHEZMOISOURCEDIR/dot_dir/file golden/dot_dir/file # test adding a subdirectory (1.716s) > chezmoi add --exact $HOME${/}.dir/subdir > cmp $CHEZMOISOURCEDIR/dot_dir/exact_subdir/file golden/dot_dir/exact_subdir/file # test adding an empty file (1.632s) > chezmoi add $HOME${/}.empty > exists $CHEZMOISOURCEDIR/empty_dot_empty # test adding an executable file (2.281s) > chezmoi add $HOME${/}.executable > [!windows] cmp $CHEZMOISOURCEDIR/executable_dot_executable golden/executable_dot_executable > [windows] cmp $CHEZMOISOURCEDIR/dot_executable golden/executable_dot_executable # test adding a private file (3.057s) > chezmoi add $HOME${/}.private > [!windows] cmp $CHEZMOISOURCEDIR/private_dot_private $HOME/.private > [windows] cmp $CHEZMOISOURCEDIR/dot_private $HOME/.private # test adding a symlink (1.793s) > chezmoi add $HOME${/}.symlink > cmp $CHEZMOISOURCEDIR/symlink_dot_symlink golden/symlink_dot_symlink # test adding a symlink with a separator (1.087s) > symlink $HOME/.symlink2 -> .dir/subdir/file > chezmoi add $HOME${/}.symlink2 > cmp $CHEZMOISOURCEDIR/symlink_dot_symlink2 golden/symlink_dot_symlink # test adding a symlink with --follow (1.657s) > symlink $HOME${/}.symlink3 -> .file > chezmoi add --follow $HOME${/}.symlink3 > cmp $CHEZMOISOURCEDIR/dot_symlink3 golden/dot_file > chhome home2/user # test that chezmoi add only creates .keep files in empty directories (2.252s) > mkdir $HOME/.dir/empty_subdir > chezmoi add $HOME${/}.dir > ! exists $CHEZMOISOURCEDIR/dot_dir/.keep > exists $CHEZMOISOURCEDIR/dot_dir/empty_subdir/.keep > ! exists $CHEZMOISOURCEDIR/dot_dir/non_empty_subdir/.keep > chhome home3/user # test that chezmoi add respects .chezmoiignore (1.785s) > chezmoi add $HOME${/}.dir > exists $CHEZMOISOURCEDIR/dot_dir/file > ! exists $CHEZMOISOURCEDIR/dot_dir/ignore > chhome home4/user # test that chezmoi add does not overwrite an already-added file (1.729s) > chezmoi add $HOME/.file > cmp $CHEZMOISOURCEDIR/dot_file golden/dot_file > edit $HOME/.file > cmp $CHEZMOISOURCEDIR/dot_file golden/dot_file # test that chezmoi add --force does overwrite an already-added file (1.754s) > chezmoi add --force $HOME/.file > cmp $CHEZMOISOURCEDIR/dot_file golden/edited_dot_file PASS === CONT TestScript/scriptonce_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/scriptonce_unix === CONT TestScript/scriptonchange_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi apply runs onchange scripts the first time (3.017s) > mkdir $CHEZMOISOURCEDIR > cp golden/script-one.sh $CHEZMOISOURCEDIR/run_onchange_script.sh > chezmoi apply [stdout] one > stdout one > chezmoi state get --bucket=entryState --key=$HOME/script.sh [stdout] { "type": "script", "contentsSHA256": "a07f0271151ee0271ed379ebbddc5ef49d0f625417c8fe23254179e56f98d2df" } > cmp stdout golden/script-one-state.json # test that chezmoi apply does not run onchange scripts when their contents are not changed (1.274s) > chezmoi apply > ! stdout . # test that chezmoi status does not print that it will run onchange scripts when their contents are not changed (2.138s) > chezmoi status > ! stdout . # test that chezmoi status does print that it will run onchange scripts when their contents are changed (1.380s) > cp golden/script-two.sh $CHEZMOISOURCEDIR/run_onchange_script.sh > chezmoi status [stdout] R script.sh > cmp stdout golden/status # test that chezmoi apply runs onchange scripts when their contents are changed (3.202s) > chezmoi apply [stdout] two > stdout two > chezmoi state get --bucket=entryState --key=$HOME/script.sh [stdout] { "type": "script", "contentsSHA256": "7c8d714586cecf4f0ffb735ad10334df98428bc5282c0d0a6b78f5c074365159" } > cmp stdout golden/script-two-state.json # test that chezmoi apply runs onchange scripts when their contents are reverted to a previous state (4.644s) > cp golden/script-one.sh $CHEZMOISOURCEDIR/run_onchange_script.sh > chezmoi apply [stdout] one > stdout one > chezmoi state get --bucket=entryState --key=$HOME/script.sh [stdout] { "type": "script", "contentsSHA256": "a07f0271151ee0271ed379ebbddc5ef49d0f625417c8fe23254179e56f98d2df" } > cmp stdout golden/script-one-state.json PASS === CONT TestScript/scriptinterpreterstemplate cmd.go:370: python3 not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:python3] skip 'python3 not found in $PATH' === CONT TestScript/scriptinterpreters_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/script_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/script_unix === CONT TestScript/scriptonce_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi status prints that it will run the script (1.527s) > chezmoi status [stdout] R script.sh > cmp stdout golden/status # test that chezmoi diff includes the script (1.377s) > chezmoi diff [stdout] diff --git a/script.sh b/script.sh index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f9103e018df1bbc178e66b46d8f133f49c85225d 100755 --- a/script.sh +++ b/script.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +pwd > cmp stdout golden/diff.diff # test that chezmoi apply runs the script (1.599s) > chezmoi apply --force [stdout] $WORK/home/user > stdout ${HOME@R} # test that the script is recorded in the state (2.321s) > chezmoi state dump [stdout] { "configState": {}, "entryState": { "$WORK/home/user/script.sh": { "contentsSHA256": "bb29fcd5733098d4e391d85d487d84d1d64cf42eae34b53951ae470b98c9ca8d", "type": "script" } }, "scriptState": { "bb29fcd5733098d4e391d85d487d84d1d64cf42eae34b53951ae470b98c9ca8d": { "name": "script.sh", "runAt": "2022-07-29T21:26:08.320073279Z" } } } > stdout bb29fcd5733098d4e391d85d487d84d1d64cf42eae34b53951ae470b98c9ca8d # sha256sum of script contents # test that chezmoi diff no longer includes the script (1.285s) > chezmoi diff > ! stdout . # test that chezmoi status will not print that it will run the script (1.625s) > chezmoi status > ! stdout . # test that chezmoi apply does not run the script a second time and does not prompt (3.194s) > chezmoi apply > ! stdout ${HOME@R} # test that chezmoi apply after the script is modified runs the script a second time and does not prompt (1.785s) > edit $CHEZMOISOURCEDIR/run_once_script.sh > chezmoi apply [stdout] $WORK/home/user > stdout ${HOME@R} # test that resetting the state causes the next chezmoi apply to run the script (3.521s) > chezmoi state reset --force > chezmoi apply --force [stdout] $WORK/home/user > stdout ${HOME@R} PASS === CONT TestScript/script testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/perl > [!windows] chmod 755 bin/python3 > [!windows] chmod 755 bin/ruby > [windows] unix2dos golden/stdout # test that chezmoi apply uses python3 and ruby from $PATH instead of the system Python and Ruby (1.631s) > chezmoi apply [stdout] Hello from fake Perl Hello from fake Python Hello from fake Ruby > cmp stdout golden/stdout PASS === CONT TestScript/runscriptdir_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!umask:022] skip > chezmoi apply [stdout] $WORK/home/user/dir > cmpenv stdout golden/apply > env $=$ > chezmoi dump [stdout] { "dir": { "type": "dir", "name": "dir", "perm": 493 }, "dir/script.sh": { "type": "script", "name": "dir/script.sh", "contents": "#!/bin/sh\n\npwd\n" } } > cmp stdout golden/dump.json > chezmoi archive --output=archive.tar > exec tar -tf archive.tar [stdout] dir/ dir/script.sh > [openbsd] cmp stdout golden/archive-openbsd > [!openbsd] cmp stdout golden/archive PASS === CONT TestScript/root === CONT TestScript/script_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi status prints that it will run the script (1.159s) > chezmoi status [stdout] R script.sh > cmp stdout golden/status # test the chezmoi diff prints the script (1.641s) > chezmoi diff [stdout] diff --git a/script.sh b/script.sh index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f9103e018df1bbc178e66b46d8f133f49c85225d 100755 --- a/script.sh +++ b/script.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +pwd > cmp stdout golden/diff.diff # test that chezmoi apply runs the script (1.122s) > chezmoi apply --force [stdout] $WORK/home/user > stdout ${HOME@R} # test that chezmoi status prints that it will run the script again (1.701s) > chezmoi status [stdout] R script.sh > cmp stdout golden/status # test that chezmoi apply runs the script even if it has run before (2.052s) > chezmoi apply --force [stdout] $WORK/home/user > stdout ${HOME@R} # test that chezmoi dump includes the script (2.812s) > chezmoi dump [stdout] { "script.sh": { "type": "script", "name": "script.sh", "contents": "#!/bin/sh\n\npwd\n" } } > cmp stdout golden/dump.json # test that chezmoi managed includes the script (1.450s) > chezmoi managed --include=scripts [stdout] script.sh > cmpenv stdout golden/managed # test that chezmoi cat writes the contents of the script (1.470s) > chezmoi cat $HOME${/}script.sh [stdout] #!/bin/sh pwd > cmp stdout golden/script.sh # test that chezmoi archive includes the script in the archive (1.564s) > chezmoi archive --format=tar --gzip --output=archive.tar.gz > exec tar -tzf archive.tar.gz [stdout] script.sh > cmp stdout golden/archive PASS === CONT TestScript/removedir === CONT TestScript/root testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply uses .chezmoiroot (1.538s) > chezmoi apply > cmp $HOME/.file golden/.file # test that chezmoi add uses .chezmoiroot (1.419s) > symlink $HOME/.symlink -> .file > chezmoi add $HOME${/}.symlink > cmp $CHEZMOISOURCEDIR/home/symlink_dot_symlink golden/symlink_dot_symlink > [!exec:git] skip 'git not found in $PATH' > [windows] skip 'go-git does not support file:// URLs on windows' > chhome home2/user > mkgitconfig # create a git repo in home2/user/repo (0.201s) > exec git -C $HOME/repo init [stdout] Initialized empty Git repository in $WORK/home2/user/repo/.git/ > exec git -C $HOME/repo add . > exec git -C $HOME/repo commit -m 'Initial commit' [stdout] [master (root-commit) 42409e5] Initial commit 3 files changed, 2 insertions(+) create mode 100644 .chezmoiroot create mode 100644 home/.chezmoi.toml.tmpl create mode 100644 home/dot_file # test that chezmoi init uses .chezmoiroot (2.517s) > chezmoi init --apply file://$HOME/repo [stderr] Cloning into '$WORK/home2/user/.local/share/chezmoi'... > exists $CHEZMOICONFIGDIR/chezmoi.toml > cmp $HOME/.file golden/.file PASS === CONT TestScript/remove === CONT TestScript/removedir testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply removes empty directories, but not non-empty directories, or non-existent directories (1.437s) > mkdir $HOME/.empty_dir > chezmoi apply > exists $HOME/.dir > ! exists $HOME/.empty_dir > chhome home2/user # test that chezmoi apply will remove a directory even if it is actually a file (1.657s) > chezmoi apply > ! exists $HOME/.dir > chhome home3/user # test that chezmoi apply removes empty directories recursively (1.368s) > mkdir $HOME/.dir/subdir > chezmoi apply > ! exists $HOME/.dir PASS === CONT TestScript/re-add testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir > mksourcedir # test that chezmoi re-add adds all modified files (6.740s) > chezmoi apply --force > edit $HOME/.file > edit $HOME/.dir/file > edit $HOME/.dir/subdir/file > chezmoi re-add > grep '# edited' $CHEZMOISOURCEDIR/dot_file > grep '# edited' $CHEZMOISOURCEDIR/dot_dir/file > grep '# edited' $CHEZMOISOURCEDIR/dot_dir/exact_subdir/file > chezmoi diff > ! stdout . PASS === CONT TestScript/purge === CONT TestScript/remove testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir > mksourcedir # test that chezmoi remove file removes a file (5.237s) > chezmoi apply --force > exists $HOME/.file > chezmoi remove --force $HOME${/}.file > ! exists $HOME/.file > chezmoi state get --bucket=entryState --key=$WORK/home/user/.file > ! stdout . # test that chezmoi remove dir removes a directory (2.412s) > exists $HOME/.dir > chezmoi remove --force $HOME${/}.dir > ! exists $HOME/.dir # test that if any chezmoi remove stops on any error (1.678s) > exists $HOME/.executable > ! chezmoi remove --force $HOME${/}.newfile $HOME${/}.executable [stderr] chezmoi: $WORK/home/user/.newfile: not in source state [exit status 1] > stderr 'not in source state' > exists $HOME/.executable > chhome home2/user # test that chezmoi apply removes a file and a directory (1.415s) > exists $HOME/.file > exists $HOME/.dir > chezmoi apply > ! exists $HOME/.file > ! exists $HOME/.dir > chhome home3/user # test that chezmoi apply with .chezmoiremove with star works on destination dir with trailing slash (1.743s) > exists $HOME/.star-file > exists $HOME/.star-dir > chezmoi apply --destination=$HOME/ > ! exists $HOME/.star-file > ! exists $HOME/.star-dir PASS === CONT TestScript/pass === CONT TestScript/purge testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test that chezmoi purge purges the source dir (1.702s) > exists $CHEZMOISOURCEDIR > chezmoi purge --force > ! exists $CHEZMOISOURCEDIR > chhome home2/user # test that chezmoi purge purges the config dir (2.149s) > exists $CHEZMOICONFIGDIR > chezmoi purge --force > ! exists $CHEZMOICONFIGDIR # test that chezmoi purge purges the cache dir (1.721s) > mkdir $HOME/.cache/chezmoi > chezmoi purge --force > ! exists $HOME/.cache/chezmoi PASS === CONT TestScript/options === CONT TestScript/pass testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/pass > [windows] unix2dos bin/pass.cmd > [windows] unix2dos golden/pass-raw # test pass template function (2.025s) > chezmoi execute-template '{{ pass "misc/example.com" }}' [stdout] examplepassword> stdout ^examplepassword$ # test passFields template function (1.952s) > chezmoi execute-template '{{ (passFields "misc/example.com").login }}' [stdout] examplelogin> stdout ^examplelogin$ # test pass template function (1.709s) > chezmoi execute-template '{{ passRaw "misc/example.com" }}' [stdout] examplepassword login: examplelogin > cmp stdout golden/pass-raw PASS === CONT TestScript/onepassword2 === CONT TestScript/options testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that --source flag is respected (1.429s) > chezmoi apply --source=~/.dotfiles > cmp $HOME/.file golden/.file > chhome home2/user # test that --destination flag is respected (1.458s) > mkdir tmp > chezmoi apply --destination=$WORK/tmp > cmp tmp/.file golden/.file > chhome home3/user # test that --config flag is respected (2.551s) > chezmoi apply --config=$HOME/.chezmoi.toml > cmp $HOME/tmp/.file golden/.file PASS === CONT TestScript/onepassword === CONT TestScript/onepassword2 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/op > [windows] unix2dos bin/op.cmd # test onepassword template function (1.726s) > chezmoi execute-template '{{ (onepassword "ExampleLogin").id }}' [stdout] wxcplh5udshnonkzg2n4qx262y> stdout '^wxcplh5udshnonkzg2n4qx262y$' # test onepassword template function with vault and account (2.248s) > chezmoi execute-template '{{ (onepassword "ExampleLogin" "vault" "account").id }}' [stdout] wxcplh5udshnonkzg2n4qx262y> stdout '^wxcplh5udshnonkzg2n4qx262y$' # test onepassword template function with empty vault (2.434s) > chezmoi execute-template '{{ (onepassword "ExampleLogin" "" "account").id }}' [stdout] wxcplh5udshnonkzg2n4qx262y> stdout '^wxcplh5udshnonkzg2n4qx262y$' # test onepasswordDetailsFields template function (2.806s) > chezmoi execute-template '{{ (onepasswordDetailsFields "ExampleLogin").password.value }}' [stdout] L8rm1JXJIE1b8YUDWq7h> stdout '^L8rm1JXJIE1b8YUDWq7h$' # test onepasswordItemFields template function (2.512s) > chezmoi execute-template '{{ (onepasswordItemFields "ExampleLogin").exampleLabel.value }}' [stdout] exampleValue> stdout exampleValue PASS === CONT TestScript/nosourcedir testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply returns an error if the source directory does not exist (1.347s) > ! chezmoi apply [stderr] chezmoi: stat $WORK/home/user/.local/share/chezmoi: no such file or directory [exit status 1] > [!windows] stderr 'no such file or directory' > [windows] stderr 'The system cannot find the path specified' PASS === CONT TestScript/noencryption testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir # test that chezmoi add --encrypt without encryption fails (1.822s) > ! chezmoi add --encrypt $HOME${/}.encrypted [stderr] chezmoi: no encryption [exit status 1] > stderr 'no encryption' # test that chezmoi apply without encryption fails (2.356s) > ! chezmoi apply --force [stderr] chezmoi: no encryption [exit status 1] > stderr 'no encryption' PASS === CONT TestScript/modifypython_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/modifyencrypted cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/modify_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/modify_unix === CONT TestScript/onepassword testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/op > [windows] unix2dos bin/op.cmd # test onepassword template function (2.368s) > chezmoi execute-template '{{ (onepassword "ExampleLogin").uuid }}' [stdout] wxcplh5udshnonkzg2n4qx262y> stdout '^wxcplh5udshnonkzg2n4qx262y$' # test onepassword template function with vault and account (3.320s) > chezmoi execute-template '{{ (onepassword "ExampleLogin" "vault" "account").uuid }}' [stdout] wxcplh5udshnonkzg2n4qx262y> stdout '^wxcplh5udshnonkzg2n4qx262y$' # test onepassword template function with empty vault and account (2.222s) > chezmoi execute-template '{{ (onepassword "ExampleLogin" "" "account").uuid }}' [stdout] wxcplh5udshnonkzg2n4qx262y> stdout '^wxcplh5udshnonkzg2n4qx262y$' # test onepasswordDetailsFields template function (2.520s) > chezmoi execute-template '{{ (onepasswordDetailsFields "ExampleLogin").password.value }}' [stdout] L8rm1JXJIE1b8YUDWq7h> stdout '^L8rm1JXJIE1b8YUDWq7h$' # test onepasswordItemFields template function (1.700s) > chezmoi execute-template '{{ (onepasswordItemFields "ExampleLogin").exampleLabel.v }}' [stdout] exampleValue> stdout exampleValue # test onepasswordRead template function (1.590s) > chezmoi execute-template '{{ onepasswordRead "op://vault/item/field" }}' [stdout] exampleField > stdout exampleField # test onepasswordRead template function with account (1.258s) > chezmoi execute-template '{{ onepasswordRead "op://vault/item/field" "account" }}' [stdout] exampleAccountField > stdout exampleAccountField PASS === CONT TestScript/modesymlink testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir golden > mksourcedir # test that chezmoi apply does not create symlinks by default (1.801s) > chezmoi apply > cmp $HOME/.create golden/.create > ! issymlink $HOME/.create > cmp $HOME/.dir/file golden/.dir/file > ! issymlink $HOME/.dir/file > cmp $HOME/.dir/subdir/file golden/.dir/subdir/file > ! issymlink $HOME/.dir/subdir/file > cmp $HOME/.empty golden/.empty > ! issymlink $HOME/.empty > cmp $HOME/.executable golden/.executable > ! issymlink $HOME/.executable > cmp $HOME/.file golden/.file > ! issymlink $HOME/.file > cmp $HOME/.private golden/.private > ! issymlink $HOME/.private > ! exists $HOME/.remove > cmp $HOME/.template golden/.template > ! issymlink $HOME/.template # test that chezmoi apply --mode=symlink creates symlinks where possible (1.693s) > chezmoi apply --mode=symlink > cmp $HOME/.create golden/.create > ! issymlink $HOME/.create > cmp $HOME/.dir/file golden/.dir/file > issymlink $HOME/.dir/file > cmp $HOME/.dir/subdir/file golden/.dir/subdir/file > issymlink $HOME/.dir/subdir/file > cmp $HOME/.empty golden/.empty > issymlink $HOME/.empty > cmp $HOME/.executable golden/.executable > ! issymlink $HOME/.executable > cmp $HOME/.file golden/.file > issymlink $HOME/.file > cmp $HOME/.private golden/.private > ! issymlink $HOME/.private > ! exists $HOME/.remove > cmp $HOME/.template golden/.template > ! issymlink $HOME/.template PASS === CONT TestScript/mergeencryptedgpg_unix === CONT TestScript/modify_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!exec:sed] skip 'sed not found in $PATH' > [!umask:022] skip 'unsupported umask' > cp golden/.modify home/user # test that chezmoi cat prints the modified contents without modifying the file (1.751s) > chezmoi cat $HOME${/}.modify [stdout] beginning modified-middle end > cmp stdout golden/.modified > cmp home/user/.modify golden/.modify # test that chezmoi diff prints the diff without modifying the file (1.540s) > chezmoi diff [stdout] diff --git a/.modify b/.modify index f91830d4ecd80adfe9a6aea9dca579397aa86921..6b6d41aae5e8d64a54afd8b8ad5a38a3de1e1e35 100644 --- a/.modify +++ b/.modify @@ -1,3 +1,3 @@ beginning -middle +modified-middle end > cmp stdout golden/diff.diff > cmp home/user/.modify golden/.modify # test that chezmoi archive includes the modified file (1.374s) > chezmoi archive --output=archive.tar > exec tar xf archive.tar [stderr] /usr/bin/tar: .modify: time stamp 2022-07-30 00:27:16 is 0.165393089 s in the future > cmp .modify golden/.modified > cmp home/user/.modify golden/.modify # test that chezmoi apply modifies the file (1.115s) > chezmoi apply --force > cmp home/user/.modify golden/.modified > chhome home2/user # test that chezmoi cat does not fail or generate output when the target does not exist (1.461s) > chezmoi cat $HOME${/}.not_exist > ! stdout . # test that chezmoi cat exits with an error when the modify script fails (1.314s) > ! chezmoi cat $HOME${/}.error [stderr] chezmoi: .error: exit status 1 [exit status 1] > stderr error # test that chezmoi apply updates file permissions (1.053s) > cmpmod 666 $HOME/.file > chezmoi apply $HOME${/}.file > cmpmod 700 $HOME/.file > chhome home3/user # test that chezmoi apply always overwrites modified files without --force (3.953s) > chezmoi add $HOME${/}.modify > chezmoi apply > edit $HOME${/}.modify > rm $CHEZMOISOURCEDIR/dot_modify > cp home/user/.local/share/chezmoi/modify_dot_modify $CHEZMOISOURCEDIR > chezmoi apply > cmp $HOME${/}.modify golden/.edited-and-modified > chhome home4/user # test that modify scripts can be templates (1.120s) > chezmoi cat $HOME${/}.modify [stdout] beginning modified-middle end > cmp stdout golden/.modified PASS === CONT TestScript/mergeencryptedage_unix cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/mergeall_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi merge-all does not run the merge command if nothing is modified (1.242s) > chezmoi merge-all > ! stdout . # test that chezmoi merge-all runs the merge command if a file is modified (1.586s) > edit $HOME/.file > chezmoi merge-all [stdout] $WORK/home/user/.file $WORK/home/user/.local/share/chezmoi/dot_file.tmpl $WORK/.tmp/chezmoi-merge857587883/.file > stdout ^${HOME@R}/\.file\s+${CHEZMOISOURCEDIR@R}/dot_file\.tmpl\s+${WORK@R}/.*/\.file$ PASS === CONT TestScript/merge_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > mkhomedir > mksourcedir # test that chezmoi merge does a three-way merge (1.301s) > chezmoi merge $HOME${/}.file [stdout] $WORK/home/user/.file $WORK/home/user/.local/share/chezmoi/dot_file $WORK/.tmp/chezmoi-merge3426233128/.file > stdout ^${HOME@R}/\.file\s+${CHEZMOISOURCEDIR@R}/dot_file\s+${WORK@R}/.*/\.file$ # test that chezmoi merge falls back to a two-way merge when the template is invalid # FIXME the following test fails # chezmoi merge $HOME${/}.invalid_template # stdout ^${HOME@R}/\.invalid_template\s+$CHEZMOISOURCEDIR/dot_invalid_template\.tmpl$ (0.000s) > chhome home2/user # test that chezmoi merge does a three-way merge with the arguments in the configured order (1.556s) > chezmoi merge $HOME${/}.file [stdout] $WORK/home2/user/.local/share/chezmoi/dot_file $WORK/home2/user/.file $WORK/.tmp/chezmoi-merge192258424/.file > stdout ^${CHEZMOISOURCEDIR@R}/dot_file\s+${HOME@R}/\.file\s+${WORK@R}/.*/\.file$ > chhome home3/user # test that chezmoi merge appends the destination, source, and target paths if merge.args does not contain any templates (1.234s) > chezmoi merge $HOME${/}.file [stdout] arg $WORK/home3/user/.file $WORK/home3/user/.local/share/chezmoi/dot_file $WORK/.tmp/chezmoi-merge4282994226/.file > stdout ^arg\s+${HOME@R}/\.file\s+${CHEZMOISOURCEDIR@R}/dot_file\s+${WORK@R}/.*/\.file$ > chhome home4/user # test that chezmoi merge respects .chezmoiroot (1.819s) > chezmoi merge $HOME${/}.file [stdout] $WORK/home4/user/.file $WORK/home4/user/.local/share/chezmoi/home/dot_file $WORK/.tmp/chezmoi-merge3239371074/.file > stdout ^${HOME@R}/\.file\s+${CHEZMOISOURCEDIR@R}/home/dot_file\s+${WORK@R}/.*/\.file$ PASS === CONT TestScript/managed testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test chezmoi managed (1.576s) > chezmoi managed [stdout] .create .dir .dir/file .dir/subdir .dir/subdir/file .empty .executable .file .private .readonly .remove .symlink .template > cmp stdout golden/managed # test chezmoi managed --include=all (1.505s) > chezmoi managed --include=all [stdout] .create .dir .dir/file .dir/subdir .dir/subdir/file .empty .executable .file .private .readonly .remove .symlink .template > cmp stdout golden/managed-all # test chezmoi managed --include=dirs (1.251s) > chezmoi managed --include=dirs [stdout] .dir .dir/subdir > cmp stdout golden/managed-dirs # test chezmoi managed --include=files (1.294s) > chezmoi managed --include=files [stdout] .create .dir/file .dir/subdir/file .empty .executable .file .private .readonly .remove .template > cmp stdout golden/managed-files # test chezmoi managed --include=symlinks (1.279s) > chezmoi managed --include=symlinks [stdout] .symlink > cmp stdout golden/managed-symlinks # test chezmoi managed --exclude=files (1.611s) > chezmoi managed --exclude=files [stdout] .dir .dir/subdir .symlink > cmp stdout golden/managed-except-files # test chezmoi managed with arguments (1.579s) > chezmoi managed $HOME${/}.dir $HOME${/}.create [stdout] .create .dir .dir/file .dir/subdir .dir/subdir/file > cmp stdout golden/managed-with-args # test chezmoi managed with child of managed dir as argument (1.458s) > chezmoi managed $HOME${/}.dir/subdir [stdout] .dir/subdir .dir/subdir/file > cmp stdout golden/managed-in-managed # test chezmoi managed --exclude=dir with arguments (1.288s) > chezmoi managed --exclude=dirs $HOME${/}.dir $HOME${/}.create [stdout] .create .dir/file .dir/subdir/file > cmp stdout golden/managed-with-nodir-args # test chezmoi managed with absent arguments (1.243s) > chezmoi managed $HOME${/}.dir $HOME${/}.non-exist [stdout] .dir .dir/file .dir/subdir .dir/subdir/file > cmp stdout golden/managed-with-absent-args > chhome home2/user # test that chezmoi managed does not evaluate templates (1.178s) > chezmoi managed --include=all [stdout] .create .file .symlink .template script > cmp stdout golden/managed2 PASS === CONT TestScript/literal testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi add can add files that look like files in the source state (2.364s) > chezmoi add $HOME${/}dot_file $HOME${/}run_script $HOME${/}symlink_symlink $HOME${/}template.tmpl > rm $HOME/dot_file $HOME/run_script $HOME/symlink_symlink $HOME/template.tmpl > chezmoi apply --force > ! exists $HOME/.file > ! stdout . > ! exists $HOME/symlink > ! exists $HOME/template > cmp $HOME/dot_file golden/dot_file > cmp $HOME/run_script golden/run_script > cmp $HOME/symlink_symlink golden/symlink_symlink > cmp $HOME/template.tmpl golden/template.tmpl PASS === CONT TestScript/license testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi license prints chezmoi's license (0.944s) > chezmoi license [stdout] The MIT License (MIT) Copyright (c) 2018-2022 Tom Payne Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > stdout 'The MIT License' PASS === CONT TestScript/lastpass testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/lpass > [windows] unix2dos bin/lpass.cmd # test lastpass template function (1.190s) > chezmoi execute-template '{{ (index (lastpass "example.com") 0).password }}' [stdout] examplepassword> stdout ^examplepassword$ # test lastpass version check (0.903s) > chmod 755 $WORK/bin2/lpass > env PATH=$WORK${/}bin2${:}$PATH > ! chezmoi execute-template '{{ (index (lastpass "example.com") 0).password }}' [stderr] chezmoi: template: arg1:1:11: executing "arg1" at : error calling lastpass: found version 1.2.0, need version 1.3.0 or later [exit status 1] > stderr 'need version 1\.3\.0 or later' PASS === CONT TestScript/keepgoing testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir # test that chezmoi diff without --keep-going fails when there is an error (0.766s) > ! chezmoi diff [stderr] chezmoi: template: 2error.tmpl:2: unclosed action started at 2error.tmpl:1 [exit status 1] # test that chezmoi apply without --keep-going fails but still writes the first file (1.146s) > ! chezmoi apply --force [stderr] chezmoi: template: 2error.tmpl:2: unclosed action started at 2error.tmpl:1 [exit status 1] > cmp $HOME/1ok golden/1ok > ! exists $HOME/2error > ! exists $HOME/3ok # test that chezmoi apply with --keep-going writes all files that it can without errors (1.220s) > ! chezmoi apply --force --keep-going [stderr] chezmoi: template: 2error.tmpl:2: unclosed action started at 2error.tmpl:1 chezmoi: exit status 1 [exit status 1] > cmp $HOME/1ok golden/1ok > ! exists $HOME/2error > cmp $HOME/3ok golden/3ok # FIXME add chezmoi init tests # FIXME add chezmoi update tests (0.000s) PASS === CONT TestScript/keeper testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/keeper > [windows] unix2dos bin/keeper.cmd # test keeper template function (1.270s) > chezmoi execute-template '{{ (keeper "QOahgRH_dSTvSvhRBqzCzQ").record_uid }}' [stdout] QOahgRH_dSTvSvhRBqzCzQ> stdout '^QOahgRH_dSTvSvhRBqzCzQ$' # test keeperDataFields template function (1.233s) > chezmoi execute-template '{{ index (keeperDataFields "QOahgRH_dSTvSvhRBqzCzQ").password 0 }}' [stdout] mypassword> stdout ^mypassword$ # test keeperFindPassword template function (1.349s) > chezmoi execute-template '{{ keeperFindPassword "Example" }}' [stdout] mypassword> stdout ^mypassword$ PASS === CONT TestScript/keepassxc testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/keepass-test > [windows] unix2dos bin/keepass-test.cmd # test keepassxcAttachment template function (2.134s) > stdin $HOME/input > chezmoi execute-template --no-tty '{{ keepassxcAttachment "example.com" "attachment" }}' [stdout] Insert password to unlock /secrets.kdbx: # contents of attachment > stdout '# contents of attachment' # test keepassxcAttribute template function (2.571s) > stdin $HOME/input > chezmoi execute-template --no-tty '{{ keepassxcAttribute "example.com" "host-name" }}' [stdout] Insert password to unlock /secrets.kdbx: example.com> stdout example\.com$ # test keepassxc template function and that password is only requested once (3.329s) > stdin $HOME/input > chezmoi execute-template --no-tty '{{ (keepassxc "example.com").UserName }}/{{ (keepassxc "example.com").Password }}' [stdout] Insert password to unlock /secrets.kdbx: examplelogin/examplepassword> stdout examplelogin/examplepassword$ PASS === CONT TestScript/issue796 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir > mksourcedir > symlink $CHEZMOISOURCEDIR/dot_file2 -> dot_file > chezmoi apply --force > cmp $HOME/.file2 $HOME/.file PASS === CONT TestScript/issue2177 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi forget prints a warning when asked to forget externals (3.156s) > chezmoi forget $HOME${/}.external [stderr] chezmoi: warning: .external: cannot forget entry from external https://github.com/user/repo.git defined in $WORK/home/user/.local/share/chezmoi/.chezmoiexternal.toml > stderr 'cannot forget entry from external https://github\.com/user/repo\.git defined in .*/home/user/\.local/share/chezmoi/\.chezmoiexternal\.toml' PASS === CONT TestScript/issue2137 === CONT TestScript/mergeencryptedgpg_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!exec:gpg] skip 'gpg not found in $PATH' > chmod 755 bin/edit-source > mkgpgconfig > appendline $CHEZMOICONFIGDIR/chezmoi.toml '[merge]' > appendline $CHEZMOICONFIGDIR/chezmoi.toml ' command = "cat"' # test that chezmoi merge transparently decrypts the source (24.037s) > cp golden/source $HOME/.file > chezmoi add --encrypt $HOME${/}.file [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 > chezmoi chattr +template $HOME${/}.file > cp golden/destination $HOME/.file > chezmoi merge $HOME${/}.file [stdout] destination {{ "target" }} target [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 60A8C94087A473A0, created 2022-07-29 "chezmoi-test-gpg-key" gpg: Warning: using insecure memory! > cmp stdout golden/expected > chhome home2/user > mkgpgconfig > appendline $CHEZMOICONFIGDIR/chezmoi.toml '[merge]' > appendline $CHEZMOICONFIGDIR/chezmoi.toml ' command = "edit-source"' # test that chezmoi merge transparently re-encrypts the source if it is edited (14.685s) > cp golden/source $HOME/.file > chezmoi add --encrypt $HOME${/}.file [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 > chezmoi chattr +template $HOME${/}.file > cp golden/destination $HOME/.file > chezmoi merge $HOME${/}.file [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID A72674ABF07E3628, created 2022-07-29 "chezmoi-test-gpg-key" gpg: Warning: using insecure memory! > chezmoi cat $HOME${/}.file [stdout] target # edited [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID A72674ABF07E3628, created 2022-07-29 "chezmoi-test-gpg-key" > cmp stdout golden/edited-target PASS === CONT TestScript/issue2092 === CONT TestScript/issue2137 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply fails if .chezmoiversion requires a more recent version (2.714s) > ! chezmoi apply [stderr] chezmoi: source state requires chezmoi version 3.0.0 or later, chezmoi is version 2.0.0+test [exit status 1] > stderr 'source state requires chezmoi version 3\.0\.0 or later' # test that chezmoi init fails if .chezmoiversion requires a more recent version (2.312s) > ! chezmoi init [stderr] chezmoi: source state requires chezmoi version 3.0.0 or later, chezmoi is version 2.0.0+test [exit status 1] > stderr 'source state requires chezmoi version 3\.0\.0 or later' PASS === CONT TestScript/issue1869 === CONT TestScript/issue2092 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi dump warns when the config file has not been generated (2.448s) > chezmoi dump [stdout] { ".file": { "type": "file", "name": ".file", "contents": "# contents of .file\n", "perm": 420 } } [stderr] chezmoi: warning: config file template has changed, run chezmoi init to regenerate config file > cmp stdout golden/dump.json > stderr 'config file template has changed' # test that chezmoi dump does not return an error when the config file template has been modified (3.567s) > chezmoi init > edit $CHEZMOICONFIGDIR${/}chezmoi.toml > chezmoi dump [stdout] { ".file": { "type": "file", "name": ".file", "contents": "# contents of .file\n", "perm": 420 } } > cmp stdout golden/dump.json > ! stderr . PASS === CONT TestScript/issue1866 === CONT TestScript/issue1869 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test concurrent read when there are multiple .chezmoiignore files (1.981s) > chezmoi status [stdout] A dir1 A dir1/subdir1 A dir1/subdir2 A dir1/subdir3 A dir2 A dir2/subdir1 A dir2/subdir2 A dir2/subdir3 A dir3 A dir3/subdir1 A dir3/subdir2 A dir3/subdir3 > chhome home2/user # test concurrent read when there are multitple .chezmoidata. files (1.906s) > chezmoi data [stdout] { "chezmoi": { "arch": "riscv64", "args": [ "chezmoi", "data" ], "cacheDir": "$WORK/home2/user/.cache/chezmoi", "configFile": "$WORK/home2/user/.config/chezmoi/chezmoi.toml", "executable": "/tmp/testscript-main3051842446/bin/chezmoi", "fqdnHostname": "felix1", "gid": "1019", "group": "builduser", "homeDir": "$WORK/home2/user", "hostname": "felix1", "kernel": { "osrelease": "5.15.10+", "ostype": "Linux", "version": "#1 SMP Fri Dec 24 14:24:27 CST 2021" }, "os": "linux", "osRelease": { "ansiColor": "38;2;23;147;209", "bugReportURL": "https://bugs.archlinux.org/", "buildID": "rolling", "documentationURL": "https://wiki.archlinux.org/", "homeURL": "https://archlinux.org/", "id": "arch", "logo": "archlinux-logo", "name": "Arch Linux", "prettyName": "Arch Linux", "supportURL": "https://bbs.archlinux.org/" }, "sourceDir": "$WORK/home2/user/.local/share/chezmoi", "uid": "1019", "username": "builduser", "version": { "builtBy": "testscript", "commit": "HEAD", "date": "2022-07-29T21:28:25Z", "version": "v2.0.0+test" }, "windowsVersion": {}, "workingTree": "$WORK/home2/user/.local/share/chezmoi" }, "key": "value" } PASS === CONT TestScript/issue1832 === CONT TestScript/issue1866 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi ignores emacs symbolic link locks (2.361s) > symlink 'home/user/.local/share/chezmoi/.#lock' -> invalid > chezmoi apply > cmp $HOME/.file golden/.file PASS === CONT TestScript/issue1794 cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/issue1365 === CONT TestScript/issue1832 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi add succeeds when changing the permissions of an intermediate directory (3.963s) > chezmoi add $HOME/.config/fish/config > chmod 700 $HOME/.config > chezmoi add --force $HOME/.config PASS === CONT TestScript/issue1237 === CONT TestScript/issue1365 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi diff generates the correct output when chezmoi's config file is managed by chezmoi (1.776s) > chmod 700 $CHEZMOICONFIGDIR > chmod 600 $CHEZMOICONFIGDIR/chezmoi.toml > chezmoi diff [stdout] diff --git a/.config/chezmoi/chezmoi.toml b/.config/chezmoi/chezmoi.toml index 63caeb2522e9320690143749a6aee71e8fddd300..b9495f6120fb36c4cbda33cb72700c80f1ebb979 100600 --- a/.config/chezmoi/chezmoi.toml +++ b/.config/chezmoi/chezmoi.toml @@ -1 +1 @@ -# dest contents of chezmoi.toml +# target contents of chezmoi.toml > cmp stdout golden/chezmoi.toml-diff.diff # test that chezmoi diff generates the correct output when a custom diff tool is set and the file is in a subdirectory (1.839s) > cp golden/chezmoi.toml-custom-diff $CHEZMOICONFIGDIR/chezmoi.toml > chezmoi diff [stdout] $WORK/home/user/.config/chezmoi/chezmoi.toml $WORK/.tmp/chezmoi-diff3439198254/.config/chezmoi/chezmoi.toml > stdout ^$HOME/\.config/chezmoi/chezmoi\.toml\s+$WORK/.*/\.config/chezmoi/chezmoi\.toml$ PASS === CONT TestScript/issue1213 === CONT TestScript/issue1237 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi add does not add ignored directories (3.372s) > chezmoi add ~/.config > chezmoi managed [stdout] .config > cmp stdout golden/managed > exists $CHEZMOISOURCEDIR/dot_config/.keep PASS === CONT TestScript/issue1161 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi does not follow symlinks in the source directory if the file should be ignored (3.767s) > symlink $CHEZMOISOURCEDIR/.HASH_dot_file -> non_existent_file > chezmoi status > rm $CHEZMOISOURCEDIR/.HASH_dot_file > chezmoi status # test that chezmoi does follow symlinks in the source directory if the file should not be ignored (3.088s) > symlink $CHEZMOISOURCEDIR/.chezmoifile -> non_existent_file > ! chezmoi status [stderr] chezmoi: stat $WORK/home/user/.local/share/chezmoi/.chezmoifile: no such file or directory [exit status 1] > [!windows] stderr 'no such file or directory' > [windows] stderr 'The system cannot find the file specified' > rm $CHEZMOISOURCEDIR/.chezmoifile > chezmoi status PASS === CONT TestScript/inittemplatefuncs === CONT TestScript/issue1213 testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:git] skip 'git not found in $PATH' > mkgitconfig # create a repo (6.053s) > chezmoi init > exists $CHEZMOISOURCEDIR/.git > cp golden/.chezmoi.toml.tmpl $CHEZMOISOURCEDIR > cp golden/dot_file.tmpl $CHEZMOISOURCEDIR > chezmoi git add . > chezmoi git commit -- --message 'Initial commit' [stdout] [master (root-commit) dc5171e] Initial commit 2 files changed, 3 insertions(+) create mode 100644 .chezmoi.toml.tmpl create mode 100644 dot_file.tmpl > chhome home2/user # test that chezmoi init --apply makes config template data available (2.859s) > mkgitconfig > chezmoi init --apply file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home2/user/.local/share/chezmoi'... > cmp $HOME/.file golden/.file PASS === CONT TestScript/init === CONT TestScript/inittemplatefuncs testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test exit template function (3.435s) > chezmoi execute-template --init '{{ exit 0 }}' [stderr] chezmoi: template: arg1:1:3: executing "arg1" at : error calling exit: exit status 0 > ! chezmoi execute-template --init '{{ exit 1 }}' [stderr] chezmoi: template: arg1:1:3: executing "arg1" at : error calling exit: exit status 1 [exit status 1] # test promptBoolOnce template function with execute-template --init (1.661s) > chezmoi execute-template --init --promptBool bool=true '{{ promptBoolOnce . "bool" "bool" }}' [stdout] true> stdout true # test promptIntOnce template function with execute-template --init (1.730s) > chezmoi execute-template --init --promptInt int=1 '{{ promptIntOnce . "int" "int" }}' [stdout] 1> stdout 1 # test promptStringOnce template function with execute-template --init (1.550s) > chezmoi execute-template --init --promptString string=value '{{ promptStringOnce . "string" "string" }}' [stdout] value> stdout value # test writeToStdout template function (1.846s) > chezmoi execute-template --init '{{ writeToStdout "string" }}' [stdout] string> stdout string # test prompt*Once functions without existing data (1.674s) > stdin golden/input > chezmoi init [stdout] bool? int? string? > cmp ${CHEZMOICONFIGDIR}/chezmoi.toml golden/chezmoi.toml > chhome home2/user # test prompt*Once functions with existing data (1.921s) > chezmoi init > cmp ${CHEZMOICONFIGDIR}/chezmoi.toml golden/chezmoi.toml PASS === CONT TestScript/importzip testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:zip] skip 'zip not found in $PATH' > exec zip -r archive.zip archive [stdout] adding: archive/ (stored 0%) adding: archive/dir/ (stored 0%) adding: archive/dir/file (stored 0%) # test that chezmoi import imports a zip archive (1.641s) > chezmoi import --destination=$HOME${/}.dir --strip-components=1 archive.zip > cmp $CHEZMOISOURCEDIR/dot_dir/dir/file golden/dot_dir/dir/file PASS === CONT TestScript/importxz testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [(openbsd||windows)] skip 'tar does not support XZ compression' > [!exec:xz] skip 'xz not found in $PATH' > exec tar cJf archive.tar.xz archive # test that chezmoi import imports a tar.xz archive (1.672s) > chezmoi import --destination=$HOME${/}.dir --strip-components=1 archive.tar.xz > cmp $CHEZMOISOURCEDIR/dot_dir/dir/file golden/dot_dir/dir/file PASS === CONT TestScript/import testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir > symlink archive/.dir/.symlink -> .file > exec tar czf archive.tar.gz archive # test that chezmoi import imports an archive (1.806s) > chezmoi import --strip-components=1 archive.tar.gz > cmp $CHEZMOISOURCEDIR/dot_dir/dot_file golden/dot_dir/dot_file > [!windows] cmp $CHEZMOISOURCEDIR/dot_dir/symlink_dot_symlink golden/dot_dir/symlink_dot_symlink # FIXME this should pass on Windows # test that chezmoi import run a second time overwrites (1.603s) > chezmoi import --strip-components=1 archive.tar.gz > chhome home2/user # test chezmoi import --destination (1.733s) > chezmoi import --strip-components=1 --destination=$HOME${/}.subdir archive.tar.gz > cmp $CHEZMOISOURCEDIR/dot_subdir/dot_dir/dot_file golden/dot_dir/dot_file > [!windows] cmp $CHEZMOISOURCEDIR/dot_subdir/dot_dir/symlink_dot_symlink golden/dot_dir/symlink_dot_symlink # FIXME this should pass on Windows > chhome home3/user # test chezmoi --import --exclude (1.668s) > chezmoi import --strip-components=1 --destination=$HOME${/}.subdir --exclude=symlinks archive.tar.gz > cmp $CHEZMOISOURCEDIR/dot_subdir/dot_dir/dot_file golden/dot_dir/dot_file > ! exists $CHEZMOISOURCEDIR/dot_subdir/dot_dir/symlink_dot_symlink PASS === CONT TestScript/ignored testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test that chezmoi ignored prints the list of ignored paths (1.726s) > chezmoi ignored [stdout] .dir/file .dir/subdir .readonly .template > cmp stdout golden/ignored PASS === CONT TestScript/ignore === CONT TestScript/init testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:git] skip 'git not found in $PATH' > mkgitconfig > mkhomedir golden > mkhomedir # test that chezmoi init creates a git repo (1.612s) > chezmoi init > exists $CHEZMOISOURCEDIR/.git # create a commit (3.230s) > cp golden/chezmoi.toml $CHEZMOISOURCEDIR/.chezmoi.toml.tmpl > cp golden/.file $CHEZMOISOURCEDIR/dot_file > chezmoi git add . > chezmoi git commit -- --message 'Initial commit' [stdout] [master (root-commit) 0c6915d] Initial commit 2 files changed, 3 insertions(+) create mode 100644 .chezmoi.toml.tmpl create mode 100644 dot_file > chhome home2/user # test that chezmoi init fetches git repo but does not apply (2.581s) > mkgitconfig > chezmoi init file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home2/user/.local/share/chezmoi'... > exists $CHEZMOISOURCEDIR/.git > ! exists $HOME/.file > chhome home3/user # test that chezmoi init --apply fetches a git repo and runs chezmoi apply (2.606s) > mkgitconfig > chezmoi init --apply --force file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home3/user/.local/share/chezmoi'... > exists $CHEZMOISOURCEDIR/.git > cmp $HOME/.file golden/.file > chhome home4/user # test that chezmoi init --apply --depth 1 --force --purge clones, applies, and purges (2.764s) > mkgitconfig > exists $CHEZMOICONFIGDIR > ! exists $CHEZMOISOURCEDIR > chezmoi init --apply --depth 1 --force --purge file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home4/user/.local/share/chezmoi'... > cmp $HOME/.file golden/.file > ! exists $CHEZMOICONFIGDIR > ! exists $CHEZMOISOURCEDIR > chhome home5/user # test that chezmoi init does not clone the repo if it is already checked out but does create the config file (1.493s) > mkgitconfig > chezmoi init --source=$HOME/dotfiles file://$WORK/nonexistentrepo > exists $CHEZMOICONFIGDIR/chezmoi.toml > chhome home6/user # test chezmoi init --one-shot (2.666s) > mkgitconfig > chezmoi init --one-shot file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home6/user/.local/share/chezmoi'... > cmp $HOME/.file golden/.file > ! exists $CHEZMOICONFIGDIR > ! exists $CHEZMOISOURCEDIR > chhome home7/user # test chezmoi init --data=true (1.488s) > mkgitconfig > chezmoi init --data=true file://$WORK/home/user/.local/share/chezmoi > cmp $CHEZMOICONFIGDIR/chezmoi.toml golden/chezmoi.toml # test chezmoi init --data=false (1.866s) > chezmoi init --data=false file://$WORK/home/user/.local/share/chezmoi > cmp $CHEZMOICONFIGDIR/chezmoi.toml golden/chezmoi.toml-no-data > chhome home8/user # test that chezmoi init fails if the generated config is not valid (1.723s) > mkgitconfig > ! chezmoi init [stderr] chezmoi: While parsing config: toml: expected character = [exit status 1] > stderr 'While parsing config:' > ! exists .config/chezmoi > chhome home/user # create a new branch (6.682s) > chezmoi git checkout -- -b new-branch [stderr] Switched to a new branch 'new-branch' > edit $CHEZMOISOURCEDIR/dot_file > chezmoi git add dot_file > chezmoi git commit -- --message 'Edit .file' [stdout] [new-branch 21b71d0] Edit .file 1 file changed, 1 insertion(+) > chezmoi git checkout master [stderr] Switched to branch 'master' > chhome home9/user # test chezmoi init --branch (2.392s) > mkgitconfig > chezmoi init --apply --branch=new-branch file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home9/user/.local/share/chezmoi'... > grep '# edited' $HOME/.file > chhome home10/user # test chezmoi init --config-path (2.757s) > mkgitconfig > chezmoi init --config-path=$HOME/.chezmoi.toml file://$WORK/home/user/.local/share/chezmoi [stderr] Cloning into '$WORK/home10/user/.local/share/chezmoi'... > cmp $HOME/.chezmoi.toml golden/chezmoi.toml > ! exists $CHEZMOICONFIGDIR/chezmoi.toml > chhome home11/user # test chezmoi init when the source dir is already in a git working copy (1.550s) > mkgitconfig > exec git init $HOME/.local/share [stdout] Initialized empty Git repository in $WORK/home11/user/.local/share/.git/ > chezmoi init > ! exists $CHEZMOISOURCEDIR/.git PASS === CONT TestScript/help === CONT TestScript/ignore testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test that chezmoi apply does not write ignored files (2.098s) > ! exists $HOME/.file > chezmoi apply --force > exists $HOME/.file > ! exists $HOME/README.md > ! exists $HOME/.dir # test that chezmoi ignored lists the ignored entries (1.789s) > chezmoi ignored [stdout] .dir README.md > cmp stdout golden/ignored > chhome home2/user # test that chezmoi manage lists all managed files (1.798s) > chezmoi managed [stdout] .dir .dir/file.txt .dir/subdir .dir/subdir/file.txt .file.txt > cmp stdout golden/managed-all # test that chezmoiignore ignores all files in a directory (1.583s) > cp golden/.chezmoiignore-dir $CHEZMOISOURCEDIR/.chezmoiignore > chezmoi managed [stdout] .file.txt > cmp stdout golden/managed-ignore-dir # test that chezmoiignore ignores all files in a subdirectory (2.029s) > cp golden/.chezmoiignore-dir-subdir $CHEZMOISOURCEDIR/.chezmoiignore > chezmoi managed [stdout] .dir .dir/file.txt .file.txt > cmp stdout golden/managed-ignore-dir-subdir # test that chezmoiignore ignores all files matching a simple pattern (1.560s) > cp golden/.chezmoiignore-star-slash-star-dot-txt $CHEZMOISOURCEDIR/.chezmoiignore > chezmoi managed [stdout] .dir .dir/subdir .dir/subdir/file.txt .file.txt > cmp stdout golden/managed-ignore-star-slash-star-dot-txt # test that chezmoiignore ignores all files matching a doublestar pattern (1.726s) > cp golden/.chezmoiignore-star-star-slash-star-dot-txt $CHEZMOISOURCEDIR/.chezmoiignore > chezmoi managed [stdout] .dir .dir/subdir > cmp stdout golden/managed-ignore-star-star-slash-star-dot-txt PASS === CONT TestScript/gpgencryptionsymmetric === CONT TestScript/help testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > chezmoi help [stdout] Manage your dotfiles across multiple diverse machines, securely Usage: chezmoi [command] Available Commands: add Add an existing file, directory, or symlink to the source state apply Update the destination directory to match the target state archive Generate a tar archive of the target state cat Print the target contents of a file, script, or symlink cd Launch a shell in the source directory chattr Change the attributes of a target in the source state completion Generate shell completion code data Print the template data decrypt Decrypt file or standard input diff Print the diff between the target state and the destination state doctor Check your system for potential problems dump Generate a dump of the target state edit Edit the source state of a target edit-config Edit the configuration file encrypt Encrypt file or standard input execute-template Execute the given template(s) forget Remove a target from the source state generate Generate a file for use with chezmoi git Run git in the source directory help Print help about a command ignored Print ignored targets import Import an archive into the source state init Setup the source directory and update the destination directory to match the target state license Print license managed List the managed entries in the destination directory merge Perform a three-way merge between the destination state, the source state, and the target state merge-all Perform a three-way merge for each modified file purge Purge chezmoi's configuration and data re-add Re-add modified files remove Remove a target from the source state and the destination directory secret Interact with a secret manager source-path Print the source path of a target state Manipulate the persistent state status Show the status of targets target-path Print the target path of a source path unmanaged List the unmanaged files in the destination directory update Pull and apply any changes upgrade Upgrade chezmoi to the latest released version verify Exit with success if the destination state matches the target state, fail otherwise Flags: --cache path Set cache directory (default $WORK/home/user/.cache/chezmoi) --color bool|auto Colorize output -c, --config path Set config file (default $WORK/home/user/.config/chezmoi/chezmoi.toml) --config-format json|toml|yaml Set config file format --debug Include debug information in output -D, --destination path Set destination directory (default $WORK/home/user) -n, --dry-run Do not make any modifications to the destination directory --force Make all changes without prompting -k, --keep-going Keep going as far as possible after an error --mode mode Mode --no-pager Do not use the pager --no-tty Do not attempt to get a TTY for reading passwords -o, --output path Write output to path instead of stdout --persistent-state path Set persistent state file -R, --refresh-externals Refresh external cache -S, --source path Set source directory (default $WORK/home/user/.local/share/chezmoi) --source-path Specify targets by source path --use-builtin-age bool|auto Use builtin age (default auto) --use-builtin-git bool|auto Use builtin git (default auto) -v, --verbose Make output more verbose -W, --working-tree path Set working tree directory (default ) Use "chezmoi [command] --help" for more information about a command. > stdout 'Manage your dotfiles across multiple diverse machines, securely' > chezmoi help add [stdout] Description: Add targets to the source state. If any target is already in the source state, then its source state is replaced with its current state in the destination directory. Usage: chezmoi add targets... [flags] Aliases: add, manage Examples: $ chezmoi add ~/.bashrc $ chezmoi add ~/.gitconfig --template $ chezmoi add ~/.ssh/id_rsa --encrypt $ chezmoi add ~/.vim --recursive $ chezmoi add ~/.oh-my-zsh --exact --recursive Flags: -a, --autotemplate Generate the template when adding files as templates --create Add files that should exist, irrespective of their contents --encrypt Encrypt files --exact Add directories exactly -x, --exclude types Exclude entry types (default none) -f, --follow Add symlink targets instead of symlinks -i, --include types Include entry types (default all) -p, --prompt Prompt before adding each entry -r, --recursive Recurse into subdirectories (default true) -T, --template Add files as templates --template-symlinks Add symlinks with target in source or home dirs as templates Global Flags: --cache path Set cache directory (default $WORK/home/user/.cache/chezmoi) --color bool|auto Colorize output -c, --config path Set config file (default $WORK/home/user/.config/chezmoi/chezmoi.toml) --config-format json|toml|yaml Set config file format --debug Include debug information in output -D, --destination path Set destination directory (default $WORK/home/user) -n, --dry-run Do not make any modifications to the destination directory --force Make all changes without prompting -k, --keep-going Keep going as far as possible after an error --mode mode Mode --no-pager Do not use the pager --no-tty Do not attempt to get a TTY for reading passwords -o, --output path Write output to path instead of stdout --persistent-state path Set persistent state file -R, --refresh-externals Refresh external cache -S, --source path Set source directory (default $WORK/home/user/.local/share/chezmoi) --source-path Specify targets by source path --use-builtin-age bool|auto Use builtin age (default auto) --use-builtin-git bool|auto Use builtin git (default auto) -v, --verbose Make output more verbose -W, --working-tree path Set working tree directory (default ) > stdout 'Add targets to the source state\.' PASS === CONT TestScript/gpgencryption === CONT TestScript/gpgencryptionsymmetric testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'skipping gpg tests on Windows' > [!exec:gpg] skip 'gpg not found in $PATH' > mkhomedir > mkgpgconfig -symmetric # test that chezmoi add --encrypt encrypts (1.403s) > cp golden/.encrypted $HOME > chezmoi add --encrypt $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! > exists $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc > grep '-----BEGIN PGP MESSAGE-----' $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc # test that chezmoi apply decrypts (1.698s) > rm $HOME/.encrypted > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase > cmp golden/.encrypted $HOME/.encrypted # test that chezmoi apply --exclude=encrypted does not apply encrypted files (2.785s) > rm $HOME/.encrypted > chezmoi apply --exclude=encrypted --force > ! exists $HOME/.encrypted > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase > cmp $HOME/.encrypted golden/.encrypted # test that chezmoi detects gpg encryption if gpg is configured but encryption = "gpg" is not set (1.490s) > removeline $CHEZMOICONFIGDIR/chezmoi.toml 'encryption = "gpg"' > chezmoi cat $HOME${/}.encrypted [stdout] # contents of .encrypted [stderr] gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase > cmp stdout golden/.encrypted # test that chezmoi edit --apply transparently decrypts and re-encrypts (2.161s) > chezmoi edit --apply --force $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-encrypted3081666088/.encrypted: returned in less than 1s gpg: Warning: using insecure memory! gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase > grep '# edited' $HOME/.encrypted # test that chezmoi files in subdirectories can be encrypted and that suffix can be set (3.712s) > appendline $CHEZMOICONFIGDIR/chezmoi.toml ' suffix = ".gpg"' > mkdir $HOME/.dir > cp golden/.encrypted $HOME/.dir > chezmoi add --encrypt $HOME${/}.dir${/}.encrypted [stderr] gpg: Warning: using insecure memory! > grep '-----BEGIN PGP MESSAGE-----' $CHEZMOISOURCEDIR/dot_dir/encrypted_dot_encrypted.gpg > chezmoi edit --apply $HOME${/}.dir${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-encrypted1603235837/.dir/.encrypted: returned in less than 1s gpg: Warning: using insecure memory! gpg: Warning: using insecure memory! gpg: AES.CFB encrypted data gpg: encrypted with 1 passphrase > grep '# edited' $HOME/.dir/.encrypted PASS === CONT TestScript/gpg === CONT TestScript/gpgencryption testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'skipping gpg tests on Windows' > [!exec:gpg] skip 'gpg not found in $PATH' > mkhomedir > mkgpgconfig # test that chezmoi add --encrypt encrypts (1.510s) > cp golden/.encrypted $HOME > chezmoi add --encrypt $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 > exists $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc > grep '-----BEGIN PGP MESSAGE-----' $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc # test that chezmoi apply decrypts (1.845s) > rm $HOME/.encrypted > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > cmp golden/.encrypted $HOME/.encrypted # test that chezmoi apply --exclude=encrypted does not apply encrypted files (3.635s) > rm $HOME/.encrypted > chezmoi apply --exclude=encrypted --force > ! exists $HOME/.encrypted > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > cmp $HOME/.encrypted golden/.encrypted # test that chezmoi detects gpg encryption if gpg is configured but encryption = "gpg" is not set (1.793s) > removeline $CHEZMOICONFIGDIR/chezmoi.toml 'encryption = "gpg"' > chezmoi cat $HOME${/}.encrypted [stdout] # contents of .encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > cmp stdout golden/.encrypted # test that chezmoi decrypt decrypts stdin (2.307s) > stdin $CHEZMOISOURCEDIR${/}encrypted_dot_encrypted.asc > chezmoi decrypt [stdout] # contents of .encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > cmp stdout golden/.encrypted # test that chezmoi decrypt decrypts a file (2.139s) > chezmoi decrypt $CHEZMOISOURCEDIR${/}encrypted_dot_encrypted.asc [stdout] # contents of .encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > cmp stdout golden/.encrypted # test chezmoi encrypt/chezmoi decrypt round trip (2.910s) > chezmoi encrypt golden/.encrypted [stdout] -----BEGIN PGP MESSAGE----- hQGMA49yDz0cWk7yAQv/UJYMJs3U7+JkHZpZwfqRaKVZwBukY1lI3T+77+G/ugSx rzj63J+qOxD1/7pwSkFzttEw4dawmligQ0F4YTHA69dtx7tjobEKXwbBS7q5/xZv aHHnXpCb4H4pSqLAr/TlE+d14oe58C9DItKI2u/wWNEJcwSOikoBvAcYtRazPHlf V8InO+zyqmgz0d+XManIpmNg7UoH+qkT7038FSXEvxvEIIzjtJfF0Ad9P9EI09oS dXN5Mqv6YCj8NFz6SEELqA7e+/s7cA+K3onXMznJfvtN4KKQYzOdd/9KWEtM5moN LDYfkGLQ/VT8ueqgxgxL7hRmEChuq1GTirTtwFVOixAMApLSzxTFm3xqV6utcnbk R+q/OpxorrRqESZ74rXaE7c9iCdZ2QUhUD0PEJF6/d+879EPVgyBcoIbBY/tn+ss 8NGIyZbyZk8LmZrfTML3HulL5i/V2tZPn/yiauyv9dWAFV733Q5W5y6kPavQ+67z Ephr8vsqc3pWjlGQJD850lwBDNMJcgw7NIfv17853Z2cv7cHyQhs4ec7btbgzM6Y ji0F3qNDU22fFCJ5+vVPIwxe+pEFa90rnQK8sr7UyDOuWPBGjYIshTg7YsKBtlQ1 Amg5DSll7F9yLVHq5g== =fvOZ -----END PGP MESSAGE----- [stderr] gpg: Warning: using insecure memory! > stdout '-----BEGIN PGP MESSAGE-----' > stdin stdout > chezmoi decrypt [stdout] # contents of .encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > cmp stdout golden/.encrypted # test that chezmoi edit --apply transparently decrypts and re-encrypts (2.390s) > chezmoi edit --apply --force $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-encrypted3392150391/.encrypted: returned in less than 1s gpg: Warning: using insecure memory! gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > grep '# edited' $HOME/.encrypted # test that chezmoi files in subdirectories can be encrypted and that suffix can be set (3.660s) > appendline $CHEZMOICONFIGDIR/chezmoi.toml ' suffix = ".gpg"' > mkdir $HOME/.dir > cp golden/.encrypted $HOME/.dir > chezmoi add --encrypt $HOME${/}.dir${/}.encrypted [stderr] gpg: Warning: using insecure memory! > grep '-----BEGIN PGP MESSAGE-----' $CHEZMOISOURCEDIR/dot_dir/encrypted_dot_encrypted.gpg > chezmoi edit --apply $HOME${/}.dir${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-encrypted4006565527/.dir/.encrypted: returned in less than 1s gpg: Warning: using insecure memory! gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" > grep '# edited' $HOME/.dir/.encrypted # test that chezmoi edit strips the encrypted suffix (1.800s) > [!windows] env EDITOR=echo > [windows] env EDITOR=printargs > chezmoi edit $HOME${/}.dir${/}.encrypted [stdout] $WORK/.tmp/chezmoi-encrypted2185721936/.dir/.encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 8F720F3D1C5A4EF2, created 2022-07-29 "chezmoi-test-gpg-key" chezmoi: warning: /usr/bin/echo $WORK/.tmp/chezmoi-encrypted2185721936/.dir/.encrypted: returned in less than 1s gpg: Warning: using insecure memory! > stdout '\.dir/\.encrypted\r?$' PASS === CONT TestScript/gopass testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/gopass > [windows] unix2dos bin/gopass.cmd > [windows] unix2dos golden/gopass-raw # test gopass template function (1.478s) > chezmoi execute-template '{{ gopass "misc/example.com" }}' [stdout] examplepassword> stdout ^examplepassword$ # test gopass template function (1.504s) > chezmoi execute-template '{{ gopassRaw "misc/example.com" }}' [stdout] Secret: misc/example.com examplepassword key: value > cmp stdout golden/gopass-raw PASS === CONT TestScript/git testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/git > [windows] unix2dos bin/git.cmd > chezmoi git hello [stdout] hello > exists $CHEZMOISOURCEDIR > stdout hello PASS === CONT TestScript/generate testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi generate install.sh generates a shell script (1.481s) > chezmoi generate install.sh [stdout] #!/bin/sh # -e: exit on error # -u: exit on unset variables set -eu if ! chezmoi="$(command -v chezmoi)"; then bin_dir="${HOME}/.local/bin" chezmoi="${bin_dir}/chezmoi" echo "Installing chezmoi to '${chezmoi}'" >&2 if command -v curl >/dev/null; then chezmoi_install_script="$(curl -fsSL https://chezmoi.io/get)" elif command -v wget >/dev/null; then chezmoi_install_script="$(wget -qO- https://chezmoi.io/get)" else echo "To install chezmoi, you must have curl or wget installed." >&2 exit 1 fi sh -c "${chezmoi_install_script}" -- -b "${bin_dir}" unset chezmoi_install_script bin_dir fi # POSIX way to get script's dir: https://stackoverflow.com/a/29834779/12156188 script_dir="$(cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P)" set -- init --apply --source="${script_dir}" echo "Running 'chezmoi $*'" >&2 # exec: replace current process with chezmoi exec "$chezmoi" "$@" > stdout '#!/bin/sh' PASS === CONT TestScript/forget testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip # FIXME make this test pass on windows > mksourcedir # test that chezmoi apply sets the state (5.496s) > chezmoi apply --force > exists $CHEZMOISOURCEDIR/dot_file > chezmoi state get --bucket=entryState --key=$WORK/home/user/.dir [stdout] { "type": "dir", "mode": 2147484141 } > cmp stdout golden/state-get-dir.json > chezmoi state get --bucket=entryState --key=$WORK/home/user/.file [stdout] { "type": "file", "mode": 420, "contentsSHA256": "634a4dd193c7b3b926d2e08026aa81a416fd41cec52854863b974af422495663" } > cmp stdout golden/state-get-file.json # test that chezmoi forget forgets a dir (2.140s) > exists $CHEZMOISOURCEDIR/dot_dir > chezmoi forget --force $HOME${/}.dir > ! exists $CHEZMOISOURCEDIR/dot_dir > chezmoi state get --bucket=entryState --key=$WORK/home/user/.dir > ! stdout . # test that chezmoi forget forgets a file (2.280s) > chezmoi forget --force $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/dot_file > chezmoi state get --bucket=entryState --key=$WORK/home/user/.file > ! stdout . > chhome home2/user # test that chezmoi forget forgets a file when .chezmoiroot is used (1.260s) > chezmoi forget --force $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/home/dot_file PASS === CONT TestScript/externalzip testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'zip may not support the --symlinks option' > [!exec:zip] skip 'zip not found in $PATH' > symlink archive/dir/symlink -> file > exec zip -r --symlinks www/archive.zip archive [stdout] adding: archive/ (stored 0%) adding: archive/dir/ (stored 0%) adding: archive/dir/symlink (stored 0%) adding: archive/dir/file (stored 0%) > httpd www # test that chezmoi reads external zip archives from .chezmoiexternal.json (1.318s) > chezmoi apply --force > cmp $HOME/.dir/dir/file golden/dir/file > issymlink $HOME/.dir/dir/symlink PASS === CONT TestScript/externalguess testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > httpd www # test that chezmoi sniffs the format of tar files (1.400s) > exec tar -cf www/archive.tar archive/ > cp www/archive.tar www/archive > chezmoi apply --force --refresh-externals > cmp $HOME/.dir/dir/file golden/dir/file # test that chezmoi sniffs the format of tar.bz2 files (1.533s) > exec tar -cjf www/archive.tar.bz2 archive/ > cp www/archive.tar.bz2 www/archive > chezmoi apply --force --refresh-externals > cmp $HOME/.dir/dir/file golden/dir/file # test that chezmoi sniffs the format of tar.gz files (1.407s) > exec tar -czf www/archive.tar.gz archive/ > cp www/archive.tar.gz www/archive > chezmoi apply --force --refresh-externals > cmp $HOME/.dir/dir/file golden/dir/file > [!exec:zip] stop 'zip not found in $PATH' # test that chezmoi sniffs the format of zip files (1.410s) > exec zip -r www/archive.zip archive [stdout] adding: archive/ (stored 0%) adding: archive/dir/ (stored 0%) adding: archive/dir/file (stored 0%) > cp www/archive.zip www/archive > chezmoi apply --force --refresh-externals > cmp $HOME/.dir/dir/file golden/dir/file > chhome home2/user # test that chezmoi allows the format to be overridden (1.460s) > cp www/archive.zip www/archive2.tar.gz > chezmoi apply --force > cmp $HOME/.dir/dir/file golden/dir/file PASS === CONT TestScript/externalgitrepo testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > [!exec:git] skip 'git not found in $PATH' > mkgitconfig > expandenv $WORK/home/user/.local/share/chezmoi/.chezmoiexternal.toml # create a git repo (0.128s) > cd $WORK/repo $WORK/repo > exec git init [stdout] Initialized empty Git repository in $WORK/repo/.git/ > exec git add . > exec git commit --message 'initial commit' [stdout] [master (root-commit) bccb40c] initial commit 1 file changed, 1 insertion(+) create mode 100644 .file > cd $WORK $WORK # test that chezmoi apply clones the git repo (1.524s) > chezmoi apply [stderr] Cloning into '$WORK/home/user/.dir'... > cmp $HOME/.dir/.file golden/.file > chhome home2/user > mkgitconfig > expandenv $WORK/home2/user/.local/share/chezmoi/.chezmoiexternal.toml # test that chezmoi apply clones the git repo (1.569s) > chezmoi apply [stderr] Cloning into '$WORK/home2/user/.dir'... > cmp $HOME/.dir/.file golden/.file # update the git repo (0.078s) > cd $WORK/repo $WORK/repo > edit $WORK/repo/.file > exec git commit --message 'edit .file' . [stdout] [master e9217f9] edit .file 1 file changed, 1 insertion(+) > cd $WORK $WORK > chhome home/user # test that chezmoi apply does not pull from the git repo when refreshDuration is zero (1.396s) > chezmoi apply > ! grep '# edited' $HOME/.dir/.file # test that chezmoi apply --refresh-externals does pull from the git repo (1.510s) > chezmoi apply --refresh-externals [stdout] Updating bccb40c..e9217f9 Fast-forward .file | 1 + 1 file changed, 1 insertion(+) [stderr] From file://$WORK/repo bccb40c..e9217f9 master -> origin/master > grep '# edited' $HOME/.dir/.file > chhome home2/user # test that chezmoi apply does not pull from the git repo within the refresh period (1.659s) > chezmoi apply > ! grep '# edited' $HOME/.dir/.file # test that chezmoi dump prints the git command (1.440s) > chezmoi dump --format=yaml [stdout] $WORK/home2/user/.dir: type: command path: /usr/bin/git args: - git - pull > stdout 'type: command' PASS === CONT TestScript/externalfilter testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:base64] skip 'base64 not found in $PATH' > httpd www # test that chezmoi filters external files (1.696s) > chezmoi cat $HOME${/}.file [stdout] # contents of .file > cmp stdout golden/.file PASS === CONT TestScript/externalencrypted === CONT TestScript/gpg testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'skipping gpg tests on Windows' > [!exec:gpg] skip 'gpg not found in $PATH' > mkhomedir > mkgpgconfig # test that chezmoi add --encrypt encrypts (1.535s) > cp golden/.encrypted $HOME > chezmoi add --encrypt $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 > exists $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc > grep '-----BEGIN PGP MESSAGE-----' $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc # test that chezmoi apply decrypts (2.301s) > rm $HOME/.encrypted > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 764A1D26A2569B81, created 2022-07-29 "chezmoi-test-gpg-key" > cmp golden/.encrypted $HOME/.encrypted # test that chezmoi edit --apply transparently decrypts and re-encrypts (2.562s) > chezmoi edit --apply --force $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 764A1D26A2569B81, created 2022-07-29 "chezmoi-test-gpg-key" chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-encrypted743414147/.encrypted: returned in less than 1s gpg: Warning: using insecure memory! gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 764A1D26A2569B81, created 2022-07-29 "chezmoi-test-gpg-key" > grep '# edited' $HOME/.encrypted PASS === CONT TestScript/externalarchiveinclude testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > symlink archive/symlink1 -> file1 > symlink archive/symlink2 -> file2 > mkdir www > exec tar czf www/archive.tar.gz archive > httpd www # test that chezmoi includes all files by default (1.495s) > chezmoi managed [stdout] .dir .dir/dir .dir/dir/subdir1 .dir/dir/subdir1/file1 .dir/dir/subdir1/file2 .dir/dir/subdir2 .dir/dir/subdir2/file1 .dir/dir/subdir2/file2 .dir/file1 .dir/file2 .dir/symlink1 .dir/symlink2 > cmp stdout golden/managed > chhome home2/user # test that chezmoi can include only certain files by default (1.223s) > chezmoi managed [stdout] .dir .dir/dir .dir/dir/subdir1 .dir/dir/subdir1/file1 .dir/dir/subdir1/file2 > cmp stdout golden/managed2 > chhome home3/user # test that chezmoi can exclude only certain files by default (1.263s) > chezmoi managed [stdout] .dir .dir/dir .dir/dir/subdir1 .dir/dir/subdir1/file1 .dir/file1 .dir/symlink1 > cmp stdout golden/managed3 > chhome home4/user # test that chezmoi can include and exclude files (1.281s) > chezmoi managed [stdout] .dir .dir/dir .dir/dir/subdir1 .dir/dir/subdir1/file1 .dir/dir/subdir2 .dir/dir/subdir2/file1 .dir/file1 .dir/symlink1 .dir/symlink2 > cmp stdout golden/managed4 > chhome home5/user # test that chezmoi can include selected files in sub-directories (1.292s) > chezmoi managed [stdout] .dir .dir/dir/subdir2/file1 .dir/dir/subdir2/file2 > cmp stdout golden/managed5 PASS === CONT TestScript/external testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > symlink archive/dir/symlink -> file > exec tar czf www/archive.tar.gz archive > httpd www # test that chezmoi diff includes external files by default (1.223s) > chezmoi diff [stdout] diff --git a/.file b/.file new file mode 100644 index 0000000000000000000000000000000000000000..8a52cb9ce9551221716a53786ad74104c5902362 --- /dev/null +++ b/.file @@ -0,0 +1 @@ +# contents of .file > stdout '^diff --git a/\.file b/\.file$' # test that chezmoi diff --exclude=externals excludes diffs from external files (1.394s) > chezmoi diff --exclude=externals > ! stdout '^diff --git a/\.file b/\.file$' # test that chezmoi reads external files from .chezmoiexternal.toml (1.245s) > chezmoi apply --force > cmp $HOME/.file golden/.file > [!windows] cmpmod 666 $HOME/.file > chhome home2/user # test that chezmoi reads executable external files from .chezmoiexternal.toml (1.359s) > chezmoi apply --force > cmp $HOME/.file golden/.file > [!windows] cmpmod 777 $HOME/.file > chhome home3/user # test that chezmoi diff includes external archives by default (1.302s) > chezmoi diff [stdout] diff --git a/.dir/dir b/.dir/dir new file mode 40755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 --- /dev/null +++ b/.dir/dir diff --git a/.dir/dir/file b/.dir/dir/file new file mode 100644 index 0000000000000000000000000000000000000000..8a1745cd1f75b4d1f4bfcad207954b6e09676aac --- /dev/null +++ b/.dir/dir/file @@ -0,0 +1 @@ +# contents of dir/file diff --git a/.dir/dir/symlink b/.dir/dir/symlink new file mode 120000 index 0000000000000000000000000000000000000000..f73f3093ff865c514c6c51f867e35f693487d0d3 --- /dev/null +++ b/.dir/dir/symlink @@ -0,0 +1 @@ +file > stdout '^diff --git a/\.dir/dir/file b/\.dir/dir/file$' # test that chezmoi diff --exclude=externals excludes diffs from external archives (1.170s) > chezmoi diff --exclude=externals > ! stdout '^diff --git a/\.dir/dir/file b/\.dir/dir/file$' # test that chezmoi reads external archives from .chezmoiexternal.yaml (1.195s) > chezmoi apply --force > cmp $HOME/.dir/dir/file golden/dir/file > [!windows] readlink $HOME/.dir/dir/symlink file > exists $HOME/.dir/file > chhome home4/user # test that chezmoi reads exact external archives from .chezmoiexternal.yaml (1.211s) > chezmoi apply --force > cmp $HOME/.dir/dir/file golden/dir/file > [!windows] readlink $HOME/.dir/dir/symlink file > ! exists $HOME/.dir/file > chhome home5/user # test that chezmoi reads externals from subdirectories (1.173s) > chezmoi apply --force > cmp $HOME/.dir/subdir/dir/file golden/dir/file > [!windows] readlink $HOME/.dir/subdir/dir/symlink file > chhome home6/user # test that .chezmoiignore applies to entries in externals (1.461s) > chezmoi apply --force > exists $HOME/.dir/dir/ > exists $HOME/.dir/dir/file > ! exists $HOME/.dir/dir/symlink > chhome home7/user # test that .chezmoiignore applies to entire externals (1.207s) > chezmoi apply --force > chhome home8/user # test that parent directories are created if needed (1.320s) > chezmoi apply --force > cmp $HOME/.dir1/file golden/dir/file > cmp $HOME/.dir2/dir2/file golden/dir/file > cmp $HOME/.dir3/dir3/dir3/file golden/dir/file > chhome home9/user # test that duplicate equivalent directories are allowed (2.080s) > chezmoi apply --force PASS === CONT TestScript/executetemplate === CONT TestScript/externalencrypted testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'skipping gpg tests on Windows' > [!exec:gpg] skip 'gpg not found in $PATH' > mkgpgconfig # use chezmoi's encryption to encrypt a file and an archive (2.054s) > exec tar czf $HOME/archive.tar.gz archive > chezmoi add --encrypt $HOME${/}.file $HOME${/}archive.tar.gz [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 gpg: Warning: using insecure memory! > mkdir www > cp $CHEZMOISOURCEDIR/encrypted_dot_file.asc www/.file.asc > cp $CHEZMOISOURCEDIR/encrypted_archive.tar.gz.asc www/archive.tar.gz.asc > httpd www > chhome home2/user # test that chezmoi reads encrypted external files and archives (2.922s) > mkdir $CHEZMOICONFIGDIR > cp home/user/.config/chezmoi/chezmoi.toml $CHEZMOICONFIGDIR > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID A99D8F72BD580F37, created 2022-07-29 "chezmoi-test-gpg-key" gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID A99D8F72BD580F37, created 2022-07-29 "chezmoi-test-gpg-key" > cmp $HOME/.file golden/.file > cmp $HOME/.dir/file golden/dir/file PASS === CONT TestScript/exclude testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!umask:022] skip # test chezmoi diff --exclude (1.591s) > chezmoi diff --exclude=scripts [stdout] diff --git a/.file b/.file new file mode 100644 index 0000000000000000000000000000000000000000..8a52cb9ce9551221716a53786ad74104c5902362 --- /dev/null +++ b/.file @@ -0,0 +1 @@ +# contents of .file > [!windows] cmp stdout golden/diff-no-scripts.diff > [windows] cmp stdout golden/diff-no-scripts-windows.diff # test that chezmoi diff respects the diff.exclude configuration variable (3.738s) > chezmoi diff [stdout] diff --git a/.file b/.file new file mode 100644 index 0000000000000000000000000000000000000000..8a52cb9ce9551221716a53786ad74104c5902362 --- /dev/null +++ b/.file @@ -0,0 +1 @@ +# contents of .file diff --git a/script.sh b/script.sh index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3747a7ba08ee591c41b7c518e430d2802137eac4 100755 --- a/script.sh +++ b/script.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +echo $* > [!windows] cmp stdout golden/diff.diff > [windows] cmp stdout golden/diff-windows.diff > mkdir $CHEZMOICONFIGDIR > cp golden/chezmoi.toml $CHEZMOICONFIGDIR > chezmoi diff [stdout] diff --git a/.file b/.file new file mode 100644 index 0000000000000000000000000000000000000000..8a52cb9ce9551221716a53786ad74104c5902362 --- /dev/null +++ b/.file @@ -0,0 +1 @@ +# contents of .file > [!windows] cmp stdout golden/diff-no-scripts.diff > [windows] cmp stdout golden/diff-no-scripts-windows.diff PASS === CONT TestScript/errors testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test duplicate source state entry detection (1.727s) > cp $CHEZMOISOURCEDIR/dot_file $CHEZMOISOURCEDIR/empty_dot_file > ! chezmoi verify [stderr] chezmoi: .file: inconsistent state ($WORK/home/user/.local/share/chezmoi/dot_file, $WORK/home/user/.local/share/chezmoi/empty_dot_file) [exit status 1] > stderr 'inconsistent state' > chhome home2/user # test invalid config (1.766s) > ! chezmoi verify [stderr] chezmoi: invalid config: $WORK/home2/user/.config/chezmoi/chezmoi.json: While parsing config: unexpected end of JSON input [exit status 1] > stderr 'invalid config' > chhome home3/user # test source directory is not a directory (1.817s) > ! chezmoi verify [stderr] chezmoi: $WORK/home3/user/.local/share/chezmoi: not a directory [exit status 1] > stderr 'not a directory' > chhome home4/user # test that chezmoi checks .chezmoiversion (1.580s) > ! chezmoi verify [stderr] chezmoi: source state requires chezmoi version 3.0.0 or later, chezmoi is version 2.0.0+test [exit status 1] > stderr 'source state requires chezmoi version' > chhome home5/user # test that chezmoi checks .chezmoiversion when .chezmoiroot is used (1.847s) > ! chezmoi verify [stderr] chezmoi: source state requires chezmoi version 3.0.0 or later, chezmoi is version 2.0.0+test [exit status 1] > stderr 'source state requires chezmoi version' > chhome home6/user # test duplicate script detection (1.900s) > ! chezmoi verify [stderr] chezmoi: install_packages: inconsistent state ($WORK/home6/user/.local/share/chezmoi/run_install_packages, $WORK/home6/user/.local/share/chezmoi/run_once_install_packages) [exit status 1] > stderr 'inconsistent state' # FIXME add more tests (0.000s) PASS === CONT TestScript/encryptiontemplatefuncs cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/edithardlink testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'Windows does not support hardlinks' # test that chezmoi edit uses a hardlink by default (2.013s) > chezmoi edit $HOME${/}.file [stdout] $WORK/.tmp/chezmoi-edit452007506/.file [stderr] chezmoi: warning: echo $WORK/.tmp/chezmoi-edit452007506/.file: returned in less than 1s > stdout /\.file$ # test that chezmoi edit --hardlink=false does not use a hardlink (1.822s) > chezmoi edit --hardlink=false $HOME${/}.file [stdout] $WORK/home/user/.local/share/chezmoi/dot_file [stderr] chezmoi: warning: echo $WORK/home/user/.local/share/chezmoi/dot_file: returned in less than 1s > stdout ${CHEZMOISOURCEDIR@R}/dot_file$ PASS === CONT TestScript/editconfig testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that edit-config creates a config file if needed (1.614s) > chezmoi edit-config [stderr] chezmoi: warning: $WORK/bin/editor $WORK/home/user/.config/chezmoi/chezmoi.toml: returned in less than 1s > grep -count=1 '# edited' $CHEZMOICONFIGDIR/chezmoi.toml # test that edit-config edits an existing config file (1.991s) > chezmoi edit-config [stderr] chezmoi: warning: $WORK/bin/editor $WORK/home/user/.config/chezmoi/chezmoi.toml: returned in less than 1s > grep -count=2 '# edited' $CHEZMOICONFIGDIR/chezmoi.toml > chhome home2/user # test that edit-config edits an existing YAML config file (1.925s) > chezmoi edit-config > grep -count=1 '# edited' $CHEZMOICONFIGDIR/chezmoi.yaml > ! stderr warning > chhome home3/user # test that edit-config reports a warning if the config is no longer valid (2.043s) > chezmoi edit-config [stderr] chezmoi: warning: $WORK/home3/user/.config/chezmoi/chezmoi.json: While parsing config: invalid character '#' after top-level value > stderr warning > ! stderr 'returned in less than' > grep -count=1 '# edited' $CHEZMOICONFIGDIR/chezmoi.json PASS === CONT TestScript/edit === CONT TestScript/executetemplate testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test reading args (1.859s) > chezmoi execute-template '{{ "arg-template" }}' [stdout] arg-template> stdout arg-template # test reading from stdin (1.522s) > stdin golden/stdin.tmpl > chezmoi execute-template [stdout] stdin-template > stdout stdin-template # test partial templates work (1.858s) > chezmoi execute-template '{{ template "partial" }}' [stdout] hello world > stdout 'hello world' # test that symlinks are supported in .chezmoitemplates (1.340s) > symlink $CHEZMOISOURCEDIR/.chezmoitemplates/symlink -> partial > chezmoi execute-template '{{ template "symlink" }}' [stdout] hello world > stdout 'hello world' # FIXME merge the following tests into a single test (1.805s) > chezmoi execute-template '{{ .last.config }}' [stdout] chezmoi.toml> stdout 'chezmoi\.toml' # test that template data are read from .chezmoidata.json (1.882s) > chezmoi execute-template '{{ .last.json }}' [stdout] .chezmoidata.json> stdout '\.chezmoidata\.json' # test that template data are read from .chezmoidata.toml (1.720s) > chezmoi execute-template '{{ .last.toml }}' [stdout] .chezmoidata.toml> stdout '\.chezmoidata\.toml' # test that template data are read from .chezmoidata.yaml (1.542s) > chezmoi execute-template '{{ .last.yaml }}' [stdout] .chezmoidata.yaml> stdout '\.chezmoidata\.yaml' # test that the last .chezmoidata. file read wins (1.600s) > chezmoi execute-template '{{ .last.format }}' [stdout] .chezmoidata.yaml> stdout '\.chezmoidata\.yaml' # test that the config file wins over .chezmoidata. (1.630s) > chezmoi execute-template '{{ .last.global }}' [stdout] chezmoi.toml> stdout chezmoi.toml # test that chezmoi execute-template --init does not include .chezmoidata. data (1.915s) > ! chezmoi execute-template --init '{{ .last.format }}' [stderr] chezmoi: template: arg1:1:8: executing "arg1" at <.last.format>: map has no entry for key "format" [exit status 1] > stderr 'map has no entry for key "format"' # test --init --promptBool (3.117s) > chezmoi execute-template --init --promptBool value=yes '{{ promptBool "value" }}' [stdout] true> stdout true > ! chezmoi execute-template --promptBool value=error [stderr] chezmoi: strconv.ParseBool: parsing "error": invalid syntax [exit status 1] > stderr 'invalid syntax' # test --init --promptBool with a default value (1.828s) > chezmoi execute-template --init '{{ promptBool "value" true }}' [stdout] true> stdout true # test --init --promptInt (3.520s) > chezmoi execute-template --init --promptInt value=1 '{{ promptInt "value" }}' [stdout] 1> stdout 1 > ! chezmoi execute-template --promptInt value=error [stderr] chezmoi: invalid argument "value=error" for "--promptInt" flag: strconv.Atoi: parsing "error": invalid syntax [exit status 1] > stderr 'invalid syntax' # test --init --promptInt with a default value (1.800s) > chezmoi execute-template --init '{{ promptInt "value" 1 }}' [stdout] 1> stdout 1 # test --init --promptString (1.879s) > chezmoi execute-template --init --promptString email=user@example.com '{{ promptString "email" }}' [stdout] user@example.com> stdout 'user@example.com' # test --init --promptString without a default value (1.765s) > chezmoi execute-template --init '{{ promptString "value" }}' [stdout] value> stdout value # test --init --promptString with a default value (1.776s) > chezmoi execute-template --init '{{ promptString "value" "default" }}' [stdout] default> stdout default PASS === CONT TestScript/edgecases === CONT TestScript/edit testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir > mksourcedir # test that chezmoi edit edits a single file (1.535s) > chezmoi edit $HOME${/}.file [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit4135907478/.file: returned in less than 1s > grep -count=1 '# edited' $CHEZMOISOURCEDIR/dot_file > ! grep '# edited' $HOME/.file # test that chezmoi edit --apply applies the edit. (1.737s) > chezmoi edit --apply --force $HOME${/}.file [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit1918152931/.file: returned in less than 1s > grep -count=2 '# edited' $CHEZMOISOURCEDIR/dot_file > grep -count=2 '# edited' $HOME/.file # test that chezmoi edit edits a symlink (1.656s) > chezmoi edit $HOME${/}.symlink [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit2069223543/.symlink: returned in less than 1s > grep -count=1 '# edited' $CHEZMOISOURCEDIR/symlink_dot_symlink # test that chezmoi edit edits a script (1.966s) > chezmoi edit $HOME${/}script.sh [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit2473194353/script.sh: returned in less than 1s > grep -count=1 '# edited' $CHEZMOISOURCEDIR/run_script.sh # test that chezmoi edit edits a file and a symlink (1.516s) > chezmoi edit $HOME${/}.file $HOME${/}.symlink [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit3146697337/.file $WORK/.tmp/chezmoi-edit3146697337/.symlink: returned in less than 1s > grep -count=3 '# edited' $CHEZMOISOURCEDIR/dot_file > grep -count=2 '# edited' $CHEZMOISOURCEDIR/symlink_dot_symlink # test that chezmoi edit edits the working tree (1.701s) > chezmoi edit [stderr] chezmoi: warning: $WORK/bin/editor $WORK/home/user/.local/share/chezmoi: returned in less than 1s > exists $CHEZMOISOURCEDIR/.edited # test that chezmoi edit edits a directory (1.749s) > [!windows] chezmoi edit $HOME${/}.dir [stderr] chezmoi: warning: $WORK/bin/editor $WORK/home/user/.local/share/chezmoi/dot_dir: returned in less than 1s > [!windows] exists $CHEZMOISOURCEDIR/dot_dir/.edited > chhome home2/user # test that chezmoi edit edits a file when the working tree and the source dir are different (1.850s) > chezmoi edit $HOME${/}.file [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit993754046/.file: returned in less than 1s > grep -count=1 '# edited' $CHEZMOISOURCEDIR/home/dot_file # test that chezmoi edit edits the working tree when working tree and the source dir are different (1.790s) > chezmoi edit [stderr] chezmoi: warning: $WORK/bin/editor $WORK/home2/user/.local/share/chezmoi: returned in less than 1s > exists $CHEZMOISOURCEDIR/.edited > ! exists $CHEZMOISOURCEDIR/home/.edited PASS === CONT TestScript/dumpyaml testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!umask:022] skip > mksourcedir > chezmoi dump --format=yaml [stdout] .create: type: file name: .create contents: | # contents of .create perm: 420 .dir: type: dir name: .dir perm: 493 .dir/file: type: file name: .dir/file contents: | # contents of .dir/file perm: 420 .dir/subdir: type: dir name: .dir/subdir perm: 493 .dir/subdir/file: type: file name: .dir/subdir/file contents: | # contents of .dir/subdir/file perm: 420 .empty: type: file name: .empty contents: "" perm: 420 .executable: type: file name: .executable contents: | # contents of .executable perm: 493 .file: type: file name: .file contents: | # contents of .file perm: 420 .private: type: file name: .private contents: | # contents of .private perm: 384 .readonly: type: file name: .readonly contents: | # contents of .readonly perm: 292 .symlink: type: symlink name: .symlink linkname: .dir/subdir/file .template: type: file name: .template contents: | key = value perm: 420 > cmp stdout golden/dump.yaml > chezmoi dump --exclude=dirs --format=yaml [stdout] .create: type: file name: .create contents: | # contents of .create perm: 420 .dir/file: type: file name: .dir/file contents: | # contents of .dir/file perm: 420 .dir/subdir/file: type: file name: .dir/subdir/file contents: | # contents of .dir/subdir/file perm: 420 .empty: type: file name: .empty contents: "" perm: 420 .executable: type: file name: .executable contents: | # contents of .executable perm: 493 .file: type: file name: .file contents: | # contents of .file perm: 420 .private: type: file name: .private contents: | # contents of .private perm: 384 .readonly: type: file name: .readonly contents: | # contents of .readonly perm: 292 .symlink: type: symlink name: .symlink linkname: .dir/subdir/file .template: type: file name: .template contents: | key = value perm: 420 > cmp stdout golden/dump-except-dirs.yaml PASS === CONT TestScript/dumpjson === CONT TestScript/edgecases cmd.go:370: FIXME make the following test pass testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir # test that chezmoi add --dry-run does not modify anything (1.747s) > chezmoi add --dry-run $HOME${/}.file > ! exists $CHEZMOICONFIGDIR/chezmoistate.boltdb > ! exists $CHEZMOISOURCEDIR/dot_file # test that chezmoi add updates the persistent state (3.589s) > chezmoi add $HOME${/}.file > exists $CHEZMOICONFIGDIR/chezmoistate.boltdb > exists $CHEZMOISOURCEDIR/dot_file > chezmoi state dump [stdout] { "configState": {}, "entryState": { "$WORK/home/user/.file": { "contentsSHA256": "634a4dd193c7b3b926d2e08026aa81a416fd41cec52854863b974af422495663", "mode": 420, "type": "file" } }, "scriptState": {} } > stdout 634a4dd193c7b3b926d2e08026aa81a416fd41cec52854863b974af422495663 # sha256sum of "# contents of .file\n" # test that chezmoi apply updates the state if the target and destination states match, even if the last written state does not (7.328s) > edit $CHEZMOISOURCEDIR/dot_file > edit $HOME/.file > cmp $HOME/.file $CHEZMOISOURCEDIR/dot_file > chezmoi apply --dry-run $HOME${/}.file > chezmoi state dump [stdout] { "configState": {}, "entryState": { "$WORK/home/user/.file": { "contentsSHA256": "634a4dd193c7b3b926d2e08026aa81a416fd41cec52854863b974af422495663", "mode": 420, "type": "file" } }, "scriptState": {} } > ! stdout 2e9dd6a2a8c15b20d4b0882d4c0fb8c7eea4e8ece46818090b387132f9f84c34 # sha256sum of "# contents of .file\n# edited\n" > chezmoi apply $HOME${/}.file > chezmoi state dump [stdout] { "configState": {}, "entryState": { "$WORK/home/user/.file": { "contentsSHA256": "2e9dd6a2a8c15b20d4b0882d4c0fb8c7eea4e8ece46818090b387132f9f84c34", "mode": 420, "type": "file" } }, "scriptState": {} } > stdout 2e9dd6a2a8c15b20d4b0882d4c0fb8c7eea4e8ece46818090b387132f9f84c34 # sha256sum of "# contents of .file\n# edited\n" > chhome home2/user # test that the source directory can be a symlink to another directory (1.533s) > symlink $HOME/.chezmoi -> $CHEZMOISOURCEDIR > chezmoi apply --source=$HOME${/}.chezmoi > cmp $HOME/.file golden/.file # test that adding a directory ending in a slash only adds the directory once (1.839s) > mkdir $HOME/.dir > chezmoi add $HOME${/}.dir/ > ! exists $CHEZMOISOURCEDIR/dot_dir/dot_dir > chhome home3/user # test that chezmoi reports an inconsistent state error when a file should be both removed and present (2.030s) > ! chezmoi apply [stderr] chezmoi: .file: inconsistent state ($WORK/home3/user/.local/share/chezmoi/dot_file, remove) [exit status 1] > stderr 'chezmoi: \.file: inconsistent state' > chhome home4/user # test that chezmoi reports an error if there is a .chezmoi* file in the .chezmoitemplates directory (1.901s) > ! chezmoi status [stderr] chezmoi: .chezmoitemplates: not allowed in $WORK/home4/user/.local/share/chezmoi/.chezmoitemplates/.chezmoiignore directory [exit status 1] > ! stderr 'not allowed in \.chezmoitemplates directory' > skip 'FIXME make the following test pass' === CONT TestScript/doctor_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/doctor_unix === CONT TestScript/dumpjson testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!umask:022] skip > mksourcedir > chezmoi dump --format=json [stdout] { ".create": { "type": "file", "name": ".create", "contents": "# contents of .create\n", "perm": 420 }, ".dir": { "type": "dir", "name": ".dir", "perm": 493 }, ".dir/file": { "type": "file", "name": ".dir/file", "contents": "# contents of .dir/file\n", "perm": 420 }, ".dir/subdir": { "type": "dir", "name": ".dir/subdir", "perm": 493 }, ".dir/subdir/file": { "type": "file", "name": ".dir/subdir/file", "contents": "# contents of .dir/subdir/file\n", "perm": 420 }, ".empty": { "type": "file", "name": ".empty", "contents": "", "perm": 420 }, ".executable": { "type": "file", "name": ".executable", "contents": "# contents of .executable\n", "perm": 493 }, ".file": { "type": "file", "name": ".file", "contents": "# contents of .file\n", "perm": 420 }, ".private": { "type": "file", "name": ".private", "contents": "# contents of .private\n", "perm": 384 }, ".readonly": { "type": "file", "name": ".readonly", "contents": "# contents of .readonly\n", "perm": 292 }, ".symlink": { "type": "symlink", "name": ".symlink", "linkname": ".dir/subdir/file" }, ".template": { "type": "file", "name": ".template", "contents": "key = value\n", "perm": 420 } } > cmp stdout golden/dump.json > chezmoi dump --format=json $HOME${/}.file [stdout] { ".file": { "type": "file", "name": ".file", "contents": "# contents of .file\n", "perm": 420 } } > cmp stdout golden/dump-file.json > chezmoi dump --format=json $HOME${/}.dir [stdout] { ".dir": { "type": "dir", "name": ".dir", "perm": 493 }, ".dir/file": { "type": "file", "name": ".dir/file", "contents": "# contents of .dir/file\n", "perm": 420 }, ".dir/subdir": { "type": "dir", "name": ".dir/subdir", "perm": 493 }, ".dir/subdir/file": { "type": "file", "name": ".dir/subdir/file", "contents": "# contents of .dir/subdir/file\n", "perm": 420 } } > cmp stdout golden/dump-dir.json > chezmoi dump --format=json --recursive=false $HOME${/}.dir [stdout] { ".dir": { "type": "dir", "name": ".dir", "perm": 493 } } > cmp stdout golden/dump-dir-non-recursive.json > ! chezmoi dump $HOME${/}.inputrc [stderr] chezmoi: $WORK/home/user/.inputrc: not in source state [exit status 1] > stderr 'not in source state' PASS === CONT TestScript/diffcommand_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/diffcommand_unix === CONT TestScript/doctor_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > chmod 755 bin/age > chmod 755 bin/bw > chmod 755 bin/git > chmod 755 bin/gopass > chmod 755 bin/gpg > chmod 755 bin/keepassxc > chmod 755 bin/keeper > chmod 755 bin/lpass > chmod 755 bin/op > chmod 755 bin/pass > chmod 755 bin/pinentry > chmod 755 bin/secret > chmod 755 bin/shell > chmod 755 bin/vault > chmod 755 bin/vimdiff > mkhomedir > mksourcedir # test that chezmoi doctor behaves as expected (4.045s) > chezmoi doctor [stdout] RESULT CHECK MESSAGE ok version v2.0.0+test, commit HEAD, built at 2022-07-29T21:32:16Z, built by testscript warning latest-version v2.20.0 ok os-arch linux/riscv64 (Arch Linux) ok uname Linux felix1 5.15.10+ #1 SMP Fri Dec 24 14:24:27 CST 2021 riscv64 GNU/Linux ok go-version go1.18.4 (gc) ok executable /tmp/testscript-main3051842446/bin/chezmoi ok upgrade-method replace-executable warning config-file ~/.config/chezmoi/chezmoi.toml and ~/.config/chezmoi/chezmoi.yaml: multiple config files ok source-dir ~/.local/share/chezmoi is a directory warning suspicious-entries ~/.local/share/chezmoi/dot_config/chezmoi/chezmoi.toml.tmpl ok working-tree ~/.local/share/chezmoi is a directory ok dest-dir ~ is a directory ok shell-command found $WORK/bin/shell ok shell-args $WORK/bin/shell ok cd-command found $WORK/bin/shell ok cd-args $WORK/bin/shell ok edit-command found $WORK/bin/editor ok edit-args $WORK/bin/editor info diff-command not set ok umask 022 ok git-command found $WORK/bin/git, version 2.29.2 ok merge-command found $WORK/bin/vimdiff warning age-command found $WORK/bin/age, cannot parse version from (devel) ok gpg-command found $WORK/bin/gpg, version 2.2.23 ok pinentry-command found $WORK/bin/pinentry, version 1.2.0 ok 1password-command found $WORK/bin/op, version 1.3.0 ok bitwarden-command found $WORK/bin/bw, version 1.12.1 ok gopass-command found $WORK/bin/gopass, version 1.10.1 ok keepassxc-command found $WORK/bin/keepassxc, version 2.5.4 ok keeper-command found $WORK/bin/keeper, version 16.6.4 info keepassxc-db not set ok lastpass-command found $WORK/bin/lpass, version 1.3.3 ok pass-command found $WORK/bin/pass, version 1.7.3 ok vault-command found $WORK/bin/vault, version 1.5.5 ok secret-command found $WORK/bin/secret > stdout '^ok\s+version\s+' > stdout '^\w+\s+latest-version\s+' > stdout '^ok\s+os-arch\s+' > ! stdout '^\S+\s+systeminfo\s+' > stdout '^ok\s+uname\s+' > stdout '^warning\s+config-file\s+.*multiple config files' > stdout '^ok\s+source-dir\s+' > stdout '^warning\s+suspicious-entries\s+' > stdout '^ok\s+dest-dir\s+' > stdout '^ok\s+shell-command\s+' > stdout '^ok\s+shell-args\s+' > stdout '^ok\s+cd-command\s+' > stdout '^ok\s+cd-args\s+' > stdout '^ok\s+edit-command\s+' > stdout '^ok\s+edit-args\s+' > stdout '^ok\s+git-command\s+' > stdout '^ok\s+merge-command\s+' > stdout '^warning\s+age-command\s+' > stdout '^ok\s+gpg-command\s+' > stdout '^ok\s+pinentry-command\s+' > stdout '^ok\s+1password-command\s+' > stdout '^ok\s+bitwarden-command\s+' > stdout '^ok\s+gopass-command\s+' > stdout '^ok\s+keepassxc-command\s+' > stdout '^info\s+keepassxc-db\s+' > stdout '^ok\s+keeper-command\s+' > stdout '^ok\s+lastpass-command\s+' > stdout '^ok\s+pass-command\s+' > stdout '^ok\s+vault-command\s+' > stdout '^ok\s+secret-command\s+' > chhome home2/user # test that chezmoi doctor warns about missing directories on an empty system (4.158s) > ! chezmoi doctor [stdout] RESULT CHECK MESSAGE ok version v2.0.0+test, commit HEAD, built at 2022-07-29T21:32:21Z, built by testscript warning latest-version v2.20.0 ok os-arch linux/riscv64 (Arch Linux) ok uname Linux felix1 5.15.10+ #1 SMP Fri Dec 24 14:24:27 CST 2021 riscv64 GNU/Linux ok go-version go1.18.4 (gc) ok executable /tmp/testscript-main3051842446/bin/chezmoi ok upgrade-method replace-executable ok config-file no config file found error source-dir open ~/.local/share/chezmoi: no such file or directory ok suspicious-entries ~/.local/share/chezmoi: no such file or directory error working-tree open ~/.local/share/chezmoi: no such file or directory ok dest-dir ~ is a directory ok shell-command found $WORK/bin/shell ok shell-args $WORK/bin/shell ok cd-command found $WORK/bin/shell ok cd-args $WORK/bin/shell ok edit-command found $WORK/bin/editor ok edit-args $WORK/bin/editor info diff-command not set ok umask 022 ok git-command found $WORK/bin/git, version 2.29.2 ok merge-command found $WORK/bin/vimdiff warning age-command found $WORK/bin/age, cannot parse version from (devel) ok gpg-command found $WORK/bin/gpg, version 2.2.23 info pinentry-command not set ok 1password-command found $WORK/bin/op, version 1.3.0 ok bitwarden-command found $WORK/bin/bw, version 1.12.1 ok gopass-command found $WORK/bin/gopass, version 1.10.1 info keepassxc-command keepassxc-cli not found in $PATH ok keeper-command found $WORK/bin/keeper, version 16.6.4 info keepassxc-db not set ok lastpass-command found $WORK/bin/lpass, version 1.3.3 ok pass-command found $WORK/bin/pass, version 1.7.3 ok vault-command found $WORK/bin/vault, version 1.5.5 info secret-command not set [stderr] chezmoi: exit status 1 [exit status 1] > stdout '^ok\s+config-file\s+' > stdout '^error\s+source-dir\s+' > stdout '^ok\s+suspicious-entries\s+' > chhome home3/user # test that chezmoi doctor warns about suspicious entries (4.046s) > chezmoi doctor [stdout] RESULT CHECK MESSAGE ok version v2.0.0+test, commit HEAD, built at 2022-07-29T21:32:25Z, built by testscript warning latest-version v2.20.0 ok os-arch linux/riscv64 (Arch Linux) ok uname Linux felix1 5.15.10+ #1 SMP Fri Dec 24 14:24:27 CST 2021 riscv64 GNU/Linux ok go-version go1.18.4 (gc) ok executable /tmp/testscript-main3051842446/bin/chezmoi ok upgrade-method replace-executable ok config-file no config file found ok source-dir ~/.local/share/chezmoi is a directory warning suspicious-entries ~/.local/share/chezmoi/.chezmoisuspicious ok working-tree ~/.local/share/chezmoi is a directory ok dest-dir ~ is a directory ok shell-command found $WORK/bin/shell ok shell-args $WORK/bin/shell ok cd-command found $WORK/bin/shell ok cd-args $WORK/bin/shell ok edit-command found $WORK/bin/editor ok edit-args $WORK/bin/editor info diff-command not set ok umask 022 ok git-command found $WORK/bin/git, version 2.29.2 ok merge-command found $WORK/bin/vimdiff warning age-command found $WORK/bin/age, cannot parse version from (devel) ok gpg-command found $WORK/bin/gpg, version 2.2.23 info pinentry-command not set ok 1password-command found $WORK/bin/op, version 1.3.0 ok bitwarden-command found $WORK/bin/bw, version 1.12.1 ok gopass-command found $WORK/bin/gopass, version 1.10.1 info keepassxc-command keepassxc-cli not found in $PATH ok keeper-command found $WORK/bin/keeper, version 16.6.4 info keepassxc-db not set ok lastpass-command found $WORK/bin/lpass, version 1.3.3 ok pass-command found $WORK/bin/pass, version 1.7.3 ok vault-command found $WORK/bin/vault, version 1.5.5 info secret-command not set > stdout '^warning\s+suspicious-entries\s+' PASS === CONT TestScript/diff === CONT TestScript/diffcommand_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test that chezmoi diff invokes diff.command when configured (1.783s) > chezmoi diff [stdout] $WORK/home/user/.file $WORK/.tmp/chezmoi-diff1280863555/.file > stdout ^${HOME@R}/\.file\s+${WORK@R}/.*/\.file$ # test that chezmoi diff --use-builtin-diff uses the builtin diff even if diff.command is configured (1.509s) > chezmoi diff --use-builtin-diff [stdout] diff --git a/.file b/.file index bd729e8ee3cc005444c67dc77eed60016886b5e0..b508963510528ab709627ec448026a10a64c72ef 100644 --- a/.file +++ b/.file @@ -1 +1 @@ -# destination contents of .file +# target contents of .file > cmp stdout golden/diff.diff # test that chezmoi diff --reverse reverses the order of arguments (1.890s) > chezmoi diff --reverse [stdout] $WORK/.tmp/chezmoi-diff2677152745/.file $WORK/home/user/.file > stdout ^${WORK@R}/.*/\.file\s+${HOME@R}/\.file$ # test that chezmoi apply --verbose uses diff.command (1.546s) > chezmoi apply --verbose [stdout] $WORK/home/user/.file $WORK/.tmp/chezmoi-diff133890124/.file > stdout ^${HOME@R}/\.file\s+${WORK@R}/.*/\.file$ > chhome home2/user # test that chezmoi diff appends the destination and target paths if diff.args does not contain any templates (1.776s) > chezmoi diff [stdout] arg $WORK/home2/user/.file $WORK/.tmp/chezmoi-diff3830795368/.file > stdout ^arg\s+${HOME@R}/\.file\s+${WORK@R}/.*/\.file$ # test that chezmoi apply --verbose uses diff.command (1.758s) > chezmoi apply --verbose [stdout] arg $WORK/home2/user/.file $WORK/.tmp/chezmoi-diff1873502328/.file > stdout ^arg\s+${HOME@R}/\.file\s+${WORK@R}/.*/\.file$ > exists $HOME/.file > chhome home3/user # test that chezmoi diff ignores exit code 1 from diff.command if the files differ (1.569s) > chezmoi diff > chhome home4/user # test that chezmoi diff does not ignore exit code 2 from diff.command (2.220s) > ! chezmoi diff [stderr] chezmoi: exit status 2 [exit status 1] > stderr 'exit status 2' PASS === CONT TestScript/debug cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/data testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi data includes data set in config file (1.609s) > chezmoi data [stdout] { "chezmoi": { "arch": "riscv64", "args": [ "chezmoi", "data" ], "cacheDir": "$WORK/home/user/.cache/chezmoi", "configFile": "$WORK/home/user/.config/chezmoi/chezmoi.toml", "executable": "/tmp/testscript-main3051842446/bin/chezmoi", "fqdnHostname": "felix1", "gid": "1019", "group": "builduser", "homeDir": "$WORK/home/user", "hostname": "felix1", "kernel": { "osrelease": "5.15.10+", "ostype": "Linux", "version": "#1 SMP Fri Dec 24 14:24:27 CST 2021" }, "os": "linux", "osRelease": { "ansiColor": "38;2;23;147;209", "bugReportURL": "https://bugs.archlinux.org/", "buildID": "rolling", "documentationURL": "https://wiki.archlinux.org/", "homeURL": "https://archlinux.org/", "id": "arch", "logo": "archlinux-logo", "name": "Arch Linux", "prettyName": "Arch Linux", "supportURL": "https://bbs.archlinux.org/" }, "sourceDir": "$WORK/home/user/.local/share/chezmoi", "uid": "1019", "username": "builduser", "version": { "builtBy": "testscript", "commit": "HEAD", "date": "2022-07-29T21:32:35Z", "version": "v2.0.0+test" }, "windowsVersion": {}, "workingTree": "$WORK/home/user/.local/share/chezmoi" }, "uniquekey": "uniqueValue" } > stdout '"chezmoi":' > stdout '"uniquekey": "uniqueValue"' # viper downcases uniqueKey # test that chezmoi data --format=json includes data set in config file (1.600s) > chezmoi data --format=json [stdout] { "chezmoi": { "arch": "riscv64", "args": [ "chezmoi", "data", "--format=json" ], "cacheDir": "$WORK/home/user/.cache/chezmoi", "configFile": "$WORK/home/user/.config/chezmoi/chezmoi.toml", "executable": "/tmp/testscript-main3051842446/bin/chezmoi", "fqdnHostname": "felix1", "gid": "1019", "group": "builduser", "homeDir": "$WORK/home/user", "hostname": "felix1", "kernel": { "osrelease": "5.15.10+", "ostype": "Linux", "version": "#1 SMP Fri Dec 24 14:24:27 CST 2021" }, "os": "linux", "osRelease": { "ansiColor": "38;2;23;147;209", "bugReportURL": "https://bugs.archlinux.org/", "buildID": "rolling", "documentationURL": "https://wiki.archlinux.org/", "homeURL": "https://archlinux.org/", "id": "arch", "logo": "archlinux-logo", "name": "Arch Linux", "prettyName": "Arch Linux", "supportURL": "https://bbs.archlinux.org/" }, "sourceDir": "$WORK/home/user/.local/share/chezmoi", "uid": "1019", "username": "builduser", "version": { "builtBy": "testscript", "commit": "HEAD", "date": "2022-07-29T21:32:36Z", "version": "v2.0.0+test" }, "windowsVersion": {}, "workingTree": "$WORK/home/user/.local/share/chezmoi" }, "uniquekey": "uniqueValue" } > stdout '"chezmoi":' > stdout '"uniquekey": "uniqueValue"' # test that chezmoi data --format=yaml includes data set in config file (1.400s) > chezmoi data --format=yaml [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --format=yaml cacheDir: $WORK/home/user/.cache/chezmoi configFile: $WORK/home/user/.config/chezmoi/chezmoi.toml executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: $WORK/home/user/.local/share/chezmoi uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:32:37Z" version: v2.0.0+test windowsVersion: {} workingTree: $WORK/home/user/.local/share/chezmoi uniquekey: uniqueValue > stdout 'chezmoi:' > stdout 'uniquekey: uniqueValue' PASS === CONT TestScript/create cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply creates a file from a template (1.829s) > mkdir $CHEZMOISOURCEDIR > cp golden/create_dot_create.tmpl $CHEZMOISOURCEDIR > chezmoi apply --force > cmp $HOME/.create golden/.create > [windows] skip 'UNIX only' > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/configstate === CONT TestScript/diff testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!umask:022] skip > mkhomedir golden > mkhomedir > mksourcedir # test that chezmoi diff generates no output when the source and destination states are equal (1.865s) > chezmoi diff > ! stdout . # test that chezmoi diff generates a diff when a file is added to the source state (1.858s) > cp golden/dot_newfile $CHEZMOISOURCEDIR/dot_newfile > chezmoi diff [stdout] diff --git a/.newfile b/.newfile new file mode 100644 index 0000000000000000000000000000000000000000..06e05235fdd12fd5c367b6d629fef94536c85525 --- /dev/null +++ b/.newfile @@ -0,0 +1 @@ +# contents of .newfile > [!windows] cmp stdout golden/add-newfile-diff-unix.diff > [windows] cmp stdout golden/add-newfile-diff-windows.diff > rm $CHEZMOISOURCEDIR/dot_newfile # test that chezmoi diff generates a diff when a file is edited (3.795s) > edit $HOME/.file > chezmoi diff [stdout] diff --git a/.file b/.file index 5d2730a8850a2db479af83de87cc8345437aef06..8a52cb9ce9551221716a53786ad74104c5902362 100644 --- a/.file +++ b/.file @@ -1,2 +1 @@ # contents of .file -# edited > [!windows] cmp stdout golden/modify-file-diff-unix.diff > [windows] cmp stdout golden/modify-file-diff-windows.diff > chezmoi apply --force $HOME${/}.file # test chezmoi diff --reverse (3.444s) > edit $HOME/.file > chezmoi diff --reverse [stdout] diff --git a/.file b/.file index 8a52cb9ce9551221716a53786ad74104c5902362..5d2730a8850a2db479af83de87cc8345437aef06 100644 --- a/.file +++ b/.file @@ -1 +1,2 @@ # contents of .file +# edited > [!windows] cmp stdout golden/modify-file-diff-reverse-unix.diff > [windows] cmp stdout golden/modify-file-diff-reverse-windows.diff > chezmoi apply --force $HOME${/}.file # test that chezmoi diff generates a diff when a file is removed from the destination directory (3.434s) > rm $HOME/.file > chezmoi diff [stdout] diff --git a/.file b/.file new file mode 100644 index 0000000000000000000000000000000000000000..8a52cb9ce9551221716a53786ad74104c5902362 --- /dev/null +++ b/.file @@ -0,0 +1 @@ +# contents of .file > [!windows] cmp stdout golden/restore-file-diff-unix.diff > [windows] cmp stdout golden/restore-file-diff-windows.diff > chezmoi apply --force $HOME${/}.file # test that chezmoi diff generates a diff when a directory is removed from the destination directory (3.648s) > rm $HOME/.dir > chezmoi diff --recursive=false $HOME${/}.dir [stdout] diff --git a/.dir b/.dir new file mode 40755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 --- /dev/null +++ b/.dir > [!windows] cmp stdout golden/restore-dir-diff-unix.diff > [windows] cmp stdout golden/restore-dir-diff-windows.diff > chezmoi apply --force $HOME${/}.dir # test that chezmoi diff generates a diff when the actual state is a file and the target state is a symlink (1.615s) > rm $HOME/.symlink > cp golden/.file $HOME/.symlink > chezmoi diff [stdout] diff --git a/.symlink b/.symlink deleted file mode 100644 index 8a52cb9ce9551221716a53786ad74104c5902362..0000000000000000000000000000000000000000 --- a/.symlink +++ /dev/null @@ -1 +0,0 @@ -# contents of .file diff --git a/.symlink b/.symlink old mode 100644 new mode 120000 index 8a52cb9ce9551221716a53786ad74104c5902362..9b91fdbb83798a67fbbc5cc4f120c3f7726c0d70 --- a/.symlink +++ b/.symlink @@ -1 +1 @@ -# contents of .file +.dir/subdir/file > [!windows] cmp stdout golden/symlink-file-diff-unix.diff # [windows] cmp stdout golden/symlink-file-diff-windows # FIXME (1.785s) > chezmoi apply --force $HOME${/}.symlink > [windows] stop 'remaining tests use file modes' # test that chezmoi diff generates a diff when a file's permissions are changed (3.358s) > chmod 777 $HOME/.file > chezmoi diff [stdout] diff --git a/.file b/.file old mode 100777 new mode 100644 > cmp stdout golden/chmod-file-diff.diff > chezmoi apply --force $HOME${/}.file # test that chezmoi diff generates a diff when a directory's permissions are changed (3.872s) > chmod 700 $HOME/.dir > chezmoi diff [stdout] diff --git a/.dir b/.dir old mode 40700 new mode 40755 > cmp stdout golden/chmod-dir-diff.diff > chezmoi apply --force --recursive=false $HOME${/}.dir PASS === CONT TestScript/config === CONT TestScript/configstate testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi init creates a config file and updates the state (3.920s) > chezmoi init > cmp $CHEZMOICONFIGDIR/chezmoi.toml golden/chezmoi.toml > chezmoi state dump --format=yaml [stdout] configState: configState: configTemplateContentsSHA256: af43121a524340707b84e390f510c949731177e6f2a25b3b6b11b2fc656cf8f2 entryState: {} scriptState: {} > cmp stdout golden/state-dump.yaml > ! stderr . # test that chezmoi apply succeeds (1.610s) > chezmoi apply > ! stderr . # test that chezmoi apply prints a warning if the config file template has been changed (1.560s) > cp golden/.chezmoi.toml.tmpl $CHEZMOISOURCEDIR/.chezmoi.toml.tmpl > chezmoi apply [stderr] chezmoi: warning: config file template has changed, run chezmoi init to regenerate config file > stderr 'warning: config file template has changed' # test that chezmoi init re-generates the config file (1.911s) > chezmoi init > cmp $CHEZMOICONFIGDIR/chezmoi.toml golden/chezmoi.toml > ! stderr . # test that chezmoi apply no longer prints a warning after the config file is regenerated (1.629s) > chezmoi apply > ! stderr . # test that chezmoi apply --force ignores config file changes and updates the state (1.503s) > edit $CHEZMOISOURCEDIR/.chezmoi.toml.tmpl > grep '# edited' $CHEZMOISOURCEDIR/.chezmoi.toml.tmpl > chezmoi apply --force > ! stderr . > ! grep '# edited' $CHEZMOICONFIGDIR/chezmoi.toml > chhome home2/user # test that chezmoi diff prints a warning when a config file template is added (3.608s) > chezmoi diff > ! stderr . > cp golden/chezmoi.toml $CHEZMOISOURCEDIR/.chezmoi.toml.tmpl > chezmoi diff [stderr] chezmoi: warning: config file template has changed, run chezmoi init to regenerate config file > stderr 'warning: config file template has changed' # test that chezmoi diff does not print a warning when the config file template is removed (1.620s) > rm $CHEZMOISOURCEDIR/.chezmoi.toml.tmpl > chezmoi diff > ! stderr . PASS === CONT TestScript/completion_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' # test chezmoi cat completion of targets in a directory (2.040s) > chezmoi __complete cat $HOME [stdout] $WORK/home/user/.dir/ $WORK/home/user/.dir/file $WORK/home/user/.file :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmpenv stdout golden/complete-target-home # test chezmoi cat completion of matching absolute targets (2.030s) > chezmoi __complete cat $HOME/.f [stdout] $WORK/home/user/.file :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmpenv stdout golden/complete-target-home-dot-f # test chezmoi cat completion of matching relative targets (2.340s) > cd $HOME $WORK/home/user > chezmoi __complete cat .f [stdout] .file :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmpenv stdout $WORK/golden/complete-dot-f-in-home > cd $WORK $WORK # test chezmoi chattr completion of attributes (1.520s) > chezmoi __complete chattr p [stdout] private :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmp stdout golden/complete-attribute-p # test chezmoi chattr completion of targets (1.733s) > chezmoi __complete cat private $HOME [stdout] $WORK/home/user/.dir/ $WORK/home/user/.dir/file $WORK/home/user/.file :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmpenv stdout golden/complete-target-home PASS === CONT TestScript/completion === CONT TestScript/config testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test default config (1.794s) > chezmoi data --format=yaml [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --format=yaml cacheDir: $WORK/home/user/.cache/chezmoi configFile: $WORK/home/user/.config/chezmoi/chezmoi.toml executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: $WORK/home/user/.local/share/chezmoi uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:32:58Z" version: v2.0.0+test windowsVersion: {} workingTree: $WORK/home/user/.local/share/chezmoi > stdout 'sourceDir: .*/home/user/.local/share/chezmoi' # test that flags override default config (1.824s) > chezmoi data --format=yaml --source=/flag/source [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --format=yaml - --source=/flag/source cacheDir: $WORK/home/user/.cache/chezmoi configFile: $WORK/home/user/.config/chezmoi/chezmoi.toml executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: /flag/source uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:33:00Z" version: v2.0.0+test windowsVersion: {} workingTree: /flag/source > stdout 'sourceDir: .*/flag/source' > chhome home2/user # test that flags override default config (1.742s) > chezmoi execute-template --source=/flag/source '{{ .chezmoi.sourceDir }}' [stdout] /flag/source> stdout /flag/source # test that config files override default config (1.563s) > chezmoi data --format=yaml [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --format=yaml cacheDir: $WORK/home2/user/.cache/chezmoi configFile: $WORK/home2/user/.config/chezmoi/chezmoi.toml executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home2/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: /config/source uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:33:03Z" version: v2.0.0+test windowsVersion: {} workingTree: /config/source > stdout 'sourceDir: .*/config/source' # test that the config file can be set (2.030s) > chezmoi data --config=$CHEZMOICONFIGDIR/chezmoi.yaml --format=yaml [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --config=$WORK/home2/user/.config/chezmoi/chezmoi.yaml - --format=yaml cacheDir: $WORK/home2/user/.cache/chezmoi configFile: $WORK/home2/user/.config/chezmoi/chezmoi.yaml executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home2/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: /config2/source uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:33:05Z" version: v2.0.0+test windowsVersion: {} workingTree: /config2/source > stdout 'sourceDir: .*/config2/source' # test that the cache directory can be set (1.661s) > chezmoi data --cache=/flag/cache --format=yaml [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --cache=/flag/cache - --format=yaml cacheDir: /flag/cache configFile: $WORK/home2/user/.config/chezmoi/chezmoi.toml executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home2/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: /config/source uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:33:07Z" version: v2.0.0+test windowsVersion: {} workingTree: /config/source > stdout 'cacheDir: .*/flag/cache' > [windows] stop 'remaining tests require /dev/stdin' # test that chezmoi can read the config from stdin (1.905s) > stdin home2/user/.config/chezmoi/chezmoi.yaml > chezmoi data --config=/dev/stdin --config-format=yaml --format=yaml [stdout] chezmoi: arch: riscv64 args: - chezmoi - data - --config=/dev/stdin - --config-format=yaml - --format=yaml cacheDir: $WORK/home2/user/.cache/chezmoi configFile: /dev/stdin executable: /tmp/testscript-main3051842446/bin/chezmoi fqdnHostname: felix1 gid: "1019" group: builduser homeDir: $WORK/home2/user hostname: felix1 kernel: osrelease: 5.15.10+ ostype: Linux version: '#1 SMP Fri Dec 24 14:24:27 CST 2021' os: linux osRelease: ansiColor: 38;2;23;147;209 bugReportURL: https://bugs.archlinux.org/ buildID: rolling documentationURL: https://wiki.archlinux.org/ homeURL: https://archlinux.org/ id: arch logo: archlinux-logo name: Arch Linux prettyName: Arch Linux supportURL: https://bbs.archlinux.org/ sourceDir: /config2/source uid: "1019" username: builduser version: builtBy: testscript commit: HEAD date: "2022-07-29T21:33:09Z" version: v2.0.0+test windowsVersion: {} workingTree: /config2/source > stdout 'sourceDir: .*/config2/source' PASS === CONT TestScript/chattr === CONT TestScript/completion testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi completion bash generates bash completions (1.791s) > chezmoi completion bash [stdout] # bash completion V2 for chezmoi -*- shell-script -*- __chezmoi_debug() { if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then echo "$*" >> "${BASH_COMP_DEBUG_FILE}" fi } # Macs have bash3 for which the bash-completion package doesn't include # _init_completion. This is a minimal version of that function. __chezmoi_init_completion() { COMPREPLY=() _get_comp_words_by_ref "$@" cur prev words cword } # This function calls the chezmoi program to obtain the completion # results and the directive. It fills the 'out' and 'directive' vars. __chezmoi_get_completion_results() { local requestComp lastParam lastChar args # Prepare the command to request completions for the program. # Calling ${words[0]} instead of directly chezmoi allows to handle aliases args=("${words[@]:1}") requestComp="${words[0]} __complete ${args[*]}" lastParam=${words[$((${#words[@]}-1))]} lastChar=${lastParam:$((${#lastParam}-1)):1} __chezmoi_debug "lastParam ${lastParam}, lastChar ${lastChar}" if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then # If the last parameter is complete (there is a space following it) # We add an extra empty parameter so we can indicate this to the go method. __chezmoi_debug "Adding extra empty parameter" requestComp="${requestComp} ''" fi # When completing a flag with an = (e.g., chezmoi -n=) # bash focuses on the part after the =, so we need to remove # the flag part from $cur if [[ "${cur}" == -*=* ]]; then cur="${cur#*=}" fi __chezmoi_debug "Calling ${requestComp}" # Use eval to handle any environment variables and such out=$(eval "${requestComp}" 2>/dev/null) # Extract the directive integer at the very end of the output following a colon (:) directive=${out##*:} # Remove the directive out=${out%:*} if [ "${directive}" = "${out}" ]; then # There is not directive specified directive=0 fi __chezmoi_debug "The completion directive is: ${directive}" __chezmoi_debug "The completions are: ${out}" } __chezmoi_process_completion_results() { local shellCompDirectiveError=1 local shellCompDirectiveNoSpace=2 local shellCompDirectiveNoFileComp=4 local shellCompDirectiveFilterFileExt=8 local shellCompDirectiveFilterDirs=16 if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then # Error code. No completion. __chezmoi_debug "Received error from custom completion go code" return else if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then if [[ $(type -t compopt) = "builtin" ]]; then __chezmoi_debug "Activating no space" compopt -o nospace else __chezmoi_debug "No space directive not supported in this version of bash" fi fi if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then if [[ $(type -t compopt) = "builtin" ]]; then __chezmoi_debug "Activating no file completion" compopt +o default else __chezmoi_debug "No file completion directive not supported in this version of bash" fi fi fi # Separate activeHelp from normal completions local completions=() local activeHelp=() __chezmoi_extract_activeHelp if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then # File extension filtering local fullFilter filter filteringCmd # Do not use quotes around the $completions variable or else newline # characters will be kept. for filter in ${completions[*]}; do fullFilter+="$filter|" done filteringCmd="_filedir $fullFilter" __chezmoi_debug "File filtering command: $filteringCmd" $filteringCmd elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then # File completion for directories only # Use printf to strip any trailing newline local subdir subdir=$(printf "%s" "${completions[0]}") if [ -n "$subdir" ]; then __chezmoi_debug "Listing directories in $subdir" pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return else __chezmoi_debug "Listing directories in ." _filedir -d fi else __chezmoi_handle_completion_types fi __chezmoi_handle_special_char "$cur" : __chezmoi_handle_special_char "$cur" = # Print the activeHelp statements before we finish if [ ${#activeHelp} -ne 0 ]; then printf "\n"; printf "%s\n" "${activeHelp[@]}" printf "\n" # The prompt format is only available from bash 4.4. # We test if it is available before using it. if (x=${PS1@P}) 2> /dev/null; then printf "%s" "${PS1@P}${COMP_LINE[@]}" else # Can't print the prompt. Just print the # text the user had typed, it is workable enough. printf "%s" "${COMP_LINE[@]}" fi fi } # Separate activeHelp lines from real completions. # Fills the $activeHelp and $completions arrays. __chezmoi_extract_activeHelp() { local activeHelpMarker="_activeHelp_ " local endIndex=${#activeHelpMarker} while IFS='' read -r comp; do if [ "${comp:0:endIndex}" = "$activeHelpMarker" ]; then comp=${comp:endIndex} __chezmoi_debug "ActiveHelp found: $comp" if [ -n "$comp" ]; then activeHelp+=("$comp") fi else # Not an activeHelp line but a normal completion completions+=("$comp") fi done < <(printf "%s\n" "${out}") } __chezmoi_handle_completion_types() { __chezmoi_debug "__chezmoi_handle_completion_types: COMP_TYPE is $COMP_TYPE" case $COMP_TYPE in 37|42) # Type: menu-complete/menu-complete-backward and insert-completions # If the user requested inserting one completion at a time, or all # completions at once on the command-line we must remove the descriptions. # https://github.com/spf13/cobra/issues/1508 local tab=$'\t' comp while IFS='' read -r comp; do [[ -z $comp ]] && continue # Strip any description comp=${comp%%$tab*} # Only consider the completions that match if [[ $comp == "$cur"* ]]; then COMPREPLY+=("$comp") fi done < <(printf "%s\n" "${completions[@]}") ;; *) # Type: complete (normal completion) __chezmoi_handle_standard_completion_case ;; esac } __chezmoi_handle_standard_completion_case() { local tab=$'\t' comp # Short circuit to optimize if we don't have descriptions if [[ "${completions[*]}" != *$tab* ]]; then IFS=$'\n' read -ra COMPREPLY -d '' < <(compgen -W "${completions[*]}" -- "$cur") return 0 fi local longest=0 local compline # Look for the longest completion so that we can format things nicely while IFS='' read -r compline; do [[ -z $compline ]] && continue # Strip any description before checking the length comp=${compline%%$tab*} # Only consider the completions that match [[ $comp == "$cur"* ]] || continue COMPREPLY+=("$compline") if ((${#comp}>longest)); then longest=${#comp} fi done < <(printf "%s\n" "${completions[@]}") # If there is a single completion left, remove the description text if [ ${#COMPREPLY[*]} -eq 1 ]; then __chezmoi_debug "COMPREPLY[0]: ${COMPREPLY[0]}" comp="${COMPREPLY[0]%%$tab*}" __chezmoi_debug "Removed description from single completion, which is now: ${comp}" COMPREPLY[0]=$comp else # Format the descriptions __chezmoi_format_comp_descriptions $longest fi } __chezmoi_handle_special_char() { local comp="$1" local char=$2 if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then local word=${comp%"${comp##*${char}}"} local idx=${#COMPREPLY[*]} while [[ $((--idx)) -ge 0 ]]; do COMPREPLY[$idx]=${COMPREPLY[$idx]#"$word"} done fi } __chezmoi_format_comp_descriptions() { local tab=$'\t' local comp desc maxdesclength local longest=$1 local i ci for ci in ${!COMPREPLY[*]}; do comp=${COMPREPLY[ci]} # Properly format the description string which follows a tab character if there is one if [[ "$comp" == *$tab* ]]; then __chezmoi_debug "Original comp: $comp" desc=${comp#*$tab} comp=${comp%%$tab*} # $COLUMNS stores the current shell width. # Remove an extra 4 because we add 2 spaces and 2 parentheses. maxdesclength=$(( COLUMNS - longest - 4 )) # Make sure we can fit a description of at least 8 characters # if we are to align the descriptions. if [[ $maxdesclength -gt 8 ]]; then # Add the proper number of spaces to align the descriptions for ((i = ${#comp} ; i < longest ; i++)); do comp+=" " done else # Don't pad the descriptions so we can fit more text after the completion maxdesclength=$(( COLUMNS - ${#comp} - 4 )) fi # If there is enough space for any description text, # truncate the descriptions that are too long for the shell width if [ $maxdesclength -gt 0 ]; then if [ ${#desc} -gt $maxdesclength ]; then desc=${desc:0:$(( maxdesclength - 1 ))} desc+="…" fi comp+=" ($desc)" fi COMPREPLY[ci]=$comp __chezmoi_debug "Final comp: $comp" fi done } __start_chezmoi() { local cur prev words cword split COMPREPLY=() # Call _init_completion from the bash-completion package # to prepare the arguments properly if declare -F _init_completion >/dev/null 2>&1; then _init_completion -n "=:" || return else __chezmoi_init_completion -n "=:" || return fi __chezmoi_debug __chezmoi_debug "========= starting completion logic ==========" __chezmoi_debug "cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}, cword is $cword" # The user could have moved the cursor backwards on the command-line. # We need to trigger completion from the $cword location, so we need # to truncate the command-line ($words) up to the $cword location. words=("${words[@]:0:$cword+1}") __chezmoi_debug "Truncated words[*]: ${words[*]}," local out directive __chezmoi_get_completion_results __chezmoi_process_completion_results } if [[ $(type -t compopt) = "builtin" ]]; then complete -o default -F __start_chezmoi chezmoi else complete -o default -o nospace -F __start_chezmoi chezmoi fi # ex: ts=4 sw=4 et filetype=sh > stdout '# bash completion V2 for chezmoi' # test that chezmoi completion fish generates fish completions (1.738s) > chezmoi completion fish [stdout] # fish completion for chezmoi -*- shell-script -*- function __chezmoi_debug set -l file "$BASH_COMP_DEBUG_FILE" if test -n "$file" echo "$argv" >> $file end end function __chezmoi_perform_completion __chezmoi_debug "Starting __chezmoi_perform_completion" # Extract all args except the last one set -l args (commandline -opc) # Extract the last arg and escape it in case it is a space set -l lastArg (string escape -- (commandline -ct)) __chezmoi_debug "args: $args" __chezmoi_debug "last arg: $lastArg" # Disable ActiveHelp which is not supported for fish shell set -l requestComp "CHEZMOI_ACTIVE_HELP=0 $args[1] __complete $args[2..-1] $lastArg" __chezmoi_debug "Calling $requestComp" set -l results (eval $requestComp 2> /dev/null) # Some programs may output extra empty lines after the directive. # Let's ignore them or else it will break completion. # Ref: https://github.com/spf13/cobra/issues/1279 for line in $results[-1..1] if test (string trim -- $line) = "" # Found an empty line, remove it set results $results[1..-2] else # Found non-empty line, we have our proper output break end end set -l comps $results[1..-2] set -l directiveLine $results[-1] # For Fish, when completing a flag with an = (e.g., -n=) # completions must be prefixed with the flag set -l flagPrefix (string match -r -- '-.*=' "$lastArg") __chezmoi_debug "Comps: $comps" __chezmoi_debug "DirectiveLine: $directiveLine" __chezmoi_debug "flagPrefix: $flagPrefix" for comp in $comps printf "%s%s\n" "$flagPrefix" "$comp" end printf "%s\n" "$directiveLine" end # This function does two things: # - Obtain the completions and store them in the global __chezmoi_comp_results # - Return false if file completion should be performed function __chezmoi_prepare_completions __chezmoi_debug "" __chezmoi_debug "========= starting completion logic ==========" # Start fresh set --erase __chezmoi_comp_results set -l results (__chezmoi_perform_completion) __chezmoi_debug "Completion results: $results" if test -z "$results" __chezmoi_debug "No completion, probably due to a failure" # Might as well do file completion, in case it helps return 1 end set -l directive (string sub --start 2 $results[-1]) set --global __chezmoi_comp_results $results[1..-2] __chezmoi_debug "Completions are: $__chezmoi_comp_results" __chezmoi_debug "Directive is: $directive" set -l shellCompDirectiveError 1 set -l shellCompDirectiveNoSpace 2 set -l shellCompDirectiveNoFileComp 4 set -l shellCompDirectiveFilterFileExt 8 set -l shellCompDirectiveFilterDirs 16 if test -z "$directive" set directive 0 end set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2) if test $compErr -eq 1 __chezmoi_debug "Received error directive: aborting." # Might as well do file completion, in case it helps return 1 end set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2) set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2) if test $filefilter -eq 1; or test $dirfilter -eq 1 __chezmoi_debug "File extension filtering or directory filtering not supported" # Do full file completion instead return 1 end set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2) set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2) __chezmoi_debug "nospace: $nospace, nofiles: $nofiles" # If we want to prevent a space, or if file completion is NOT disabled, # we need to count the number of valid completions. # To do so, we will filter on prefix as the completions we have received # may not already be filtered so as to allow fish to match on different # criteria than the prefix. if test $nospace -ne 0; or test $nofiles -eq 0 set -l prefix (commandline -t | string escape --style=regex) __chezmoi_debug "prefix: $prefix" set -l completions (string match -r -- "^$prefix.*" $__chezmoi_comp_results) set --global __chezmoi_comp_results $completions __chezmoi_debug "Filtered completions are: $__chezmoi_comp_results" # Important not to quote the variable for count to work set -l numComps (count $__chezmoi_comp_results) __chezmoi_debug "numComps: $numComps" if test $numComps -eq 1; and test $nospace -ne 0 # We must first split on \t to get rid of the descriptions to be # able to check what the actual completion will be. # We don't need descriptions anyway since there is only a single # real completion which the shell will expand immediately. set -l split (string split --max 1 \t $__chezmoi_comp_results[1]) # Fish won't add a space if the completion ends with any # of the following characters: @=/:., set -l lastChar (string sub -s -1 -- $split) if not string match -r -q "[@=/:.,]" -- "$lastChar" # In other cases, to support the "nospace" directive we trick the shell # by outputting an extra, longer completion. __chezmoi_debug "Adding second completion to perform nospace directive" set --global __chezmoi_comp_results $split[1] $split[1]. __chezmoi_debug "Completions are now: $__chezmoi_comp_results" end end if test $numComps -eq 0; and test $nofiles -eq 0 # To be consistent with bash and zsh, we only trigger file # completion when there are no other completions __chezmoi_debug "Requesting file completion" return 1 end end return 0 end # Since Fish completions are only loaded once the user triggers them, we trigger them ourselves # so we can properly delete any completions provided by another script. # Only do this if the program can be found, or else fish may print some errors; besides, # the existing completions will only be loaded if the program can be found. if type -q "chezmoi" # The space after the program name is essential to trigger completion for the program # and not completion of the program name itself. # Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish. complete --do-complete "chezmoi " > /dev/null 2>&1 end # Remove any pre-existing completions for the program since we will be handling all of them. complete -c chezmoi -e # The call to __chezmoi_prepare_completions will setup __chezmoi_comp_results # which provides the program's completion choices. complete -c chezmoi -n '__chezmoi_prepare_completions' -f -a '$__chezmoi_comp_results' > stdout '# fish completion for chezmoi' # test that chezmoi completion powershell generates powershell completions (1.740s) > chezmoi completion powershell [stdout] # powershell completion for chezmoi -*- shell-script -*- function __chezmoi_debug { if ($env:BASH_COMP_DEBUG_FILE) { "$args" | Out-File -Append -FilePath "$env:BASH_COMP_DEBUG_FILE" } } filter __chezmoi_escapeStringWithSpecialChars { $_ -replace '\s|#|@|\$|;|,|''|\{|\}|\(|\)|"|`|\||<|>|&','`$&' } Register-ArgumentCompleter -CommandName 'chezmoi' -ScriptBlock { param( $WordToComplete, $CommandAst, $CursorPosition ) # Get the current command line and convert into a string $Command = $CommandAst.CommandElements $Command = "$Command" __chezmoi_debug "" __chezmoi_debug "========= starting completion logic ==========" __chezmoi_debug "WordToComplete: $WordToComplete Command: $Command CursorPosition: $CursorPosition" # The user could have moved the cursor backwards on the command-line. # We need to trigger completion from the $CursorPosition location, so we need # to truncate the command-line ($Command) up to the $CursorPosition location. # Make sure the $Command is longer then the $CursorPosition before we truncate. # This happens because the $Command does not include the last space. if ($Command.Length -gt $CursorPosition) { $Command=$Command.Substring(0,$CursorPosition) } __chezmoi_debug "Truncated command: $Command" $ShellCompDirectiveError=1 $ShellCompDirectiveNoSpace=2 $ShellCompDirectiveNoFileComp=4 $ShellCompDirectiveFilterFileExt=8 $ShellCompDirectiveFilterDirs=16 # Prepare the command to request completions for the program. # Split the command at the first space to separate the program and arguments. $Program,$Arguments = $Command.Split(" ",2) $RequestComp="$Program __completeNoDesc $Arguments" __chezmoi_debug "RequestComp: $RequestComp" # we cannot use $WordToComplete because it # has the wrong values if the cursor was moved # so use the last argument if ($WordToComplete -ne "" ) { $WordToComplete = $Arguments.Split(" ")[-1] } __chezmoi_debug "New WordToComplete: $WordToComplete" # Check for flag with equal sign $IsEqualFlag = ($WordToComplete -Like "--*=*" ) if ( $IsEqualFlag ) { __chezmoi_debug "Completing equal sign flag" # Remove the flag part $Flag,$WordToComplete = $WordToComplete.Split("=",2) } if ( $WordToComplete -eq "" -And ( -Not $IsEqualFlag )) { # If the last parameter is complete (there is a space following it) # We add an extra empty parameter so we can indicate this to the go method. __chezmoi_debug "Adding extra empty parameter" # We need to use `"`" to pass an empty argument a "" or '' does not work!!! $RequestComp="$RequestComp" + ' `"`"' } __chezmoi_debug "Calling $RequestComp" # First disable ActiveHelp which is not supported for Powershell $env:CHEZMOI_ACTIVE_HELP=0 #call the command store the output in $out and redirect stderr and stdout to null # $Out is an array contains each line per element Invoke-Expression -OutVariable out "$RequestComp" 2>&1 | Out-Null # get directive from last line [int]$Directive = $Out[-1].TrimStart(':') if ($Directive -eq "") { # There is no directive specified $Directive = 0 } __chezmoi_debug "The completion directive is: $Directive" # remove directive (last element) from out $Out = $Out | Where-Object { $_ -ne $Out[-1] } __chezmoi_debug "The completions are: $Out" if (($Directive -band $ShellCompDirectiveError) -ne 0 ) { # Error code. No completion. __chezmoi_debug "Received error from custom completion go code" return } $Longest = 0 $Values = $Out | ForEach-Object { #Split the output in name and description $Name, $Description = $_.Split("`t",2) __chezmoi_debug "Name: $Name Description: $Description" # Look for the longest completion so that we can format things nicely if ($Longest -lt $Name.Length) { $Longest = $Name.Length } # Set the description to a one space string if there is none set. # This is needed because the CompletionResult does not accept an empty string as argument if (-Not $Description) { $Description = " " } @{Name="$Name";Description="$Description"} } $Space = " " if (($Directive -band $ShellCompDirectiveNoSpace) -ne 0 ) { # remove the space here __chezmoi_debug "ShellCompDirectiveNoSpace is called" $Space = "" } if ((($Directive -band $ShellCompDirectiveFilterFileExt) -ne 0 ) -or (($Directive -band $ShellCompDirectiveFilterDirs) -ne 0 )) { __chezmoi_debug "ShellCompDirectiveFilterFileExt ShellCompDirectiveFilterDirs are not supported" # return here to prevent the completion of the extensions return } $Values = $Values | Where-Object { # filter the result $_.Name -like "$WordToComplete*" # Join the flag back if we have an equal sign flag if ( $IsEqualFlag ) { __chezmoi_debug "Join the equal sign flag back to the completion value" $_.Name = $Flag + "=" + $_.Name } } if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) { __chezmoi_debug "ShellCompDirectiveNoFileComp is called" if ($Values.Length -eq 0) { # Just print an empty string here so the # shell does not start to complete paths. # We cannot use CompletionResult here because # it does not accept an empty string as argument. "" return } } # Get the current mode $Mode = (Get-PSReadLineKeyHandler | Where-Object {$_.Key -eq "Tab" }).Function __chezmoi_debug "Mode: $Mode" $Values | ForEach-Object { # store temporary because switch will overwrite $_ $comp = $_ # PowerShell supports three different completion modes # - TabCompleteNext (default windows style - on each key press the next option is displayed) # - Complete (works like bash) # - MenuComplete (works like zsh) # You set the mode with Set-PSReadLineKeyHandler -Key Tab -Function # CompletionResult Arguments: # 1) CompletionText text to be used as the auto completion result # 2) ListItemText text to be displayed in the suggestion list # 3) ResultType type of completion result # 4) ToolTip text for the tooltip with details about the object switch ($Mode) { # bash like "Complete" { if ($Values.Length -eq 1) { __chezmoi_debug "Only one completion left" # insert space after value [System.Management.Automation.CompletionResult]::new($($comp.Name | __chezmoi_escapeStringWithSpecialChars) + $Space, "$($comp.Name)", 'ParameterValue', "$($comp.Description)") } else { # Add the proper number of spaces to align the descriptions while($comp.Name.Length -lt $Longest) { $comp.Name = $comp.Name + " " } # Check for empty description and only add parentheses if needed if ($($comp.Description) -eq " " ) { $Description = "" } else { $Description = " ($($comp.Description))" } [System.Management.Automation.CompletionResult]::new("$($comp.Name)$Description", "$($comp.Name)$Description", 'ParameterValue', "$($comp.Description)") } } # zsh like "MenuComplete" { # insert space after value # MenuComplete will automatically show the ToolTip of # the highlighted value at the bottom of the suggestions. [System.Management.Automation.CompletionResult]::new($($comp.Name | __chezmoi_escapeStringWithSpecialChars) + $Space, "$($comp.Name)", 'ParameterValue', "$($comp.Description)") } # TabCompleteNext and in case we get something unknown Default { # Like MenuComplete but we don't want to add a space here because # the user need to press space anyway to get the completion. # Description will not be shown because that's not possible with TabCompleteNext [System.Management.Automation.CompletionResult]::new($($comp.Name | __chezmoi_escapeStringWithSpecialChars), "$($comp.Name)", 'ParameterValue', "$($comp.Description)") } } } } > stdout 'Register-ArgumentCompleter' # test that chezmoi completion zsh generates zsh completions (1.548s) > chezmoi completion zsh [stdout] #compdef chezmoi # zsh completion for chezmoi -*- shell-script -*- __chezmoi_debug() { local file="$BASH_COMP_DEBUG_FILE" if [[ -n ${file} ]]; then echo "$*" >> "${file}" fi } _chezmoi() { local shellCompDirectiveError=1 local shellCompDirectiveNoSpace=2 local shellCompDirectiveNoFileComp=4 local shellCompDirectiveFilterFileExt=8 local shellCompDirectiveFilterDirs=16 local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace local -a completions __chezmoi_debug "\n========= starting completion logic ==========" __chezmoi_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}" # The user could have moved the cursor backwards on the command-line. # We need to trigger completion from the $CURRENT location, so we need # to truncate the command-line ($words) up to the $CURRENT location. # (We cannot use $CURSOR as its value does not work when a command is an alias.) words=("${=words[1,CURRENT]}") __chezmoi_debug "Truncated words[*]: ${words[*]}," lastParam=${words[-1]} lastChar=${lastParam[-1]} __chezmoi_debug "lastParam: ${lastParam}, lastChar: ${lastChar}" # For zsh, when completing a flag with an = (e.g., chezmoi -n=) # completions must be prefixed with the flag setopt local_options BASH_REMATCH if [[ "${lastParam}" =~ '-.*=' ]]; then # We are dealing with a flag with an = flagPrefix="-P ${BASH_REMATCH}" fi # Prepare the command to obtain completions requestComp="${words[1]} __complete ${words[2,-1]}" if [ "${lastChar}" = "" ]; then # If the last parameter is complete (there is a space following it) # We add an extra empty parameter so we can indicate this to the go completion code. __chezmoi_debug "Adding extra empty parameter" requestComp="${requestComp} \"\"" fi __chezmoi_debug "About to call: eval ${requestComp}" # Use eval to handle any environment variables and such out=$(eval ${requestComp} 2>/dev/null) __chezmoi_debug "completion output: ${out}" # Extract the directive integer following a : from the last line local lastLine while IFS='\n' read -r line; do lastLine=${line} done < <(printf "%s\n" "${out[@]}") __chezmoi_debug "last line: ${lastLine}" if [ "${lastLine[1]}" = : ]; then directive=${lastLine[2,-1]} # Remove the directive including the : and the newline local suffix (( suffix=${#lastLine}+2)) out=${out[1,-$suffix]} else # There is no directive specified. Leave $out as is. __chezmoi_debug "No directive found. Setting do default" directive=0 fi __chezmoi_debug "directive: ${directive}" __chezmoi_debug "completions: ${out}" __chezmoi_debug "flagPrefix: ${flagPrefix}" if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then __chezmoi_debug "Completion received error. Ignoring completions." return fi local activeHelpMarker="_activeHelp_ " local endIndex=${#activeHelpMarker} local startIndex=$((${#activeHelpMarker}+1)) local hasActiveHelp=0 while IFS='\n' read -r comp; do # Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker) if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then __chezmoi_debug "ActiveHelp found: $comp" comp="${comp[$startIndex,-1]}" if [ -n "$comp" ]; then compadd -x "${comp}" __chezmoi_debug "ActiveHelp will need delimiter" hasActiveHelp=1 fi continue fi if [ -n "$comp" ]; then # If requested, completions are returned with a description. # The description is preceded by a TAB character. # For zsh's _describe, we need to use a : instead of a TAB. # We first need to escape any : as part of the completion itself. comp=${comp//:/\\:} local tab="$(printf '\t')" comp=${comp//$tab/:} __chezmoi_debug "Adding completion: ${comp}" completions+=${comp} lastComp=$comp fi done < <(printf "%s\n" "${out[@]}") # Add a delimiter after the activeHelp statements, but only if: # - there are completions following the activeHelp statements, or # - file completion will be performed (so there will be choices after the activeHelp) if [ $hasActiveHelp -eq 1 ]; then if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then __chezmoi_debug "Adding activeHelp delimiter" compadd -x "--" hasActiveHelp=0 fi fi if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then __chezmoi_debug "Activating nospace." noSpace="-S ''" fi if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then # File extension filtering local filteringCmd filteringCmd='_files' for filter in ${completions[@]}; do if [ ${filter[1]} != '*' ]; then # zsh requires a glob pattern to do file filtering filter="\*.$filter" fi filteringCmd+=" -g $filter" done filteringCmd+=" ${flagPrefix}" __chezmoi_debug "File filtering command: $filteringCmd" _arguments '*:filename:'"$filteringCmd" elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then # File completion for directories only local subdir subdir="${completions[1]}" if [ -n "$subdir" ]; then __chezmoi_debug "Listing directories in $subdir" pushd "${subdir}" >/dev/null 2>&1 else __chezmoi_debug "Listing directories in ." fi local result _arguments '*:dirname:_files -/'" ${flagPrefix}" result=$? if [ -n "$subdir" ]; then popd >/dev/null 2>&1 fi return $result else __chezmoi_debug "Calling _describe" if eval _describe "completions" completions $flagPrefix $noSpace; then __chezmoi_debug "_describe found some completions" # Return the success of having called _describe return 0 else __chezmoi_debug "_describe did not find completions." __chezmoi_debug "Checking if we should do file completion." if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then __chezmoi_debug "deactivating file completion" # We must return an error code here to let zsh know that there were no # completions found by _describe; this is what will trigger other # matching algorithms to attempt to find completions. # For example zsh can match letters in the middle of words. return 1 else # Perform file completion __chezmoi_debug "Activating file completion" # We must return the result of this command, so it must be the # last command, or else we must store its result to return it. _arguments '*:filename:_files'" ${flagPrefix}" fi fi fi } # don't run the completion function when being source-ed or eval-ed if [ "$funcstack[1]" = "_chezmoi" ]; then _chezmoi fi > stdout '#compdef chezmoi' # test that --use-builtin flags are completed (1.797s) > chezmoi __complete --use-builtin [stdout] --use-builtin-age Use builtin age --use-builtin-git Use builtin git :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmp stdout golden/use-builtin-flags # test that autoBool values are completed (1.630s) > chezmoi __complete --color t [stdout] t true :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmp stdout golden/auto-bool-t # test that mode values are completed (1.827s) > chezmoi __complete --mode '' [stdout] file symlink :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmp stdout golden/mode # test that write --format values are completed (1.702s) > chezmoi __complete state dump --format '' [stdout] json yaml :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmp stdout golden/write-data # test that write --format values are completed (1.681s) > chezmoi __complete data --format '' [stdout] json yaml :4 [stderr] Completion ended with directive: ShellCompDirectiveNoFileComp > cmp stdout golden/write-data PASS === CONT TestScript/cd_windows cmd.go:370: Windows only testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] skip 'Windows only' === CONT TestScript/cd_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > chmod 755 bin/shell # test chezmoi cd creates source directory if needed (1.652s) > chezmoi cd [stdout] shell > exists $CHEZMOISOURCEDIR > grep -count=1 ${CHEZMOISOURCEDIR@R} shell.log # test chezmoi cd changes into an existing directory (1.860s) > chezmoi cd [stdout] shell > grep -count=2 ${CHEZMOISOURCEDIR@R} shell.log # test that chezmoi cd works when $SHELL environment variable contains spaces (1.816s) > env SHELL='shell arg1' > chezmoi cd [stdout] shell arg1 > stdout '^shell arg1$' > chhome home2/user # test chezmoi cd with shell command set in config file overrides $SHELL environment variable (1.762s) > chezmoi cd [stdout] shell arg2 > stdout '^shell arg2$' PASS === CONT TestScript/cat testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir golden > mksourcedir # test that chezmoi cat prints an empty file (1.695s) > chezmoi cat $HOME${/}.empty > cmp stdout golden/.empty # test that chezmoi cat prints a file (1.734s) > chezmoi cat $HOME${/}.file [stdout] # contents of .file > cmp stdout golden/.file # test that chezmoi cat prints a symlink (1.763s) > chezmoi cat $HOME${/}.symlink [stdout] .dir/subdir/file > stdout '\.dir/subdir/file' # test that chezmoi cat prints a template (1.550s) > chezmoi cat $HOME${/}.template [stdout] key = value > cmp stdout golden/.template # test that chezmoi cat does not print directories (1.960s) > ! chezmoi cat $HOME${/}.dir [stderr] chezmoi: .dir: not a file, script, or symlink [exit status 1] > stderr 'not a file, script, or symlink' # test that chezmoi cat does not print files outside the destination directory (1.892s) > ! chezmoi cat ${/}etc${/}passwd [stderr] chezmoi: /etc/passwd: not in destination directory ($WORK/home/user) [exit status 1] > stderr 'not in destination directory' # test that chezmoi cat uses relative paths (1.708s) > mkdir $HOME/.dir > cd $HOME/.dir $WORK/home/user/.dir > chezmoi cat file [stdout] # contents of .dir/file > cmp stdout $WORK/golden/.dir/file PASS === CONT TestScript/builtingit === CONT TestScript/chattr testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test that chezmoi chattr empty sets the empty attribute on a file (1.773s) > exists $CHEZMOISOURCEDIR/dot_file > chezmoi chattr empty $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/dot_file > exists $CHEZMOISOURCEDIR/empty_dot_file # test that chezmoi attr +p sets the private attribute on a file (1.871s) > chezmoi chattr +p $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/empty_dot_file > exists $CHEZMOISOURCEDIR/private_empty_dot_file # test that chezmoi chattr t,-e sets the template attribute and removes the empty attribute on a file (1.763s) > chezmoi chattr t,-e $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/private_empty_dot_file > exists $CHEZMOISOURCEDIR/private_dot_file.tmpl # test that chezmoi chattr -- -e,-p,r sets the readonly attribute on a file and removes the empty and private attributes (1.720s) > chezmoi chattr -- -e,-p,r $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/private_dot_file.tmpl > exists $CHEZMOISOURCEDIR/readonly_dot_file.tmpl # test that chezmoi chattr -- -r,-t removes the readonly and template attributes on a file (1.590s) > chezmoi chattr -- -r,-t $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/readonly_dot_file.tmpl > exists $CHEZMOISOURCEDIR/dot_file # test that chezmoi chattr +create changes a file to be a create_ file (1.710s) > chezmoi chattr +create $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/dot_file > exists $CHEZMOISOURCEDIR/create_dot_file # test that chezmoi chattr nomodify does not change a create_ file (1.888s) > chezmoi chattr nomodify $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/dot_file > exists $CHEZMOISOURCEDIR/create_dot_file # test that chezmoi chattr modify,script,symlink changes a create_ file to a symlink_ (1.536s) > chezmoi chattr modify,script,symlink $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/create_dot_file > exists $CHEZMOISOURCEDIR/symlink_dot_file # test that chezmoi chattr -- -symlink changes a symlink_ to a regular file (1.862s) > chezmoi chattr -- -symlink $HOME${/}.file > ! exists $CHEZMOISOURCEDIR/symlink_dot_file > exists $CHEZMOISOURCEDIR/dot_file # test that chezmoi chattr nox removes the execute attribute on a file (1.511s) > exists $CHEZMOISOURCEDIR/executable_dot_executable > chezmoi chattr nox $HOME${/}.executable > ! exists $CHEZMOISOURCEDIR/executable_dot_executable > exists $CHEZMOISOURCEDIR/dot_executable # test that chezmoi chattr x sets the executable attribute on a file (1.573s) > chezmoi chattr x $HOME${/}.executable > ! exists $CHEZMOISOURCEDIR/dot_executable > exists $CHEZMOISOURCEDIR/executable_dot_executable # test that chezmoi chattr +private sets the private attribute on a create file (1.770s) > chezmoi chattr +private $HOME${/}.create > ! exists $CHEZMOISOURCEDIR/create_dot_create > exists $CHEZMOISOURCEDIR/create_private_dot_create # test that chezmoi chattr noprivate removes the private attribute on a create file (1.780s) > chezmoi chattr noprivate $HOME${/}.create > ! exists $CHEZMOISOURCEDIR/create_private_dot_create > exists $CHEZMOISOURCEDIR/create_dot_create # test that chezmoi chattr exact sets the exact attribute on a directory (1.710s) > exists $CHEZMOISOURCEDIR/dot_dir > chezmoi chattr exact $HOME${/}.dir > ! exists $CHEZMOISOURCEDIR/dot_dir > exists $CHEZMOISOURCEDIR/exact_dot_dir # test that chezmoi chattr readonly sets the readonly attribute on a directory (1.642s) > chezmoi chattr readonly $HOME${/}.dir > ! exists $CHEZMOISOURCEDIR/exact_dot_dir > exists $CHEZMOISOURCEDIR/exact_readonly_dot_dir # test that chezmoi chattr +t sets the template attribute on a symlink (1.749s) > exists $CHEZMOISOURCEDIR/symlink_dot_symlink > chezmoi chattr +t $HOME${/}.symlink > ! exists $CHEZMOISOURCEDIR/symlink_dot_symlink > exists $CHEZMOISOURCEDIR/symlink_dot_symlink.tmpl # test that chezmoi chattr -- -t removes the template attribute on a symlink (1.478s) > chezmoi chattr -- -t $HOME${/}.symlink > ! exists $CHEZMOISOURCEDIR/symlink_dot_symlink.tmpl > exists $CHEZMOISOURCEDIR/symlink_dot_symlink # test that chezmoi chattr -- before sets the before attribute on a script (1.749s) > chezmoi chattr -- before $HOME/script.sh > ! exists $CHEZMOISOURCEDIR/run_script.sh > exists $CHEZMOISOURCEDIR/run_before_script.sh # test that chezmoi chattr -- once sets the once attribute on a script (1.710s) > chezmoi chattr -- once $HOME/script.sh > ! exists $CHEZMOISOURCEDIR/run_before_script.sh > exists $CHEZMOISOURCEDIR/run_once_before_script.sh # test that chezmoi chattr -- after sets the after attribute on a script and removes the before attribute (1.323s) > chezmoi chattr -- after $HOME/script.sh > ! exists $CHEZMOISOURCEDIR/run_once_before_script.sh > exists $CHEZMOISOURCEDIR/run_once_after_script.sh # test that chezmoi chattr onchange sets the onchange attribute on a script and removes the only attribute (1.578s) > chezmoi chattr -- onchange $HOME/script.sh > ! exists $CHEZMOISOURCEDIR/run_once_after_script.sh > exists $CHEZMOISOURCEDIR/run_onchange_after_script.sh # test that chezmoi chattr -- -onchange removes the onchange attribute on a script (1.636s) > chezmoi chattr -- -onchange $HOME/script.sh > ! exists $CHEZMOISOURCEDIR/run_onchange_after_script.sh > exists $CHEZMOISOURCEDIR/run_after_script.sh # test that chezmoi chattr -- -a removes the after attribute on a script (1.549s) > chezmoi chattr -- -a $HOME/script.sh > ! exists $CHEZMOISOURCEDIR/run_after_script.sh > exists $CHEZMOISOURCEDIR/run_script.sh # test that chezmoi chattr +executable,+private,+readonly,+template sets the attributes on a modify script (1.682s) > chezmoi chattr +executable,+private,+readonly,+template $HOME${/}.modify > ! exists $CHEZMOISOURCEDIR/modify_dot_modify > exists $CHEZMOISOURCEDIR/modify_private_readonly_executable_dot_modify.tmpl # test that chezmoi chattr --dry-run --verbose generates a diff when a file is renamed (2.073s) > chezmoi chattr --dry-run --verbose +executable $HOME${/}.file [stdout] diff --git a/dot_file b/executable_dot_file rename from dot_file rename to executable_dot_file > cmp stdout golden/chattr-diff PASS === CONT TestScript/builtinage cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/bitwarden testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/bw > [windows] unix2dos bin/bw.cmd > [windows] unix2dos golden/bitwarden-attachment # test bitwarden template function (1.674s) > chezmoi execute-template '{{ (bitwarden "item" "example.com").login.password }}' [stdout] password-value> stdout ^password-value$ # test bitwardenFields template function (2.141s) > chezmoi execute-template '{{ (bitwardenFields "item" "example.com").Hidden.value }}' [stdout] hidden-value> stdout ^hidden-value$ # test bitwardenAttachment template function (1.864s) > chezmoi execute-template '{{ (bitwardenAttachment "filename" "item-id") }}' [stdout] hidden-file-value > cmp stdout golden/bitwarden-attachment PASS === CONT TestScript/autopush testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:git] skip 'git not found in $PATH' > mkgitconfig > mkhomedir golden > mkhomedir # create a repo (2.076s) > exec git init --bare $WORK/dotfiles.git [stdout] Initialized empty Git repository in $WORK/dotfiles.git/ > chezmoi init file://$WORK/dotfiles.git [stderr] Cloning into '$WORK/home/user/.local/share/chezmoi'... warning: You appear to have cloned an empty repository. # test that chezmoi add creates and pushes a commit (1.883s) > chezmoi add $HOME${/}.file [stdout] [master (root-commit) 5b3bc9a] Add dot_file 1 file changed, 1 insertion(+) create mode 100644 dot_file [stderr] To file://$WORK/dotfiles.git * [new branch] master -> master > exec git --git-dir=$WORK/dotfiles.git show HEAD [stdout] commit 5b3bc9a125ae0693a156047c0a6a2ea9b10d9141 Author: User Date: Sat Jul 30 00:34:00 2022 +0300 Add dot_file diff --git a/dot_file b/dot_file new file mode 100644 index 0000000..8a52cb9 --- /dev/null +++ b/dot_file @@ -0,0 +1 @@ +# contents of .file > stdout 'Add dot_file' # test that chezmoi edit creates and pushes a commit (2.286s) > chezmoi edit $HOME${/}.file [stdout] [master 0311ddb] Update dot_file 1 file changed, 1 insertion(+) [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit2306079163/.file: returned in less than 1s To file://$WORK/dotfiles.git 5b3bc9a..0311ddb master -> master > exec git --git-dir=$WORK/dotfiles.git show HEAD [stdout] commit 0311ddbf3d24303bd24ff87d62c6726fd5290f30 Author: User Date: Sat Jul 30 00:34:03 2022 +0300 Update dot_file diff --git a/dot_file b/dot_file index 8a52cb9..5d2730a 100644 --- a/dot_file +++ b/dot_file @@ -1 +1,2 @@ # contents of .file +# edited > stdout 'Update dot_file' # test that chezmoi forget creates and pushes a commit (2.487s) > chezmoi forget --force $HOME${/}.file [stdout] [master 80400ba] Remove dot_file 1 file changed, 2 deletions(-) delete mode 100644 dot_file [stderr] To file://$WORK/dotfiles.git 0311ddb..80400ba master -> master > exec git --git-dir=$WORK/dotfiles.git show HEAD [stdout] commit 80400bac92706ef044d9cc93811086c93612d16c Author: User Date: Sat Jul 30 00:34:05 2022 +0300 Remove dot_file diff --git a/dot_file b/dot_file deleted file mode 100644 index 5d2730a..0000000 --- a/dot_file +++ /dev/null @@ -1,2 +0,0 @@ -# contents of .file -# edited > stdout 'Remove dot_file' PASS === CONT TestScript/autocommit === CONT TestScript/builtingit testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:git] skip 'git not found in $PATH' > [solaris] skip 'go-git uses flock which is not available on solaris' > [windows] skip 'go-git does not support file:// URLs on windows' > chmod 755 golden/git > mkgitconfig > mkhomedir golden > mkhomedir # install fake git (3.728s) > cp golden/git bin > ! chezmoi init [stderr] chezmoi: exit status 1 [exit status 1] > chezmoi init --use-builtin-git=true > exists $CHEZMOISOURCEDIR/.git # create a commit (3.192s) > rm bin/git # disable fake git > cp golden/.file $CHEZMOISOURCEDIR/dot_file > chezmoi git add dot_file > chezmoi git commit -- --message 'Add dot_file' [stdout] [master (root-commit) e4f030b] Add dot_file 1 file changed, 1 insertion(+) create mode 100644 dot_file > cp golden/git bin # restore fake git > chhome home2/user # test chezmoi init --use-builtin-git=true (1.952s) > chezmoi init --use-builtin-git=true file://$WORK/home/user/.local/share/chezmoi > exists $CHEZMOISOURCEDIR/.git > cmp $CHEZMOISOURCEDIR/dot_file golden/.file > chhome home/user # create a second commit (3.264s) > rm bin/git # disable fake git > cp golden/.executable $CHEZMOISOURCEDIR/executable_dot_executable > chezmoi git add executable_dot_executable > chezmoi git commit -- --message 'Add executable_dot_executable' [stdout] [master bc55e14] Add executable_dot_executable 1 file changed, 1 insertion(+) create mode 100755 executable_dot_executable > cp golden/git bin # restore fake git > chhome home2/user # test chezmoi update --use-builtin-git=true (3.539s) > ! chezmoi update [stderr] chezmoi: exit status 1 [exit status 1] > chezmoi update --use-builtin-git=true > cmp $CHEZMOISOURCEDIR/executable_dot_executable golden/.executable > chhome home/user # test chezmoi init --branch --use-builtin-git=true (7.101s) > rm bin/git # disable fake git > chezmoi git checkout -- -b new-branch [stderr] Switched to a new branch 'new-branch' > edit $CHEZMOISOURCEDIR/dot_file > chezmoi git add dot_file > chezmoi git commit -- --message 'Edit .file' [stdout] [new-branch 6b5bd04] Edit .file 1 file changed, 1 insertion(+) > chezmoi git checkout master [stderr] Switched to branch 'master' > cp golden/git bin # restore fake git > chhome home3/user # test chezmoi init --apply --branch=new-branch --use-builtin-git=true (1.859s) > chezmoi init --apply --branch=new-branch --use-builtin-git=true file://$WORK/home/user/.local/share/chezmoi > grep '# edited' $HOME/.file PASS === CONT TestScript/archivezip cmd.go:370: unzip not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'windows line endings confuse cmp and diff' > [!exec:unzip] skip 'unzip not found in $PATH' === CONT TestScript/archivetar testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir > [windows] unix2dos golden/archive-tar > chezmoi archive --output=archive.tar > exec tar -tf archive.tar [stdout] .create .dir/ .dir/file .dir/subdir/ .dir/subdir/file .empty .executable .file .private .readonly .symlink .template > [!(illumos||openbsd)] cmp stdout golden/archive-tar > [illumos] cmp stdout golden/archive-tar-illumos > [openbsd] cmp stdout golden/archive-tar-openbsd > chezmoi archive --gzip --output=archive.tar.gz > exec tar -tzf archive.tar.gz [stdout] .create .dir/ .dir/file .dir/subdir/ .dir/subdir/file .empty .executable .file .private .readonly .symlink .template > [!(illumos||openbsd)] cmp stdout golden/archive-tar > [illumos] cmp stdout golden/archive-tar-illumos > [openbsd] cmp stdout golden/archive-tar-openbsd PASS === CONT TestScript/applyverbose === CONT TestScript/autocommit testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:git] skip 'git not found in $PATH' > mkgitconfig > mkhomedir golden > mkhomedir > chezmoi init # test that chezmoi add creates and pushes a commit (1.979s) > chezmoi add $HOME${/}.file [stdout] [master (root-commit) 804be36] Add dot_file 1 file changed, 1 insertion(+) create mode 100644 dot_file > exec git --git-dir=$CHEZMOISOURCEDIR/.git show HEAD [stdout] commit 804be36299d076cfba39a1d63b5edd62706989cf Author: User Date: Sat Jul 30 00:34:09 2022 +0300 Add dot_file diff --git a/dot_file b/dot_file new file mode 100644 index 0000000..8a52cb9 --- /dev/null +++ b/dot_file @@ -0,0 +1 @@ +# contents of .file > stdout 'Add dot_file' # test that chezmoi edit creates and pushes a commit (1.638s) > chezmoi edit $HOME${/}.file [stdout] [master f5d631e] Update dot_file 1 file changed, 1 insertion(+) [stderr] chezmoi: warning: $WORK/bin/editor $WORK/.tmp/chezmoi-edit3574875356/.file: returned in less than 1s > exec git --git-dir=$CHEZMOISOURCEDIR/.git show HEAD [stdout] commit f5d631e696723307e6ff74a944c77ec3d3cf9d1c Author: User Date: Sat Jul 30 00:34:11 2022 +0300 Update dot_file diff --git a/dot_file b/dot_file index 8a52cb9..5d2730a 100644 --- a/dot_file +++ b/dot_file @@ -1 +1,2 @@ # contents of .file +# edited > stdout 'Update dot_file' # test that chezmoi forget creates and pushes a commit (1.881s) > chezmoi forget --force $HOME${/}.file [stdout] [master d620fe4] Remove dot_file 1 file changed, 2 deletions(-) delete mode 100644 dot_file > exec git --git-dir=$CHEZMOISOURCEDIR/.git show HEAD [stdout] commit d620fe438b01eb45bc53c8dc3b6898109f0dec38 Author: User Date: Sat Jul 30 00:34:13 2022 +0300 Remove dot_file diff --git a/dot_file b/dot_file deleted file mode 100644 index 5d2730a..0000000 --- a/dot_file +++ /dev/null @@ -1,2 +0,0 @@ -# contents of .file -# edited > stdout 'Remove dot_file' PASS === CONT TestScript/applytype === CONT TestScript/applyverbose testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply --dry-run --verbose does not show scripts when scripts are excluded from diffs (1.741s) > chezmoi apply --dry-run --verbose [stdout] diff --git a/.file b/.file new file mode 100644 index 0000000000000000000000000000000000000000..8a52cb9ce9551221716a53786ad74104c5902362 --- /dev/null +++ b/.file @@ -0,0 +1 @@ +# contents of .file > [!windows] cmp stdout golden/apply.diff > [windows] cmp stdout golden/apply-windows.diff > chhome home2/user # test that chezmoi apply --dry-run --force --verbose does not show removes when removes are excluded from diffs (1.974s) > chezmoi apply --dry-run --force --verbose > ! stdout . PASS === CONT TestScript/applystate testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:sha256sum] skip 'sha256sum not found in path' > mksourcedir # test that chezmoi apply does not modify the state if nothing needs to be done (3.982s) > chezmoi apply --force > exec sha256sum $CHEZMOICONFIGDIR/chezmoistate.boltdb [stdout] d876f8d683048d48c5a39945fc98521b84cb564a35840dae312036192d9e1b2d $WORK/home/user/.config/chezmoi/chezmoistate.boltdb > cp stdout chezmoistate.boltdb-sha256-pre-apply > chezmoi apply --force > exec sha256sum $CHEZMOICONFIGDIR/chezmoistate.boltdb [stdout] d876f8d683048d48c5a39945fc98521b84cb564a35840dae312036192d9e1b2d $WORK/home/user/.config/chezmoi/chezmoistate.boltdb > cmp stdout chezmoistate.boltdb-sha256-pre-apply PASS === CONT TestScript/applysourcepath === CONT TestScript/applytype testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir golden > mkhomedir > mksourcedir # test that chezmoi apply replaces a directory with a file (1.665s) > rm $HOME/.file > mkdir $HOME/.file > chezmoi apply --force > cmp $HOME/.file golden/.file # test that chezmoi apply replaces a file with a directory (2.325s) > rm $HOME/.dir > mkfile $HOME/.dir > chezmoi apply --force > cmp $HOME/.dir/file golden/.dir/file > cmp $HOME/.dir/subdir/file golden/.dir/subdir/file # test that chezmoi apply replaces a file with a symlink (1.760s) > rm $HOME/.symlink > mkfile $HOME/.symlink > chezmoi apply --force > cmp $HOME/.symlink golden/.symlink # test that chezmoi apply replaces a symlink with a directory (1.563s) > rm $HOME/.dir/subdir > symlink $HOME/.dir/subdir -> .file > chezmoi apply --force > cmp $HOME/.dir/file golden/.dir/file > cmp $HOME/.dir/subdir/file golden/.dir/subdir/file PASS === CONT TestScript/applyskipencrypted === CONT TestScript/applysourcepath testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mksourcedir # test that chezmoi apply --source-path only applies the target (3.565s) > chezmoi apply --source-path $CHEZMOISOURCEDIR/dot_file > ! exists $HOME/.empty > exists $HOME/.file > chezmoi apply --source-path $CHEZMOISOURCEDIR/empty_dot_empty > exists $HOME/.empty # test that chezmoi apply --source-path ignores other modified files (2.496s) > edit $HOME/.file > chezmoi status [stdout] A .create A .dir A .dir/file A .dir/subdir A .dir/subdir/file A .executable MM .file A .private A .readonly A .symlink A .template > stdout 'MM \.file' > chezmoi apply --source-path $CHEZMOISOURCEDIR/executable_dot_executable > exists $HOME/.executable PASS === CONT TestScript/applyremove testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply --dry-run does not remove entries (1.296s) > chezmoi apply --dry-run --force > exists $HOME/.dir/file > exists $HOME/.file1 > exists $HOME/.file2 # test that chezmoi apply file removes only file (1.340s) > chezmoi apply --force $HOME${/}.file1 > exists $HOME/.dir/file > ! exists $HOME/.file1 > exists $HOME/.file2 # test that chezmoi apply removes all entries (1.300s) > chezmoi apply --force > ! exists $HOME/.dir/file > ! exists $HOME/.file1 > ! exists $HOME/.file2 PASS === CONT TestScript/applyexact testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi apply --dry-run does not remove entries from exact directories (1.455s) > chezmoi apply --dry-run --force > exists $HOME/.dir/file1 > exists $HOME/.dir/file2 > exists $HOME/.dir/subdir/file # test that chezmoi apply removes entries from exact directories (1.269s) > chezmoi apply --force > exists $HOME/.dir/file1 > ! exists $HOME/.dir/file2 > ! exists $HOME/.dir/subdir/file PASS === CONT TestScript/applychmod_unix testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'UNIX only' > mkhomedir golden > mkhomedir > mksourcedir # test change file mode (1.666s) > chmod 777 $HOME/.file > chezmoi apply --force > cmpmod 666 $HOME/.file # test change executable file mode (1.190s) > chmod 666 $HOME/.executable > chezmoi apply --force > cmpmod 777 $HOME/.executable # test change directory mode (1.192s) > chmod 700 $HOME/.dir > chezmoi apply --force > cmpmod 777 $HOME/.dir PASS === CONT TestScript/apply testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir golden > mksourcedir # test that chezmoi apply --dry-run does not create any files (1.258s) > chezmoi apply --dry-run --force > ! exists $HOME/.create > ! exists $HOME/.dir > ! exists $HOME/.dir/file > ! exists $HOME/.dir/subdir > ! exists $HOME/.dir/subdir/file > ! exists $HOME/.empty > ! exists $HOME/.executable > ! exists $HOME/.file > ! exists $HOME/.private > ! exists $HOME/.remove > ! exists $HOME/.template # test that chezmoi apply file creates a single file only (1.552s) > chezmoi apply --force $HOME${/}.file > ! exists $HOME/.create > ! exists $HOME/.dir > ! exists $HOME/.dir/file > ! exists $HOME/.dir/subdir > ! exists $HOME/.dir/subdir/file > ! exists $HOME/.empty > ! exists $HOME/.executable > exists $HOME/.file > ! exists $HOME/.private > ! exists $HOME/.remove > ! exists $HOME/.template # test that chezmoi apply dir --recursive=false creates only the directory (1.353s) > chezmoi apply --force --recursive=false $HOME${/}.dir > exists $HOME/.dir > ! exists $HOME/.dir/file > ! exists $HOME/.dir/subdir > ! exists $HOME/.dir/subdir/file # test that chezmoi apply dir creates all files in the directory (1.113s) > chezmoi apply --force $HOME${/}.dir > exists $HOME/.dir > exists $HOME/.dir/file > exists $HOME/.dir/subdir > exists $HOME/.dir/subdir/file # test that chezmoi apply creates all files (1.447s) > chezmoi apply --force > exists $HOME/.create > exists $HOME/.dir > exists $HOME/.dir/file > exists $HOME/.dir/subdir > exists $HOME/.dir/subdir/file > exists $HOME/.empty > exists $HOME/.executable > exists $HOME/.file > exists $HOME/.private > ! exists $HOME/.remove > exists $HOME/.template # test apply after edit (1.300s) > edit $CHEZMOISOURCEDIR/dot_file > chezmoi apply --force > cmp $HOME/.file $CHEZMOISOURCEDIR/dot_file # test that chezmoi apply --source-path applies a file based on its source path (1.150s) > edit $CHEZMOISOURCEDIR/dot_file > chezmoi apply --force --source-path $CHEZMOISOURCEDIR/dot_file > grep -count=2 '# edited' $HOME/.file # test that chezmoi apply --source-path fails when called with a targetDirAbsPath (1.286s) > ! chezmoi apply --force --source-path $HOME${/}.file [stderr] chezmoi: $WORK/home/user/.file: not in $WORK/home/user/.local/share/chezmoi [exit status 1] PASS === CONT TestScript/ageencryptionsymmetric cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/ageencryption cmd.go:370: age not found in $PATH testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:age] skip 'age not found in $PATH' === CONT TestScript/addencrypted === CONT TestScript/applyskipencrypted testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'skipping gpg tests on Windows' > [!exec:gpg] skip 'gpg not found in $PATH' > mkhomedir > mkgpgconfig # test that chezmoi apply --exclude=encrypted does not apply encrypted files (2.448s) > cp golden/.encrypted $HOME > chezmoi add --encrypt $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 > rm $HOME/.encrypted > cp $CHEZMOICONFIGDIR/chezmoi.toml golden/chezmoi.toml > rm $CHEZMOICONFIGDIR/chezmoi.toml > chezmoi apply --force --exclude=encrypted > ! exists $HOME/.encrypted # test that chezmoi apply applies the encrypted file (1.936s) > cp golden/chezmoi.toml $CHEZMOICONFIGDIR/chezmoi.toml > chezmoi apply --force [stderr] gpg: Warning: using insecure memory! gpg: encrypted with 3072-bit RSA key, ID 66278643DCBCFDA3, created 2022-07-29 "chezmoi-test-gpg-key" > cmp golden/.encrypted $HOME/.encrypted PASS === CONT TestScript/addautotemplate === CONT TestScript/addencrypted testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [windows] skip 'skipping gpg tests on Windows' > [!exec:gpg] skip 'gpg not found in $PATH' > mkgpgconfig > cp golden/.encrypted $HOME/.encrypted # test that chezmoi add adds a file unencrypted (1.380s) > chezmoi add $HOME${/}.encrypted > cmp $CHEZMOISOURCEDIR/dot_encrypted golden/.encrypted # test that chezmoi add --encrypt encrypts the file in the source state (1.820s) > chezmoi add --encrypt $HOME${/}.encrypted [stderr] gpg: Warning: using insecure memory! gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2024-07-28 > ! exists $CHEZMOISOURCEDIR/dot_encrypted > exists $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc > grep '-----BEGIN PGP MESSAGE-----' $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc # test that chezmoi add without --encrypt replaces the source file (1.744s) > chezmoi add --force $HOME${/}.encrypted > ! exists $CHEZMOISOURCEDIR/encrypted_dot_encrypted.asc > cmp $CHEZMOISOURCEDIR/dot_encrypted golden/.encrypted PASS === CONT TestScript/addattributes testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > mkhomedir # test that chezmoi add warns if adding a file would remove the template attribute (1.573s) > stdin golden/yes > chezmoi add --no-tty $HOME${/}.file [stdout] adding .file would remove template attribute, continue [yes,no,all,quit]? > stdout 'adding \.file would remove template attribute, continue' > cmp $CHEZMOISOURCEDIR/dot_file golden/.file > ! exists $CHEZMOISOURCEDIR/dot_file.tmpl PASS === CONT TestScript/templatevars === CONT TestScript/addautotemplate testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell # test that chezmoi add --autotemplate on a file with a replacement creates a template in the source directory (1.739s) > chezmoi add --autotemplate $HOME${/}.template > cmp $CHEZMOISOURCEDIR/dot_template.tmpl golden/dot_template.tmpl # test that chezmoi add --autotemplate on a symlink with a replacement creates a template in the source directory (1.736s) > symlink $HOME/.symlink -> .target-value > chezmoi add --autotemplate $HOME${/}.symlink > cmp $CHEZMOISOURCEDIR/symlink_dot_symlink.tmpl golden/symlink_dot_symlink.tmpl # test that chezmoi add --autotemplate does not create a template if no replacements occurred (1.759s) > chezmoi add --autotemplate $HOME${/}.file > cmp $CHEZMOISOURCEDIR/dot_file golden/dot_file # test that chezmoi add --autotemplate escapes brackets (2.080s) > chezmoi add --autotemplate $HOME${/}.vimrc > cmp $CHEZMOISOURCEDIR/dot_vimrc.tmpl golden/dot_vimrc.tmpl PASS === CONT TestScript/workingtree testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!exec:true] skip 'true not found in $PATH' > mkhomedir # test that chezmoi cd creates the working tree if needed (2.033s) > ! exists $CHEZMOISOURCEDIR > chezmoi cd > exists $CHEZMOISOURCEDIR > exists $CHEZMOISOURCEDIR/home # test that chezmoi add adds a file into the source directory (1.777s) > chezmoi add $HOME${/}.file > cp golden/.file $CHEZMOISOURCEDIR/home/dot_file > chhome home2/user # test chezmoi init --working-tree creates the correct directory (1.822s) > chezmoi init --working-tree=$HOME${/}.dotfiles --source=$HOME${/}.dotfiles${/}home > exists $HOME/.dotfiles/.git > exists $HOME/.dotfiles/home > chhome home3/user # test that chezmoi add returns an error if the source directory is not in the working tree (1.521s) > mkhomedir > ! chezmoi add $HOME${/}.file [stderr] chezmoi: $WORK/home3/user/.local/share/chezmoi: not in $WORK/home3/user/.local/share/chezmoi/home [exit status 1] > stderr 'not in' PASS === CONT TestScript/version === CONT TestScript/templatevars testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > chezmoi execute-template '{{ .chezmoi.arch }}' [stdout] riscv64> [386] stdout 386 > [amd64] stdout amd64 > [arm] stdout arm > [arm64] stdout arm64 > [ppc64] stdout ppc64 > [ppc64le] stdout ppc64le > chezmoi execute-template '{{ index .chezmoi.args 1 }}' [stdout] execute-template> stdout execute-template > chezmoi execute-template '{{ .chezmoi.executable }}' [stdout] /tmp/testscript-main3051842446/bin/chezmoi> stdout [\\/]chezmoi(.exe)?$ > chezmoi execute-template '{{ .chezmoi.homeDir }}' [stdout] $WORK/home/user> stdout ${HOME@R} > chezmoi execute-template '{{ .chezmoi.os }}' [stdout] linux> [darwin] stdout darwin > [freebsd] stdout freebsd > [illumos] stdout illumos > [linux] stdout linux > [openbsd] stdout openbsd > [solaris] stdout solaris > [windows] stdout windows > chezmoi execute-template '{{ .chezmoi.sourceDir }}' [stdout] $WORK/home/user/.local/share/chezmoi> stdout ${CHEZMOISOURCEDIR@R} PASS === CONT TestScript/verify === CONT TestScript/version testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > chezmoi --version [stdout] chezmoi version v2.0.0+test, commit HEAD, built at 2022-07-29T21:35:21Z, built by testscript > stdout 'chezmoi version v2\.0\.0' PASS === CONT TestScript/vault testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!windows] chmod 755 bin/vault > [windows] unix2dos bin/vault.cmd # test vault template function (1.857s) > chezmoi execute-template '{{ (vault "secret/examplesecret").data.data.password }}' [stdout] examplepassword> stdout ^examplepassword$ PASS === CONT TestScript/upgrade cmd.go:370: $CHEZMOI_GITHUB_TOKEN not set testscript.go:397: WORK=$WORK PATH=$WORK/bin:/tmp/testscript-main3051842446/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl HOME=$WORK/home/user TMPDIR=$WORK/.tmp devnull=/dev/null /=/ :=: $=$ TESTSCRIPT_COVER_DIR= exe= CHEZMOICONFIGDIR=$WORK/home/user/.config/chezmoi CHEZMOISOURCEDIR=$WORK/home/user/.local/share/chezmoi CHEZMOI_GITHUB_TOKEN= EDITOR=$WORK/bin/editor SHELL=$WORK/bin/shell > [!env:CHEZMOI_GITHUB_TOKEN] skip '$CHEZMOI_GITHUB_TOKEN not set' === CONT TestScript/update panic: test timed out after 10m0s goroutine 2790 [running]: testing.(*M).startAlarm.func1() /usr/lib/go/src/testing/testing.go:2029 +0xc4 created by time.goFunc /usr/lib/go/src/time/sleep.go:176 +0x34 goroutine 1 [chan receive, 9 minutes]: testing.(*T).Run(0x3f8c476820, {0xf3f750, 0xa}, 0x1038c90) /usr/lib/go/src/testing/testing.go:1487 +0x3ac testing.runTests.func1(0x3f8c476820) /usr/lib/go/src/testing/testing.go:1839 +0x78 testing.tRunner(0x3f8c476820, 0x3f8c69f8b8) /usr/lib/go/src/testing/testing.go:1439 +0xf4 testing.runTests(0x3f8c46a2d0, {0x19c5660, 0x21, 0x21}, {0xc0b1328a1c19adef, 0x8c206204f7, 0x1a38780}) /usr/lib/go/src/testing/testing.go:1837 +0x41c testing.(*M).Run(0x3f8c34b680) /usr/lib/go/src/testing/testing.go:1719 +0x5d0 github.com/rogpeppe/go-internal/testscript.RunMain({0x1205c78, 0x3f8c34b680}, 0x3f8c69fdb8) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/exe.go:125 +0x914 github.com/twpayne/chezmoi/v2/pkg/cmd_test.TestMain(0x3f8c34b680) /build/chezmoi/src/chezmoi-2.20.0/pkg/cmd/main_test.go:39 +0xbc main.main() _testmain.go:115 +0x1e8 goroutine 325 [chan receive, 1 minutes]: testing.tRunner.func1() /usr/lib/go/src/testing/testing.go:1405 +0x520 testing.tRunner(0x3f8c4d1a00, 0x1038c90) /usr/lib/go/src/testing/testing.go:1445 +0x138 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 2815 [IO wait]: internal/poll.runtime_pollWait(0x3f90373bb8, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c07d7b8, 0x72, 0x1) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Read(0x3f8c07d7a0, {0x3f8c8f8000, 0x8000, 0x8000}) /usr/lib/go/src/internal/poll/fd_unix.go:167 +0x1f0 os.(*File).read(...) /usr/lib/go/src/os/file_posix.go:31 os.(*File).Read(0x3f8c6d63d0, {0x3f8c8f8000, 0x8000, 0x8000}) /usr/lib/go/src/os/file.go:119 +0x70 io.copyBuffer({0x1205b58, 0x3f8c297860}, {0x12059f8, 0x3f8c6d63d0}, {0x0, 0x0, 0x0}) /usr/lib/go/src/io/io.go:426 +0x1b8 io.Copy(...) /usr/lib/go/src/io/io.go:385 os/exec.(*Cmd).writerDescriptor.func1() /usr/lib/go/src/os/exec/exec.go:311 +0x50 os/exec.(*Cmd).Start.func1(0x3f8c2978e0) /usr/lib/go/src/os/exec/exec.go:444 +0x2c created by os/exec.(*Cmd).Start /usr/lib/go/src/os/exec/exec.go:443 +0x82c goroutine 2816 [IO wait]: internal/poll.runtime_pollWait(0x3f90373ca8, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c07d878, 0x72, 0x1) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Read(0x3f8c07d860, {0x3f8c900000, 0x8000, 0x8000}) /usr/lib/go/src/internal/poll/fd_unix.go:167 +0x1f0 os.(*File).read(...) /usr/lib/go/src/os/file_posix.go:31 os.(*File).Read(0x3f8c6d63e0, {0x3f8c900000, 0x8000, 0x8000}) /usr/lib/go/src/os/file.go:119 +0x70 io.copyBuffer({0x1205b58, 0x3f8c297880}, {0x12059f8, 0x3f8c6d63e0}, {0x0, 0x0, 0x0}) /usr/lib/go/src/io/io.go:426 +0x1b8 io.Copy(...) /usr/lib/go/src/io/io.go:385 os/exec.(*Cmd).writerDescriptor.func1() /usr/lib/go/src/os/exec/exec.go:311 +0x50 os/exec.(*Cmd).Start.func1(0x3f8c297900) /usr/lib/go/src/os/exec/exec.go:444 +0x2c created by os/exec.(*Cmd).Start /usr/lib/go/src/os/exec/exec.go:443 +0x82c goroutine 2813 [syscall]: syscall.Syscall6(0x5f, 0x1, 0x2e38, 0x3f8c058e18, 0x1000004, 0x0, 0x0) /usr/lib/go/src/syscall/asm_linux_riscv64.s:37 +0xc os.(*Process).blockUntilWaitable(0x3f8c837bf0) /usr/lib/go/src/os/wait_waitid.go:32 +0x68 os.(*Process).wait(0x3f8c837bf0) /usr/lib/go/src/os/exec_unix.go:22 +0x30 os.(*Process).Wait(...) /usr/lib/go/src/os/exec.go:132 os/exec.(*Cmd).Wait(0x3f8c3af080) /usr/lib/go/src/os/exec/exec.go:510 +0x4c github.com/rogpeppe/go-internal/testscript.ctxWait.func1() /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:690 +0x2c created by github.com/rogpeppe/go-internal/testscript.ctxWait /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:690 +0xa8 goroutine 2812 [IO wait]: internal/poll.runtime_pollWait(0x3f90374428, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c07d578, 0x72, 0x1) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Read(0x3f8c07d560, {0x3f8c8f0000, 0x8000, 0x8000}) /usr/lib/go/src/internal/poll/fd_unix.go:167 +0x1f0 os.(*File).read(...) /usr/lib/go/src/os/file_posix.go:31 os.(*File).Read(0x3f8c6d63a8, {0x3f8c8f0000, 0x8000, 0x8000}) /usr/lib/go/src/os/file.go:119 +0x70 io.copyBuffer({0x1205b58, 0x3f8c297740}, {0x12059f8, 0x3f8c6d63a8}, {0x0, 0x0, 0x0}) /usr/lib/go/src/io/io.go:426 +0x1b8 io.Copy(...) /usr/lib/go/src/io/io.go:385 os/exec.(*Cmd).writerDescriptor.func1() /usr/lib/go/src/os/exec/exec.go:311 +0x50 os/exec.(*Cmd).Start.func1(0x3f8c2977c0) /usr/lib/go/src/os/exec/exec.go:444 +0x2c created by os/exec.(*Cmd).Start /usr/lib/go/src/os/exec/exec.go:443 +0x82c goroutine 1478 [IO wait, 4 minutes]: internal/poll.runtime_pollWait(0x3f90374248, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c51c998, 0x72, 0x0) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Accept(0x3f8c51c980) /usr/lib/go/src/internal/poll/fd_unix.go:614 +0x208 net.(*netFD).accept(0x3f8c51c980) /usr/lib/go/src/net/fd_unix.go:172 +0x2c net.(*TCPListener).accept(0x3f8c4fc0f0) /usr/lib/go/src/net/tcpsock_posix.go:139 +0x28 net.(*TCPListener).Accept(0x3f8c4fc0f0) /usr/lib/go/src/net/tcpsock.go:288 +0x30 net/http.(*Server).Serve(0x3f8c39e0e0, {0x120dc88, 0x3f8c4fc0f0}) /usr/lib/go/src/net/http/server.go:3039 +0x360 net/http/httptest.(*Server).goServe.func1() /usr/lib/go/src/net/http/httptest/server.go:308 +0x70 created by net/http/httptest.(*Server).goServe /usr/lib/go/src/net/http/httptest/server.go:306 +0x8c goroutine 1678 [IO wait, 4 minutes]: internal/poll.runtime_pollWait(0x3f90374158, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c1c7018, 0x72, 0x0) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Accept(0x3f8c1c7000) /usr/lib/go/src/internal/poll/fd_unix.go:614 +0x208 net.(*netFD).accept(0x3f8c1c7000) /usr/lib/go/src/net/fd_unix.go:172 +0x2c net.(*TCPListener).accept(0x3f8c444150) /usr/lib/go/src/net/tcpsock_posix.go:139 +0x28 net.(*TCPListener).Accept(0x3f8c444150) /usr/lib/go/src/net/tcpsock.go:288 +0x30 net/http.(*Server).Serve(0x3f8c180d20, {0x120dc88, 0x3f8c444150}) /usr/lib/go/src/net/http/server.go:3039 +0x360 net/http/httptest.(*Server).goServe.func1() /usr/lib/go/src/net/http/httptest/server.go:308 +0x70 created by net/http/httptest.(*Server).goServe /usr/lib/go/src/net/http/httptest/server.go:306 +0x8c goroutine 1518 [IO wait, 6 minutes]: internal/poll.runtime_pollWait(0x3f90373f78, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c33e898, 0x72, 0x0) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Accept(0x3f8c33e880) /usr/lib/go/src/internal/poll/fd_unix.go:614 +0x208 net.(*netFD).accept(0x3f8c33e880) /usr/lib/go/src/net/fd_unix.go:172 +0x2c net.(*TCPListener).accept(0x3f8c46a630) /usr/lib/go/src/net/tcpsock_posix.go:139 +0x28 net.(*TCPListener).Accept(0x3f8c46a630) /usr/lib/go/src/net/tcpsock.go:288 +0x30 net/http.(*Server).Serve(0x3f8c1800e0, {0x120dc88, 0x3f8c46a630}) /usr/lib/go/src/net/http/server.go:3039 +0x360 net/http/httptest.(*Server).goServe.func1() /usr/lib/go/src/net/http/httptest/server.go:308 +0x70 created by net/http/httptest.(*Server).goServe /usr/lib/go/src/net/http/httptest/server.go:306 +0x8c goroutine 2817 [syscall]: syscall.Syscall6(0x5f, 0x1, 0x2e3e, 0x3f8c7f6e18, 0x1000004, 0x0, 0x0) /usr/lib/go/src/syscall/asm_linux_riscv64.s:37 +0xc os.(*Process).blockUntilWaitable(0x3f8c837d40) /usr/lib/go/src/os/wait_waitid.go:32 +0x68 os.(*Process).wait(0x3f8c837d40) /usr/lib/go/src/os/exec_unix.go:22 +0x30 os.(*Process).Wait(...) /usr/lib/go/src/os/exec.go:132 os/exec.(*Cmd).Wait(0x3f8c3af1e0) /usr/lib/go/src/os/exec/exec.go:510 +0x4c github.com/rogpeppe/go-internal/testscript.ctxWait.func1() /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:690 +0x2c created by github.com/rogpeppe/go-internal/testscript.ctxWait /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:690 +0xa8 goroutine 1589 [IO wait, 4 minutes]: internal/poll.runtime_pollWait(0x3f90374068, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c33e218, 0x72, 0x0) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Accept(0x3f8c33e200) /usr/lib/go/src/internal/poll/fd_unix.go:614 +0x208 net.(*netFD).accept(0x3f8c33e200) /usr/lib/go/src/net/fd_unix.go:172 +0x2c net.(*TCPListener).accept(0x3f8c46a480) /usr/lib/go/src/net/tcpsock_posix.go:139 +0x28 net.(*TCPListener).Accept(0x3f8c46a480) /usr/lib/go/src/net/tcpsock.go:288 +0x30 net/http.(*Server).Serve(0x3f8c39e1c0, {0x120dc88, 0x3f8c46a480}) /usr/lib/go/src/net/http/server.go:3039 +0x360 net/http/httptest.(*Server).goServe.func1() /usr/lib/go/src/net/http/httptest/server.go:308 +0x70 created by net/http/httptest.(*Server).goServe /usr/lib/go/src/net/http/httptest/server.go:306 +0x8c goroutine 444 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6bd520) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6bd520}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6bd520) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6bd520, 0x3f8c694990) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 445 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6bd860) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6bd860}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6bd860) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6bd860, 0x3f8c6952c0) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 446 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6bdba0) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6bdba0}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6bdba0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6bdba0, 0x3f8c6952f0) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 447 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c0000) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c0000}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c0000) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c0000, 0x3f8c695320) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 448 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c0340) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c0340}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c0340) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c0340, 0x3f8c695350) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 449 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c0680) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c0680}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c0680) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c0680, 0x3f8c695380) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 450 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c09c0) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c09c0}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c09c0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c09c0, 0x3f8c6953b0) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 451 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c0d00) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c0d00}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c0d00) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c0d00, 0x3f8c6953e0) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 452 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c1040) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c1040}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c1040) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c1040, 0x3f8c695410) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 453 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c1380) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c1380}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c1380) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c1380, 0x3f8c695440) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 454 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c16c0) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c16c0}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c16c0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c16c0, 0x3f8c695470) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 456 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c1d40) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c1d40}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c1d40) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c1d40, 0x3f8c6954d0) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 457 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c41a0) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c41a0}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c41a0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c41a0, 0x3f8c695500) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 458 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c44e0) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c44e0}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c44e0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c44e0, 0x3f8c695530) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 459 [chan receive, 9 minutes]: testing.(*testContext).waitParallel(0x3f8c6c7540) /usr/lib/go/src/testing/testing.go:1550 +0xf8 testing.(*T).Parallel(0x3f8c6c4820) /usr/lib/go/src/testing/testing.go:1265 +0x1e4 github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c4820}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:224 +0x70 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c4820) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c4820, 0x3f8c695560) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 460 [select]: github.com/rogpeppe/go-internal/testscript.ctxWait({0x120e938, 0x3f8c0340d8}, 0x3f8c3af080) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:692 +0x118 github.com/rogpeppe/go-internal/testscript.(*TestScript).exec(0x3f8c58a1c0, {0xf2eaaa, 0x7}, {0x3f8c0302e0, 0x4, 0x4}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:639 +0x2e8 github.com/rogpeppe/go-internal/testscript.(*TestScript).cmdExec(0x3f8c58a1c0, 0x0, {0x3f8c0302d0, 0x5, 0x5}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/cmd.go:257 +0x340 github.com/rogpeppe/go-internal/testscript.RunMain.func3(0x3f8c58a1c0, 0x0, {0x3f8c51c710, 0x4, 0x7}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/exe.go:122 +0x104 github.com/rogpeppe/go-internal/testscript.(*TestScript).run(0x3f8c58a1c0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:496 +0x60c github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c4b60}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:247 +0x240 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c4b60) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c4b60, 0x3f8c695590) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 2811 [IO wait]: internal/poll.runtime_pollWait(0x3f90373d98, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c07d4b8, 0x72, 0x1) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Read(0x3f8c07d4a0, {0x3f8c8e8000, 0x8000, 0x8000}) /usr/lib/go/src/internal/poll/fd_unix.go:167 +0x1f0 os.(*File).read(...) /usr/lib/go/src/os/file_posix.go:31 os.(*File).Read(0x3f8c6d6398, {0x3f8c8e8000, 0x8000, 0x8000}) /usr/lib/go/src/os/file.go:119 +0x70 io.copyBuffer({0x1205b58, 0x3f8c297720}, {0x12059f8, 0x3f8c6d6398}, {0x0, 0x0, 0x0}) /usr/lib/go/src/io/io.go:426 +0x1b8 io.Copy(...) /usr/lib/go/src/io/io.go:385 os/exec.(*Cmd).writerDescriptor.func1() /usr/lib/go/src/os/exec/exec.go:311 +0x50 os/exec.(*Cmd).Start.func1(0x3f8c2977a0) /usr/lib/go/src/os/exec/exec.go:444 +0x2c created by os/exec.(*Cmd).Start /usr/lib/go/src/os/exec/exec.go:443 +0x82c goroutine 463 [select]: github.com/rogpeppe/go-internal/testscript.ctxWait({0x120e938, 0x3f8c0340d8}, 0x3f8c3af1e0) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:692 +0x118 github.com/rogpeppe/go-internal/testscript.(*TestScript).exec(0x3f8cb30a80, {0xf2eaaa, 0x7}, {0x3f8c68ccd0, 0x3, 0x3}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:639 +0x2e8 github.com/rogpeppe/go-internal/testscript.(*TestScript).cmdExec(0x3f8cb30a80, 0x0, {0x3f8c68ccc0, 0x4, 0x4}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/cmd.go:257 +0x340 github.com/rogpeppe/go-internal/testscript.RunMain.func3(0x3f8cb30a80, 0x0, {0x3f8c68cc90, 0x3, 0x3}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/exe.go:122 +0x104 github.com/rogpeppe/go-internal/testscript.(*TestScript).run(0x3f8cb30a80) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:496 +0x60c github.com/rogpeppe/go-internal/testscript.RunT.func1({0x1211710, 0x3f8c6c5520}) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:247 +0x240 github.com/rogpeppe/go-internal/testscript.tshim.Run.func1(0x3f8c6c5520) /build/go/pkg/mod/github.com/rogpeppe/go-internal@v1.8.1/testscript/testscript.go:183 +0x38 testing.tRunner(0x3f8c6c5520, 0x3f8c695620) /usr/lib/go/src/testing/testing.go:1439 +0xf4 created by testing.(*T).Run /usr/lib/go/src/testing/testing.go:1486 +0x390 goroutine 1656 [IO wait, 4 minutes]: internal/poll.runtime_pollWait(0x3f903746f8, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c33ec98, 0x72, 0x0) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Accept(0x3f8c33ec80) /usr/lib/go/src/internal/poll/fd_unix.go:614 +0x208 net.(*netFD).accept(0x3f8c33ec80) /usr/lib/go/src/net/fd_unix.go:172 +0x2c net.(*TCPListener).accept(0x3f8c46ba40) /usr/lib/go/src/net/tcpsock_posix.go:139 +0x28 net.(*TCPListener).Accept(0x3f8c46ba40) /usr/lib/go/src/net/tcpsock.go:288 +0x30 net/http.(*Server).Serve(0x3f8c39e700, {0x120dc88, 0x3f8c46ba40}) /usr/lib/go/src/net/http/server.go:3039 +0x360 net/http/httptest.(*Server).goServe.func1() /usr/lib/go/src/net/http/httptest/server.go:308 +0x70 created by net/http/httptest.(*Server).goServe /usr/lib/go/src/net/http/httptest/server.go:306 +0x8c goroutine 1625 [IO wait, 4 minutes]: internal/poll.runtime_pollWait(0x3f903748d8, 0x72) /usr/lib/go/src/runtime/netpoll.go:302 +0xe0 internal/poll.(*pollDesc).wait(0x3f8c51d718, 0x72, 0x0) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:83 +0x34 internal/poll.(*pollDesc).waitRead(...) /usr/lib/go/src/internal/poll/fd_poll_runtime.go:88 internal/poll.(*FD).Accept(0x3f8c51d700) /usr/lib/go/src/internal/poll/fd_unix.go:614 +0x208 net.(*netFD).accept(0x3f8c51d700) /usr/lib/go/src/net/fd_unix.go:172 +0x2c net.(*TCPListener).accept(0x3f8c3a2a68) /usr/lib/go/src/net/tcpsock_posix.go:139 +0x28 net.(*TCPListener).Accept(0x3f8c3a2a68) /usr/lib/go/src/net/tcpsock.go:288 +0x30 net/http.(*Server).Serve(0x3f8c180620, {0x120dc88, 0x3f8c3a2a68}) /usr/lib/go/src/net/http/server.go:3039 +0x360 net/http/httptest.(*Server).goServe.func1() /usr/lib/go/src/net/http/httptest/server.go:308 +0x70 created by net/http/httptest.(*Server).goServe /usr/lib/go/src/net/http/httptest/server.go:306 +0x8c FAIL github.com/twpayne/chezmoi/v2/pkg/cmd 602.014s === RUN TestParseStatusPorcelainV2 === RUN TestParseStatusPorcelainV2/empty === RUN TestParseStatusPorcelainV2/added === RUN TestParseStatusPorcelainV2/removed === RUN TestParseStatusPorcelainV2/update === RUN TestParseStatusPorcelainV2/renamed === RUN TestParseStatusPorcelainV2/renamed_2 === RUN TestParseStatusPorcelainV2/modified_2 === RUN TestParseStatusPorcelainV2/unmerged === RUN TestParseStatusPorcelainV2/untracked === RUN TestParseStatusPorcelainV2/ignored --- PASS: TestParseStatusPorcelainV2 (0.01s) --- PASS: TestParseStatusPorcelainV2/empty (0.00s) --- PASS: TestParseStatusPorcelainV2/added (0.00s) --- PASS: TestParseStatusPorcelainV2/removed (0.00s) --- PASS: TestParseStatusPorcelainV2/update (0.00s) --- PASS: TestParseStatusPorcelainV2/renamed (0.00s) --- PASS: TestParseStatusPorcelainV2/renamed_2 (0.00s) --- PASS: TestParseStatusPorcelainV2/modified_2 (0.00s) --- PASS: TestParseStatusPorcelainV2/unmerged (0.00s) --- PASS: TestParseStatusPorcelainV2/untracked (0.00s) --- PASS: TestParseStatusPorcelainV2/ignored (0.00s) PASS ok github.com/twpayne/chezmoi/v2/pkg/git 0.085s FAIL ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix1/build receiving incremental file list chezmoi-2.20.0-1-riscv64-build.log chezmoi-2.20.0-1-riscv64-check.log chezmoi-2.20.0-1-riscv64-prepare.log sent 81 bytes received 59,239 bytes 118,640.00 bytes/sec total size is 480,491 speedup is 8.10