-
Notifications
You must be signed in to change notification settings - Fork 37.7k
Make GUI and CLI tools use the same datadir #27409
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. Code CoverageFor detailed information about the code coverage, see the test coverage report. ReviewsSee the guideline for information on the review process. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
This is a draft PR and not fully implemented. Just opening it to share progress since it's taking longer than I expected to implement correctly |
…have argument positions Do not error on valid format specifications like strprintf("arg2=%2$s arg1=%1$s arg2=%2$s", arg1, arg2); Needed to avoid lint error in upcoming commit: https://cirrus-ci.com/task/4755032734695424?logs=lint#L221 Additionally tested with python -m doctest test/lint/run-lint-format-strings.py
Show an error on startup if a bitcoin datadir that is being used contains a `bitcoin.conf` file that is ignored. There are two cases where this could happen: - One case reported in bitcoin#27246 (comment) happens when a bitcoin.conf file in the default datadir (e.g. $HOME/.bitcoin/bitcoin.conf) has a "datadir=/path" line that sets different datadir containing a second bitcoin.conf file. Currently the second bitcoin.conf file is ignored with no warning. - Another way this could happen is if a -conf= command line argument points to a configuration file with a "datadir=/path" line and that specified path contains a bitcoin.conf file, which is currently ignored. This change only adds an error message and doesn't change anything about way settings are applied. It also doesn't trigger errors if there are redundant -datadir or -conf settings pointing at the same configuration file, only if they are pointing at different files and one file is being ignored.
Currently debug.log will show the wrong bitcoin.conf config file path when bitcoind is invoked without -conf or -datadir arguments, and there's a default bitcoin.conf file which specifies another datadir= location. When this happens, the debug.log will include an incorrect "Config file:" line referring to a bitcoin.conf file in the other datadir, instead of the referring to the actual configuration file in the default datadir which was parsed. The bad log print was reported and originally fixed in bitcoin#27303 by Matthew Zipkin <pinheadmz@gmail.com> This PR takes a slightly different approach to fixing the bug, trying to avoid future bugs by not allowing the GetConfigFilePath function to be called before the the configuration is parsed, and deleting GetConfigFile function which could be confused with GetConfigFilePath. It also includes a test for the bug which the original fix did not have. Co-authored-by: Matthew Zipkin <pinheadmz@gmail.com>
Currently bitcoin-wallet accepts a -datadir argument but ignores and config file in that directory. This changes it to load the config file for consistency with other cli tools, and in case it contains any significant settings. Also update various tests using the data directory to call ReadConfigFiles. Motivation for these changes is to prevent errors after the next commit makes it at assert error to get the datadir path without reading the configuration first.
It's always been possible for bitcoin default datadirs ($HOME/.bitcoin, $HOME/Library/Application Support/Bitcoin, %APPDATA%\Bitcoin) to point at an external locations using symlinks, but not all filesystems support symlinks, so add extra support for pointing at external locations using text file. This feature is used in the following commit to allow the bitcoin GUI to select a default datadir location that will also be treated as the default datadir for CLI tools. Currently when a custom data is set in the GUI, CLI tools ignore it by default.
Currently if a you choose a non-default datadir in the GUI intro screen, the datadir is ignored by CLI tools. This means `bitcoin-cli` and `bitcoin-wallet` will try to use the wrong datadir and show errors if they are called without a -datadir arguments, and `bitcoind` will appear to work but use a different datadir, not loading the same wallets and settings, and downloading blocks into the wrong place. There are also more subtle inconsistencies between GUI and CLI selection of datadirs such as bitcoin#27273 where GUI might ignore a datadir= line in a bitcoin.conf that CLI tools would apply. This PR gets rid of inconsistencies between GUI and CLI tools and makes them use the same datadir setting by default. It is followup to bitcoin-core/gui#602 which made GUI and CLI tools use the same `-dbcache`, `-par`, `-spendzeroconfchange`, `-signer`, `-upnp`, `-natpmp`, `-listen`, `-server`, `-prune`, `-proxy`, `-onion`, and `-lang` settings as long as they loaded the same datadir. The reason for GUI and CLI tools using inconsistent datadirs, is that GUI stores the datadir path in a `strDataDir` field in `.config/Bitcoin/Bitcoin-Qt.conf`[^1] which CLI tools ignore. This PR changes the GUI to instead store the datadir path at the default datadir location `~/.bitcoin`[^2] as a symlink that CLI tools will already follow, or as a text file if the filesystem does not support creating symlinks. If upgrading from a previous version of the GUI and there is only a GUI datadir, the `strDataDir` setting will be automatically migrated to a symlink so CLI tools will start using it as well. If CLI and GUI tools are currently using different default datadirs, the GUI will show a prompt allowing either of the datadirs to be loaded and optionally set as the common default going forward.
This PR probably closes #8106 |
🐙 This pull request conflicts with the target branch and needs rebase. |
Won't this change/break putting the bitcoin.conf in the GUI-selected datadir? |
No, I definitely need to update this and it may contain bugs. But do you see something here that would cause that to happen? |
No, I didn't get to the code yet - was just commenting from the description of this PR and #27302 |
There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
# Disable this test for windows currently because trying to override | ||
# the default datadir through the environment does not seem to work. | ||
if sys.platform == "win32": | ||
return |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Confirmed, doesn't work :-(
https://learn.microsoft.com/en-us/windows/win32/shell/csidl#remarks
There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
⌛ There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
1 similar comment
⌛ There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
@ryanofsky What is the status of this? |
re: #27409 (comment)
It's a change I'd really like to get back to, but is not ready now. The last time I worked on it, which was months ago, I started writing a Qt test for it but there are so many permutations of configurations (presence/absense of different data directory locations) that I was struggling to write it. I would like to get back to this at some point and I do have work in progress, but I don't think I will have an update on it soon, given other things I'm working on. |
⌛ There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
3 similar comments
⌛ There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
⌛ There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
⌛ There hasn't been much activity lately and the patch still needs rebase. What is the status here?
|
This is based on #27302. The non-base commits are:
ae5fc323b24
bitcoin-wallet: make bitcoin-wallet tool load config fileb091d9b0762
init: Allow bitcoin default datadir to point at an external datadir5855150efae
Make GUI and CLI tools use the same datadirCurrently if your choose a non-default datadir in the GUI intro screen, the datadir is ignored by CLI tools.
This PR makes GUI and CLI tools the same datadir setting by default. It is followup to bitcoin-core/gui#602 which made GUI and CLI tools use the same settings as long as they loaded the same datadir.
The reason GUI and CLI tools use inconsistent datadirs is that GUI stores the datadir path in a
strDataDir
field in.config/Bitcoin/Bitcoin-Qt.conf
1 which CLI tools ignore. This PR changes the GUI to instead store the datadir path at the default datadir location~/.bitcoin
2 as a symlink that CLI tools will already follow, or as a text file if the filesystem does not support symlinks.If upgrading from a previous version of the GUI and there is only a GUI datadir, the
strDataDir
setting will be automatically migrated to a symlink so CLI tools will start using it as well.If upgrading and GUI and CLI tools are using different datadirs, the GUI will show a prompt allowing either of the datadirs to be loaded on startup, with an option to set one as the default going forward.
Footnotes
strDataDir
value is stored in.config/Bitcoin/Bitcoin-Qt.conf
on linux, in property list files on macos, and in registry keys on windows. ↩The default datadir location is
~/.bitcoin
on linux,~/Library/Application Support/Bitcoin
on macos, and%APPDATA%\Bitcoin
on windows ↩