                     Changes in version 2.5.2.9000                      

  - submit_cran() gives a more informative error when the CRAN
    submission form can't be used, suggesting that the user consult
    https://cran.r-project.org to see if there's a CRAN closure (#2700).
  - check_built() no longer prints R_CHECK_ check env variables - now
    handled by rcmdcheck::rcmdcheck() directly as of r-lib/rcmdcheck#237
    (#2621)

                 Changes in version 2.5.2 (2026-04-30)                  

  - install() uses a new feature of pak::local_install_deps() to
    consider the current .libPaths() when resolving dependencies,
    instead of consulting only .libPaths()[1]. This was an unintended
    behavioral change introduced in 2.5.0 (#2691).

                 Changes in version 2.5.1 (2026-04-16)                  

  - build_readme() no longer installs dependencies into the temporary
    library (a regression introduced in 2.5.0). It now exits early if a
    required dependency is missing and reports any that are out of date
    or at a dev version (#2683).
  - dev_sitrep() reports if devtools itself is out of date (#2687).

                 Changes in version 2.5.0 (2026-03-14)                  

Deprecations

  - Package installation functions are now deprecated: install_bioc(),
    install_bitbucket(), install_cran(), install_deps(), install_dev(),
    install_dev_deps(), install_git(), install_github(),
    install_gitlab(), install_local(), install_svn(), install_url(),
    install_version(), update_packages(), dev_package_deps(),
    github_pull(), and github_release(). We now recommend pak
    (https://pak.r-lib.org/) for general package installation. See
    ?`install-deprecated` for migration guidance.
  - remotes has moved from Imports to Suggests, as part of the pivot
    towards pak for package installation (#2663).
  - build_rmd() is soft-deprecated and is discouraged for external use.
    It exists to be an internal helper for build_readme().
  - build_vignettes() and clean_vignettes() are now deprecated. We no
    longer recommend building vignettes in this way; instead use
    pkgdown::build_article() to render articles locally (#2488).
  - test_file() and test_coverage_file() are now defunct. These were
    deprecated in devtools 2.4.0 (2021-04-07) in favour of
    test_active_file() and test_coverage_active_file(). Removing
    test_file() eliminates the conflict with testthat::test_file().
  - release() is deprecated in favour of usethis::use_release_issue().
  - create() is deprecated in favour ofusethis::create_package().
  - bash(), missing_s3(), reload(), show_news(), and wd() are now
    deprecated. These functions are all historical parts of our workflow
    that we no longer use or recommend.

Other improvements

  - build_readme() gains support for README.qmd and renders using Quarto
    (#2620).
  - install() now installs dependencies with pak::local_install_deps()
    instead of remotes::install_deps(). This lets us default to upgrade
    = FALSE, so that existing dependencies are only upgraded when a
    newer version is actually required (#2486). keep_source now defaults
    to TRUE when build = FALSE, so that source references are
    automatically preserved during development installs.
  - build_manual() reports more details on failure (#2586).
  - build_site() now just calls pkgdown::build_site(), meaning that you
    will get more (informative) output by default (#2578).
  - check_doc_fields() is a new function that checks for missing \value
    and \examples fields in Rd files, which are commonly flagged by CRAN
    (#2525).
  - check_mac_devel() is a new function to check a package using the
    macOS builder at https://mac.r-project.org/macbuilder/submit.html
    (@nfrerebeau, #2507)
  - check_win() and friends gain a webform argument that uses a webform
    instead of passive FTP upload (@brownag, #2619).
  - dev_sitrep() now works correctly inside Positron (#2618), uses pak
    instead of remotes to check for dependencies that are
    missing/behind/ahead (#2663), and uses cli for user-facing messages.
  - is_loading() is now re-exported from pkgload (#2556).
  - load_all() now errors if called recursively, i.e. if you
    accidentally include a load_all() call in one of your R source files
    (#2617).
  - show_news() now looks for NEWS files in the same locations as
    utils::news(): inst/NEWS.Rd, NEWS.md, NEWS, and inst/NEWS (@arcresu,
    #2499).
  - test_active_file() now works when the active file is a snapshot
    file.
  - test_coverage() and test_coverage_active_file() gain a new report
    argument that can be set to "html" (the default, for an interactive
    browser report), "zero" (prints uncovered lines to the console, used
    for LLMs and non-interactive contexts), or "silent". The show_report
    argument has been removed (#2632).

                 Changes in version 2.4.6 (2025-10-03)                  

  - Functions that use httr now explicitly check that it is installed
    (@catalamarti, #2573).

  - test_coverage() now works if the package has not been installed.

  - test_coverage_active_file() now reports if any tests failed and does
    a better job of executing snapshot comparisons.

  - dev_mode() and check_rhub() are deprecated.

                 Changes in version 2.4.5 (2022-10-11)                  

  - check(cleanup =) was deprecated in devtools v1.11.0 (2016-04-12) and
    was made defunct in v2.4.4 (2022-07-20). The documentation is more
    clear now about recommended alternatives.

  - check(check_dir = NULL) is the new default, to align with the
    default behaviour of the underlying rcmdcheck::rcmdcheck().

  - check(cran = TRUE) sets the env var
    _R_CHECK_PACKAGES_USED_IGNORE_UNUSED_IMPORTS_ to FALSE, in order to
    surface the "Namespace in Imports field not imported from" NOTE.
    This only applies to R >= 4.2, due to favorable changes in the
    behaviour of R CMD check --as-cran (#2459).

  - test_active_file() passes the package onto to testthat so it can
    correctly set the TESTTHAT_PKG envvar (#2470).

  - test() and test_active_file() once again work with testthat itself.

  - dev_mode() is deprecated (@billdenney, #2467).

                 Changes in version 2.4.4 (2022-07-20)                  

  - install(reload = TRUE) now calls pkgload::unregister() instead of
    pkload::unload() (#2349). This allows the package to keep
    functioning if it is still in use in the R session (e.g. through
    event handlers).

  - test() no longer calls load_all() twice. test_active_file() now
    calls load_all() via testthat.

  - aspell_env_var() does a better job of matching R CMD check
    behaviour, which is only to use aspell, not hunspell or ispell
    (#2376).

  - Installing devtools now installs pkgdown, profvis, bench, miniUI,
    and urlchecker, ensuring that you have everything needed for package
    development (#2388).

  - dev_sitrep() has been updated for the calendar-based version number
    scheme adopted by the RStudio IDE in September 2021 (#2397, #2410).

                 Changes in version 2.4.3 (2021-11-30)                  

  - New check_mac_release() function to check a package using the macOS
    builder at https://mac.r-project.org/macbuilder/submit.html (#2375)

  - Jenny Bryan is now the official maintainer.

  - release() and submit_cran() now record submission details using the
    Debian Control File format, for better machine-readability. This
    file has a new name, CRAN-SUBMISSION (instead of CRAN-RELEASE) and
    now includes package version, in addition to the full SHA and a
    timestamp.

                 Changes in version 2.4.2 (2021-06-07)                  

  - check_man() now works with R versions 4.1+ (#2354)

  - test_active_file() now again works on windows projects stored under
    the user's home directory (~) (#2355)

  - document(quiet = TRUE) now works without failure on windows (#2351)

  - Minor test failure on R 4.2 has been fixed.

  - New Rstudio addin for run_examples() (#2358)

                 Changes in version 2.4.1 (2021-05-05)                  

  - build_readme() now uses the path argument, as designed (#2344)

  - create() no longer opens projects by default to avoid duplicate
    projects opened by the RStudio IDE project template (#2347,
    @malcolmbarrett)

  - The RStudio addins now use test_active_file() and
    test_coverage_active_file() instead of the deprecated test_file()
    and test_coverage_file() (#2339)

  - RStudio addins now run in interactive mode, rather than background
    mode (@jennybc, #2350)

  - install(upgrade) now defaults to 'default' rather than 'ask'. This
    allows you to control the default asking behavior with the
    R_REMOTES_UPGRADE environment variable (#2345)

                 Changes in version 2.4.0 (2021-04-07)                  

Breaking changes and deprecated functions

  - The check_results() function has been removed. It was not used by
    any CRAN package, and much better alternatives are available in the
    rcmdcheck package.

  - pkgload::inst() is no longer re-exported (#2218).

  - test_file() has been renamed to test_active_file() and
    test_coverage_file() has been renamed to test_coverage_active_file()
    to avoid a name collision with testthat::test_file(). The previous
    names have been soft deprecated in this release, they will be hard
    deprecated in the next release and eventually removed. (#2125)

Re-licensing

  - devtools is now released under a MIT license (#2326)

Minor improvements and fixes

  - build_readme() now supports readme files located in inst/README.Rmd,
    as intended (#2333)

  - build_vignettes() now creates more specific .gitignore entries
    (@klmr, #2317)

  - check() now only re-documents if you have a matching version of
    roxygen2 (#2263).

  - change_maintainer_email() now has a check to assess whether the
    email is actually changed. If the email is not changed, the code now
    stops such that an email is not accidentally sent to the wrong
    recipient. (@emilsjoerup, #2073)

  - run_examples(fresh = TRUE) again works without error (#2264)

  - The covr and DT packages have been moved from Imports to Suggests.
    They are only needed when running test_coverage() and
    test_coverage_active_file() so now you'll be prompted to install
    them when needed.

  - Switched to fs for all file system functions (#2331,
    @malcolmbarrett)

  - Now uses testthat 3.0.0 to power test(), test_active_file(),
    test_coverage(), and test_coverage_active_file(). The major
    difference is that test_active_file() now generates a compact
    summary that takes up less space on the console.

                 Changes in version 2.3.2 (2020-09-18)                  

  - Fix for compatibility with withr 2.3.0

                 Changes in version 2.3.1 (2020-07-21)                  

  - check_win_*() function now resets the email to the original email
    after execution, this bug was fixed and crept back in (@muschellij2,
    #2152).

  - run_examples() arguments run and test are deprecated in favor of the
    (hopefully) more clear run_dontrun and run_donttest (pkgload/#107).

  - Previously deprecated functions dr_devtools() and dr_github() have
    been removed.

  - Documentation has been synced with remotes 2.2.0

                 Changes in version 2.3.0 (2020-04-10)                  

  - build() now errors with a more informative error message when passed
    an invalid pkg. (#2177)

  - New build_rmd() can build any .Rmd file in a clean session.

  - dev_sitrep() now works correctly when R is out of date (#2204)

                 Changes in version 2.2.2 (2020-02-17)                  

  - install_dev_deps() now passes formal args onto
    remotes::install_deps() (@t-gibson, #2166)

  - spell_check() now checks if spelling is installed and prompts users
    to install it if not (@mikemahoney218, #2172)

  - submit_cran() now returns a more informative error when the CRAN
    submission portal is down (#1958)

  - check() gains a vignettes argument, to more easily disable checks
    for vignettes (#2165).

  - check_win_*() function now resets the email to the original email
    after execution (@muschellij2, #2152).

  - check() now sets NOT_CRAN=true by default, as was originally
    intended (#2135).

  - install_deps() now supports options("devtools.ellipsis_action") as
    well (#2169)

  - test() now takes stop_on_failure as a formal argument (FALSE by
    default) instead of in .... Its value is still passed to
    testthat::test_dir as before (@infotroph, #2129).

  - test() and test_coverage_file() gain a export_all argument, which
    controls if all functions in a package are automatically exported
    (#1201).

  - dev_sitrep() now works if run outside a package directory (#2127).

  - release() now works if the package root is not in the working
    directory.

                 Changes in version 2.2.1 (2019-09-24)                  

  - test() now sets the collation order to C before running, which
    matches the behavior of tests when run with R CMD check (#2121)

  - New options("devtools.ellipsis_action") option added to control the
    action of ellipsis in devtools. This should be one of
    
      - rlang::abort - to emit an error if arguments are unused
      - rlang::warn - to emit a warning if arguments are unused
      - rlang::inform - to emit a message if arguments are unused
      - rlang::signal - to emit a message if arguments are unused Using
        rlang::signal will produce no output unless the custom condition
        is caught, so it is the best way to retain backwards
        compatibility with devtools behavior prior to 2.2.0. The default
        behavior was also changed to issue a warning rather than an
        error if any arguments are unused, as there are some cases where
        devtools does not need to install the package, so unused
        arguments are false positives (#2109).

  - install() now throws an error when it fails, as intended (#2120)

  - install() now again reloads and re-attaches packages if they were
    previously loaded (#2111).

  - release() no longer calls the deprecated dr_devtools() (#2105)

  - test() now explicitly passes stop_on_failure = FALSE to
    testthat::test_dir() (@jameslamb, #2099)

                 Changes in version 2.2.0 (2019-09-07)                  

New Features

  - create() added back, the RStudio IDE uses create() in the create
    packages dialog, so removing it in version 2.1.0 broke old versions
    of the IDE.

  - New dev_sitrep() function to return information about your
    development environment and diagnose common problems. The former
    functions dr_devtools() and dr_github() have been deprecated.
    (#1970)

  - All functions taking ... now use the ellipsis package. This catches
    errors when arguments are misspelled or incorrectly specified
    (#2016)

Minor improvements and fixes

  - build_vignettes() now correctly installs the vignette builder if it
    is not already installed (#2089).

  - dev_sitrep() now uses the same endpoint to detect the current
    RStudio version as the IDE (#2050).

  - document() gains a quiet parameter, to silence output and check()
    now passes its quiet argument to it (#1986).

  - Add the DT package as a dependency, so that test_coverage() and
    test_coverage_file() work without having to install additional
    packages (#2085).

  - check_man() now succeeds when tools::undoc() returns empty results
    (#1944).

  - check_win_*() functions gain a email argument, so temporarily change
    the email the check results will be sent to (#1723).

  - install() now explicitly unloads packages before trying to install a
    new version (#2094).

  - All install_*() functions now attach build tools to the PATH, which
    makes them work on Windows when RTools is not on the default PATH
    (#2093).

  - test_coverage_file() now works when there is not a 1 to 1
    correspondence between test and source files (#2011).

  - release() now works again when pkg is not the current working
    directory (#1974).

  - release() now works without error when options("repos") is unnamed
    (#1956).

  - create() added, the RStudio IDE uses create(), so removing it in
    version 2.1.0 broke old versions of the IDE.

  - In several places http: URLs were used instead of https:, the most
    critical being in the cran_mirror, cran_pacakges, and
    cran_submission_url values which could have enabled discrete
    activity disclosure and person-in-the-middle attacks (i.e. changing
    the contents while uploading/downloading). All http: URLS have been
    changed to https: URLs. (@hrbrmstr, #2091)

                 Changes in version 2.1.0 (2019-07-06)                  

New Features

  - testthat and roxygen2 are now added to Imports rather than Suggests,
    so they are automatically installed when you install devtools.

Deprecated functions now removed

  - create(), create_description(), setup() use_appveyor(),
    use_build_ignore(), use_code_of_conduct(), use_coverage(),
    use_cran_badge(), use_cran_comments(), use_data(), use_data_raw(),
    use_dev_version(), use_git(), use_git_hook(), use_github(),
    use_github_links(), use_gpl3_license(), use_mit_license(),
    use_news_md(), use_package(), use_package_doc(), use_rcpp(),
    use_readme_md(), use_readme_rmd(), use_revdep(), use_rstudio(),
    use_test(), use_testthat(), use_travis(), use_vignette(), have been
    removed after being deprecated in previous releases. Use the
    versions in the usethis package directly.

  - check_cran(), revdep_check(), revdep_check_print_problems(),
    revdep_check_reset(), revdep_check_resume(),
    revdep_check_save_summary(), revdep_email() have been removed after
    being deprecated in previous releases. It is recommended to use the
    revdepcheck package instead.

  - system_check(), system_output() have been removed after being
    deprecated in previous releases. It is recommend to use the processx
    package instead.

  - build_win() has been removed, after being deprecated in previous
    releases.

  - yesno() as used in release() now has clearer synonyms for "yes"
    (@mattmalin, #1993)

Minor improvements and fixes

  - check_rhub gains a new argument build_args for arguments passed to R
    CMD build. ... is now passed to rhub::check_for_cran()
    (@gaborcsardi, @maelle, #2041)

  - build_manual() now fails if the manual fails to build. (#2056)

  - test_file() and test_coverage_file() now work with C and C++ files
    in the src/ directory as well.

                 Changes in version 2.0.2 (2019-04-08)                  

  - Two tests are now skipped when run on CRAN, as they fail due to an
    outdated pandoc and restrictions on writing to the package library
    respectively.

  - load_all() now accepts 'package' objects, regaining previous
    behavior in devtools prior to 2.0.0 (#1923)

  - test(), test_coverage() and test_coverage_file() now set the
    TESTTHAT_PKG environment variable, so it is more consistent with
    running the tests during R CMD check (testthat#787).

  - check() now replaces existing environment variables rather than
    appending them (#1914).

                 Changes in version 2.0.1 (2018-10-26)                  

This is a minor release mainly fixing bugs which snuck through in the
devtools 2.0.0 release.

  - install() now correctly passes the upgrade parameter to
    remotes::install_deps() (@Paxanator, #1898).

  - install_deps() now again works from any directory within a package
    (#1905)

  - Add a RStudio addin for test_coverage().

  - All tests which use remote resources are now skipped on CRAN, to
    avoid spurious failures

                 Changes in version 2.0.0 (2018-10-19)                  

Devtools 2.0.0 is a major release that contains work from the past year
and a half, since the major devtools release (1.13.0).

This release splits the functionality in devtools into a number of
smaller packages which are simpler to develop and also easier for other
packages to depend on. In particular the following packages have been
spun off in what we are calling the 'conscious uncoupling' of devtools.

  - remotes: Installing packages (i.e. install_github()).
  - pkgbuild: Building binary packages (including checking if build
    tools are available) (i.e. build()).
  - pkgload: Simulating package loading (i.e. load_all()).
  - rcmdcheck: Running R CMD check and reporting the results (i.e.
    check()).
  - revdepcheck: Running R CMD check on all reverse dependencies, and
    figuring out what's changed since the last CRAN release (i.e.
    revdep_check()).
  - sessioninfo: R session info (i.e. session_info()).
  - usethis: Automating package setup (i.e. use_test()).

devtools will remain the main package developers will interact with when
writing R packages; it will just rely on these other packages internally
for most of the functionality.

Breaking changes

There have been a number of breaking changes in this release, while this
will cause some short term pain for users it will result in a easier to
understand API in the future, so we feel the tradeoff is worthwhile.

  - devtools::install() arguments have been changed as follows.
    
      - local -> build
      - force_deps -> force
      - upgrade_dependencies -> upgrade
      - threads -> Removed, but you can use Ncpus, which is passed by
        ... to install.packages()
      - metadata -> Removed
      - out_dir -> Removed
      - skip_if_log_exists -> Removed

  - check() argument check_version has been renamed to remote to better
    describe what tests are disabled (#1811)

  - get_path(), set_path(), add_path() and on_path() have been removed,
    this functionality is available with withr::with_path() (#1796).

  - The lang argument to spell_check() was removed, for compatibility
    with spelling v1.1. (#1715)

  - The previously deprecated with_ functions have now been removed. The
    functionality has been moved to the withr package.

  - RCMD(), clean_source(), eval_clean() and evalq_clean() have been
    removed. These functions never worked terribly well, and have been
    replaced by the much better functions in callr.

  - build_win() has been renamed to check_win_release(),
    check_win_devel(), and check_win_oldrelease() (#1598).

Deprecated functions

  - Infrastructure functions (use_*) now use the implementations in
    usethis and the versions in devtools are deprecated. If you use
    these from a package you should switch your package to depend on
    usethis directly instead.

  - The revdep_check_* functions have been deprecated in favor of the
    revdepcheck package.

  - system_check() and system_output() have been deprecated in factor of
    the processx package.

Major changes

  - All install_*() functions are now re-exported from remotes rather
    than being defined in devtools

  - devtools now depends on roxygen2 6.1.0: this considerably simplifies
    devtools::document() and makes it more consistent with
    roxygen2::roxygenise().

  - test_file() function added to test one or more files from a package
    (#1755).

  - test_coverage() function added to provide a helper to compute test
    coverage using covr (#1628).

  - test_file() and test_coverage_file() now have RStudio addins (#1650)

  - test_file_coverage() function added to show the test coverage of one
    or more files from a package. (#1755).

  - session_info() now uses the implementation in the sessioninfo
    package. Packages using devtools::session_info() are encouraged to
    switch to using sessioninfo::session_info() instead.

  - package_info() function now re-exported from the sessioninfo
    package.

  - check() now uses rcmdcheck to run and parse R CMD check output
    (#1153).

  - Code related to simulating package loading has been pulled out into
    a separate package, pkgload. The following functions have been moved
    to pkgload without a shim: clean_dll(), compile_dll(),
    dev_example(), dev_help(), dev_meta(), find_topic(), imports_env(),
    inst(), load_code(), load_dll(), ns_env(), parse_ns_file(),
    pkg_env(). These functions are primarily for internal use.
    
    load_all() and unload() have been moved to pkgload, but devtools
    provides shims since these are commonly used.

  - find_rtools(), setup_rtools(), has_devel(), compiler_flags(),
    build() and with_debug() have moved to the new pkgbuild package.
    build() and with_debug() are re-exported by devtools

  - The spell_check() code has been moved into the new spelling package
    and has thereby gained support for vignettes and package wordlists.
    The devtools function now wraps spelling::spell_check_package().

Minor improvements and fixes

  - check_win_*() now build the package with manual = TRUE by default
    (#1890).

  - check() output now works more nicely with recent changes to
    rcmdcheck (#1874).

  - reload() now reloads loaded but not attached packages as well as
    attached ones.

  - Executed styler::style_pkg() to update code style (#1851,
    @amundsenjunior).

  - save_all() helper function wraps rstudioapi::documentSaveAll() calls
    (#1850, @amundsenjunior).

  - check() now allows users to run without --timings (#1655)

  - update_packages() better documented to advertise it can be used to
    update packages installed by any of the install_* functions.

  - check() gains a incoming option to toggle the CRAN incoming checks.

  - build_vignette() gains a keep_md option to allow keeping the
    intermediate markdown output (#1726)

  - remote_sha.github() now correctly looks up SHA in private
    repositories (#1827, @renozao).

  - devtools use_*() functions now temporarily set the active usethis
    project if given a pkg argument that is not the current directory.
    This provides backwards compatibility with previous behavior
    (#1823).

  - Vignettes are now built in a separate process, and the package is
    installed before building the vignettes (#1822)

  - build_readme() added to build the README.md from a README.Rmd
    (#1762)

  - build_vignettes() now has a clean and upgrade arguments, to control
    cleaning of intermediate files and upgrading vignette dependencies
    respectively. (#1770).

  - release() gains an additional question ensuring you updated
    codemeta.json if one exists (#1774, #1754)

  - test() now sets useFancyQuotes = FALSE to better mimic the
    environment tests are run under with R CMD check (#1735).

  - test() no longer passes encoding argument to testthat::test_dir()
    (#1776)

  - install_url() can now install package binaries on windows (#1765)

  - Fix skipping when installing from a full SHA (#1624)

  - add pkgdown::build_site() wrapper (@kiwiroy, #1777)

  - add pkgdown site (https://devtools.r-lib.org) (#1779,
    @jayhesselberth)

  - install_version() can now install current version of CRAN package on
    Windows and macOS (@jdblischak, #1730)

  - The CRAN-RELEASE file is now added to .Rbuildignore (#1711)

  - check() and check_built() now have an error_on argument to specify
    if they should throw an error on check failures. When run
    non-interactively this is set to "warnings" unless specified.

  - check() now sets _R_CHECK_CRAN_INCOMING_REMOTE_ instead of
    _R_CHECK_CRAN_INCOMING_on R versions which support the former option
    (#1271, #1276, #1702).

  - Now use cli package to draw rules - they are more aesthetically
    pleasing and the correct width in the RStudio build pane (#1627).

  - release() has been tweaked to reflect modern submission workflow and
    to ask questions rather than running code for you (#1632).

  - document(), load_all(), check(), build() and test() now
    automatically save open files when they are run inside the RStudio
    IDE. (#1576)

  - New check_rhub() function to check packages using
    https://builder.r-hub.io/.

  - run_examples was mistakenly passing show to pkgload::run_example,
    causing it to fail (@amcdavid, #1449)

  - New build_manual() function that produces pdf manual for the package
    (@twolodzko, #1238).

  - If you use git release() now generates a file called CRAN-RELEASE
    that reminds you to tag the commit that you submitted to CRAN
    (#1198).

  - release() once again looks for additional release questions in the
    correct environment (#1434).

  - submit_cran() now checks that you're ready to submit, since this is
    a potentially expensive operation (#1228)

  - check() defaults to running document() only if you have used roxygen
    previously (#1437).

  - Signal an error if commas are missing in between remote entries
    (#1511, @ianmcook).

  - build_vignettes() gains a quiet argument (#1543).

  - source_gist() works once more when there is only a single file in
    the gist (#1266).

  - In order to not run test helpers in document(), the helpers argument
    of  load_all() is set to FALSE (@nbenn, #1669)

  - The my_unzip() function is now able to use the utils::unzip fallback
    when R is compiled from source with no unzip package present
    (@theGreatWhiteShark, #1678)

  - If the foghorn package is installed, release() displays the results
    of the CRAN checks (#1672, @fmichonneau).

                 Changes in version 1.13.5 (2018-02-18)                 

  - Fix two test errors related to GitHub rate limiting and mocking base
    functions.

                 Changes in version 1.13.4 (2017-11-09)                 

  - Fix test errors for upcoming testthat release.

                 Changes in version 1.13.3 (2017-08-02)                 

  - Workaround a change in how Rcpp::compileAttributes stores the symbol
    names that broke tests.

                 Changes in version 1.13.2 (2017-06-02)                 

  - Workaround a regression in Rcpp::compileAttributes. Add trimws
    implementation for R 3.1 support.

                 Changes in version 1.13.1 (2017-05-13)                 

  - Bugfix for installing from git remote and not passing git2r
    credentials (@james-atkins, #1498)

  - Bugfix for installation of dependencies of dependencies (@jimhester,
    #1409).

  - Bugfix for installation of dependencies in CRAN-like repositories
    such as those created by drat (@jimhester, #1243, #1339).

  - load_all() no longer automatically creates a description for you.

  - use_test() template no longer includes useless comments (#1349)

  - Fix test() compatibility with testthat versions 1.0.2 (#1503).

  - Fix install_version(), install_bitbucket(), install_local(),
    install_url(), install_svn(), install_bioc() gain quiet arguments
    and properly pass them to internal functions. (#1502)

                 Changes in version 1.13.0 (2017-05-08)                 

New Features

  - spell_check gains a dict argument to set a custom language or
    dictionary

  - release() now checks documentation for spelling errors by default.

  - New use_gpl3_license() sets the license field in DESCRIPTION and
    includes a copy of the license in LICENSE.

Revdep check improvements

  - Various minor improvements around checking of reverse dependencies
    (#1284, @krlmlr). All packages involved are listed at the start, the
    whole process is now more resilient against package installation
    failures.

  - revdep_check() and revdep_check_resume() gain a skip argument which
    takes a character vector of packages to skip.

  - revdep_check() and check_cran() gain a quiet_check argument. You can
    use quiet_check = FALSE to see the actual text of R CMD check as it
    runs (not recommending with multiple threads).

  - revdep_check_resume() now takes ... which can be used to override
    settings from revdep_check(). For debugging a problem with package
    checks, try revdep_check(threads = 1, quiet_check = FALSE)

  - revdep_check() collects timing information in timing.md (#1319,
    @krlmlr).

  - Package names and examples are sorted in case-insensitive C
    collation (#1322, @krlmlr).

  - use_revdep() adds .gitignore entry for check database (#1321,
    @krlmlr).

  - Own package is installed in temporary library for revdep checking
    (#1338, @krlmlr).

  - Automated revdep check e-mails now can use the new my_version and
    you_cant_install variables. The e-mail template has been updated to
    use these variables (#1285, @krlmlr).

  - Installation failures are logged during revdep checking, by default
    in revdep/install. Once an installation has failed, it is not
    attempted a second time (#1300, @krlmlr).

  - Print summary table in README.md and problems.md (#1284, @krlmlr).

  - Revdep check improvements (#1284)

Bug fixes and minor improvements

  - Handle case of un-installed package being passed to session_info
    (#1281).

  - Using authentication to access Github package name. (#1262,
    @eriknil).

  - spell_check() checks for hunspell before running (#1475, @jimvine).

  - add_desc_package() checks for package dependencies correctly (#1463,
    @thomasp85).

  - Remove deprecated args argument from install_git() to allow
    passthrough to install (#1373, @ReportMort).

  - added a quiet argument to install_bitbucket(), with a default value
    of FALSE (fixes issue #1345, @plantarum).

  - update_packages() allows for override of interactive prompt (#1260,
    @pkq).

  - use_test() template no longer includes useless comments (#1349)

  - Add encoding support in test_dir() call by adding reference to
    pkg$encoding (#1306, @hansharhoff)

  - Parse valid Git remote URLs that lack trailing .git, e.g. GitHub
    browser URLs (#1253, @jennybc).

  - Add a check_bioconductor() internal function to automatically
    install BiocInstaller() if it is not installed and the user wants to
    do so.

  - Improve Git integration. use_git_ignore() and use_git_config() gain
    quiet argument, tests work without setting user.name and user.email
    Git configuration settings (#1320, @krlmlr).

  - Improve Git status checks used in release() (#1205, @krlmlr).

  - Improved handling of local file:// repositories in install() (#1284,
    @krlmlr).

  - setup() and create() gain new quiet argument (#1284, @krlmlr).

  - Avoid unnecessary query of available_packages() (#1269, @krlmlr).

  - Add cache setting to AppVeyor template (#1290, @krlmlr).

  - Fix AppVeyor test by manually installing curl (#1301).

  - install(dependencies = FALSE) doesn't query the available packages
    anymore (@krlmlr, #1269).

  - use_travis() now opens a webpage in your browser to more easily
    activate a repo.

  - use_readme_rmd() and use_readme() share a common template with
    sections for package overview, GitHub installation (if applicable),
    and an example (@jennybc, #1287).

  - test() doesn't load helpers twice anymore (@krlmlr, #1256).

  - Fix auto download method selection for install_github() on R 3.1
    which lacks "libcurl" in capabilities(). (@kiwiroy, #1244)

  - Fix removal of vignette files by not trying to remove files twice
    anymore (#1291)

  - add timestamp to messages in build_win() (@achubaty, #1367).

                 Changes in version 1.12.0 (2016-06-24)                 

New features

  - New install_bioc() function and bioc remote to install Bioconductor
    packages from their SVN repository.

  - install_dev_deps() gets everything you need to start development on
    source package - it installs all dependencies, and roxygen2 (#1193).

  - use_dev_version() automates the process of switching from a release
    version number by tweaking the DESCRIPTION, adding a heading to
    NEWS.md (if present), and checking into git (if you use it) (#1076.)

  - use_github() accepts a host argument, similar to install_github()
    (@ijlyttle, #1101)

Bug fixes and minor improvements

  - Update with Rtools-3.4 information, (@jimhester)

  - devtools now uses https to access the RStudio CRAN mirror if it will
    work on your system (#1059)

  - Handle case when a GitHub request returns a non-JSON error response.
    (@jimhester, #1204, #1211)

  - Suggested packages, including those specified as Remotes: are now
    installed after package installation. This allows you to use
    circular Remotes: dependencies for two related packages as long as
    one of the dependencies is a Suggested package. (@jimhester, #1184,
    hadley/dplyr#1809)

  - bug fix for installation of binary packages on windows, they must be
    installed directly from a zip file. (@jimhester, #1191, #1192)

  - build_vignette() will now only install the "VignetteBuilder" if it's
    not present, not try and upgrade it if it is (#1139).

  - clean_dll() Only removes package_name.def files and now operates
    recursively. (@jimhester, #1175, #1159, #1161)

  - check_man() now prints a message if no problems are found (#1187).

  - install_* functions and update_packages() refactored to allow
    updating of packages installed using any of the install methods.
    (@jimhester, #1067)

  - install_github() now uses https://api.github.com as the host
    argument, so users can specify 'http:' or other protocols if needed.
    (@jimhester, #1131, #1200)

  - load_all() runs package hooks before sourcing test helper files
    allowing test helper to make use of objects created when a package
    is loaded or attached. (@imanuelcostigan, #1146)

  - revdep_check() will now create the revdep/ directory if it does not
    already exist (#1178).

  - source_gist() gains a filename argument to specify a particular file
    to source from a GitHub gist. (@ateucher, #1172)

  - Add a default codecov.yml file to turn off commenting with
    use_coverage() (@jimhester, #1188)

  - Bug fix for 'nchar(text) : invalid multibyte string' errors when
    running write_dcf() on DESCRIPTION files with non-ASCII encodings
    (#1224, @jimhester).

                 Changes in version 1.11.1 (2016-04-21)                 

  - Bug fix in search_path_for_rtools() using the gcc-4.9.3 toolchain
    when there is no rtools setting in the windows registry.
    (@jimhester, #1155)

                 Changes in version 1.11.0 (2016-04-12)                 

Infrastructure helpers

  - create_description() now sets Encoding: UTF-8. This helps
    non-English package authors (#1123).

  - All use_ function have been overhauled to be more consistent,
    particularly around notification. Most functions now also ask to
    overwrite if a file already exists (#1074).

  - use_coverage() now adds covr to "Suggests", rather than recommending
    you install it explicitly in .travis.yml.

  - use_cran_badge() now uses HTTPS URL (@krlmlr, #1124).

  - use_github() now confirms that you've picked a good title and
    description (#1092) and prints the url of the repo (#1063).

  - use_news(), and use_test() open the files in RStudio (if you're
    using it and have the rstudioapi package installed).

  - use_testthat() tells you what it's doing (#1056).

  - use_travis() generates a template compatible with the newest
    R-travis.

  - use_readme_md() creates a basic README.md template (#1064).

  - use_revdep() has an updated template for the new revdep check system
    (#1090, @krlmlr).

  - Removed the deprecated use_coveralls(), add_rstudio_project(),
    add_test_infrastructure(), and add_travis().

  - Deprecated build_github_devtools() has been removed.

Checks and release()

  - check() now always succeeds (instead of throwing an error when R CMD
    check finds an ERROR), returning an object that summarises the check
    failures.

  - check() gains run_dont_test and manual arguments to control whether
    or not \donttest{} tests are tested, or manuals are built. This
    defaults to FALSE, but release() runs check with it set to TRUE
    (#1071; #1087, @krlmlr).

  - The cleanup argument to check() is deprecated: it now always returns
    the path to the check directory.

  - check_built() allows you to run R CMD check on an already built
    package.

  - check_cran() suppresses X11 with DISPLAY = "".

  - release() has been tweaked to improve the order of the questions,
    and to ensure that you're ok with problems. It warns if both
    inst/NEWS.Rd and NEWS.md exist (@krlmlr, #1135), doesn't throw error
    if Git head is detached (@krlmlr, #1136).

  - release() gains an args argument to control build options, e.g. to
    allow passing args = "--compact-vignettes=both" for packages with
    heavy PDF vignettes (@krlmlr, #1077).

  - system_check() gains new arguments path to controls the working
    directory of the command, and throw to control whether or not it
    throws an error on command failure. env has been renamed to the more
    explicit env_vars.

Revdep checks

revdep_check() has been overhauled. All revdep_ functions now work like
other devtools functions, taking a path to the package as the first
argument.

revdep_check() now saves its results to disk as check/check.rds, and the
other revdep() functions read from that cache. This also allows you to
resume a partial run with revdep_check_resume(). This should be a big
time saver if something goes unexpected wrong in the middle of the
checks. You can blow away the cache and start afresh with
revdep_check_reset().

revdep_check_save_summary() now creates README.md to save one level of
clicking in github. It also creates a problems.md that contains only
results for only packages that had warnings or errors. Each problem is
limited to at most 25 lines of output - this avoids lengthy output for
failing examples. revdep_check_print_problems() prints a bulleted list
of problems, suitable for inclusion in your cran-comments.md.

Summary results are reported as they come in, every then messages you'll
get a message giving elapsed and estimated remaining time.

An experimental revdep_email() emails individual maintainers with their
R CMD check summary results (#1014). See testthat and dplyr for example
usage.

There were a handful of smaller fixes:

  - revdep_check() doesn't complain about missing git2r package anymore
    (#1068, @krlmlr).

  - Package index caches for revdep_check() now time out after 30
    minutes.

  - revdep_check_save_logs() has been removed - it is just not that
    useful.

  - revdep_check_summary() has been removed - it never should have been
    part of the exported API.

Other improvements

  - Devtools now uses new gcc toolchain on windows, if installed
    (@jimhester).

  - install_git() now allows you to pass credentials to git2r to specify
    specific ssh credentials (@onlymee, #982)

  - load_all() now sources all test helpers if you use testthat. This
    makes it much easier to interactively run tests (#1125). load_all()
    also correctly handles unix and windows subdirectories within R
    (@gaborcsardi, #1102)

  - build_win() defaults to only R-devel, since this is most commonly
    what you want.

  - Help shims now inform you that you're using development
    documentation (#1049).

  - git_sha1() Fix fetching the latest git commit so that it also works
    for shallow git clones, i.e. git clones which make use of depth.
    (#1048, #1046, @nparley)

                 Changes in version 1.10.0 (2016-01-23)                 

New features

  - curl, evaluate, roxygen2 and rversions have been moved from Imports
    to Suggests to lighten the dependency load of devtools. If you run a
    function that needs one of the packages, you'll prompted to install
    it (#962, @jimhester).

  - Devtools uses a new strategy for detecting RTools on windows: it now
    only looks for Rtools if you need to load_all() or build() a package
    with compiled code. This should make it easier to work with devtools
    if you're developing pure R packages (#947).

  - package_file() lets you find files inside a package. It starts by
    finding the root directory of the package (i.e. the directory that
    contains DESCRIPTION) (#985).

  - use_news_md() adds a basic NEWS.md template (#957).

  - use_mit_license() writes the necessary infrastructure to declare and
    release an R package under the MIT license in a CRAN-compliant way.
    (#995, @kevinushey)

  - check(cran = TRUE) adds --run-donttest since you do need to test
    code in \donttest() for CRAN submission (#1002).

Package installation

  - install() installs packages specified in the Additional_repositories
    field, such as drat repositories. (#907, #1028, @jimhester). It
    correctly installs missing dependencies (#1013, @gaborcsardi). If
    called on a Bioconductor package, include the Bioconductor
    repositories if they are not already set (#895, @jimhester).

  - install() gains a metadata argument which lets you add extra fields
    to the DESCRIPTION on install. (#1027, @rmflight)

  - install_github() and install_git() only downloads and installs the
    package if the remote SHA1 reference differs from the currently
    installed reference (#903, @jimhester).

  - install_local() captures git and github information and stores it in
    the DESCRIPTION (#1027, @rmflight).

  - install_version() is more robust when handling multiple repos (#943,
    #1030, @jimhester).

  - Bugfix for Remotes:  feature that prevented it from working if
    devtools was not attached as is done in travis-r (#936, @jimhester).

Bug fixes and minor improvements

  - check_dev_versions() checks only package dependencies (#983).

  - check_man() replaces check_doc() (since most other functions are
    named after the corresponding directory). check_doc() will hang
    around as an alias for the foreseeable future (#958).

  - create() produces a dummy namespace will fake comment so roxygen2
    will overwrite silently (#1016).

  - create() and setup() are more permissive -- they now accept a path
    to either a new directory or empty directory. (#966, @kevinushey)

  - document() now only runs update_collate() once.

  - load_all() resolves a longstanding lazy load database corruption
    issue when reloading packages which define S3 methods on generics
    from base or other packages (#1001, @jimhester).

  - release_checks() gains two new checks:
    
      - check_vignette_titles() checks that your vignette titles aren't
        the default "Vignette Title" (#960, @jennybc).
    
      - check_news_md() checks that NEWS.md isn't in your .Rbuildignore
        (since it's now supported by CRAN, #1042).

  - revdep_check():
    
      - More verbose about which package is installed (#926, @krlmlr)
    
      - Verifies the integrity of already downloaded package archives
        (#930, @krlmlr)
    
      - Is now more tolerant of errors when retrieving the summary for a
        checked package (#929, @krlmlr).
    
      - When ncpus > 1, it includes the package name for when so you
        know which package has failed and can start looking at the
        output without needing to wait for all packages to finish
        (@mattdowle).
    
      - Uses proper repository when BiocInstaller::useDevel(TRUE) (#937,
        @jimhester).

  - Shimmed system.file() now respects mustWork = TRUE and throws an
    error if the file does not exist (#1034).

  - use_appveyor() template now creates failure.zip artifact instead of
    polluting the logs with R CMD check output (#1017, @krlmlr,
    @HenrikBengtsson).

  - use_cran_comments() template has been improved (#1038).

  - use_data() now warns when trying to save the same object twice, and
    stops if there is no object to save (#948, @krlmlr).

  - use_revdep_check() no longer includes revdep_check_save_logs in
    default template. I found I never used the logs and they just
    cluttered up the package directory (#1003).

  - with_*() functions have moved into the withr package, and devtools
    functions have been deprecated (#925, @jimhester).

                 Changes in version 1.9.1 (2015-09-11)                  

  - Avoid importing heavy dependencies to speed up loading (#830,
    @krlmlr).

  - Remove explicit library(testthat) call in test() (#798, @krlmlr).

  - as.package() and load_all() gain new argument create. Like other
    functions with a pkg argument, load_all() looks for a DESCRIPTION
    file in parent directories - if create = TRUE it will be
    automatically created if there's a R/ or data/ directory (#852,
    @krlmlr).

  - build_vignettes() gains dependencies argument (#825, @krlmlr).

  - build_win() now uses curl instead of RCurl for ftp upload.

  - build_win() asks for consent to receive e-mail at maintainer address
    in interactive mode (#800, @krlmlr).

  - check() now uses a better strategy when cran = TRUE. Instead of
    attempting to simulate --as-cran behaviour by turning on certain env
    vars, it now uses --as-cran and turns off problematic checks with
    env vars (#866). The problematic cran_env_vars() function has been
    removed.

  - find_rtools() now looks for registry keys in both HKCU (user) and
    HKLM (admin) locations (@Kevin-Jin, #844)

  - install() can now install dependencies from remote repositories by
    specifying them as Remotes in the DESCRIPTION file (#902,
    @jimhester). See vignette("dependencies") for more details.

  - install_*() detects if called on a Bioconductor package and if so,
    automatically includes the Bioconductor repositories if needed
    (#895, @jimhester).

  - install_deps() now automatically upgrades out of date dependencies.
    This is typically what you want when you're working on a development
    version of a package. To suppress this behaviour, set
    upgrade_dependencies = FALSE (#863). install_deps() is more careful
    with ... - this means additional arguments to install_* are more
    likely to work (#870).

  - install_gitorious() has been removed since gitorious no longer
    exists (#913).

  - load_all() no longer fails if a useDynLib() entry in the NAMESPACE
    is incorrect. This should make it easy to recover from an incorrect
    @useDynLib, because re-documenting() should now succeed.

  - release() works for packages not located at root of git repository
    (#845, #846, @mbjones).

  - revdep_check() now installs suggested packages by default (#808),
    and sets NOT_CRAN env var to false (#809). This makes testing more
    similar to CRAN so that more packages should pass cleanly. It also
    sets RGL_USE_NULL to true to stop rgl windows from popping up during
    testing (#897). It also downloads all source packages at the
    beginning - this makes life a bit easier if you're on a flaky
    internet connection (#906).

  - New uninstall() removes installed package (#820, @krlmlr).

  - Add use_coverage() function to add codecov.io or coveralls.io to a
    project, deprecate use_coveralls() (@jimhester, #822, #818).

  - use_cran_badge() uses canonical url form preferred by CRAN.

  - use_data() also works with data from the parent frame (#829,
    @krlmlr).

  - use_git_hook() now creates .git/hooks if needed (#888)

  - GitHub integration extended: use_github() gains a protocol argument
    (ssh or https), populates URL and BugReports fields of DESCRIPTION
    (only if non-existent or empty), pushes to the newly created GitHub
    repo, and sets a remote tracking branch. use_github_links() is a new
    exported function. dr_github() diagnoses more possible problems.
    (#642, @jennybc).

  - use_travis(): Default travis script leaves notifications on default
    settings.

  - uses_testthat() and check_failures() are now exported (#824, #839,
    @krlmlr).

  - use_readme_rmd() uses uses_git() correctly (#793).

  - with_debug() now uses with_makevars() rather than with_env(),
    because R reads compilation variables from the Makevars rather than
    the environment (@jimhester, #788).

  - Properly reset library path after with_lib() (#836, @krlmlr).

  - remove_s4classes() performs a topological sort of the classes (#848,
    #849, @famuvie).

  - load_all() warns (instead of failing) if importing symbols, methods,
    or classes from NAMESPACE fails (@krlmlr, #921).

                 Changes in version 1.8.0 (2015-05-09)                  

Helpers

  - New dr_devtools() runs some common diagnostics: are you using the
    latest version of R and devtools? It is run automatically by
    release() (#592).

  - use_code_of_conduct() adds a contributor code of conduct from
    http://contributor-covenant.org. (#729)

  - use_coveralls() allows you to easily add test coverage with
    coveralls (@jimhester, #680, #681).

  - use_git() sets up a package to use git, initialising the repo and
    checking the existing files.

  - use_test() adds a new test file (#769, @krlmlr).

  - New use_cran_badge() adds a CRAN status badge that you can copy into
    a README file. Green indicates package is on CRAN. Packages not yet
    submitted or accepted to CRAN get a red badge.

Package installation and info

  - build_vignettes() automatically installs the VignetteBuilder
    package, if necessary (#736).

  - install() and install_deps() gain a ... argument, so additional
    arguments can be passed to utils::install.packages() (@jimhester,
    #712). install_svn() optionally accepts a revision (@lev-kuznetsov,
    #739). install_version() now knows how to look in multiple repos
    (#721).

  - package_deps() (and dev_package_deps()) determines all recursive
    dependencies and whether or not they're up-to-date (#663). Use
    update(package_deps("xyz")) to update out of date dependencies. This
    code is used in install_deps() and revdep_check() - it's slightly
    more aggressive than previous code (i.e. it forces you to use the
    latest version), which should avoid problems when you go to submit
    to CRAN.

  - New update_packages() will install a package (and its dependencies)
    only if they are missing or out of date (#675).

  - session_info() can now take a vector of package names, in which case
    it will print the version of those packages and their dependencies
    (#664).

Git and github

  - Devtools now uses the git2r package to inspect git properties and
    install remote git packages with install_git(). This should be
    considerably more reliable than the previous strategy which involves
    calling the command line git client. It has two small downsides:
    install_git() no longer accepts additional args, and must do a deep
    clone when installing.

  - dr_github() checks for common problems with git/github setup (#643).

  - If you use git, release() now warns you if you have uncommited
    changes, or if you've forgotten to synchronise with the remote
    (#691).

  - install_github() warns if repository contains submodules (@ashander,
    #751).

Bug fixes and minor improvements

  - Previously, devtools ran all external R processes with R --vanilla.
    Now it only suppresses user profiles, and constructs a custom
    .Rprofile to override the default. Currently, this .Rprofile sets up
    the repos option. Among others, this enables the cyclic dependency
    check in devtools::release (#602, @krlmlr).

  - R_BROWSER and R_PDFVIEWER environment variables are set to "false"
    to suppress random windows opening during checks.

  - Devtools correctly identifies RTools 3.1 and 3.2 (#738), and
    preserves continuation lines in the DESCRIPTION (#709).

  - dev_help() now uses normalizePath(). Hopefully this will make it
    more likely to work if you're on windows and have a space in the
    path.

  - lint() gains a cache argument (@jimhester, #708).

  - Fixed namespace issues related to stats::setNames() (#734, #772) and
    utils::unzip() (#761, @robertzk).

  - release() now reminds you to check the existing CRAN check results
    page (#613) and shows file size before uploading to CRAN (#683,
    @krlmlr).

  - RCMD() and system_check() are now exported so they can be used by
    other packages. (@jimhester, #699).

  - revdep_check() creates directories if needed (#759).

  - system_check() combines arguments with  , not , . (#753)

  - test() gains an ... argument so that additional arguments can be
    passed to testthat::test_dir (@jimhester, #747)

  - use_travis() now suggests you link to the svg icon since that looks
    a little sharper. Default template sets CRAN:
    http://cran.rstudio.com/ to enable the cyclic dependency check.

  - NOT_CRAN envvar no longer overrides externally set variable.

  - check(check_version = TRUE) also checks spelling of the DESCRIPTION;
    if no spell checker is installed, a warning is given (#784,
    @krlmlr).

                 Changes in version 1.7.0 (2015-01-17)                  

Improve reverse dependency checking

Devtools now supports a new and improved style of revdep checking with
use_revdep(). This creates a new directory called revdep which contains
a check.R template. Run this template to check all reverse dependencies,
and save summarised results to check/summary.md. You can then check this
file into git, making it much easier to track how reverse dependency
results change between versions. The documentation for revdep_check() is
much improved, and should be more useful (#635)

I recommend that you specify a library to use when checking with
options("devtools.revdep.libpath"). (This should be a directory that
already exists). This should be difference from your default library to
keep the revdep environment isolated from your development environment.

I've also tweaked the output of revdep_maintainers() so it's easier to
copy and paste into an email (#634). This makes life a little easier
pre-release.

New helpers

  - lint() runs lintr::lint_package() to check style consistency and
    errors in a package. (@jimhester, #694)

  - use_appveyor() sets up a package for testing with AppVeyor (@krlmlr,
    #549).

  - use_cran_comments() creates a cran-comments.md template and adds it
    to .Rbuildignore to help with CRAN submissions. (#661)

  - use_git_hook() allows you to easily add a git hook to a package.

  - use_readme_rmd() sets up a template to generate a README.md from a
    README.Rmd with knitr.

Minor improvements

  - Deprecated doc_clean argument to check() has been removed.

  - Initial package version in create() is now 0.0.0.9000 (#632).
    create() and create_description() checks that the package name is
    valid (#610).

  - load_all() runs roxygen2::update_collate() before loading code. This
    ensures that files are sourced in the way you expect, as defined by
    roxygen @include tags. If you don't have any @include tags, the
    collate will be not be touched (#623).

  - session_info() gains include_base argument to also display
    loaded/attached base packages (#646).

  - release() no longer asks if you've read the CRAN policies since the
    CRAN submission process now asks the same question (#692).
    
    release(check = TRUE) now runs some additional custom checks. These
    include:
    
      - Checking that you don't depend on a development version of a
        package.
    
      - Checking that the version number has exactly three components
        (#633).
    
    release() now builds packages without the --no-manual switch, both
    for checking and for actually building the release package (#603,
    @krlmlr). build() gains an additional argument manual, defaulting to
    FALSE, and check() gains ... unmodified to build().

  - use_travis() now sets an environment variable so that any WARNING
    will also cause the build to fail (#570).

  - with_debug() and compiler_flags() set CFLAGS etc instead of
    PKG_CFLAGS. PKG_* are for packages to use, the raw values are for
    users to set. (According to
    http://cran.rstudio.com/doc/manuals/r-devel/R-exts.html#Using-Makevars)

  - New setup() works like create() but assumes an existing, not
    necessarily empty, directory (#627, @krlmlr).

Bug fixes

  - When installing a pull request, install_github() now uses the
    repository associated with the pull request's branch (and not the
    repository of the user who created the pull request) (#658,
    @krlmlr).

  - missing_s3() works once again (#672)

  - Fixed scoping issues with unzip().

  - load_code() now executes the package's code with the package's root
    as working directory, just like R CMD build et al. (#640, @krlmlr).

                 Changes in version 1.6.1 (2014-10-07)                  

  - Don't set non-portable compiler flags on Solaris.

  - The file template.Rproj is now correctly installed and the function
    use_rstudio works as it should. (#595, @hmalmedal)

  - The function use_rcpp will now create the file src/.gitignore with
    the correct wildcards. (@hmalmedal)

  - The functions test, document, load_all, build, check and any
    function that applies to some package directory will work from
    subdirectories of a package (like the "R" or "inst/tests"
    directories). (#616, @robertzk)

                  Changes in version 1.6 (2014-09-23)                   

Tool templates and create()

  - create() no longer generates man/ directory - roxygen2 now does this
    automatically. It also no longer generates an package-level doc
    template. If you want this, use use_package_doc(). It also makes a
    dummy namespace so that you can build & reload without running
    document() first.

  - New use_data() makes it easy to include data in a package, either in
    data/ (for exported datasets) or in R/sysdata.rda (for internal
    data). (#542)

  - New use_data_raw() creates data-raw/ directory for reproducible
    generation of data/ files (#541).

  - New use_package() allows you to set dependencies (#559).

  - New use_package_doc() sets up an Roxygen template for package-level
    docs.

  - New use_rcpp() sets up a package to use Rcpp.

  - use_travis() now figures out your github username and repo so it can
    construct the markdown for the build image. (#546)

  - New use_vignette() creates a draft vignette using Rmarkdown (#572).

  - renamed add_rstudio_project() to use_rstudio(), add_travis() to
    use_travis(), add_build_ignore() to use_build_ignore(), and
    add_test_infrastructure() to use_testthat() (old functions are
    aliased to new)

The release process

  - You can add arbitrary extra questions to release() by defining a
    function release_questions() in your package. Your
    release_questions() should return a character vector of questions to
    ask (#451).

  - release() uses new CRAN submission process, as implemented by
    submit_cran() (#430).

Package installation

  - All install_* now use the same code and store much useful metadata.
    Currently only session_info() takes advantage of this information,
    but it will allow the development of future tools like generic
    update functions.

  - Vignettes are no longer installed by default because they
    potentially require all suggested packages to also be installed. Use
    build_vignettes = TRUE to force building and to install all
    suggested packages (#573).

  - install_bitbucket() has been bought into alignment with
    install_github(): this means you can now specify repos with the
    compact username/repo@ref syntax. The username is now deprecated.

  - install_git() has been simplified and many of the arguments have
    changed names for consistency with metadata for other package
    installs.

  - install_github() has been considerably improved:
    
      - username is deprecated - please include the user in the repo
        name: rstudio/shiny, hadley/devtools etc.
    
      - dependencies = TRUE is no longer forced (regression in 1.5)
        (@krlmlr, #462).
    
      - Deprecated parameters auth_user, branch, pull and password have
        all been removed.
    
      - New host argument which allows you to install packages from
        github enterprise (#410, #506).
    
      - The GitHub API is used to download archive file (@krlmlr, #466)
        - this makes it less likely to break in the future.
    
      - To download a specified pull request, use ref = github_pull(...)
        (@krlmlr, #509). To install the latest release, use
        "user/repo@*release" or ref = github_release() (@krlmlr, #350).

  - install_gitorious() has been bought into alignment with
    install_github(): this means you can now specify repos with the
    compact username/repo@ref syntax. You must now always supply user
    (project) name and repo.

  - install_svn() lets you install an R package from a subversion
    repository (assuming you have subversion installed).

  - decompress() and hence install_url() now work when the downloaded
    file decompresses without additional top-level directory (#537).

Other minor improvements and bug fixes

  - If you're using RStudio, and you're trying to build a binary package
    without the necessary build tools, RStudio will prompt to download
    and install the right thing. (#488)

  - Commands are no longer run with LC_ALL=C - this no longer seems
    necessary (#507).

  - build(binary = TRUE) creates an even-more-temporary package library
    avoid conflicts (#557).

  - check_dir() no longer fails on UNC paths (#522).

  - check_devtools() also checks for dependencies on development
    versions of packages (#534).

  - load_all() no longer fails on partial loading of a package
    containing S4 or RC classes (#577).

  - On windows, find_rtools() is now run on package load, not package
    attach.

  - help(), ?, and system.file() are now made available when a package
    is loaded with load_all(), even if the devtools package isn't
    attached.

  - httr 0.3 required (@krlmlr, #466).

  - load_all() no longer gives an error when objects listed as exports
    are missing.

  - Shim added for library.dynam.unload().

  - loaded_packages() now returns package name and path it was loaded
    from. (#486)

  - The parenvs() function has been removed from devtools, because is
    now in the pryr package.

  - missing_s3() uses a better heuristic for determining if a function
    is a S3 method (#393).

  - New session_info() provides useful information about your R session.
    It's a little more focussed than sessionInfo() and includes where
    packages where installed from (#526).

  - rstudioapi package moved from suggests to imports, since it's always
    needed (it's job is to figure out if rstudio is available, #458)

  - Implemented own version utils::unzip() that throws error if command
    fails and doesn't print unneeded messages on non-Windows platforms
    (#540).

  - Wrote own version of write.dcf() that doesn't butcher whitespace and
    fieldnames.

Removed functionality

  - The fresh argument to test() has been removed - this is best done by
    the editor since it can run the tests in a completely clean
    environment by starting a new R session.

  - compile_dll() can now build packages located in R's tempdir()
    directory (@richfitz, #531).

                  Changes in version 1.5 (2014-04-07)                   

Four new functions make it easier to add useful infrastructure to
packages:

  - add_test_infrastructure() will create test infrastructure for a new
    package. It is called automatically from test() if no test
    directories are found, the session is interactive and you agree.

  - add_rstudio_project() adds an RStudio project file to your package.
    create() gains an rstudio argument which will automatically create
    an RStudio project in the package directory. It defaults to TRUE: if
    you don't use RStudio, just delete the file.

  - add_travis() adds a basic travis template to your package.
    .travis.yml is automatically added to .Rbuildignore to avoid
    including it in the built package.

  - add_build_ignore() makes it easy to add files to .Rbuildignore,
    correctly escaping special characters

Two dependencies were incremented:

  - devtools requires at least R version 3.0.2.

  - document() requires at least roxygen2 version 3.0.0.

Minor improvements

  - build_win() now builds R-release and R-devel by default (@krlmlr,
    #438). It also gains parameter args, which is passed on to build()
    (@krlmlr, #421).

  - check_doc() now runs document() automatically.

  - install() gains thread argument which allows you to install multiple
    packages in parallel (@mllg, #401). threads argument to check_cran()
    now defaults to getOption("Ncpus")

  - install_deps(deps = T) no longer installs all dependencies of
    dependencies (#369).

  - install_github() now prefers personal access tokens supplied to
    auth_token rather than passwords (#418, @jeroenooms).

  - install_github() now defaults to dependencies = TRUE so you
    definitely get all the packages you need to build from source.

  - devtools supplies its own version of system.file() so that when the
    function is called from the R console, it will have special behavior
    for packages loaded with devtools.

  - devtools supplies its own version of help and ?, which will search
    devtools-loaded packages as well as normally-loaded packages.

Bug fixes

  - check_devtools() no longer called by check() because the relevant
    functionality is now included in R CMD CHECK and it was causing
    false positives (#446).

  - install_deps(TRUE) now includes packages listed in VignetteBuilder
    (#396)

  - build() no longer checks for pdflatex when building vignettes, as
    many modern vignettes don't need it (#398). It also uses
    --no-build-vignettes for >3.0.0 compatibility (#391).

  - release() does a better job of opening your email client if you're
    inside of RStudio (#433).

  - check() now correctly reports the location of the R CMD check output
    when called with a custom check_dir. (Thanks to @brentonk)

  - check_cran() records check times for each package tested.

  - Improved default DESCRIPTION file created by create_description().
    (Thanks to @ncarchedi, #428)

  - Fixed bug in install_github() that prevented installing a pull
    request by supplying repo = "username/repo#pull". (#388)

  - explicitly specify user agent when querying user name and ref for
    pull request in install_github. (Thanks to Kirill Müller, #405)

  - install_github() now removes blank lines found in a package
    DESCRIPTION file, protecting users from the vague error: contains a
    blank line error. (#394)

  - with_options() now works, instead of throwing an error (Thanks to
    @krlmlr, #434)

                 Changes in version 1.4.1 (2013-11-27)                  

  - Fixed bug in wd() when path was omitted. (#374)

  - Fixed bug in dev_help() that prevented it from working when not
    using RStudio.

  - source_gist() respects new github policy by sending user agent
    (hadley/devtools)

  - install_github() now takes repo names of the form
    [username/]repo[/subdir][@ref|#pull] - this is now the recommended
    form to specify username, subdir, ref and/or pull for
    install_github. (Thanks to Kirill Müller, #376)

                  Changes in version 1.4 (2013-11-20)                   

Installation improvements

  - install() now respects the global option keep.source.pkgs.

  - install() gains a build_vignettes which defaults to TRUE, and
    ensures that vignettes are built even when doing a local install. It
    does this by forcing local = FALSE if the package has vignettes, so
    R CMD build can follow the usual process. (#344)

  - install_github() now takes repo names of the form username/repo -
    this is now the recommended form for install_github if your username
    is not hadley ;)

  - install_github() now adds details on the source of the installed
    package (e.g. repository, SHA1, etc.) to the package DESCRIPTION
    file. (Thanks to JJ Allaire)

  - Adjusted install_version() to new meta data structure on CRAN.
    (Thanks to Kornelius Rohmeyer)

  - Fixed bug so that install_version() works with version numbers that
    contain hyphens. (Thanks to Kornelius Rohmeyer)

  - install_deps() is now exported, making it easier to install the
    dependencies of a package.

Other minor improvements

  - build(binary = TRUE) now no longer installs the package as a
    side-effect. (#335)

  - build_github_devtools() is a new function which makes it easy for
    Windows users to upgrade to the development version of devtools.

  - create_description() does a better job of combining defaults and
    user specified options. (#332)

  - install() also installs the dependencies that do not have the
    required versions; besides, the argument dependencies now works like
    install.packages() (in previous versions, it was essentially
    c("Depends", "Imports", "LinkingTo")) (thanks, Yihui Xie, #355)

  - check() and check_cran() gain new check_dir argument to control
    where checking takes place (#337)

  - check_devtools() no longer incorrectly complains about a vignettes/
    directory

  - Decompression of zip files now respects getOption("unzip") (#326)

  - dev_help will now use the RStudio help pane, if you're using a
    recent version of RStudio (#322)

  - Release is now a little bit smarter: if it's a new package, it'll
    ask you to read and agree to the CRAN policies; it will only ask
    about dependencies if it has any.

  - source_url() (and source_gist()) accept SHA1 prefixes.

  - source_gist() uses the GitHub API to reliably locate the raw gist.
    Additionally it now only attempts to source files with .R or .r
    extensions, and gains a quiet argument. (#348)

  - Safer installation of source packages, which were previously
    extracted directly into the temp directory; this could be a problem
    if directory names collide. Instead, source packages are now
    extracted into unique subdirectories.

                  Changes in version 1.3 (2013-07-04)                   

Changes to best practices

  - The documentation for many devtools functions has been considerably
    expanded, aiming to give the novice package developer more hints
    about what they should be doing and why.

  - load_all() now defaults to reset = TRUE so that changes to the
    NAMESPACE etc. are incorporated. This makes it slightly slower (but
    hopefully not noticeably so), and generally more accurate, and a
    better simulation of the install + restart + reload cycle.

  - test() now looks in both inst/test and tests/testthat for unit
    tests. It is recommended to use tests/testthat because it allows
    users to choose whether or not to install test. If you move your
    tests from inst/tests to tests/testthat, you'll also need to change
    tests/test-all.R to run test_check() instead of test_package(). This
    change requires testthat 0.8 which will be available on CRAN
    shortly.

  - New devtools guarantee: if because of a devtools bug, a CRAN
    maintainer yells at you, I'll send you a hand-written apology note.
    Just forward me the email and your address.

New features

  - New install_local() function for installing local package files (as
    zip, tar, tgz, etc.) (Suggested by landroni)

  - parse_deps(), which parses R's package dependency strings, is now
    exported.

  - All package and user events (e.g. load, unload, attach and detach)
    are now called in the correct place.

Minor improvements and bug fixes

  - build() gains args parameter allowing you to add additional
    arbitrary arguments, and check() gains similar build_args parameter.

  - install_git gains git_arg parameter allowing you to add arbitrary
    additional arguments.

  - Files are now loaded in a way that preserves srcreferences - this
    means that you will get much better locations on error messages,
    which should considerably aid debugging.

  - Fixed bug in build_vignettes() which prevented files in inst/doc
    from being updated

  - as.package() no longer uses the full path, which should make for
    nicer error messages.

  - More flexibility when installing package dependencies with the
    dependencies argument to install_*() (thanks to Martin Studer)

  - The deprecated show_rd() function has now been removed.

  - install_bitbucket() gains auth_user and password params so that you
    can install from private repos (thanks to Brian Bolt)

  - Better git detection on windows (thanks to Mikhail Titov)

  - Fix bug so that document() will automatically create man/ directory

  - Default DESCRIPTION gains LazyData: true

  - create_description() now checks that the directory is probably a
    package by looking for R/, data/ or src/ directories

  - Rolled back required R version from 3.0 to 2.15.

  - Add missing import for digest()

  - Bump max compatible version of R with RTools 3.0, and add details
    for RTools 3.1

                  Changes in version 1.2 (2013-04-17)                   

Better installation

  - install gains a local option for installing the package from the
    local package directory, rather than from a built tar.gz. This is
    now used by default for all package installations. If you want to
    guarantee a clean build, run local = FALSE

  - install now uses option devtools.install.args for default
    installation arguments. This allows you to set any useful defaults
    (e.g. --no-multiarch) in your Rprofile.

  - install_git gains branch argument to specify branch or tag (Fixes
    #255)

Clean sessions

  - run_examples and test gain a fresh argument which forces them to run
    in a fresh R session. This completely insulates the examples/tests
    from your current session but means that interactive code (like
    browser()) won't work.(Fixes #258)

  - New functions eval_clean and evalq_clean make it easy to evaluate
    code in a clean R session.

  - clean_source loses the vanilla argument (which did not work) and
    gains a quiet argument

New features

  - source_url and source_gist now allow you to specify a sha, so you
    can make sure that files you source from the internet don't change
    without you knowing about it. (Fixes #259)

  - build_vignettes builds using buildVignette() and movies/copies
    outputs using the same algorithm as R CMD build. This means that
    build_vignettes() now exactly mimics R's regular behaviour,
    including building non-Sweave vignettes (#277), building in the
    correct directory (#231), using make files (if present), and copying
    over extra files.

  - devtools now sets best practice compiler flags: from check(), -Wall
    -pedantic and from load_all(), -Wall -pedantic -g -O0 -UNDEBUG.
    These are prefixed to existing environment variables so that you can
    override them if desired. (Fixes #257)

  - If there's no DESCRIPTION file present, load_all() will
    automatically create one using create_description(). You can set
    options in your .Rprofile to control what it contains: see
    package?devtools for more details.

Minor improvements

  - check() now also sets environment variable
    _R_CHECK_CODE_DATA_INTO_GLOBALENV_ to TRUE (to match current
    --as-cran behaviour) (Fixes #256)

  - Improved default email sent by release(), eliminating create.post()
    boilerplate

  - revdep includes LinkingTo by default.

  - Fixed regular expression problem that caused RTools 3.0.* to fail to
    be found on Windows.

  - load_data() got an overhaul and now respects LazyData and correctly
    exports datasets by default (Fixes #242)

  - with_envvar gains the option to either replace, prefix or suffix
    existing environmental variables. The default is to replace, which
    was the previous behaviour.

  - check_cran includes sessionInfo() in the summary output (Fixes #273)

  - create() gains a check argument which defaults to FALSE.

  - with_env will be deprecated in 1.2 and removed in 1.3

  - When load_all() calls .onAttach() and .onLoad(), it now passes the
    lib path to those functions.

                  Changes in version 1.1 (2013-02-09)                   

  - source_gist() has been updated to accept new gist URLs with
    username. (Fixes #247)

  - test() and document() now set environment variables, including
    NOT_CRAN.

  - Test packages have been renamed to avoid conflicts with existing
    packages on CRAN. This bug prevented devtools 1.0 from passing check
    on CRAN for some platforms.

  - Catch additional case in find_rtools(): previously installed, but
    directory empty/deleted (Fixes #241)

                  Changes in version 1.0 (2013-01-22)                   

Improvements to package loading

  - Rcpp attributes are now automatically compiled during build.

  - Packages listed in depends are require()d (Fixes #161, #178, #192)

  - load_all inserts a special version of system.file into the package's
    imports environment. This tries to simulate the behavior of
    base::system.file but gives modified results because the directory
    structure of installed packages and uninstalled source packages is
    different. (Fixes #179). In other words, system.file should now just
    work even if the package is loaded with devtools.

  - Source files are only recompiled if they've changed since the last
    run, and the recompile will be clean (--preclean) if any exported
    header files have changed. (Closes #224)

  - The compilation process now performs a mock install instead of using
    R CMD SHLIB. This means that Makevars and makefiles will now be
    respected and generally there should be fewer mismatches between
    load_all and the regular install and reload process.

  - S4 classes are correctly loaded and unloaded.

Windows

  - Rtools detection on windows has been substantially overhauled and
    should both be more reliable, and when it fails give more
    information about what is wrong with your install.

  - If you don't have rtools installed, devtools now automatically sets
    the TAR environment variable to internal so you can still build
    packages.

Minor features

  - check_cran now downloads packages from cran.rstudio.com.

  - check() now makes the CRAN version check optional, and off by
    default. The release() function still checks the version number
    against CRAN.

  - In check(), it is optional to require suggested packages, using the
    force_suggests option.

  - When check() is called, the new default behavior is to not delete
    existing .Rd files from man/. This behavior can be set with the
    "devtools.cleandoc" option.

  - install_bitbucket() now always uses lowercase repo names. (Thanks to
    mnel)

  - New function with_lib(), which runs an expression code with a
    library path prepended to the existing libpaths. It differs slightly
    from with_libpaths(), which replaces the existing libpaths.

  - New function install_git() installs a package directly from a git
    repository. (Thanks to David Coallier)

  - If pdflatex isn't available, don't try to build vignettes with
    install() or check(). (Fixes #173)

  - install_github() now downloads from a new URL, to reflect changes on
    how files are hosted on GitHub.

  - build() now has a vignettes option to turn off rebuilding vignettes.

  - install(quick=TRUE) now builds the package without rebuilding
    vignettes. (Fixes #167)

  - All R commands called from devtools now have the environment
    variable NOT_CRAN set, so that you can perform tasks when you know
    your code is definitely not running on CRAN. (Closes #227)

  - Most devtools functions can a quiet argument that suppresses output.
    This is particularly useful for testing.

Bug fixes

  - Fixed path issue when looking for Rtools on windows when registry
    entry is not present. (Fixes #201)

  - Reloading a package that requires a forced-unload of the namespace
    now works.

  - When reloading a package that another loaded package depends on, if
    there was an error loading the code, devtools would print out
    something about an error in unloadNamespace, which was confusing. It
    now gives more useful errors.

  - An intermittent error in clear_topic_index related to using rm() has
    been fixed. (Thanks to Gregory Jefferis)

  - revdep() now lists "Suggests" packages, in addition to "Depends" and
    "Imports".

  - revdep_check() now correctly passes the recursive argument to
    revdep().

  - The collection of check results at the end of check_cran()
    previously did not remove existing results, but now it does.

  - When a package is loaded with load_all(), it now passes the name of
    the package to the .onLoad() function. (Thanks to Andrew Redd)

                        Changes in version 0.8.0                        

New features

  - create function makes it easier to create a package skeleton using
    devtools standards.

  - install_github() can now install from a pull request -- it installs
    the branch referenced in the pull request.

  - install_github now accepts auth_user and password arguments if you
    want to install a package in a private github repo. You only need to
    specify auth_user if it's not your package (i.e. it's not your
    username) (Fixes #116)

  - new dev_help function replaces show_rd and makes it easy to get help
    on any topic in a development package (i.e. a package loaded with
    load_all) (Fixes #110)

  - dev_example runs the examples for one in-development package. (Fixes
    #108)

  - build_vignettes now looks in modern location for vignettes
    (vignettes/) and warn if vignettes found in old location (inst/doc).
    Building now occurs in a temporary directory (to avoid polluting the
    package with build artefacts) and only final pdf files are copied
    over.

  - new clean_vignettes function to remove pdfs in inst/doc that were
    built from vignettes in vignettes/

  - load_all does a much better job at simulating package loading (see
    LOADING section). It also compiles and loads C/C++/Fortran code.

  - unload() is now an exported function, which unloads a package,
    trying harder than just detach. It now also unloads DLLs. (Winston
    Chang. Fixes #119)

  - run_examples now has parameters show, test, run to control which of
    \dontrun{}, \dontshow{}, \donttest{} and \testonly{} are commented
    out. The strict parameter has been removed since it is no longer
    necessary because load_all can respect namespaces. (Fixes #118)

  - build(), check(), install() etc now run R in --vanilla mode which
    prevents it from reading any of your site or personal configuration
    files. This should prevent inconsistencies between the environment
    in which the package is run between your computer and other
    computers (e.g. the CRAN server) (Fixes #145)

  - All system R command now print the full command used to make it
    easier to understand what's going on.

Package paths

  - as.package no longer uses ~/.Rpackages.

  - as.package provides more informative error messages when path does
    not exist, isn't a directory, or doesn't contain a DESCRIPTION file.

  - New function inst() takes the name of a package and returns the
    installed path of that package. (Winston Chang. Fixes #130). This
    makes it possible to use devtools functions (e.g. unload) with
    regular installed packages, not just in-development source packages.

  - New function devtest() returns paths to an internal testing packages
    in devtools.

Loading

  - Development packages are now loaded into a namespace environment,
    namespace:xxxx, and then the objects namespace are copied to the
    package environment, package:xxxx. This more accurately simulates
    how packages are normally loaded. However, all of the objects (not
    just the exported ones) are still copied to the package environment.
    (Winston Chang. Fixes #3, #60, and #125)

  - Packages listed in Imports and Depends are now loaded into an
    imports environment, with name attribute "imports:xxxx", which is
    the parent of the namespace environment. The imports environment is
    in turn a child of the namespace:base environment, which is a child
    of the global environment. This more accurately simulates how
    packages are normally loaded. These packages previously were loaded
    and attached. (Winston Chang. Fixes #85)

  - The NAMESPACE file is now used for loading imports, instead of the
    DESCRIPTION file. Previously, load_all loaded all objects from the
    packages listed in DESCRIPTION. Now it loads packages (and, when
    'importFrom' is used, specific objects from packages) listed in
    NAMESPACE. This more closely simulates normal package loading. It
    still checks version numbers of packages listed in DESCRIPTION.
    (Winston Chang)

  - load_all can now be used to properly reload devtools. It does this
    by creating a copy of the devtools namespace environment, and
    calling load_all from that environment. (Winston Chang)

  - The .onLoad and .onAttach functions for a development package are
    now both called when loading a package for the first time, or with
    reset=TRUE, and the order more correctly simulates normal package
    loading (create the namespace, call .onLoad, copy objects to the
    package environment, and then call .onAttach). (Winston Chang)

  - load_all will now throw a warning if a dependency package does not
    satisfy the version requirement listed in DESCRIPTION. (Winston
    Chang. Fixes #109)

  - The package environment now has a 'path' attribute, similar to a
    package loaded the normal way. (Winston Chang)

  - load_all now has an option export_all. When set to TRUE, only the
    objects listed as exports in NAMESPACE are exported. (Winston Chang)

  - load_all now compiles C files in the /src directory. (Winston Chang)

  - New functions compile_dll() and clean_dll(), which compile C/C++/
    Fortran source code, and clean up the compiled objects,
    respectively. (Winston Chang. Fixes #131)

Bug fixes

  - load_code now properly skips missing files. (Winston Chang)

  - Add --no-resave-data to default build command.

  - The subject line of the email created by release is now "CRAN
    submission [package] [version]", per CRAN repository policy.

  - install_bitbucket properly installs zip files of projects stored in
    Mercurial repositories. (Winston Chang. Fixes #148)

  - build now builds vignettes because install does not. (Fixes #155)

Introspection

  - New function loaded_packages(), which returns the names of packages
    that are loaded and attached.

  - Packages loaded with load_all now store devtools metadata in their
    namespace environment, in a variable called .__DEVTOOLS__. This can
    be accessed with the dev_meta function. (Winston Chang. Fixes #128)

  - dev_mode now stores the path it uses in option dev_path. That makes
    it easy for other applications to detect when it is on and to act
    accordingly.

  - New function parse_ns_file(), which parses a NAMESPACE file for a
    package.

  - New function parenvs(), which parents the parent environments of an
    object. (Winston Chang)

                 Changes in version 0.7.1 (2012-07-02)                  

  - bump dependency to R 2.15

  - load_code now also looks for files ending in .q - this is not
    recommended, but is needed for some older packages

                  Changes in version 0.7 (2012-06-19)                   

Installation

  - install_bitbucket installs R packages on bitbucket.

  - install now uses --with-keep.source to make debugging a little
    easier.

  - All remote install functions give better error messages in the case
    of http errors (Fixes #82).

  - install has new quick option to make package installation faster, by
    sacrificing documentation, demos and multi-architecture binaries.
    (Fixes #77)

  - install_url, install_github and install_gitorious gain a subdir
    argument which makes it possible to install packages that are
    contained within a sub-directory of a repository or compressed file.
    (Fixes #64)

Checking

  - with_debug function temporarily sets env vars so that compilation is
    performed with the appropriate debugging flags set. Contributed by
    Andrew Redd.

  - revdep, revdep_maintainers and revdep_check for calculating reverse
    dependencies, finding their maintainers and running R CMD check.
    (Fixes #78)

  - check_cran has received a massive overhaul: it now checks multiple
    packages, installs dependencies (in user specified library), and
    parse check output to extract errors and warnings

  - check uses new --as-cran option to make checking as close to CRAN as
    possible (fixes #68)

Other new features

  - devtools now uses options devtools.path to set the default path to
    use with devmode, and github.user to set the default user when
    installing packages from github.

  - if no package supplied, and no package has been worked with
    previously, all functions now will try the working directory. (Fixes
    #87)

  - on windows, devtools now looks in the registry to find where Rtools
    is installed, and does a better a job of locating gcc. (Contributed
    by Andrew Redd)

  - show_rd passes ... on to Rd2txt - this is useful if you're checking
    how build time \Sexprs are generated.

  - A suite of with functions that allow you to temporarily alter the
    environment in which code is run: in_dir, with_collate, with_locale,
    with_options, with_path, ... (Fixes #89)

  - release ask more questions and randomises correct answers so you
    really need to read them (Fixes #79)

  - source_gist now accepts default url such as
    "https://gist.github.com/nnn"

  - New system path manipulation functions, get_path, set_path, add_path
    and on_path, contributed by Andrew Redd.

  - If you're on windows, devtools now suppresses the unimportant
    warning from CYGWIN about the dos style file paths

Bug fixes

  - decompress now uses target directory as defined in the function call
    when expanding a compressed file. (Fixes #84)

  - document is always run in a C locale so that NAMESPACE sort order is
    consistent across platforms.

  - install now quotes libpath and build path so paths with embedded
    spaces work (Fixes #73 and #76)

  - load_data now also loads .RData files (Fixes #81)

  - install now has args argument to pass additional command line
    arguments on to R CMD install (replaces ... which didn't actually do
    anything). (Fixes #69)

  - load_code does a better job of reconciling files in DESCRIPTION
    collate with files that actually exist in the R directory. (Fixes
    #14)

                  Changes in version 0.6 (2012-02-28)                   

New features

  - test function takes filter argument which allows you to restrict
    which tests are to be run

  - check runs with example timings, as is done on CRAN. Run with new
    param cleanup = F to access the timings.

  - missing_s3 function to help figure out if you've forgotten to export
    any s3 methods

  - check_cran downloads and checks a CRAN package - this is useful to
    run as part of the testing process of your package if you want to
    check the dependencies of your package

  - strict mode for run_examples which runs each example in a clean
    environment. This is much slower than the default (running in the
    current environment), but ensures that each example works
    standalone.

  - dev_mode now updates prompt to indicate that it's active (Thanks to
    Kohske Takahashi)

  - new source_url function for sourcing script on a remote server via
    protocols other than http (e.g. https or ftp). (Thanks to Kohske
    Takahashi)

  - new source_gist function to source R code stored in a github gist.
    (Thanks to Kohske Takahashi)

  - load_all now also loads all package dependencies (including
    suggestions) - this works around some bugs in the way that devtools
    attaches the development environment into the search path in a way
    that fails to recreate what happens normally during package loading.

Installation

  - remote installation will ensure the configure file is executable.

  - all external package installation functions are vectorised so you
    can install multiple packages at time

  - new install_gitorious function install packages in gitorious repos.

  - new install_url function for installing package from an arbitrary
    url

  - include install_version function from Jeremy Stephens for installing
    a specific version of a CRAN package from the archive.

Better windows behaviour

  - better check for OS type (thanks to Brian Ripley)

  - better default paths for 64-bit R on windows (Fixes #35)

  - check to see if Rtools is already available before trying to mess
    with the paths. (Fixes #55)

Bug fixes

  - if an error occurs when calling loading R files, the cache will be
    automatically cleared so that all files are loaded again next time
    you try (Fixes #55)

  - functions that run R now do so with R_LIBS set to the current
    .libPaths() - this will ensure that checking uses the development
    library if you are in development mode. R_ENVIRON_USER is set to an
    empty file to avoid your existing settings overriding this.

  - load_data (called by load_all) will also load data defined in R
    files in the data directory. (Fixes #45)

  - dev_mode performs some basic tests to make sure you're not setting
    your development library to a directory that's not already an R
    library. (Fixes #25)

                 Changes in version 0.5.1 (2011-12-07)                  

  - Fix error in that was causing R commands to fail on windows.

                  Changes in version 0.5 (2011-12-04)                   

New functions

  - new show_rd function that will show the development version of a
    help file.

Improvements and bug fixes

  - external R commands always run in locale C, because that's what the
    CRAN severs do.

  - clean_source sources an R script into a fresh R environment,
    ensuring that it can run independently of your current working
    environment. Optionally (vanilla = T), it will source in a vanilla R
    environment which ignores all local environment settings.

  - On windows, devtools will also add the path to mingw on startup.
    (Thanks to pointer from Dave Lovell)

                  Changes in version 0.4 (2011-07-23)                   

New functions

  - new wd function to change the working directory to a package
    subdirectory.

  - check_doc now checks package documentation as a whole, in the same
    way that R CMD check does, rather than low-level syntax checking,
    which is done by roxygen2. DESCRIPTION checking has been moved into
    load_all. check_rd` has been removed.

  - build is now exported, and defaults to building in the package's
    parent directory. It also gains a new binary parameter controls
    whether a binary or a source version (with no vignettes or manuals)
    is built. Confusingly, binary packages are built with R CMD INSTALL.

  - build_win sends your package to the R windows builder, allowing you
    to make a binary version of your package for windows users if you're
    using linux or macOS (if you're using windows already, use
    build(binary = T))

Improvements and bug fixes

  - if using .Rpackages config file, default function is used last, not
    first.

  - on Windows, devtools now checks for the presence of Rtools on
    startup, and will automatically add it to the path if needed.

  - document uses roxygen2 instead of roxygen. It now loads package
    dependency so that they're available when roxygen executes the
    package source code.

  - document has new parameter clean which clears all roxygen caches and
    removes all existing man files. check now runs document in this
    mode.

  - dev_mode will create directories recursively, and complain if it
    can't create them. It should also work better on windows.

  - install_github now allows you to specify which branch to download,
    and automatically reloads package if needed.

  - reload now will only reload if the package is already loaded.

  - release gains check parameter that allows you to skip package check
    (if you've just done it.)

  - test automatically reloads code so you never run tests on old code

                  Changes in version 0.3 (2011-06-30)                   

  - new bash() function that starts bash shell in package directory.
    Useful if you want to use git etc.

  - removed inelegant update_src() since now superseded by bash()

  - fix bug in ftp upload that was adding extraneous space

  - build function builds package in specified directory. install, check
    and release now all use this function.

  - build, install, check and release better about cleaning up after
    themselves - always try to both work in session temporary directory
    and delete any files/directories that they create

                  Changes in version 0.2 (2011-06-29)                   

  - install_github now uses RCurl instead of external wget to retrieve
    package. This should make it more robust wrt external dependencies.

  - load_all will skip missing files with a warning (thanks to
    suggestion from Jeff Laake)

  - check automatically deletes .Rcheck directory on successful
    completion

  - Quote the path to R so it works even if there are spaces in the
    path.

                  Changes in version 0.1 (2011-06-22)                   

  - Check for presence of DESCRIPTION when loading packages to avoid
    false positives

  - install now works correctly with devel_mode to install packages in
    your development library

  - release prints news so you can more easily check it

  - All R CMD xxx functions now use the current R, not the first R found
    on the system path.
