test: enabling wallet migration functional test on windows #32219

pull m3dwards wants to merge 7 commits into bitcoin:master from m3dwards:250403-win-test-prev-rel changing 7 files +202 −174
  1. m3dwards commented at 2:49 pm on April 4, 2025: contributor

    This PR updates the test/get_previous_releases.py script to also work on Windows by changing to be pure python rather than using unix tools such as curl and tar.

    This enables additional functional tests to run such as wallet_migration.py, mempool_compatability.py and wallet_backwards_compatibility.py.

    Unfortunately feature_unsupported_utxo_db.py could run but this test requires Bitcoin v0.14.3 which will not run under windows with emojis in the data directory (as the functional test runner has by default) . This test could be run as it’s own step in the ci workflow file and would pass but as it’s quite an old version / feature I have assumed it’s not worth worrying about and best just to exclude.

    Two tests needed to be slightly modified to run under windows. Both were issues with trying to overwrite a file that already exists which windows seems to be more strict on than the unix based systems.

    Finally, building from source has been dropped from the get_previous_releases.py script. This had not been updated after the move to cmake and so it was assumed that nobody could have been using that feature.

  2. DrahtBot commented at 2:49 pm on April 4, 2025: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/32219.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK hodlinator, maflcko, achow101
    Concept ACK hebasto

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

    Conflicts

    No conflicts as of last run.

  3. in test/get_previous_releases.py:179 in 0e63de11bb outdated
    201+    archiveHash = hasher.hexdigest()
    202 
    203-    if tarballHash not in SHA256_SUMS or SHA256_SUMS[tarballHash]['tarball'] != tarball:
    204-        if tarball in [v['tarball'] for v in SHA256_SUMS.values()]:
    205+    if archiveHash not in SHA256_SUMS or SHA256_SUMS[archiveHash]['archive'] != archive:
    206+        if archive in [v['archive'] for v in SHA256_SUMS.values()]:
    


    hebasto commented at 3:15 pm on April 4, 2025:
    If this switch s/tarball/archive/ is needed, maybe separate it onto its own scripted-diff to make this commit diff smaller and more reviewable?

    m3dwards commented at 3:27 pm on April 4, 2025:
    Thanks for the tip. As it now deals with zip files too it felt wrong to call them all tarballs.
  4. hebasto commented at 3:16 pm on April 4, 2025: member
    Concept ACK.
  5. m3dwards force-pushed on Apr 4, 2025
  6. maflcko commented at 3:27 pm on April 4, 2025: member

    Creating draft PR to test on Cirrus CI

    For reference, you can also test locally (or in a VM, or in the cloud) via https://github.com/bitcoin/bitcoin/blob/master/ci/README.md#running-a-stage-locally. But I just wanted to mention it. Using the CI here is also fine.

  7. m3dwards commented at 3:29 pm on April 4, 2025: contributor

    For reference, you can also test locally (or in a VM, or in the cloud)

    This will probably be better in this instance as it wasn’t a good test anyway as the get_previous_releases.py script just used cached versions of the downloads rather than downloading again.

  8. laanwj added the label Wallet on Apr 7, 2025
  9. laanwj added the label Tests on Apr 7, 2025
  10. m3dwards force-pushed on Apr 10, 2025
  11. m3dwards force-pushed on Apr 10, 2025
  12. m3dwards force-pushed on Apr 10, 2025
  13. m3dwards force-pushed on Apr 10, 2025
  14. DrahtBot added the label CI failed on Apr 10, 2025
  15. DrahtBot commented at 2:58 pm on April 10, 2025: contributor

    🚧 At least one of the CI tasks failed. Debug: https://github.com/bitcoin/bitcoin/runs/40333073167

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

  16. m3dwards force-pushed on Apr 10, 2025
  17. m3dwards force-pushed on Apr 10, 2025
  18. DrahtBot removed the label CI failed on Apr 10, 2025
  19. m3dwards force-pushed on Apr 11, 2025
  20. DrahtBot added the label Needs rebase on Apr 17, 2025
  21. m3dwards force-pushed on May 13, 2025
  22. DrahtBot removed the label Needs rebase on May 13, 2025
  23. fanquake renamed this:
    DRAFT: test: enabling wallet migration functional test on windows
    test: enabling wallet migration functional test on windows
    on May 14, 2025
  24. m3dwards force-pushed on Jun 2, 2025
  25. m3dwards marked this as ready for review on Jun 2, 2025
  26. in test/get_previous_releases.py:194 in 12248ee080 outdated
    211+    else:
    212+        ret = subprocess.run(['tar', '-zxf', archive, '-C', tag,
    213+                              '--strip-components=1',
    214+                              'bitcoin-{tag}'.format(tag=tag[1:])]).returncode
    215+        if ret != 0:
    216+            print(f"Failed to extract the {tag} tarball")
    


    hodlinator commented at 8:16 am on June 3, 2025:

    nit: Could print to stderr here and elsewhere for touched lines with error messages.

    0            print(f"Failed to extract the {tag} tarball", file=sys.stderr)
    

    m3dwards commented at 10:32 am on June 5, 2025:
    Taken and applied everywhere.
  27. in test/get_previous_releases.py:139 in 12248ee080 outdated
    142-        tag=tag[1:], platform=platform)
    143-    tarballUrl = 'https://bitcoincore.org/{bin_path}/{tarball}'.format(
    144-        bin_path=bin_path, tarball=tarball)
    145 
    146-    print('Fetching: {tarballUrl}'.format(tarballUrl=tarballUrl))
    147+    host = args.platform
    


    hodlinator commented at 8:30 am on June 3, 2025:
    nit: Why rename platform to host? Seems better to keep them separate to avoid conflating with args.host, or at least leave a small motivation in the commit message.

    m3dwards commented at 10:30 am on June 5, 2025:
    It was renamed to prevent a clash with the now imported platform package. I have reworked the variables to be more clear.
  28. in test/get_previous_releases.py:185 in 12248ee080 outdated
    234-    if not Path(tag).is_dir():
    235-        # fetch new tags
    236-        subprocess.run(
    237-            ["git", "fetch", githubUrl, "--tags"])
    238-        output = subprocess.check_output(['git', 'tag', '-l', tag])
    239-        if not output:
    


    hodlinator commented at 12:37 pm on June 3, 2025:
    Regarding removing this support for building from source, I’m not sure about doing that. Yes, we use CMake for newer releases, but the older ones use Auto-tools, no?

    m3dwards commented at 4:14 pm on June 3, 2025:
    @achow101 @maflcko do you or do you know of any use of using the get_previous_releases.py script to build from source? Am I being a bit eager in dropping this feature?

    achow101 commented at 6:59 pm on June 3, 2025:
    I’ve always used my own guix builds, I don’t use the script. However, I would prefer to not drop functionality.

    maflcko commented at 7:09 pm on June 3, 2025:
    I never used it and it is broken anyway for newer release tags, that are using the cmake build system, so removing it seems fine for now. If someone is actually using it, it should be trivial to just check out the commit prior to this pull merged and use it. If someone wants to add it back, it should be trivial to recover the autotools portion from the git history and it should also be relatively easy to add the new cmake portion.

    hodlinator commented at 7:31 am on June 5, 2025:

    Verified building from source works for the most recent release listed in get_previous_releases.py:

    0$ git checkout cbd8e3d51148d29dca576982de4c4398bf3e2f6f # parent commit of this PR
    1<...> # modify `make` -> `make -j...` in get_previous_releases.py
    2$ ./test/get_previous_releases.py v28.0 # builds successfully from source
    3$ ls releases/v28.0/bin/
    4bitcoin-cli  bitcoin-tx  bitcoind
    

    (Edit: I can’t claim that I’ve ever used the feature however).


    m3dwards commented at 8:52 am on June 5, 2025:

    @hodlinator thanks for the confirmation.

    The other factor worth considering is that as written, this function will not work on Windows. I’m inclined to still leave it out.


    maflcko commented at 8:58 am on June 5, 2025:
    If it is kept, it shouldn’t be the default, like it is now. Also, it should document that it doesn’t work on Windows nor on cmake.

    hodlinator commented at 9:27 am on June 5, 2025:

    Commit message for ff34214267d0526a59d4ffebdfa9b194f73a5ff0 should at least be changed to something like:

    0- Using the get_previous_releases.py script to build from source would have
    1- broken with the move to cmake. As there were no complaints, it is
    2- assumed nobody uses this functionality.
    3+ Using the get_previous_releases.py script to build from source only works for
    4+ releases prior to v29 due to removal of Autotools (in favor of CMake). It also
    5+ does not support building on Windows, and we are adding support for downloading
    6+ Windows release binaries in later commits of this PR.
    7+ 
    8+ As there were no complaints during review, it is assumed nobody uses this
    9+ functionality.
    

    As the oldest listed in get_previous_releases.py is v28.0, meaning it’s arguably not that broken.


    m3dwards commented at 10:12 am on June 5, 2025:
    @hodlinator agreed and taken
  29. in test/get_previous_releases.py:152 in 12248ee080 outdated
    158+    archive = 'bitcoin-{tag}-{platform}.{archive_format}'.format(
    159+        tag=tag[1:], platform=host, archive_format=archive_format)
    160+    archiveUrl = 'https://bitcoincore.org/{bin_path}/{archive}'.format(
    161+        bin_path=bin_path, archive=archive)
    162+
    163+    print('Fetching: {archiveUrl}'.format(archiveUrl=archiveUrl))
    


    hodlinator commented at 12:44 pm on June 3, 2025:

    nit: Could use more modern f-strings:

    0    archive = f'bitcoin-{tag[1:]}-{host}.{archive_format}'
    1    archiveUrl = f'https://bitcoincore.org/{bin_path}/{archive}'
    2
    3    print(f'Fetching: {archiveUrl}')
    

    m3dwards commented at 10:04 am on June 5, 2025:
    Taken, thank you.
  30. hodlinator commented at 12:49 pm on June 3, 2025: contributor
    Concept ACK 12248ee08026263b70b2a0e6857552c475614207
  31. m3dwards force-pushed on Jun 5, 2025
  32. in test/get_previous_releases.py:228 in 691e5ba234 outdated
    273-        for f in files:
    274-            Path('src/'+f).rename('bin/'+f)
    275-    return 0
    276-
    277-
    278 def check_host(args) -> int:
    


    hodlinator commented at 2:33 pm on June 9, 2025:
    nit: Renaming to something like set_host would describe better what it does IMHO.

    m3dwards commented at 11:50 am on June 12, 2025:
    Done.
  33. in test/get_previous_releases.py:120 in 691e5ba234 outdated
    115+        bar = '█' * filled_length + '-' * (bar_length - filled_length)
    116+        if now - last_print_time >= 1 or percent >= 100:
    117+            sys.stdout.write(f'\rDownloading: [{bar}] {percent:.1f}%')
    118+            sys.stdout.flush()
    119+            last_print_time = now
    120+    urllib.request.urlretrieve(url, archive, reporthook=progress_hook)
    


    hodlinator commented at 7:05 am on June 10, 2025:

    urllib.request.urlretrieve is marked as being part of the legacy interface: https://docs.python.org/3/library/urllib.request.html#legacy-interface. Would be good to avoid introducing new code using it.

    Here an alternative that is unfortunately a bit more verbose:

     0diff --git a/test/get_previous_releases.py b/test/get_previous_releases.py
     1index 955fcf15d1..7e5c66de0f 100755
     2--- a/test/get_previous_releases.py
     3+++ b/test/get_previous_releases.py
     4@@ -106,19 +106,36 @@ def pushd(new_dir) -> None:
     5
     6 def download_from_url(url, archive):
     7     last_print_time = time.time()
     8-    def progress_hook(count, block_size, total_size):
     9+    def progress_hook(progress_bytes, total_size):
    10         nonlocal last_print_time
    11         now = time.time()
    12-        percent = min(100, (count * block_size * 100) / total_size)
    13+        percent = min(100, (progress_bytes * 100) / total_size)
    14         bar_length = 40
    15         filled_length = int(bar_length * percent / 100)
    16-        bar = '█' * filled_length + '-' * (bar_length - filled_length)
    17+        bar = '#' * filled_length + '-' * (bar_length - filled_length)
    18         if now - last_print_time >= 1 or percent >= 100:
    19             sys.stdout.write(f'\rDownloading: [{bar}] {percent:.1f}%')
    20             sys.stdout.flush()
    21             last_print_time = now
    22-    urllib.request.urlretrieve(url, archive, reporthook=progress_hook)
    23+
    24+    with urllib.request.urlopen(url) as response:
    25+        if response.status != 200:
    26+            raise RuntimeError(f"HTTP request failed with status code: {response.status}")
    27+
    28+        total_size = int(response.getheader('Content-Length', 0))
    29+        progress_bytes = 0
    30+
    31+        with open(archive, 'wb') as file:
    32+            while True:
    33+                chunk = response.read(8192)
    34+                if not chunk:
    35+                    break
    36+                file.write(chunk)
    37+                progress_bytes += len(chunk)
    38+                progress_hook(progress_bytes, total_size)
    39+
    40     print('\n', end="")
    41+    sys.stdout.flush() # Flush to avoid error output on the same line.
    42
    43 def download_binary(tag, args) -> int:
    

    Edit: Avoided use of http.client & urllib.parse in favor of smaller change.


    m3dwards commented at 11:50 am on June 12, 2025:
    Good spot, shame it’s more verbose but it’s all easy code to understand so taken. Thanks for not only noticing but also giving an alternative.

    hodlinator commented at 1:07 pm on June 12, 2025:
    Thanks for taking my suggestion!
  34. in test/get_previous_releases.py:115 in 691e5ba234 outdated
    110+        nonlocal last_print_time
    111+        now = time.time()
    112+        percent = min(100, (count * block_size * 100) / total_size)
    113+        bar_length = 40
    114+        filled_length = int(bar_length * percent / 100)
    115+        bar = '█' * filled_length + '-' * (bar_length - filled_length)
    


    hodlinator commented at 8:37 am on June 10, 2025:

    nit: Would suggest sticking to ASCII to avoid this issue on Windows (unless we want a hard requirement to set up the Python env with UTF-8):

    0$ py test/get_previous_releases.py
    1Releases directory: releases
    2Fetching: https://bitcoincore.org/bin/bitcoin-core-0.14.3/bitcoin-0.14.3-win64.zip
    3Downloading: [----------------------------------------] 0.3%
    4Download failed: 'charmap' codec can't encode characters in position 15-21: character maps to <undefined>
    
    0        bar = '#' * filled_length + '-' * (bar_length - filled_length)
    

    maflcko commented at 9:39 am on June 10, 2025:
    PYTHONUTF8=1 is required on Windows for running the tests, so it seems fine to require it for the download as well, but no strong opinion. Either char seems fine here.

    hodlinator commented at 9:52 am on June 10, 2025:
    $ PYTHONUTF8=1 py test/get_previous_releases.py worked but I would lean slightly towards ASCII as the error message was so bad (could be mistaken for the downloaded buffer itself somehow being encoded wrongly).

    m3dwards commented at 11:50 am on June 12, 2025:
    I was assuming UTF-8 support as yeah they always run with UTF-8 on but in theory this could be run alone without so I just changed the symbol. Thanks.
  35. in test/get_previous_releases.py:130 in 691e5ba234 outdated
    125     if Path(tag).is_dir():
    126         if not args.remove_dir:
    127             print('Using cached {}'.format(tag))
    128             return 0
    129         shutil.rmtree(tag)
    130     Path(tag).mkdir()
    


    hodlinator commented at 9:23 am on June 10, 2025:

    nit: Could postpone creating the version-directory until we’ve verified the checksum and are ready to extract. This avoids the block above (“Using cached …”) thinking it has a cached copy in case the code has failed further down and the directory is just empty. (Also slight improvement to error handling).

     0diff --git a/test/get_previous_releases.py b/test/get_previous_releases.py
     1index 955fcf15d1..7e5c66de0f 100755
     2--- a/test/get_previous_releases.py
     3+++ b/test/get_previous_releases.py
     4@@ -127,7 +150,6 @@ def download_binary(tag, args) -> int:
     5             print('Using cached {}'.format(tag))
     6             return 0
     7         shutil.rmtree(tag)
     8-    Path(tag).mkdir()
     9
    10     bin_path = 'bin/bitcoin-core-{}'.format(tag[1:])
    11
    12@@ -162,13 +184,13 @@ def download_binary(tag, args) -> int:
    13
    14     if archiveHash not in SHA256_SUMS or SHA256_SUMS[archiveHash]['archive'] != archive:
    15         if archive in [v['archive'] for v in SHA256_SUMS.values()]:
    16-            print("Checksum did not match", file=sys.stderr)
    17-            return 1
    18-
    19-        print("Checksum for given version doesn't exist", file=sys.stderr)
    20+            print(f"Checksum {archiveHash} did not match", file=sys.stderr)
    21+        else:
    22+            print("Checksum for given version doesn't exist", file=sys.stderr)
    23         return 1
    24     print("Checksum matched")
    25
    26+    Path(tag).mkdir()
    27     # Extract archive
    28     if host == 'win64':
    29         try:
    

    m3dwards commented at 11:49 am on June 12, 2025:
    Cleaner, taken, thanks!
  36. hodlinator commented at 9:30 am on June 10, 2025: contributor

    Code review 691e5ba234936020ee47c8f467645bf245ab9fc7

    Thanks for incorporating my feedback so far!

    Did some testing on Windows. Main concern is about introducing code using legacy python interface.

  37. in test/functional/wallet_migration.py:490 in 691e5ba234 outdated
    484@@ -485,11 +485,16 @@ def test_encrypted(self):
    485 
    486         # Use self.migrate_and_get_rpc to test this error to get everything copied over to the master node
    487         assert_raises_rpc_error(-4, "Error: Wallet decryption failed, the wallet passphrase was not provided or was incorrect", self.migrate_and_get_rpc, "encrypted")
    488+
    489         # Use the RPC directly on the master node for the rest of these checks
    490+        self.master_node.bumpmocktime(1) # Prevents filename duplication on wallet backups as they contain the time in the filename
    


    fanquake commented at 10:09 am on June 10, 2025:
    In c78f183800db663bba5f9d3a7280583127eebe3f: It would be good for the commit messages and/or the added doc, to explain that this is (I’m assuming?) only an issue on Windows. If it isn’t, and it effects all other platforms, then these test changes could be split out, with a reproducer showing the issue.

    m3dwards commented at 11:48 am on June 12, 2025:
    It was only a problem on Windows. Made a note of that.
  38. m3dwards force-pushed on Jun 12, 2025
  39. hodlinator approved
  40. hodlinator commented at 1:08 pm on June 12, 2025: contributor

    ACK f4e259b31f5785190c4912975173c5025dfe349c

    Concept

    Enables more functional tests along with script for fetching previous release binaries on Windows. Removes script support for building previous releases from source on all platforms, which is arguably tricky as it requires having the correct (versions of) dependencies available, and seems to not be well used.

    Changes since previous review

    Incorporates feedback from #32219#pullrequestreview-2910271020 and #32219 (review).

  41. DrahtBot requested review from hebasto on Jun 12, 2025
  42. in ci/test/03_test_script.sh:102 in 6f916050a9 outdated
     98@@ -99,7 +99,7 @@ if [ -z "$NO_DEPENDS" ]; then
     99   bash -c "$SHELL_OPTS make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS LOG=1"
    100 fi
    101 if [ "$DOWNLOAD_PREVIOUS_RELEASES" = "true" ]; then
    102-  test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR"
    103+  test/get_previous_releases.py -t "$PREVIOUS_RELEASES_DIR"
    


    maflcko commented at 5:48 pm on June 25, 2025:

    unrelated nit in 6f916050a9fa9e9fa1b226f1b2d681f8f3e21869: I don’t like short option names in scripts, because I never know what they mean. Is this -t for --tags, …?

    Would be nice to use the correct long form here, while touching this line.


    m3dwards commented at 8:21 pm on June 25, 2025:
    It was --target-dir. Applied suggestion.
  43. in test/get_previous_releases.py:170 in ee3d4e4f49 outdated
    177+    archiveUrl = f'https://bitcoincore.org/{bin_path}/{archive}'
    178+
    179+    print(f'Fetching: {archiveUrl}')
    180+
    181+    try:
    182+        download_from_url(archiveUrl, archive)
    


    maflcko commented at 6:05 pm on June 25, 2025:
    nit in ee3d4e4f4940aa1468a65c4bf111ae3155aa227e: For new code, use snake_case: archive_url in those three lines.

    m3dwards commented at 8:21 pm on June 25, 2025:
    Done.
  44. in test/get_previous_releases.py:139 in ee3d4e4f49 outdated
    134+                file.write(chunk)
    135+                progress_bytes += len(chunk)
    136+                progress_hook(progress_bytes, total_size)
    137+
    138+    print('\n', end="")
    139+    sys.stdout.flush() # Flush to avoid error output on the same line.
    


    maflcko commented at 6:16 pm on June 25, 2025:
    nit in the same commit: Can just use print(flush=True)? https://docs.python.org/3/library/functions.html#print

    m3dwards commented at 8:21 pm on June 25, 2025:
    Sure, done.
  45. in test/get_previous_releases.py:119 in ee3d4e4f49 outdated
    114+        bar_length = 40
    115+        filled_length = int(bar_length * percent / 100)
    116+        bar = '#' * filled_length + '-' * (bar_length - filled_length)
    117+        if now - last_print_time >= 1 or percent >= 100:
    118+            sys.stdout.write(f'\rDownloading: [{bar}] {percent:.1f}%')
    119+            sys.stdout.flush()
    


    maflcko commented at 6:43 pm on June 25, 2025:
    nit in the same commit: Could just use `print(f’\r…’,flush=True,end=’')

    m3dwards commented at 8:22 pm on June 25, 2025:
    Done.
  46. in .github/workflows/ci.yml:381 in f4e259b31f outdated
    376+        run: |
    377+          echo "PREVIOUS_RELEASES_DIR=${{ runner.temp }}/previous_releases" >> "$GITHUB_ENV"
    378+
    379+      - name: Get previous releases
    380+        working-directory: test
    381+        run: ./get_previous_releases.py -t $PREVIOUS_RELEASES_DIR
    


    maflcko commented at 6:47 pm on June 25, 2025:
    f4e259b31f5785190c4912975173c5025dfe349c nit: Would be nice to use the full option name instead of -t

    m3dwards commented at 8:22 pm on June 25, 2025:
    Changed to --target-dir.
  47. maflcko commented at 6:48 pm on June 25, 2025: member

    left some nits only

    review ACK f4e259b31f5785190c4912975173c5025dfe349c 🚿

    Signature:

    0untrusted comment: signature from minisign secret key on empty file; verify via: minisign -Vm "${path_to_any_empty_file}" -P RWTRmVTMeKV5noAMqVlsMugDDCyyTSbA3Re5AkUrhvLVln0tSaFWglOw -x "${path_to_this_whole_four_line_signature_blob}"
    1RUTRmVTMeKV5npGrKx1nqXCw5zeVHdtdYURB/KlyA/LMFgpNCs+SkW9a8N95d+U4AP1RJMi+krxU1A3Yux4bpwZNLvVBKy0wLgM=
    2trusted comment: review ACK f4e259b31f5785190c4912975173c5025dfe349c 🚿
    3AHFm4z0J8FOrNMufHlWQ+gS455X6PI9FAbG/jgewgMnYxXsvBevGetO359R3f3LD+FWk20z1Z/fB6VSgKGJGDw==
    
  48. test: remove building from source from get prev releases script
    Using the get_previous_releases.py script to build from source only works for
    releases prior to v29 due to removal of Autotools (in favor of CMake). It also
    does not support building on Windows, and we are adding support for downloading
    Windows release binaries in later commits of this PR.
    
    As there were no complaints during review, it is assumed nobody uses this
    functionality.
    4f06dc8484
  49. scripted-diff: rename tarball to archive
    Windows zip files are added in the next commit which are not tarballs so
    renaming tarball to the more generic term archive which can cover both.
    
    -BEGIN VERIFY SCRIPT-
    sed -i 's/tarball/archive/g' test/get_previous_releases.py
    -END VERIFY SCRIPT-
    1a1b478ca3
  50. test: add windows support to get previous releases script
    Needed to allow the wallet migration functional test to run under native
    windows. Platform variable renamed to not clash with platform package.
    67a6b20d50
  51. test: remove mempool.dat before copying
    Renaming mempool.dat from old node to new node fails on windows as the
    file already exists.
    3dc90d69a6
  52. ci: disable feature_unsupported_utxo_db functional test
    This test required v0.14.3 which doesn't support special characters like
    emojis in the datapath on windows. Functional test runner includes a few
    emojis in it's default data directory.
    5174565802
  53. test: increment mocked time for migrating wallet backups
    The wallet backups performed before migration use the time as part of
    their filename. As the time is mocked, increment it between migration
    attempts to prevent file name conflicts which is a problem on Windows.
    5e2182140b
  54. ci: run get_previous_releases as part of test cross win job
    This should enable wallet_migration functional test to run on Windows
    941b8f54c0
  55. m3dwards force-pushed on Jun 25, 2025
  56. hodlinator approved
  57. hodlinator commented at 8:47 pm on June 25, 2025: contributor

    re-ACK 941b8f54c0d35d3243bb6083f3b52681d1b9a555

    Fixed some nits (https://github.com/bitcoin/bitcoin/pull/32219#pullrequestreview-2959123050) since my first ACK (https://github.com/bitcoin/bitcoin/pull/32219#pullrequestreview-2921071060). Passed linter locally.

  58. DrahtBot requested review from maflcko on Jun 25, 2025
  59. m3dwards commented at 10:30 am on June 26, 2025: contributor
    @maflcko addressed nits and force pushed
  60. maflcko commented at 4:05 pm on June 26, 2025: member

    only small style changes

    re-ACK 941b8f54c0d35d3243bb6083f3b52681d1b9a555 🍪

    Signature:

    0untrusted comment: signature from minisign secret key on empty file; verify via: minisign -Vm "${path_to_any_empty_file}" -P RWTRmVTMeKV5noAMqVlsMugDDCyyTSbA3Re5AkUrhvLVln0tSaFWglOw -x "${path_to_this_whole_four_line_signature_blob}"
    1RUTRmVTMeKV5npGrKx1nqXCw5zeVHdtdYURB/KlyA/LMFgpNCs+SkW9a8N95d+U4AP1RJMi+krxU1A3Yux4bpwZNLvVBKy0wLgM=
    2trusted comment: re-ACK 941b8f54c0d35d3243bb6083f3b52681d1b9a555 🍪
    3bETJM5+aKhYY2/Te6Q0l6hRKTYwxJGjPXvxBezD27IQHLNVmhjxU6rKtKE9HOUUivz/x8J8pUozVvMAmHHWxDw==
    
  61. DrahtBot requested review from achow101 on Jul 1, 2025
  62. achow101 commented at 8:52 pm on July 1, 2025: member
    ACK 941b8f54c0d35d3243bb6083f3b52681d1b9a555
  63. achow101 merged this on Jul 1, 2025
  64. achow101 closed this on Jul 1, 2025

  65. m3dwards deleted the branch on Jul 2, 2025

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2025-07-04 06:13 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me