Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package chezmoi for openSUSE:Factory checked in at 2023-02-17 16:45:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/chezmoi (Old) and /work/SRC/openSUSE:Factory/.chezmoi.new.22824 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chezmoi" Fri Feb 17 16:45:52 2023 rev:15 rq:1066400 version:2.31.0 Changes: -------- --- /work/SRC/openSUSE:Factory/chezmoi/chezmoi.changes 2023-02-13 16:43:24.780256882 +0100 +++ /work/SRC/openSUSE:Factory/.chezmoi.new.22824/chezmoi.changes 2023-02-17 16:46:17.703298532 +0100 @@ -1,0 +2,12 @@ +Fri Feb 17 14:26:22 UTC 2023 - Filippo Bonazzi <filippo.bona...@suse.com> + +- Update to version 2.31.0: + * feat: Print a warning when chezmoi add is called with an ignored entry + * feat: Cache GitHub API results by default to stay under rate limit + * feat: Display progress bars by default when stdout is a TTY + * feat(bitwarden): Grab attachment by object name + * fix: Eliminate [DEFAULT] section for fromIni map + * feat: Add --with-stdin flag to execute-template command + * chore: Update dependencies + +------------------------------------------------------------------- Old: ---- chezmoi-2.30.1.obscpio New: ---- chezmoi-2.31.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ chezmoi.spec ++++++ --- /var/tmp/diff_new_pack.MjmhR9/_old 2023-02-17 16:46:18.591303533 +0100 +++ /var/tmp/diff_new_pack.MjmhR9/_new 2023-02-17 16:46:18.603303600 +0100 @@ -17,7 +17,7 @@ Name: chezmoi -Version: 2.30.1 +Version: 2.31.0 Release: 0 Summary: A multi-host manager for dotfiles License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.MjmhR9/_old 2023-02-17 16:46:18.655303894 +0100 +++ /var/tmp/diff_new_pack.MjmhR9/_new 2023-02-17 16:46:18.663303938 +0100 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/twpayne/chezmoi.git</param> - <param name="revision">v2.30.1</param> + <param name="revision">v2.31.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> </service> ++++++ chezmoi-2.30.1.obscpio -> chezmoi-2.31.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/.github/workflows/main.yml new/chezmoi-2.31.0/.github/workflows/main.yml --- old/chezmoi-2.30.1/.github/workflows/main.yml 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/.github/workflows/main.yml 2023-02-17 12:19:43.000000000 +0100 @@ -10,9 +10,9 @@ - v* env: AGE_VERSION: 1.1.1 - GO_VERSION: '1.20' + GO_VERSION: '1.20.1' GOFUMPT_VERSION: 0.4.0 - GOLANGCI_LINT_VERSION: 1.51.0 + GOLANGCI_LINT_VERSION: 1.51.1 GOVERSIONINFO_VERSION: 1.4.0 jobs: changes: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/.github/workflows/winget.yml new/chezmoi-2.31.0/.github/workflows/winget.yml --- old/chezmoi-2.30.1/.github/workflows/winget.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.31.0/.github/workflows/winget.yml 2023-02-17 12:19:43.000000000 +0100 @@ -0,0 +1,14 @@ +name: Publish to Winget +on: + release: + types: [released] + +jobs: + publish: + runs-on: windows-latest # Action can only run on Windows + steps: + - uses: vedantmgoyal2009/winget-releaser@v2 + with: + identifier: twpayne.chezmoi + installers-regex: '_windows_\w+\.zip$' + token: ${{ secrets.WINGET_TOKEN }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/.golangci.yml new/chezmoi-2.31.0/.golangci.yml --- old/chezmoi-2.30.1/.golangci.yml 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/.golangci.yml 2023-02-17 12:19:43.000000000 +0100 @@ -87,7 +87,6 @@ - paralleltest - rowserrcheck # https://github.com/golangci/golangci-lint/issues/2649 - sqlclosecheck # https://github.com/golangci/golangci-lint/issues/2649 - - structcheck # https://github.com/golangci/golangci-lint/issues/2649 - testpackage - tparallel - varnamelen diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/links/links.yaml new/chezmoi-2.31.0/assets/chezmoi.io/docs/links/links.yaml --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/links/links.yaml 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/links/links.yaml 2023-02-17 12:19:43.000000000 +0100 @@ -379,6 +379,10 @@ title: dotfile manager ã® chezmoi ã«ç§»è¡ãã¦ã¿ã lang: JP url: https://blog.yamano.dev/posts/2023/01/chezmoi-setup/ +- date: '2023-01-22' + version: 2.29.3 + title: Managing dotfiles + url: https://dnitza.com/post/managing-dotfiles - date: '2023-01-30' version: 2.29.3 formats: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/command-line-flags/global.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/command-line-flags/global.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/command-line-flags/global.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/command-line-flags/global.md 2023-02-17 12:19:43.000000000 +0100 @@ -60,9 +60,10 @@ its persistent state in `chezmoistate.boltdb` in the same directory as its configuration file. -## `--progress` +## `--progress` *value* -Show progress when downloading externals. +Show progress when downloading externals. *value* can be `on`, `off`, or `auto`. +The default is `auto` which shows progress bars when stdout is a terminal. ## `-R`, `--refresh-externals` [*value*] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/commands/add.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/commands/add.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/commands/add.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/commands/add.md 2023-02-17 12:19:43.000000000 +0100 @@ -37,6 +37,10 @@ Interactively prompt before adding each file. +## `-q`, `--quiet` + +Suppress warnings about adding ignored entries. + ## `-r`, `--recursive` Recursively add all files, directories, and symlinks. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/commands/execute-template.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/commands/execute-template.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/commands/execute-template.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/commands/execute-template.md 2023-02-17 12:19:43.000000000 +0100 @@ -42,6 +42,11 @@ Simulate the `stdinIsATTY` function by returning *bool*. +## `--with-stdin` + +If run with arguments, then set `.chezmoi.stdin` to the contents of the standard +input. + !!! example ```console diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/commands/init.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/commands/init.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/commands/init.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/commands/init.md 2023-02-17 12:19:43.000000000 +0100 @@ -15,10 +15,10 @@ | `sr.ht/~user` | `https://u...@git.sr.ht/~user/dotfiles` | `g...@git.sr.ht:~user/dotfiles.git` | | `sr.ht/~user/repo` | `https://u...@git.sr.ht/~user/repo` | `g...@git.sr.ht:~user/repo.git` | -To disable git repo URL guessing pass the `--guess-repo-url=false` option. +To disable git repo URL guessing, pass the `--guess-repo-url=false` option. -First, if the source directory is not already contain a repository, then if -*repo* is given it is checked out into the source directory, otherwise a new +First, if the source directory does not already contain a repository, then if +*repo* is given, it is checked out into the source directory; otherwise a new repository is initialized in the source directory. Second, if a file called `.chezmoi.$FORMAT.tmpl` exists, where `$FORMAT` is one diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml 2023-02-17 12:19:43.000000000 +0100 @@ -154,6 +154,11 @@ command: default: '`git`' description: git CLI command + gitHub: + refreshPeriod: + type: duration + default: '`1m`' + description: Minimum duration between identical GitHub API requests gopass: command: default: '`gopass`' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/templates/bitwarden-functions/bitwardenAttachmentByRef.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/templates/bitwarden-functions/bitwardenAttachmentByRef.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/templates/bitwarden-functions/bitwardenAttachmentByRef.md 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/templates/bitwarden-functions/bitwardenAttachmentByRef.md 2023-02-17 12:19:43.000000000 +0100 @@ -0,0 +1,23 @@ +# `bitwardenAttachmentByRef` *filename* *args* + +`bitwardenAttachmentByRef` returns a document from +[Bitwarden](https://bitwarden.com/) using the [Bitwarden +CLI](https://bitwarden.com/help/article/cli/) (`bw`). This method requires two +calls to `bw` to complete. *args* are passed to `bw get` in order to retrieve +the item's *itemid*. Then, *filename* and *itemid* are passed to +`bw get attachment $FILENAME --itemid $ITEMID` and the output from +`bw` is returned. The output from `bw` is cached so calling +`bitwardenAttachmentByRef` multiple times with the same *filename* and *itemid* will +only invoke `bw` once. + +!!! example + + ``` + {{- bitwardenAttachmentByRef "$FILENAME" "$ARGS" -}} + ``` + +!!! example + + ``` + {{- bitwardenAttachmentByRef "id_rsa" "item" "example.com" -}} + ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/templates/github-functions/index.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/templates/github-functions/index.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/reference/templates/github-functions/index.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/reference/templates/github-functions/index.md 2023-02-17 12:19:43.000000000 +0100 @@ -2,17 +2,20 @@ The `gitHub*` template functions return data from the GitHub API. -By default, an anonymous GitHub API request will be made, which is subject to +By default, chezmoi makes anonymous GitHub API requests, which are subject to [GitHub's rate limits](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting) -(currently 60 requests per hour per source IP address). If any of the -environment variables `$CHEZMOI_GITHUB_ACCESS_TOKEN`, `$GITHUB_ACCESS_TOKEN`, or -`$GITHUB_TOKEN` are found, then the first one found will be used to authenticate -the GitHub API request, with a higher rate limit (currently 5,000 requests per -hour per user). +(currently 60 requests per hour per source IP address). chezmoi caches results +from identical GitHub API requests for the period defined in +`gitHub.refreshPeriod` (default one minute). -In practice, GitHub API rate limits are high enough that you should rarely need -to set a token, unless you are sharing a source IP address with many other -GitHub users. If needed, the GitHub documentation describes how to [create a -personal access +If any of the environment variables `$CHEZMOI_GITHUB_ACCESS_TOKEN`, +`$GITHUB_ACCESS_TOKEN`, or `$GITHUB_TOKEN` are found, then the first one found +will be used to authenticate the GitHub API requests which have a higher rate +limit (currently 5,000 requests per hour per user). + +In practice, GitHub API rate limits are high enough chezmoi's caching of results +mean that you should rarely need to set a token, unless you are sharing a source +IP address with many other GitHub users. If needed, the GitHub documentation +describes how to [create a personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md 2023-02-17 12:19:43.000000000 +0100 @@ -111,50 +111,6 @@ refreshPeriod = "168h" ``` -## Include a subdirectory from a git repository - -You can configure chezmoi to keep a git repository up to date in a subdirectory -by using the external type `git-repo`, for example: - -```toml title="~/.local/share/chezmoi/.chezmoiexternal.toml" -[".vim/pack/alker0/chezmoi.vim"] - type = "git-repo" - url = "https://github.com/alker0/chezmoi.vim.git" - refreshPeriod = "168h" -``` - -If the directory does not exist then chezmoi will run `git clone` to clone it. -If the directory does exist then chezmoi will run `git pull` to pull the latest -changes, but not more often than every `refreshPeriod`. In the above example -the `refreshPeriod` is `168h` which is one week. The default `refreshPeriod` is -zero, which disables refreshes. You can force a refresh (i.e. force a `git -pull`) by passing the `--refresh-externals`/`-R` flag to `chezmoi apply`. - -You can customize the arguments to `git clone` and `git pull` by setting the -`$DIR.clone.args` and `$DIR.pull.args` variables in `.chezmoiexternal.$FORMAT`, -for example: - -```toml title="~/.local/share/chezmoi/.chezmoiexternal.toml" -[".vim/pack/alker0/chezmoi.vim"] - type = "git-repo" - url = "https://github.com/alker0/chezmoi.vim.git" - refreshPeriod = "168h" - [".vim/pack/alker0/chezmoi.vim".pull] - args = ["--ff-only"] -``` - -!!! note - - chezmoi's support for `git-repo` externals is limited to running `git - clone` and/or `git pull` in a directory. The contents of `git-repo` - externals are not manifested in commands like `chezmoi archive` or `chezmoi - dump`. - -!!! note - - chezmoi's support for `git-repo` externals currently requires `git` to be - in your `$PATH`. - ## Extract a single file from an archive You can extract a single file from an archive using the `$ENTRY.filter.command` @@ -221,3 +177,75 @@ Here `filter.command` and `filter.args` together tell chezmoi to filter the downloaded data through `zstd -d`. The `format = "tar"` line tells chezmoi that output of the filter is an uncompressed tar archive. + +## Include a subdirectory from a git repository + +You can configure chezmoi to keep a git repository up to date in a subdirectory +by using the external type `git-repo`, for example: + +```toml title="~/.local/share/chezmoi/.chezmoiexternal.toml" +[".vim/pack/alker0/chezmoi.vim"] + type = "git-repo" + url = "https://github.com/alker0/chezmoi.vim.git" + refreshPeriod = "168h" +``` + +If the directory does not exist then chezmoi will run `git clone` to clone it. +If the directory does exist then chezmoi will run `git pull` to pull the latest +changes, but not more often than every `refreshPeriod`. In the above example +the `refreshPeriod` is `168h` which is one week. The default `refreshPeriod` is +zero, which disables refreshes. You can force a refresh (i.e. force a `git +pull`) by passing the `--refresh-externals`/`-R` flag to `chezmoi apply`. + +!!! warning + + chezmoi's support for `git-repo` externals is limited to running `git + clone` and/or `git pull` in a directory. You must have a `git` binary + in your `$PATH`. + + Using a `git-repo` external delegates management of the + directory to git. chezmoi cannot manage any other files in that directory. + + The contents of `git-repo` externals will not be manifested in commands + like `chezmoi archive` or `chezmoi dump`. + +!!! hint + + If you need to manage extra files in a `git-repo` external, use an + `archive` external instead with the URL pointing to an archive of the git + repo's `master` or `main` branch. + +You can customize the arguments to `git clone` and `git pull` by setting the +`$DIR.clone.args` and `$DIR.pull.args` variables in `.chezmoiexternal.$FORMAT`, +for example: + +```toml title="~/.local/share/chezmoi/.chezmoiexternal.toml" +[".vim/pack/alker0/chezmoi.vim"] + type = "git-repo" + url = "https://github.com/alker0/chezmoi.vim.git" + refreshPeriod = "168h" + [".vim/pack/alker0/chezmoi.vim".pull] + args = ["--ff-only"] +``` + +## Use git submodules in your source directory + +!!! important + + If you use git submodules, then you should set the `external_` attribute on + the subdirectory containing the submodule. + +You can include git repos from elsewhere as git submodules in your source +directory. `chezmoi init` and `chezmoi update` are aware of git submodules and +will run git with the `--recurse-submodules` flag by default. + +chezmoi assumes that all files and directories in its source state are in +chezmoi's format, i.e. their filenames include attributes like `private_` and +`run_`. Most git submodules are not in chezmoi's format and so files like +`run_test.sh` will be be interpreted by chezmoi as a `run_` script. To avoid +this problem, set the `external_` attribute on all subdirectories that contain +submodules. + +You can stop chezmoi from handling git submodules by passing the +`--recurse-submodules=false` flag or setting the `update.recurseSubmodules` +configuration variable to `false`. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/docs/user-guide/password-managers/bitwarden.md new/chezmoi-2.31.0/assets/chezmoi.io/docs/user-guide/password-managers/bitwarden.md --- old/chezmoi-2.30.1/assets/chezmoi.io/docs/user-guide/password-managers/bitwarden.md 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/docs/user-guide/password-managers/bitwarden.md 2023-02-17 12:19:43.000000000 +0100 @@ -18,6 +18,14 @@ Set the `BW_SESSION` environment variable, as instructed. +!!! tip "Bitwarden Session One-liner" + + Set `BW_SESSION` automatically with: + + ```console + $ export BW_SESSION=$(bw {login,unlock} --raw) + ``` + The structured data from `bw get` is available as the `bitwarden` template function in your config files, for example: @@ -33,3 +41,15 @@ ``` {{ (bitwardenFields "item" "example.com").token.value }} ``` + +Attachments can be accessed with the `bitwardenAttachment` and +`bitwardenAttachmentByRef` template function. For example, if you have an +attachment named `id_rsa`, you can retrieve its value with: + +``` +{{ bitwardenAttachment "id_rsa" "bf22e4b4-ae4a-4d1c-8c98-ac620004b628" }} +``` +or +``` +{{ bitwardenAttachmentByRef "id_rsa" "item" "example.com" }} +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/assets/chezmoi.io/mkdocs.yml new/chezmoi-2.31.0/assets/chezmoi.io/mkdocs.yml --- old/chezmoi-2.30.1/assets/chezmoi.io/mkdocs.yml 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/assets/chezmoi.io/mkdocs.yml 2023-02-17 12:19:43.000000000 +0100 @@ -233,6 +233,7 @@ - reference/templates/bitwarden-functions/index.md - bitwarden: reference/templates/bitwarden-functions/bitwarden.md - bitwardenAttachment: reference/templates/bitwarden-functions/bitwardenAttachment.md + - bitwardenAttachmentByRef: reference/templates/bitwarden-functions/bitwardenAttachmentByRef.md - bitwardenFields: reference/templates/bitwarden-functions/bitwardenFields.md - gopass functions: - reference/templates/gopass-functions/index.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/go.mod new/chezmoi-2.31.0/go.mod --- old/chezmoi-2.30.1/go.mod 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/go.mod 2023-02-17 12:19:43.000000000 +0100 @@ -5,13 +5,13 @@ require ( filippo.io/age v1.1.1 github.com/Masterminds/sprig/v3 v3.2.3 - github.com/aws/aws-sdk-go-v2 v1.17.3 - github.com/aws/aws-sdk-go-v2/config v1.18.10 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.18.2 + github.com/aws/aws-sdk-go-v2 v1.17.4 + github.com/aws/aws-sdk-go-v2/config v1.18.13 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.18.4 github.com/bmatcuk/doublestar/v4 v4.6.0 github.com/bradenhilton/mozillainstallhash v1.0.0 github.com/charmbracelet/bubbles v0.15.0 - github.com/charmbracelet/bubbletea v0.23.1 + github.com/charmbracelet/bubbletea v0.23.2 github.com/charmbracelet/glamour v0.6.0 github.com/coreos/go-semver v0.3.1 github.com/fsnotify/fsnotify v1.6.0 @@ -22,7 +22,7 @@ github.com/klauspost/compress v1.15.15 github.com/mitchellh/mapstructure v1.5.0 github.com/muesli/combinator v0.3.0 - github.com/muesli/termenv v0.13.0 + github.com/muesli/termenv v0.14.0 github.com/pelletier/go-toml/v2 v2.0.6 github.com/rogpeppe/go-internal v1.9.0 github.com/rs/zerolog v1.29.0 @@ -36,14 +36,14 @@ github.com/ulikunitz/xz v0.5.11 github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1 github.com/zalando/go-keyring v0.2.2 - go.etcd.io/bbolt v1.3.7-0.20220226045046-fd5535f71f48 + go.etcd.io/bbolt v1.3.7 go.uber.org/multierr v1.9.0 - golang.org/x/crypto v0.5.0 - golang.org/x/exp v0.0.0-20230129154200-a960b3787bd2 - golang.org/x/oauth2 v0.4.0 + golang.org/x/crypto v0.6.0 + golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb + golang.org/x/oauth2 v0.5.0 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.4.0 - golang.org/x/term v0.4.0 + golang.org/x/sys v0.5.0 + golang.org/x/term v0.5.0 gopkg.in/ini.v1 v1.67.0 gopkg.in/yaml.v3 v3.0.1 howett.net/plist v1.0.0 @@ -54,34 +54,34 @@ github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/alecthomas/chroma v0.10.0 // indirect github.com/alessio/shellescape v1.4.1 // indirect github.com/atotto/clipboard v0.1.4 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.10 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.18.2 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.13 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/aymanbagabas/go-osc52 v1.2.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/bradenhilton/cityhash v1.0.0 // indirect github.com/charmbracelet/harmonica v0.2.0 // indirect github.com/charmbracelet/lipgloss v0.6.0 // indirect - github.com/cloudflare/circl v1.3.1 // indirect + github.com/cloudflare/circl v1.3.2 // indirect github.com/containerd/console v1.0.3 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dlclark/regexp2 v1.8.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.4.0 // indirect + github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/btree v1.1.2 // indirect @@ -115,13 +115,13 @@ github.com/skeema/knownhosts v1.1.0 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/yuin/goldmark v1.5.3 // indirect + github.com/yuin/goldmark v1.5.4 // indirect github.com/yuin/goldmark-emoji v1.0.1 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/mod v0.7.0 // indirect - golang.org/x/net v0.5.0 // indirect - golang.org/x/text v0.6.0 // indirect - golang.org/x/tools v0.5.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/text v0.7.0 // indirect + golang.org/x/tools v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/go.sum new/chezmoi-2.31.0/go.sum --- old/chezmoi-2.30.1/go.sum 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/go.sum 2023-02-17 12:19:43.000000000 +0100 @@ -12,8 +12,8 @@ github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 h1:Fu4D/i1HBoWql9xVIfW50Kohujz+T3xXPV60JVb3Fao= -github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 h1:OUJ54Fkd+AQXYmr9eOUxZfWNzpK3/e/KD40qa2rKHS4= +github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= @@ -26,30 +26,30 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aws/aws-sdk-go-v2 v1.17.3 h1:shN7NlnVzvDUgPQ+1rLMSxY8OWRNDRYtiqe0p/PgrhY= -github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.10 h1:Znce11DWswdh+5kOsIp+QaNfY9igp1QUN+fZHCKmeCI= -github.com/aws/aws-sdk-go-v2/config v1.18.10/go.mod h1:VATKco+pl+Qe1WW+RzvZTlPPe/09Gg9+vM0ZXsqb16k= -github.com/aws/aws-sdk-go-v2/credentials v1.13.10 h1:T4Y39IhelTLg1f3xiKJssThnFxsndS8B6OnmcXtKK+8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.10/go.mod h1:tqAm4JmQaShel+Qi38hmd1QglSnnxaYt50k/9yGQzzc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 h1:j9wi1kQ8b+e0FBVHxCqCGo4kxDU175hoDHcWAi0sauU= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21/go.mod h1:ugwW57Z5Z48bpvUyZuaPy4Kv+vEfJWnIrky7RmkBvJg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 h1:I3cakv2Uy1vNmmhRQmFptYDxOvBnwCdNwyw63N0RaRU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 h1:5NbbMrIzmUn/TXFqAle6mgrH5m9cOvMLRGL7pnG8tRE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 h1:KeTxcGdNnQudb46oOl4d90f2I33DF/c6q3RnZAmvQdQ= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28/go.mod h1:yRZVr/iT0AqyHeep00SZ4YfBAKojXz08w3XMBscdi0c= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 h1:5C6XgTViSb0bunmU57b3CT+MhxULqHH2721FVA+/kDM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21/go.mod h1:lRToEJsn+DRA9lW4O9L9+/3hjTkUzlzyzHqn8MTds5k= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.18.2 h1:QDVKb2VpuwzIslzshumxksayV5GkpqT+rkVvdPVrA9E= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.18.2/go.mod h1:jAeo/PdIJZuDSwsvxJS94G4d6h8tStj7WXVuKwLHWU8= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.0 h1:/2gzjhQowRLarkkBOGPXSRnb8sQ2RVsjdG1C/UliK/c= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.0/go.mod h1:wo/B7uUm/7zw/dWhBJ4FXuw1sySU5lyIhVg1Bu2yL9A= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0 h1:Jfly6mRxk2ZOSlbCvZfKNS7TukSx1mIzhSsqZ/IGSZI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0/go.mod h1:TZSH7xLO7+phDtViY/KUp9WGCJMQkLJ/VpgkTFd5gh8= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.2 h1:J/4wIaGInCEYCGhTSruxCxeoA5cy91a+JT7cHFKFSHQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.2/go.mod h1:+lGbb3+1ugwKrNTWcf2RT05Xmp543B06zDFTwiTLp7I= +github.com/aws/aws-sdk-go-v2 v1.17.4 h1:wyC6p9Yfq6V2y98wfDsj6OnNQa4w2BLGCLIxzNhwOGY= +github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.13 h1:v0xlYqbO6/EVlM8tUn2QEOA7btQxcgidEq2JRDBPTho= +github.com/aws/aws-sdk-go-v2/config v1.18.13/go.mod h1:r39wGSZB7wPDW1i54JyQXUpc5KsWjh5z/3S5D9eCqDg= +github.com/aws/aws-sdk-go-v2/credentials v1.13.13 h1:zw1KAc1kl00NYd3ofVmFrb09qnYlSQMeh+fmlQRAihI= +github.com/aws/aws-sdk-go-v2/credentials v1.13.13/go.mod h1:DW9nbIIF9MrIja0cBQrUpeWYQMSlNmP8fevLUyF9W38= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 h1:3aMfcTmoXtTZnaT86QlVaYh+BRMbvrrmZwIQ5jWqCZQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22/go.mod h1:YGSIJyQ6D6FjKMQh16hVFSIUD54L4F7zTGePqYMYYJU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 h1:r+XwaCLpIvCKjBIYy/HVZujQS9tsz5ohHG3ZIe0wKoE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28/go.mod h1:3lwChorpIM/BhImY/hy+Z6jekmN92cXGPI1QJasVPYY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 h1:7AwGYXDdqRQYsluvKFmWoqpcOQJ4bH634SkYf3FNj/A= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22/go.mod h1:EqK7gVrIGAHyZItrD1D8B0ilgwMD1GiWAmbU4u/JHNk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 h1:J4xhFd6zHhdF9jPP0FQJ6WknzBboGMBNjKOv4iTuw4A= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29/go.mod h1:TwuqRBGzxjQJIwH16/fOZodwXt2Zxa9/cwJC5ke4j7s= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 h1:LjFQf8hFuMO22HkV5VWGLBvmCLBCLPivUAmpdpnp4Vs= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22/go.mod h1:xt0Au8yPIwYXf/GYPy/vl4K3CgwhfQMYbrH7DlUUIws= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.18.4 h1:0P9VF9miVGT40WSZSuMzHwkwTVIltpDrTrvswMLjbx0= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.18.4/go.mod h1:hqPcyOuLU6yWIbLy3qMnQnmidgKuIEwqIlW6+chYnog= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.2 h1:EN102fWY7hI5u/2FPheTrwwMHkSXfl49RYkeEnJsrCU= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.2/go.mod h1:IgV8l3sj22nQDd5qcAGY0WenwCzCphqdbFOpfktZPrI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2 h1:f1lmlce7r13CX1BPyPqt9oh/H+uqOWc9367lDoGGwNQ= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2/go.mod h1:O1YSOg3aekZibh2SngvCRRG+cRHKKlYgxf/JBF/Kr/k= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 h1:s49mSnsBZEXjfGBkRfmK+nPqzT7Lt3+t2SmAKNyHblw= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.3/go.mod h1:b+psTJn33Q4qGoDaM7ZiOVVG8uVjGI6HaZ8WBHdgDgU= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= @@ -67,8 +67,9 @@ github.com/bwesterb/go-ristretto v1.2.2 h1:S2C0mmSjCLS3H9+zfXoIoKzl+cOncvBvt6pE+zTm5Ms= github.com/charmbracelet/bubbles v0.15.0 h1:c5vZ3woHV5W2b8YZI1q7v4ZNQaPetfHuoHzx+56Z6TI= github.com/charmbracelet/bubbles v0.15.0/go.mod h1:Y7gSFbBzlMpUDR/XM9MhZI374Q+1p1kluf1uLl8iK74= -github.com/charmbracelet/bubbletea v0.23.1 h1:CYdteX1wCiCzKNUlwm25ZHBIc1GXlYFyUIte8WPvhck= github.com/charmbracelet/bubbletea v0.23.1/go.mod h1:JAfGK/3/pPKHTnAS8JIE2u9f61BjWTQY57RbT25aMXU= +github.com/charmbracelet/bubbletea v0.23.2 h1:vuUJ9HJ7b/COy4I30e8xDVQ+VRDUEFykIjryPfgsdps= +github.com/charmbracelet/bubbletea v0.23.2/go.mod h1:FaP3WUivcTM0xOKNmhciz60M6I+weYLF76mr1JyI7sM= github.com/charmbracelet/glamour v0.6.0 h1:wi8fse3Y7nfcabbbDuwolqTqMQPMnVPeZhDM273bISc= github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8om2538k9ITBxOc= github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ= @@ -76,8 +77,8 @@ github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= -github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= +github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= @@ -106,8 +107,9 @@ github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= @@ -213,8 +215,9 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= -github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0= github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= +github.com/muesli/termenv v0.14.0 h1:8x9NFfOe8lmIWK4pgy3IfVEy47f+ppe3tUqdPZG2Uy0= +github.com/muesli/termenv v0.14.0/go.mod h1:kG/pF1E7fh949Xhe156crRUrHNyK221IuGO7Ez60Uc8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= @@ -290,14 +293,15 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.5.2/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.5.3 h1:3HUJmBFbQW9fhQOzMgseU134xfi6hU+mjWywx5Ty+/M= -github.com/yuin/goldmark v1.5.3/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.5.4 h1:2uY/xC0roWy8IBEGLgB1ywIoEJFGmRrX21YQcvGZzjU= +github.com/yuin/goldmark v1.5.4/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os= github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ= github.com/zalando/go-keyring v0.2.2 h1:f0xmpYiSrHtSNAVgwip93Cg8tuF45HJM6rHq/A5RI/4= github.com/zalando/go-keyring v0.2.2/go.mod h1:sI3evg9Wvpw3+n4SqplGSJUMwtDeROfD4nsFz4z9PG0= -go.etcd.io/bbolt v1.3.7-0.20220226045046-fd5535f71f48 h1:edJBWeGHJkzwvJ8ReW0h50BRw6ikNVtrzhqtbseIAL8= -go.etcd.io/bbolt v1.3.7-0.20220226045046-fd5535f71f48/go.mod h1:sh/Yp01MYDakY7RVfzKZn+T1WOMTTFJrWjl7+M73RXA= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= @@ -308,13 +312,13 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/exp v0.0.0-20230129154200-a960b3787bd2 h1:5sPMf9HJXrvBWIamTw+rTST0bZ3Mho2n1p58M0+W99c= -golang.org/x/exp v0.0.0-20230129154200-a960b3787bd2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb h1:PaBZQdo+iSDyHT053FjUCgZQ/9uqVwPOcl7KSWhKn6w= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -323,10 +327,10 @@ golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= @@ -354,27 +358,27 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= -golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/chezmoi/persistentstate.go new/chezmoi-2.31.0/pkg/chezmoi/persistentstate.go --- old/chezmoi-2.30.1/pkg/chezmoi/persistentstate.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/chezmoi/persistentstate.go 2023-02-17 12:19:43.000000000 +0100 @@ -7,13 +7,13 @@ // EntryStateBucket is the bucket for recording the entry states. EntryStateBucket = []byte("entryState") - // gitRepoExternalState is the bucket for recording the state of commands + // GitRepoExternalStateBucket is the bucket for recording the state of commands // that modify directories. - gitRepoExternalState = []byte("gitRepoExternalState") + GitRepoExternalStateBucket = []byte("gitRepoExternalState") - // scriptStateBucket is the bucket for recording the state of run once + // ScriptStateBucket is the bucket for recording the state of run once // scripts. - scriptStateBucket = []byte("scriptState") + ScriptStateBucket = []byte("scriptState") stateFormat = formatJSON{} ) @@ -47,38 +47,20 @@ } // PersistentStateData returns the structured data in s. -func PersistentStateData(s PersistentState) (any, error) { - configStateData, err := PersistentStateBucketData(s, ConfigStateBucket) - if err != nil { - return nil, err - } - entryStateData, err := PersistentStateBucketData(s, EntryStateBucket) - if err != nil { - return nil, err - } - gitRepoExternalData, err := PersistentStateBucketData(s, gitRepoExternalState) - if err != nil { - return nil, err - } - scriptStateData, err := PersistentStateBucketData(s, scriptStateBucket) - if err != nil { - return nil, err +func PersistentStateData(s PersistentState, buckets map[string][]byte) (map[string]any, error) { + result := make(map[string]any) + for bucketName, bucketKey := range buckets { + stateData, err := PersistentStateBucketData(s, bucketKey) + if err != nil { + return nil, err + } + result[bucketName] = stateData } - return struct { - ConfigState any `json:"configState" yaml:"configState"` - EntryState any `json:"entryState" yaml:"entryState"` - GitRepoExternalData any `json:"gitRepoExternalState" yaml:"gitRepoExternalState"` - ScriptState any `json:"scriptState" yaml:"scriptState"` - }{ - ConfigState: configStateData, - EntryState: entryStateData, - GitRepoExternalData: gitRepoExternalData, - ScriptState: scriptStateData, - }, nil + return result, nil } -// persistentStateGet gets the value associated with key in bucket in s, if it exists. -func persistentStateGet(s PersistentState, bucket, key []byte, value any) (bool, error) { +// PersistentStateGet gets the value associated with key in bucket in s, if it exists. +func PersistentStateGet(s PersistentState, bucket, key []byte, value any) (bool, error) { data, err := s.Get(bucket, key) if err != nil { return false, err @@ -92,8 +74,8 @@ return true, nil } -// persistentStateSet sets the value associated with key in bucket in s. -func persistentStateSet(s PersistentState, bucket, key []byte, value any) error { +// PersistentStateSet sets the value associated with key in bucket in s. +func PersistentStateSet(s PersistentState, bucket, key []byte, value any) error { data, err := stateFormat.Marshal(value) if err != nil { return err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/chezmoi/sourcestate.go new/chezmoi-2.31.0/pkg/chezmoi/sourcestate.go --- old/chezmoi-2.30.1/pkg/chezmoi/sourcestate.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/chezmoi/sourcestate.go 2023-02-17 12:19:43.000000000 +0100 @@ -290,6 +290,7 @@ EncryptedSuffix string // Suffix for encrypted files. Exact bool // Add the exact_ attribute to added directories. Filter *EntryTypeFilter // Entry type filter. + OnIgnoreFunc func(RelPath) // Function to call when a target is ignored. PreAddFunc PreAddFunc // Function to be called before a source entry is added. RemoveDir RelPath // Directory to remove before adding. ReplaceFunc ReplaceFunc // Function to be called before a source entry is replaced. @@ -325,6 +326,9 @@ targetRelPath := destAbsPath.MustTrimDirPrefix(s.destDirAbsPath) if s.Ignore(targetRelPath) { + if options.OnIgnoreFunc != nil { + options.OnIgnoreFunc(targetRelPath) + } continue } @@ -493,7 +497,7 @@ } } if !sourceUpdate.destAbsPath.Empty() { - if err := persistentStateSet( + if err := PersistentStateSet( persistentState, EntryStateBucket, sourceUpdate.destAbsPath.Bytes(), sourceUpdate.entryState, ); err != nil { return err @@ -613,7 +617,7 @@ if options.PreApplyFunc != nil { var lastWrittenEntryState *EntryState var entryState EntryState - ok, err := persistentStateGet(persistentState, EntryStateBucket, targetAbsPath.Bytes(), &entryState) + ok, err := PersistentStateGet(persistentState, EntryStateBucket, targetAbsPath.Bytes(), &entryState) if err != nil { return err } @@ -633,7 +637,7 @@ // respect to the last written state, we record the effect of the last // apply as the last written state. if targetEntryState.Equivalent(actualEntryState) && !lastWrittenEntryState.Equivalent(actualEntryState) { - err := persistentStateSet(persistentState, EntryStateBucket, targetAbsPath.Bytes(), targetEntryState) + err := PersistentStateSet(persistentState, EntryStateBucket, targetAbsPath.Bytes(), targetEntryState) if err != nil { return err } @@ -652,7 +656,7 @@ return nil } - return persistentStateSet(persistentState, EntryStateBucket, targetAbsPath.Bytes(), targetEntryState) + return PersistentStateSet(persistentState, EntryStateBucket, targetAbsPath.Bytes(), targetEntryState) } // Contains returns the source state entry for targetRelPath. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/chezmoi/targetstateentry.go new/chezmoi-2.31.0/pkg/chezmoi/targetstateentry.go --- old/chezmoi-2.30.1/pkg/chezmoi/targetstateentry.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/chezmoi/targetstateentry.go 2023-02-17 12:19:43.000000000 +0100 @@ -90,8 +90,8 @@ } modifyDirWithCmdStateKey := []byte(actualStateEntry.Path().String()) - if err := persistentStateSet( - persistentState, gitRepoExternalState, modifyDirWithCmdStateKey, &modifyDirWithCmdState{ + if err := PersistentStateSet( + persistentState, GitRepoExternalStateBucket, modifyDirWithCmdStateKey, &modifyDirWithCmdState{ Name: actualStateEntry.Path(), RunAt: runAt, }); err != nil { @@ -120,7 +120,7 @@ return false, nil } modifyDirWithCmdKey := []byte(targetAbsPath.String()) - switch modifyDirWithCmdStateBytes, err := persistentState.Get(gitRepoExternalState, modifyDirWithCmdKey); { + switch modifyDirWithCmdStateBytes, err := persistentState.Get(GitRepoExternalStateBucket, modifyDirWithCmdKey); { case err != nil: return false, err case modifyDirWithCmdStateBytes == nil: @@ -328,7 +328,7 @@ } scriptStateKey := []byte(hex.EncodeToString(contentsSHA256)) - if err := persistentStateSet(persistentState, scriptStateBucket, scriptStateKey, &scriptState{ + if err := PersistentStateSet(persistentState, ScriptStateBucket, scriptStateKey, &scriptState{ Name: t.name, RunAt: runAt, }); err != nil { @@ -336,7 +336,7 @@ } entryStateKey := actualStateEntry.Path().Bytes() - if err := persistentStateSet(persistentState, EntryStateBucket, entryStateKey, &EntryState{ + if err := PersistentStateSet(persistentState, EntryStateBucket, entryStateKey, &EntryState{ Type: EntryStateTypeScript, ContentsSHA256: HexBytes(contentsSHA256), }); err != nil { @@ -381,7 +381,7 @@ return false, err } scriptStateKey := []byte(hex.EncodeToString(contentsSHA256)) - switch scriptState, err := persistentState.Get(scriptStateBucket, scriptStateKey); { + switch scriptState, err := persistentState.Get(ScriptStateBucket, scriptStateKey); { case err != nil: return false, err case scriptState != nil: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/addcmd.go new/chezmoi-2.31.0/pkg/cmd/addcmd.go --- old/chezmoi-2.30.1/pkg/cmd/addcmd.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/addcmd.go 2023-02-17 12:19:43.000000000 +0100 @@ -17,6 +17,7 @@ filter *chezmoi.EntryTypeFilter follow bool prompt bool + quiet bool recursive bool template bool } @@ -47,6 +48,7 @@ flags.BoolVarP(&c.Add.follow, "follow", "f", c.Add.follow, "Add symlink targets instead of symlinks") flags.VarP(c.Add.filter.Include, "include", "i", "Include entry types") flags.BoolVarP(&c.Add.prompt, "prompt", "p", c.Add.prompt, "Prompt before adding each entry") + flags.BoolVarP(&c.Add.quiet, "quiet", "q", c.Add.quiet, "Suppress warnings") flags.BoolVarP(&c.Add.recursive, "recursive", "r", c.Add.recursive, "Recurse into subdirectories") flags.BoolVarP(&c.Add.template, "template", "T", c.Add.template, "Add files as templates") flags.BoolVar(&c.Add.TemplateSymlinks, "template-symlinks", c.Add.TemplateSymlinks, "Add symlinks with target in source or home dirs as templates") //nolint:lll @@ -56,6 +58,12 @@ return addCmd } +func (c *Config) defaultOnIgnoreFunc(targetRelPath chezmoi.RelPath) { + if !c.Add.quiet { + c.errorf("warning: ignoring %s", targetRelPath) + } +} + func (c *Config) defaultPreAddFunc(targetRelPath chezmoi.RelPath) error { if !c.Add.prompt { return nil @@ -147,6 +155,7 @@ EncryptedSuffix: c.encryption.EncryptedSuffix(), Exact: c.Add.exact, Filter: c.Add.filter, + OnIgnoreFunc: c.defaultOnIgnoreFunc, PreAddFunc: c.defaultPreAddFunc, ReplaceFunc: c.defaultReplaceFunc, Template: c.Add.template, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/bitwardentemplatefuncs.go new/chezmoi-2.31.0/pkg/cmd/bitwardentemplatefuncs.go --- old/chezmoi-2.30.1/pkg/cmd/bitwardentemplatefuncs.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/bitwardentemplatefuncs.go 2023-02-17 12:19:43.000000000 +0100 @@ -22,6 +22,22 @@ return string(output) } +func (c *Config) bitwardenAttachmentByRefTemplateFunc(name string, args ...string) string { + output, err := c.bitwardenOutput(args) + if err != nil { + panic(err) + } + var data map[string]interface{} + if err := json.Unmarshal(output, &data); err != nil { + panic(newParseCmdOutputError(c.Bitwarden.Command, args, output, err)) + } + itemid, ok := data["id"].(string) + if !ok { + panic("bitwarden object has invalid id") + } + return c.bitwardenAttachmentTemplateFunc(name, itemid) +} + func (c *Config) bitwardenFieldsTemplateFunc(args ...string) map[string]any { output, err := c.bitwardenOutput(args) if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/config.go new/chezmoi-2.31.0/pkg/cmd/config.go --- old/chezmoi-2.30.1/pkg/cmd/config.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/config.go 2023-02-17 12:19:43.000000000 +0100 @@ -86,11 +86,12 @@ Data map[string]any `json:"data" mapstructure:"data" yaml:"data"` Format writeDataFormat `json:"format" mapstructure:"format" yaml:"format"` DestDirAbsPath chezmoi.AbsPath `json:"destDir" mapstructure:"destDir" yaml:"destDir"` + GitHub gitHubConfig `json:"gitHub" mapstructure:"gitHub" yaml:"gitHub"` Interpreters map[string]*chezmoi.Interpreter `json:"interpreters" mapstructure:"interpreters" yaml:"interpreters"` //nolint:lll Mode chezmoi.Mode `json:"mode" mapstructure:"mode" yaml:"mode"` Pager string `json:"pager" mapstructure:"pager" yaml:"pager"` PINEntry pinEntryConfig `json:"pinentry" mapstructure:"pinentry" yaml:"pinentry"` - Progress bool `json:"progress" mapstructure:"progress" yaml:"progress"` + Progress autoBool `json:"progress" mapstructure:"progress" yaml:"progress"` Safe bool `json:"safe" mapstructure:"safe" yaml:"safe"` ScriptEnv map[string]string `json:"scriptEnv" mapstructure:"scriptEnv" yaml:"scriptEnv"` ScriptTempDir chezmoi.AbsPath `json:"scriptTempDir" mapstructure:"scriptTempDir" yaml:"scriptTempDir"` //nolint:lll @@ -357,6 +358,7 @@ "awsSecretsManagerRaw": c.awsSecretsManagerRawTemplateFunc, "bitwarden": c.bitwardenTemplateFunc, "bitwardenAttachment": c.bitwardenAttachmentTemplateFunc, + "bitwardenAttachmentByRef": c.bitwardenAttachmentByRefTemplateFunc, "bitwardenFields": c.bitwardenFieldsTemplateFunc, "comment": c.commentTemplateFunc, "decrypt": c.decryptTemplateFunc, @@ -1372,7 +1374,7 @@ persistentFlags.VarP(&c.DestDirAbsPath, "destination", "D", "Set destination directory") persistentFlags.Var(&c.Mode, "mode", "Mode") persistentFlags.Var(&c.persistentStateAbsPath, "persistent-state", "Set persistent state file") - persistentFlags.BoolVar(&c.Progress, "progress", c.Progress, "Display progress bars") + persistentFlags.Var(&c.Progress, "progress", "Display progress bars") persistentFlags.BoolVar(&c.Safe, "safe", c.Safe, "Safely replace files and symlinks") persistentFlags.VarP(&c.SourceDirAbsPath, "source", "S", "Set source directory") persistentFlags.Var(&c.UseBuiltinAge, "use-builtin-age", "Use builtin age") @@ -1944,6 +1946,14 @@ return defaultConfigFileAbsPath.Dir().Join(persistentStateFileRelPath), nil } +// progressAutoFunc detects whether progress bars should be displayed. +func (c *Config) progressAutoFunc() bool { + if stdout, ok := c.stdout.(*os.File); ok { + return term.IsTerminal(int(stdout.Fd())) + } + return false +} + func (c *Config) newTemplateData() *templateData { // Determine the user's username and group, if possible. // @@ -2378,6 +2388,9 @@ }, Interpreters: defaultInterpreters, Pager: os.Getenv("PAGER"), + Progress: autoBool{ + auto: true, + }, PINEntry: pinEntryConfig{ Options: pinEntryDefaultOptions, }, @@ -2451,6 +2464,9 @@ Git: gitCmdConfig{ Command: "git", }, + GitHub: gitHubConfig{ + RefreshPeriod: 1 * time.Minute, + }, Merge: mergeCmdConfig{ Command: "vimdiff", }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/executetemplatecmd.go new/chezmoi-2.31.0/pkg/cmd/executetemplatecmd.go --- old/chezmoi-2.30.1/pkg/cmd/executetemplatecmd.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/executetemplatecmd.go 2023-02-17 12:19:43.000000000 +0100 @@ -18,6 +18,7 @@ promptString map[string]string stdinIsATTY bool templateOptions chezmoi.TemplateOptions + withStdin bool } func (c *Config) newExecuteTemplateCmd() *cobra.Command { @@ -27,6 +28,9 @@ Long: mustLongHelp("execute-template"), Example: example("execute-template"), RunE: c.runExecuteTemplateCmd, + Annotations: newAnnotations( + persistentStateModeReadWrite, + ), } flags := executeTemplateCmd.Flags() @@ -37,6 +41,7 @@ flags.BoolVar(&c.executeTemplate.stdinIsATTY, "stdinisatty", c.executeTemplate.stdinIsATTY, "Simulate stdinIsATTY") flags.StringVar(&c.executeTemplate.templateOptions.LeftDelimiter, "left-delimiter", c.executeTemplate.templateOptions.LeftDelimiter, "Set left template delimiter") //nolint:lll flags.StringVar(&c.executeTemplate.templateOptions.RightDelimiter, "right-delimiter", c.executeTemplate.templateOptions.RightDelimiter, "Set right template delimiter") //nolint:lll + flags.BoolVar(&c.executeTemplate.withStdin, "with-stdin", c.executeTemplate.withStdin, "Set .chezmoi.stdin to the contents of the standard input") //nolint:lll return executeTemplateCmd } @@ -48,6 +53,17 @@ if c.executeTemplate.init { options = append(options, chezmoi.WithReadTemplateData(false)) } + if c.executeTemplate.withStdin && len(args) > 0 { + stdin, err := io.ReadAll(c.stdin) + if err != nil { + return err + } + options = append(options, chezmoi.WithPriorityTemplateData(map[string]any{ + "chezmoi": map[string]any{ + "stdin": string(stdin), + }, + })) + } sourceState, err := c.newSourceState(cmd.Context(), options...) if err != nil { return err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/githubtemplatefuncs.go new/chezmoi-2.31.0/pkg/cmd/githubtemplatefuncs.go --- old/chezmoi-2.30.1/pkg/cmd/githubtemplatefuncs.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/githubtemplatefuncs.go 2023-02-17 12:19:43.000000000 +0100 @@ -4,12 +4,38 @@ "context" "fmt" "strings" + "time" "github.com/google/go-github/v50/github" "github.com/twpayne/chezmoi/v2/pkg/chezmoi" ) +type gitHubConfig struct { + RefreshPeriod time.Duration `json:"refreshPeriod" mapstructure:"refreshPeriod" yaml:"refreshPeriod"` +} + +type gitHubKeysState struct { + RequestedAt time.Time `json:"requestedAt" yaml:"requestedAt"` + Keys []*github.Key `json:"keys" yaml:"keys"` +} + +type gitHubLatestReleaseState struct { + RequestedAt time.Time `json:"requestedAt" yaml:"requestedAt"` + Release *github.RepositoryRelease `json:"release" yaml:"release"` +} + +type gitHubLatestTagState struct { + RequestedAt time.Time `json:"requestedAt" yaml:"requestedAt"` + Tag *github.RepositoryTag `json:"tag" yaml:"tag"` +} + +var ( + gitHubKeysStateBucket = []byte("gitHubLatestKeysState") + gitHubLatestReleaseStateBucket = []byte("gitHubLatestReleaseState") + gitHubLatestTagStateBucket = []byte("gitHubLatestTagState") +) + type gitHubData struct { client *github.Client clientErr error @@ -23,6 +49,18 @@ return keys } + now := time.Now() + gitHubKeysKey := []byte(user) + if c.GitHub.RefreshPeriod != 0 { + var gitHubKeysValue gitHubKeysState + switch ok, err := chezmoi.PersistentStateGet(c.persistentState, gitHubKeysStateBucket, gitHubKeysKey, &gitHubKeysValue); { //nolint:lll + case err != nil: + panic(err) + case ok && !now.After(gitHubKeysValue.RequestedAt.Add(c.GitHub.RefreshPeriod)): + return gitHubKeysValue.Keys + } + } + ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -47,10 +85,18 @@ opts.Page = resp.NextPage } + if err := chezmoi.PersistentStateSet(c.persistentState, gitHubKeysStateBucket, gitHubKeysKey, &gitHubKeysState{ + RequestedAt: now, + Keys: allKeys, + }); err != nil { + panic(err) + } + if c.gitHub.keysCache == nil { c.gitHub.keysCache = make(map[string][]*github.Key) } c.gitHub.keysCache[user] = allKeys + return allKeys } @@ -64,6 +110,18 @@ return release } + now := time.Now() + gitHubLatestReleaseKey := []byte(owner + "/" + repo) + if c.GitHub.RefreshPeriod != 0 { + var gitHubLatestReleaseStateValue gitHubLatestReleaseState + switch ok, err := chezmoi.PersistentStateGet(c.persistentState, gitHubLatestReleaseStateBucket, gitHubLatestReleaseKey, &gitHubLatestReleaseStateValue); { //nolint:lll + case err != nil: + panic(err) + case ok && !now.After(gitHubLatestReleaseStateValue.RequestedAt.Add(c.GitHub.RefreshPeriod)): + return gitHubLatestReleaseStateValue.Release + } + } + ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -77,6 +135,13 @@ panic(err) } + if err := chezmoi.PersistentStateSet(c.persistentState, gitHubLatestReleaseStateBucket, gitHubLatestReleaseKey, &gitHubLatestReleaseState{ //nolint:lll + RequestedAt: now, + Release: release, + }); err != nil { + panic(err) + } + if c.gitHub.latestReleaseCache == nil { c.gitHub.latestReleaseCache = make(map[string]map[string]*github.RepositoryRelease) } @@ -98,6 +163,18 @@ return tag } + now := time.Now() + gitHubLatestTagKey := []byte(owner + "/" + repo) + if c.GitHub.RefreshPeriod != 0 { + var gitHubLatestTagValue gitHubLatestTagState + switch ok, err := chezmoi.PersistentStateGet(c.persistentState, gitHubLatestTagStateBucket, gitHubLatestTagKey, &gitHubLatestTagValue); { //nolint:lll + case err != nil: + panic(err) + case ok && !now.After(gitHubLatestTagValue.RequestedAt.Add(c.GitHub.RefreshPeriod)): + return gitHubLatestTagValue.Tag + } + } + ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -112,9 +189,16 @@ if err != nil { panic(err) } - var firstTag *github.RepositoryTag + var tag *github.RepositoryTag if len(tags) > 0 { - firstTag = tags[0] + tag = tags[0] + } + + if err := chezmoi.PersistentStateSet(c.persistentState, gitHubLatestTagStateBucket, gitHubLatestTagKey, &gitHubLatestTagState{ //nolint:lll + RequestedAt: now, + Tag: tag, + }); err != nil { + panic(err) } if c.gitHub.latestTagCache == nil { @@ -123,9 +207,9 @@ if c.gitHub.latestTagCache[owner] == nil { c.gitHub.latestTagCache[owner] = make(map[string]*github.RepositoryTag) } - c.gitHub.latestTagCache[owner][repo] = firstTag + c.gitHub.latestTagCache[owner][repo] = tag - return firstTag + return tag } func (c *Config) getGitHubClient(ctx context.Context) (*github.Client, error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/readhttpresponse.go new/chezmoi-2.31.0/pkg/cmd/readhttpresponse.go --- old/chezmoi-2.30.1/pkg/cmd/readhttpresponse.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/readhttpresponse.go 2023-02-17 12:19:43.000000000 +0100 @@ -114,7 +114,7 @@ func (c *Config) readHTTPResponse(resp *http.Response) ([]byte, error) { switch { - case c.noTTY || !c.Progress: + case c.noTTY || !c.Progress.Value(c.progressAutoFunc): return io.ReadAll(resp.Body) case resp.ContentLength >= 0: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/statecmd.go new/chezmoi-2.31.0/pkg/cmd/statecmd.go --- old/chezmoi-2.30.1/pkg/cmd/statecmd.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/statecmd.go 2023-02-17 12:19:43.000000000 +0100 @@ -186,7 +186,15 @@ } func (c *Config) runStateDumpCmd(cmd *cobra.Command, args []string) error { - data, err := chezmoi.PersistentStateData(c.persistentState) + data, err := chezmoi.PersistentStateData(c.persistentState, map[string][]byte{ + "configState": chezmoi.ConfigStateBucket, + "entryState": chezmoi.EntryStateBucket, + "gitHubKeysState": gitHubKeysStateBucket, + "gitHubLatestReleaseState": gitHubLatestReleaseStateBucket, + "gitHubLatestTagState": gitHubLatestTagStateBucket, + "gitRepoExternalState": chezmoi.GitRepoExternalStateBucket, + "scriptState": chezmoi.ScriptStateBucket, + }) if err != nil { return err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/templatefuncs.go new/chezmoi-2.31.0/pkg/cmd/templatefuncs.go --- old/chezmoi-2.30.1/pkg/cmd/templatefuncs.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/templatefuncs.go 2023-02-17 12:19:43.000000000 +0100 @@ -473,7 +473,13 @@ func iniFileToMap(file *ini.File) map[string]any { m := make(map[string]any) for _, section := range file.Sections() { - m[section.Name()] = iniSectionToMap(section) + if section.Name() == ini.DefaultSection { + for _, k := range section.Keys() { + m[k.Name()] = k.Value() + } + } else { + m[section.Name()] = iniSectionToMap(section) + } } return m } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/templatefuncs_test.go new/chezmoi-2.31.0/pkg/cmd/templatefuncs_test.go --- old/chezmoi-2.30.1/pkg/cmd/templatefuncs_test.go 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/templatefuncs_test.go 2023-02-17 12:19:43.000000000 +0100 @@ -7,7 +7,6 @@ "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gopkg.in/ini.v1" "github.com/twpayne/chezmoi/v2/pkg/chezmoitest" ) @@ -370,18 +369,28 @@ `key = value`, ), expected: map[string]any{ - ini.DefaultSection: map[string]any{ - "key": "value", + "key": "value", + }, + }, + { + text: chezmoitest.JoinLines( + `[section]`, + `sectionKey = sectionValue`, + ), + expected: map[string]any{ + "section": map[string]any{ + "sectionKey": "sectionValue", }, }, }, { text: chezmoitest.JoinLines( + `key = value`, `[section]`, `sectionKey = sectionValue`, ), expected: map[string]any{ - ini.DefaultSection: map[string]any{}, + "key": "value", "section": map[string]any{ "sectionKey": "sectionValue", }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/add.txtar new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/add.txtar --- old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/add.txtar 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/add.txtar 2023-02-17 12:19:43.000000000 +0100 @@ -59,6 +59,7 @@ # test that chezmoi add respects .chezmoiignore exec chezmoi add $HOME${/}.dir exists $CHEZMOISOURCEDIR/dot_dir/file +stderr 'warning: ignoring' ! exists $CHEZMOISOURCEDIR/dot_dir/ignore chhome home4/user diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/bitwarden.txtar new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/bitwarden.txtar --- old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/bitwarden.txtar 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/bitwarden.txtar 2023-02-17 12:19:43.000000000 +0100 @@ -14,6 +14,10 @@ exec chezmoi execute-template '{{ (bitwardenAttachment "filename" "item-id") }}' cmp stdout golden/bitwarden-attachment +# test bitwardenAttachmentByRef template function +exec chezmoi execute-template '{{ (bitwardenAttachmentByRef "filename" "item" "example.com") }}' +cmp stdout golden/bitwarden-attachment + -- bin/bw -- #!/bin/sh @@ -57,6 +61,11 @@ hidden-file-value EOF ;; +"get attachment filename --itemid bf22e4b4-ae4a-4d1c-8c98-ac620004b628 --raw") + cat <<EOF +hidden-file-value +EOF + ;; *) echo "Invalid command: $*" echo "See --help for a list of available commands." @@ -97,6 +106,8 @@ echo.} ) ELSE IF "%*" == "get attachment filename --itemid item-id --raw" ( echo.hidden-file-value +) ELSE IF "%*" == "get attachment filename --itemid bf22e4b4-ae4a-4d1c-8c98-ac620004b628 --raw" ( + echo.hidden-file-value ) ELSE ( echo Invalid command: $* echo "See --help for a list of available commands." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/configstate.txtar new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/configstate.txtar --- old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/configstate.txtar 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/configstate.txtar 2023-02-17 12:19:43.000000000 +0100 @@ -67,6 +67,9 @@ configState: configTemplateContentsSHA256: af43121a524340707b84e390f510c949731177e6f2a25b3b6b11b2fc656cf8f2 entryState: {} +gitHubKeysState: {} +gitHubLatestReleaseState: {} +gitHubLatestTagState: {} gitRepoExternalState: {} scriptState: {} -- home/user/.local/share/chezmoi/.chezmoi.toml.tmpl -- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/executetemplate.txtar new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/executetemplate.txtar --- old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/executetemplate.txtar 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/executetemplate.txtar 2023-02-17 12:19:43.000000000 +0100 @@ -7,6 +7,11 @@ exec chezmoi execute-template stdout stdin-template +# test reading from stdin with an argument +stdin golden/stdin +exec chezmoi execute-template --with-stdin '{{ .chezmoi.stdin | upper }}' +stdout '# CONTENTS OF STDIN' + # test partial templates work exec chezmoi execute-template '{{ template "partial" }}' stdout 'hello world' @@ -77,6 +82,8 @@ exec chezmoi execute-template --init '{{ promptString "value" "default" }}' stdout default +-- golden/stdin -- +# contents of stdin -- golden/stdin.tmpl -- {{ "stdin-template" }} -- home/user/.config/chezmoi/chezmoi.toml -- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/state_unix.txtar new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/state_unix.txtar --- old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/state_unix.txtar 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/state_unix.txtar 2023-02-17 12:19:43.000000000 +0100 @@ -40,6 +40,9 @@ -- golden/dump.yaml -- configState: {} entryState: {} +gitHubKeysState: {} +gitHubLatestReleaseState: {} +gitHubLatestTagState: {} gitRepoExternalState: {} scriptState: {} -- home/user/.local/share/chezmoi/run_once_script.sh -- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/state_windows.txtar new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/state_windows.txtar --- old/chezmoi-2.30.1/pkg/cmd/testdata/scripts/state_windows.txtar 2023-02-11 19:06:40.000000000 +0100 +++ new/chezmoi-2.31.0/pkg/cmd/testdata/scripts/state_windows.txtar 2023-02-17 12:19:43.000000000 +0100 @@ -21,6 +21,9 @@ -- golden/dump.yaml -- configState: {} entryState: {} +gitHubKeysState: {} +gitHubLatestReleaseState: {} +gitHubLatestTagState: {} gitRepoExternalState: {} scriptState: {} -- home/user/.local/share/chezmoi/run_once_script.cmd -- ++++++ chezmoi.obsinfo ++++++ --- /var/tmp/diff_new_pack.MjmhR9/_old 2023-02-17 16:46:19.215307047 +0100 +++ /var/tmp/diff_new_pack.MjmhR9/_new 2023-02-17 16:46:19.223307092 +0100 @@ -1,5 +1,5 @@ name: chezmoi -version: 2.30.1 -mtime: 1676138800 -commit: ff0c704a9068c81b3ad301236d730fefcd9ce98c +version: 2.31.0 +mtime: 1676632783 +commit: 4d2bc846212e27fae1e5bbd45d70e00908da603b ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/chezmoi/vendor.tar.gz /work/SRC/openSUSE:Factory/.chezmoi.new.22824/vendor.tar.gz differ: char 5, line 1