A bit late to the party, but I just tried #12653 and noticed some non-intuitive behavior (on macOS), that's probably worth explaining release notes and help.

Before this new feature I kept the entire datadir on an SSD drive, so I launch with: `bitcoind -datadir=/Volumes/SSD/Bitcoin`.

Initially I naively moved `/Volumes/SSD/Bitcoin/blocks` to `/Users/bitcoin/blocks` and added a line to `/Volumes/SSD/Bitcoin/bitcoin.conf`: `blocksdir=/Users/bitcoin/blocks`.

I then realized that I shouldn't have moved the `index` subdirectory, so I moved that back to `/Volumes/SSD/Bitcoin/blocks/index`. Having an empty `blocks` dir with just and `index` subdir is a bit weird. Perhaps after @jimpo's #11857 is merged, we could just move / assume all indexes to be there (if `-blocksdir` is set)?

Worse, it created a directory `/Users/bitcoin/blocks/blocks`, which seems like a bug. I had to set `blocksdir=/Users/bitcoin` instead.
assert(fImporting == false);
        fImporting = true;
    }
    ~CImportingNow() {
        assert(fImporting == true);
        fImporting = false;
    }
};
static void CleanupBlockRevFiles()
{
    std::map<std::string, fs::path> mapBlockFiles;
    
    
    
    LogPrintf("Removing unusable blk?????.dat and rev?????.dat files for -reindex with -prune\n");
    fs::path blocksdir = GetBlocksDir();
    for (fs::directory_iterator it(blocksdir); it != fs::directory_iterator(); it++) {
        if (fs::is_regular_file(*it) &&
            it->path().filename().string().length() == 12 &&
            it->path().filename().string().substr(8,4) == ".dat")
        {
            if (it->path().filename().string().substr(0,3) == "blk")
                mapBlockFiles[it->path().filename().string().substr(3,5)] = it->path();