docs: @NotNull
      public static File backup(@NotNull final Backupable source, @NotNull final File backupRoot,
                                @Nullable final String backupNamePrefix, final boolean zip) throws Exception {
          if (!backupRoot.exists() && !backupRoot.mkdirs()) {
              throw new IOException("Failed to create " + backupRoot.getAbsolutePath());
          }
          final String fileName;
          if (zip) {
              fileName = getTimeStampedZipFileName();
          } else {
              fileName = getTimeStampedTarGzFileName();
          }
          final File backupFile = new File(backupRoot, backupNamePrefix == null ? fileName : backupNamePrefix + fileName);
          return backup(source, backupFile, zip);
      }