# Switch from a package developed with fusen to a classical package

    library(fusen)

# Move from a package developed with fusen to a “classical” package

After a while, you may want to move from a package developed with fusen to a “classical” package. This is possible with the `sepuku()` function. This function will delete all the flat files (i.e files listed in the fusen configuration file, as well as Rmd or qmd files starting with “flat” in the “dev/” and “dev/flat_history” folders). It will also remove the fusen-related tags added by calls to `fusen::inflate()` in files located in the “R/”, “tests/” and “vignettes/” folders. Finally, it will also remove the fusen configuration file if it exists.

Switching from a package developed with fusen to a “classical” package might be useful if you want to share your package with someone who is not familiar with fusen or if you want to stop using fusen for any reason.

Please be aware that this operation is irreversible. You will lose all the history of your flat files and the fusen-related tags in your package. Therefore, it is recommended to use code versioning to be able to revert this, in case you would change your mind.

    #' \dontrun{
    sepuku()
    # If you want to force the cleaning, you can use the force argument
    sepuku(force = TRUE)

    # Example with a dummy package
    dummypackage <- tempfile("sepuku.example")
    dir.create(dummypackage)
    fill_description(pkg = dummypackage, fields = list(Title = "Dummy Package"))

    usethis::with_project(dummypackage, {
      # Add licence
      usethis::use_mit_license("John Doe")

      dir.create(file.path(dummypackage, "dev"))
      dir.create(file.path(dummypackage, "dev", "flat_history"))

      # We add 2 flat files in the package and inflate them
      dev_file1 <- add_minimal_flat(
        pkg = dummypackage,
        flat_name = "flat1.Rmd",
        open = FALSE
      )

      dev_file2 <- add_minimal_flat(
        pkg = dummypackage,
        flat_name = "flat2.Rmd",
        open = FALSE
      )

      inflate(
        pkg = dummypackage,
        flat_file = dev_file1,
        vignette_name = "Get started",
        check = FALSE,
        open_vignette = FALSE,
        document = TRUE,
        overwrite = "yes"
      )

      inflate(
        pkg = dummypackage,
        flat_file = dev_file2,
        vignette_name = "Get started 2",
        check = FALSE,
        open_vignette = FALSE,
        document = TRUE,
        overwrite = "yes"
      )

      # We deprecate the first flat file, which will be moved to the flat_history folder
      deprecate_flat_file(
        file.path(dummypackage, "dev", "flat_flat1.Rmd")
      )

      # We create 2 flat files with the qmd extension
      file.create(file.path(dummypackage, "dev", "flat_history", "flat_old.qmd"))
      file.create(file.path(dummypackage, "dev", "flat_qmd.qmd"))

      sepuku(force = TRUE)

      # We check that the fusen configuration file has been deleted
      file.exists(
        file.path(dummypackage, "dev", "config_fusen.yaml")
      )

      # We check that all the flat files have been deleted
      length(
        list.files(
          file.path(dummypackage, "dev"),
          pattern = "^flat.*\\.Rmd"
        )
      )

      length(
        list.files(
          file.path(dummypackage, "dev"),
          pattern = "^flat.*\\.qmd"
        )
      )

      length(
        list.files(
          file.path(dummypackage, "dev", "flat_history"),
          pattern = "^flat.*\\.Rmd"
        )
      )

      length(
        list.files(
          file.path(dummypackage, "dev", "flat_history"),
          pattern = "^flat.*\\.qmd"
        )
      )

      # We check that all the files with fusen tags have been cleaned
      length(fusen:::find_files_with_fusen_tags(pkg = dummypackage))
    })

    # Clean the temporary directory
    unlink(dummypackage, recursive = TRUE)
    #' }